@opengis/gis 0.2.158 → 0.2.160

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,9 +1,9 @@
1
- (function(Ke,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):(Ke=typeof globalThis<"u"?globalThis:Ke||self,e(Ke.MapCustom={},Ke.Vue,Ke.vueRouter,Ke.lucide,Ke.openGIScore,Ke.openGISfilter,Ke.openGISform))})(this,(function(Ke,e,Ie,pe,ye,Ln,Ko){"use strict";const an=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=Ie.useRoute(),r=e.useSlots(),a=e.computed(()=>{const i=String(o.params.id??""),s=String(o.params.action??"");return i?s===n.editAction?n.components.edit:i===n.createParam?n.components.create:n.components.card:n.components.table});return(i,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),{"entity-key":n.entityKey,"entity-base-path":n.entityBasePath,"columns-config":n.columnsConfig},e.createSlots({_:2},[e.renderList(e.unref(r),(c,p)=>({name:p,fn:e.withCtx(f=>[e.renderSlot(i.$slots,p,e.normalizeProps(e.guardReactiveProps(f)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),ea="registers",ta="/gis.registers",na=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>ab)),i={table:n,create:o,edit:r,card:a},s=[{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,p)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":ea,"entity-base-path":ta,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),oa="services",ra="/gis.datasets",la=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Yw)),i={table:n,create:o,edit:r,card:a},s=[{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(p){const f=String((p==null?void 0:p.text)||p||"").toLowerCase();return f.includes("error")||f.includes("inactive")?"bg-red-100 text-red-800":f.includes("warning")||f.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(p,f)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":oa,"entity-base-path":ra,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:k})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(k)])},e.toDisplayString((k==null?void 0:k.text)||k||"-"),3)]),_:1}))}}),aa="rasters",sa="/gis.rasters",ia=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>c2)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>__)),i={table:n,create:o,edit:r,card:a},s=[{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,p)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":aa,"entity-base-path":sa,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),ca="cartocss",da="/gis.cartocss",ua=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>NE)),i={table:n,create:o,edit:r,card:a},s=[{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(p){const f=String((p==null?void 0:p.text)||p||"").toLowerCase();return f.includes("error")||f.includes("inactive")?"bg-red-100 text-red-800":f.includes("warning")||f.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(p,f)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":ca,"entity-base-path":da,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:k})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(k)])},e.toDisplayString((k==null?void 0:k.text)||k||"-"),3)]),_:1}))}}),Ne=(t,n)=>{const o=t.__vccOpts||t;for(const[r,a]of n)o[r]=a;return o},ma={},pa={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 fa(t,n){return e.openBlock(),e.createElementBlock("svg",pa,[...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 Tn=Ne(ma,[["render",fa]]),ga={class:"gap-2 inline-flex"},ya=["href"],ha="maps",Xo="/gis.maps",ba=Ne(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>gC)),i={table:n,create:o,edit:r,card:a},s=[{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,p)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":ha,"entity-base-path":Xo,"columns-config":s,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:f})=>[e.createElementVNode("div",ga,[e.createElementVNode("a",{href:`${Xo}/${f.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(Tn)],8,ya)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),xa={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%]"},ka={class:"pt-0 mt-0"},wa={key:0,class:"flex items-center justify-center py-12"},_a={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Ea={key:2,class:"text-center py-12 text-gray-500"},Ca={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},Na=["onClick"],Va={class:"flex items-start justify-between"},Ba={class:"flex items-start gap-3"},$a={class:"flex-1 min-w-0"},Sa={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},va=["onClick"],La={class:"relative"},Ta=["onClick"],Aa={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"},Ma={class:"text-xs text-gray-600 line-clamp-2"},Da={class:"flex items-center gap-2 shrink-0"},Fa={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},za={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},io=30,Ia=Ne(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=Ie.useRouter(),s=Ie.useRoute(),c=e.ref(Number(s.query.page)||1),p=e.ref(!1),f=e.ref(0),k=e.ref([]),l=e.computed(()=>{const w=(c.value-1)*io,E=w+io;return k.value.slice(w,E)}),y=e.ref(!0),u=e.ref(null),m=e.ref(null);let b=null,g=null;const d=(w="",E="")=>{const B=new URLSearchParams,z=w.trim();z&&B.set("search",z);const Z=(E||"").trim();Z&&B.set("type",Z);const P=B.toString();return P?`/api/user-cls?${P}`:"/api/user-cls"},h=async(w="",E="")=>{try{y.value=!0,u.value=null;const B=d(w,E),z=await fetch(B);if(!z.ok)throw new Error(`HTTP error: ${z.status}`);const Z=await z.json();if(k.value=Z.data,!w.trim())f.value=Z.data.length;else if(f.value===0){const P=await fetch(d("",E));if(P.ok){const ee=await P.json();f.value=ee.data.length}}a("update:counts",{filtered:k.value.length,total:f.value})}catch(B){u.value=B instanceof Error?B.message:"Failed to load classifiers",console.error("Error fetching classifiers:",B)}finally{y.value=!1}};e.onMounted(()=>{p.value=!0,h(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([w,E])=>{b&&clearTimeout(b),b=setTimeout(()=>{h(w,E??""),c.value=1},300)});const x=w=>{i.push({name:"classifier-detail",params:{name:w.name}})},N=()=>{h(r.search,r.type??"")},$=async w=>{try{await navigator.clipboard.writeText(w),m.value=w,g&&clearTimeout(g),g=setTimeout(()=>{m.value=null},500)}catch(E){console.error("Failed to copy text: ",E)}};n({refetch:N});const _=w=>{c.value=w,i.replace({query:{...s.query,page:String(w)}})};return(w,E)=>(e.openBlock(),e.createElementBlock("div",xa,[e.createElementVNode("div",ka,[y.value?(e.openBlock(),e.createElementBlock("div",wa,[e.createVNode(e.unref(pe.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):u.value?(e.openBlock(),e.createElementBlock("div",_a,e.toDisplayString(u.value),1)):k.value.length===0?(e.openBlock(),e.createElementBlock("div",Ea," Нічого не знайдено ")):e.createCommentVNode("",!0),k.value.length>0?(e.openBlock(),e.createElementBlock("div",Ca,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(B,z)=>(e.openBlock(),e.createElementBlock("div",{key:z,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:Z=>x(B)},[e.createElementVNode("div",Va,[e.createElementVNode("div",Ba,[B.type==="sql"?(e.openBlock(),e.createBlock(e.unref(pe.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(pe.Code),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",$a,[e.createElementVNode("div",Sa,[e.createElementVNode("h4",{onClick:e.withModifiers(Z=>$(B.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(B.name),9,va),e.createElementVNode("div",La,[e.createElementVNode("button",{onClick:e.withModifiers(Z=>$(B.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(pe.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,Ta),m.value===B.name?(e.openBlock(),e.createElementBlock("div",Aa," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",Ma,e.toDisplayString(B.description||"Опис відсутній"),1)])]),e.createElementVNode("div",Da,[B.type!="sql"?(e.openBlock(),e.createElementBlock("span",Fa,e.toDisplayString(B.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(pe.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,Na))),128))])):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",za,[e.createVNode(e.unref(ye.VsPagination),{total:k.value.length,page:c.value,"page-size":io,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":_,onPageChange:_},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3556f06d"]]),ja={class:"bg-white rounded-lg shadow-xl max-w-md w-full overflow-hidden"},Pa={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Ra={class:"text-lg font-semibold text-gray-900"},Oa={key:0,class:"p-6 flex items-center justify-center"},Ua={key:1,class:"p-6"},qa={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Ha={class:"flex items-center gap-3 mt-6 pt-6 border-t border-gray-200"},Wa=["disabled"],Ya=["disabled"],Ga=e.defineComponent({__name:"DictModale",props:{editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,a=n,i=e.computed(()=>!!r.editData),s=e.ref(null),c=e.ref({name:"",description:"",alias:[]}),p=e.computed(()=>[{name:"name",type:"text",label:"Назва (унікальна)",placeholder:"Назва класифікатора",validators:["required"],disabled:i.value,hint:"Використовується як ідентифікатор в API"},{name:"description",type:"textarea",label:"Опис",placeholder:"Опис довідника"},{name:"alias",type:"tags",label:"Аліас",placeholder:"Аліас",addButtonText:"Додати аліас"}]),f=e.ref([]),k=e.ref(!1),l=e.ref(!1),y=e.ref(null),u=async g=>{try{l.value=!0;const d=await fetch(`/api/suggest/${encodeURIComponent(g)}`);if(!d.ok)throw new Error(`HTTP error: ${d.status}`);const h=await d.json();f.value=h.data||[]}catch(d){console.error("Error fetching suggest data:",d),f.value=[]}finally{l.value=!1}};e.onMounted(async()=>{r.editData&&(c.value={name:r.editData.name,description:r.editData.description||"",alias:r.editData.alias||[]},await u(r.editData.name))});const m=async()=>{var d,h;const g=(h=(d=s.value)==null?void 0:d.validate)==null?void 0:h.call(d);if(g){ye.notify({type:"warning",title:"Валідація",message:Object.entries(g).map(([x,N])=>`${x}: ${N}`).join(`
2
- `)});return}if(c.value.name.trim())try{k.value=!0,y.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:f.value.length>0?f.value:[]},N=i.value?`/api/user-cls/${encodeURIComponent(c.value.name.trim())}`:"/api/user-cls",$=await fetch(N,{method:i.value?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!$.ok){const _=await $.json().catch(()=>({}));throw new Error(_.message||`HTTP error: ${$.status}`)}a("created"),a("close")}catch(x){let N="Помилка створення довідника";x instanceof Error?N=x.message:i.value&&(N="Помилка оновлення довідника"),ye.notify({type:"error",title:"Помилка",message:N}),console.error("Error saving classifier:",x)}finally{k.value=!1}},b=()=>{const g=document.createElement("input");g.type="file",g.accept=".json",g.onchange=d=>{var $;const h=($=d.target.files)==null?void 0:$[0];if(!h)return;const x=h.name.replace(/\.json$/i,"").trim(),N=new FileReader;N.onload=async _=>{try{const w=JSON.parse(_.target.result);if(!Array.isArray(w))throw new Error("Файл повинен містити масив обʼєктів");k.value=!0,y.value=null;const B=await fetch("/api/user-cls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:x,description:null,alias:null,data:w})});if(!B.ok){const z=await B.json().catch(()=>({}));throw new Error(z.message||`HTTP error: ${B.status}`)}ye.notify({title:"Імпорт успішний",type:"success",message:`Створено класифікатор "${x}" з ${w.length} записами`}),a("created"),a("close")}catch(w){ye.notify({title:"Помилка імпорту",type:"error",message:w.message||"Некоректний формат файлу"})}finally{k.value=!1}},N.readAsText(h)},g.click()};return(g,d)=>(e.openBlock(),e.createElementBlock("div",{onClick:d[3]||(d[3]=e.withModifiers(h=>a("close"),["self"])),class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},[e.createElementVNode("div",ja,[e.createElementVNode("div",Pa,[e.createElementVNode("h3",Ra,e.toDisplayString(i.value?"Редагувати довідник":"Створити довідник"),1),e.createElementVNode("button",{onClick:d[0]||(d[0]=h=>a("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(pe.X),{width:20,height:20,"stroke-width":2,class:"lucide lucide-x-icon lucide-x"})])]),l.value?(e.openBlock(),e.createElementBlock("div",Oa,[e.createVNode(e.unref(pe.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):(e.openBlock(),e.createElementBlock("div",Ua,[e.createVNode(e.unref(o),{ref_key:"formRef",ref:s,schema:p.value,values:c.value,"onUpdate:values":d[1]||(d[1]=h=>c.value=h)},null,8,["schema","values"]),y.value?(e.openBlock(),e.createElementBlock("div",qa,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Ha,[e.createElementVNode("button",{type:"button",onClick:m,disabled:k.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"},[k.value?(e.openBlock(),e.createBlock(e.unref(pe.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(k.value?"Збереження...":"Зберегти"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(k.value?"Створення...":"Створити"),1)],64))],8,Wa),e.createElementVNode("button",{type:"button",onClick:b,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:d[2]||(d[2]=h=>a("close")),disabled:k.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,Ya)])]))])]))}}),Za={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Ka={class:""},Xa={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Ja={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Qa={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},es={class:"w-full md:w-auto"},ts=["value"],ns={class:"relative w-full lg:w-[16rem]"},os={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},rs={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},ls=["value"],as=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,a=c=>{const p=c.target.value;r("update:filter",p)},i=e.ref(!1),s=()=>{r("refresh")};return(c,p)=>(e.openBlock(),e.createElementBlock("div",Za,[e.createElementVNode("div",Ka,[e.createElementVNode("h1",Xa,[p[4]||(p[4]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Ja,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),p[5]||(p[5]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Qa,[e.createElementVNode("div",es,[p[7]||(p[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:a},[...p[6]||(p[6]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,ts)]),e.createElementVNode("div",ns,[e.createElementVNode("div",os,[e.createElementVNode("div",rs,[e.createVNode(e.unref(pe.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:p[0]||(p[0]=f=>c.$emit("update:modelValue",f.target.value))},null,40,ls),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:p[1]||(p[1]=f=>c.$emit("update:modelValue",""))},[e.createVNode(e.unref(pe.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:p[2]||(p[2]=f=>i.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(pe.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),p[8]||(p[8]=e.createTextVNode(" Додати ",-1))]),i.value?(e.openBlock(),e.createBlock(Ga,{key:0,onClose:p[3]||(p[3]=f=>i.value=!1),onCreated:s})):e.createCommentVNode("",!0)])]))}}),ss={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},is={key:0,class:"flex items-center justify-center py-12"},cs={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},ds={key:2,class:"text-center py-12 text-gray-500"},us={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},ms={class:"bg-gray-50 border-b border-gray-200"},ps={class:"divide-y divide-gray-200"},fs={class:"px-4 py-3 w-1/12"},gs={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},ys={class:"px-4 py-3 text-sm text-gray-600 font-mono"},hs={class:"px-4 py-3 w-1/12"},bs={class:"flex gap-1"},xs=["onClick"],ks=["onClick"],ws=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},emits:["edit"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=m=>{a("edit",m)},s=[{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([]),p=e.ref(!0),f=e.ref(null),k=e.computed(()=>{var b;if(!((b=r.search)!=null&&b.trim()))return c.value;const m=r.search.toLowerCase().trim();return c.value.filter(g=>{var d,h;return((d=g.text)==null?void 0:d.toLowerCase().includes(m))||((h=g.id)==null?void 0:h.toLowerCase().includes(m))})}),l=async m=>{try{p.value=!0,f.value=null;const b=await fetch(`/api/suggest/${encodeURIComponent(m)}`);if(!b.ok)throw new Error(`HTTP error: ${b.status}`);const g=await b.json();c.value=g.data}catch(b){f.value=b instanceof Error?b.message:"Failed to load items",console.error("Error fetching suggest items:",b)}finally{p.value=!1}},y=async(m,b)=>{ye.confirm({title:"Підтвердіть дію",type:"error",message:"Ви впевнені, що хочете видалити даний обʼєкт?",onConfirm:async()=>{const g=await fetch(`/api/user-cls/${m}/${b}`,{method:"DELETE"});if(!g.ok){ye.notify({type:"error",title:"Помилка",message:(await g.json()).error||"Something went wrong"});return}ye.notify({title:"Видалено",type:"success",message:"Обʼєкт успішно видалено"}),l(m)}})};return e.onMounted(()=>{r.classifierName&&l(r.classifierName)}),e.watch(()=>r.classifierName,m=>{m&&l(m)}),n({refetch:()=>{l(r.classifierName)}}),(m,b)=>(e.openBlock(),e.createElementBlock("div",ss,[p.value?(e.openBlock(),e.createElementBlock("div",is,[e.createVNode(e.unref(pe.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):f.value?(e.openBlock(),e.createElementBlock("div",cs,e.toDisplayString(f.value),1)):c.value.length===0?(e.openBlock(),e.createElementBlock("div",ds," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",us,[e.createElementVNode("thead",ms,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,g=>e.createElementVNode("th",{key:g.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[g.width,g.align]])},e.toDisplayString(g.label),3)),64))])]),e.createElementVNode("tbody",ps,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,g=>(e.openBlock(),e.createElementBlock("tr",{key:g.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",fs,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:g.color})},null,4)]),e.createElementVNode("td",gs,e.toDisplayString(g.text),1),e.createElementVNode("td",ys,e.toDisplayString(g.id),1),e.createElementVNode("td",hs,[e.createElementVNode("div",bs,[e.createElementVNode("button",{onClick:d=>i(g),class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати"},[e.createVNode(e.unref(pe.PenLine),{size:14,"stroke-width":2})],8,xs),e.createElementVNode("button",{onClick:d=>y(t.classifierName,g.id),class:"p-1 text-gray-400 hover:text-red-600 transition-all rounded hover:bg-red-50",title:"Видалити"},[e.createVNode(e.unref(pe.Trash2),{size:14,"stroke-width":2})],8,ks)])])]))),128))])]))]))}}),_s={class:"bg-white rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto"},Es={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Cs={class:"text-lg font-semibold text-gray-900"},Ns={class:"space-y-5"},Vs={class:"space-y-3"},Bs={class:"grid grid-cols-6 gap-2"},$s=["onClick"],Ss={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},vs={class:"flex items-center gap-3 pt-6"},Ls=["disabled"],Ts=["disabled"],As=e.defineComponent({__name:"TableAddModale",props:{classifierName:{},editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=t,r=n,a=["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)"],i=e.ref(null),s=e.ref(!1),c=e.ref(null),p=e.reactive({id:"",text:""});e.onMounted(()=>{o.editData&&(p.id=o.editData.id||"",p.text=o.editData.text,i.value=o.editData.color||null)});const f=async()=>{if(p.text.trim())try{s.value=!0,c.value=null;const k=await fetch(`/api/suggest/${encodeURIComponent(o.classifierName)}`);if(!k.ok)throw new Error(`HTTP error: ${k.status}`);const y=(await k.json()).data||[],u={id:p.id.trim(),text:p.text.trim(),color:i.value||null};let m;o.editData?m=y.map(g=>{var d;return g.id===((d=o.editData)==null?void 0:d.id)?u:g}):m=[...y,u];const b=await fetch(`/api/user-cls/${encodeURIComponent(o.classifierName)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.classifierName,data:m})});if(!b.ok){const g=await b.json().catch(()=>({}));throw new Error(g.message||`HTTP error: ${b.status}`)}r("created"),r("close")}catch(k){c.value=k instanceof Error?k.message:"Помилка збереження",console.error("Error saving record:",k)}finally{s.value=!1}};return(k,l)=>(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:l[4]||(l[4]=e.withModifiers(y=>r("close"),["self"]))},[e.createElementVNode("div",_s,[e.createElementVNode("div",Es,[e.createElementVNode("h2",Cs,e.toDisplayString(t.editData?"Редагувати запис":"Додати запис"),1),e.createElementVNode("button",{onClick:l[0]||(l[0]=y=>r("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(pe.X),{width:20,height:20,"stroke-width":2,class:""})])]),e.createElementVNode("form",{class:"p-6",onSubmit:e.withModifiers(f,["prevent"])},[e.createElementVNode("div",Ns,[e.createElementVNode("div",null,[l[6]||(l[6]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"}," Колір ",-1)),e.createElementVNode("div",Vs,[e.createElementVNode("div",Bs,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,y=>e.createElementVNode("button",{key:y,type:"button",class:e.normalizeClass(["w-full aspect-square rounded-lg border-2 transition-all",i.value===y?"border-gray-900 scale-110":"border-gray-300 hover:border-gray-400"]),style:e.normalizeStyle({backgroundColor:y}),onClick:u=>i.value=y},null,14,$s)),64))]),l[5]||(l[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,[l[7]||(l[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":l[1]||(l[1]=y=>p.id=y),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,p.id]])]),e.createElementVNode("div",null,[l[8]||(l[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":l[2]||(l[2]=y=>p.text=y),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,p.text]])])]),c.value?(e.openBlock(),e.createElementBlock("div",Ss,e.toDisplayString(c.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",vs,[e.createElementVNode("button",{type:"submit",disabled:s.value||!p.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"},[s.value?(e.openBlock(),e.createBlock(e.unref(pe.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(s.value?"Збереження...":t.editData?"Зберегти зміни":"Зберегти"),1)],8,Ls),e.createElementVNode("button",{type:"button",onClick:l[3]||(l[3]=y=>r("close")),disabled:s.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,Ts)])],32)])])]))}}),Ms={class:"space-y-6 flex-1 overflow-y-auto p-0"},Ds={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Fs={class:"text-gray-900"},zs={class:"flex items-start justify-between mb-6"},Is={class:"flex-1 mr-4"},js={class:"text-2xl font-bold text-gray-900"},Ps={key:0,class:"flex items-center gap-2 group mt-1"},Rs={class:"text-sm text-gray-500"},Os={key:1,class:"flex items-center gap-2 mt-1"},Us=["disabled"],qs=["disabled"],Hs={class:"flex items-center gap-3"},Ws={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4 grid grid-cols-2 justify-between"},Ys={class:"relative max-w-md grid"},Gs={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},Zs={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},Ks=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Ie.useRouter(),o=Ie.useRoute(),r=e.computed(()=>o.params.name),a=e.ref(!1),i=e.ref(null),s=e.ref(null),c=e.ref(""),p=e.ref(""),f=e.ref(""),k=e.ref(!1),l=e.ref(!1),y=e.ref(null),u=async()=>{var _;try{const w=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!w.ok)return;const B=(_=(await w.json()).data)==null?void 0:_[0];B&&(p.value=B.description||"")}catch(w){console.error("Error fetching classifier details:",w)}},m=()=>{f.value=p.value,k.value=!0,e.nextTick(()=>{var _;(_=y.value)==null||_.focus()})},b=()=>{k.value=!1,f.value=""},g=async()=>{try{l.value=!0;const E=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],B={name:r.value,description:f.value.trim()||null,data:E},z=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)});if(!z.ok)throw new Error(`HTTP error: ${z.status}`);p.value=f.value,k.value=!1}catch(_){console.error("Error saving description:",_)}finally{l.value=!1}};e.onMounted(()=>{u()}),e.watch(r,()=>{u()});const d=()=>{i.value=null,a.value=!0},h=_=>{i.value=_,a.value=!0},x=()=>{a.value=!1,i.value=null},N=()=>{var _;(_=s.value)==null||_.refetch()},$=async()=>{try{const _=await fetch(`/api/suggest/${encodeURIComponent(r.value)}`);if(!_.ok)throw new Error(`HTTP error: ${_.status}`);const E=(await _.json()).data||[],B=new Blob([JSON.stringify(E,(P,ee)=>ee===null?void 0:ee,2)],{type:"application/json"}),z=URL.createObjectURL(B),Z=document.createElement("a");Z.href=z,Z.download=`${r.value}.json`,document.body.appendChild(Z),Z.click(),document.body.removeChild(Z),URL.revokeObjectURL(z),ye.notify({title:"Експорт завершено",type:"success",message:"Файл успішно експортовано"})}catch(_){console.error("Error exporting classifier to json:",_),ye.notify({title:"Помилка",type:"error",message:"Не вдалося експортувати дані"})}};return(_,w)=>(e.openBlock(),e.createElementBlock("div",Ms,[e.createElementVNode("div",null,[e.createElementVNode("div",Ds,[e.createElementVNode("button",{onClick:w[0]||(w[0]=E=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),w[4]||(w[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Fs,e.toDisplayString(r.value),1)]),e.createElementVNode("div",zs,[e.createElementVNode("div",Is,[e.createElementVNode("h1",js,e.toDisplayString(r.value),1),k.value?(e.openBlock(),e.createElementBlock("div",Os,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":w[1]||(w[1]=E=>f.value=E),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(g,["enter"]),e.withKeys(b,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,f.value]]),e.createElementVNode("button",{onClick:g,disabled:l.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(pe.Check),{width:18,height:18,"stroke-width":2})],8,Us),e.createElementVNode("button",{onClick:b,disabled:l.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(pe.X),{width:18,height:18,"stroke-width":2})],8,qs)])):(e.openBlock(),e.createElementBlock("div",Ps,[e.createElementVNode("p",Rs,e.toDisplayString(p.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:m,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(pe.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Hs,[e.createElementVNode("button",{onClick:d,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(pe.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),w[5]||(w[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:w[2]||(w[2]=E=>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",Ws,[e.createElementVNode("div",Ys,[e.createElementVNode("div",Gs,[e.createElementVNode("div",Zs,[e.createVNode(e.unref(pe.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[3]||(w[3]=E=>c.value=E),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:$,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"}," Експорт ")]),a.value?(e.openBlock(),e.createBlock(As,{key:0,"classifier-name":r.value,"edit-data":i.value,onClose:x,onCreated:N},null,8,["classifier-name","edit-data"])):e.createCommentVNode("",!0),e.createVNode(ws,{ref_key:"detailsTableRef",ref:s,"classifier-name":r.value,search:c.value,onEdit:h},null,8,["classifier-name","search"])]))}}),Xs={class:"flex-col justify-between h-full"},Js={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},Qs=e.defineComponent({__name:"index",setup(t){const n=Ie.useRoute(),o=e.ref(""),r=e.ref(""),a=e.ref(null),i=e.ref({filtered:0,total:0}),s=p=>{i.value=p},c=()=>{var p;(p=a.value)==null||p.refetch()};return(p,f)=>(e.openBlock(),e.createElementBlock("div",Xs,[e.createElementVNode("div",Js,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(as,{key:0,modelValue:o.value,"onUpdate:modelValue":f[0]||(f[0]=k=>o.value=k),filter:r.value,"onUpdate:filter":f[1]||(f[1]=k=>r.value=k),counts:i.value,onRefresh:c},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(Ks,{key:2})):(e.openBlock(),e.createBlock(Ia,{key:1,ref_key:"gridRef",ref:a,search:o.value,type:r.value,"onUpdate:counts":s},null,8,["search","type"]))]),f[2]||(f[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),ei={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},ti={class:"w-full bg-white relative"},ni={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},oi={key:0,class:"bg-white divide-y divide-gray-200"},ri={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},li=["onClick"],ai={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},si={key:1,class:"px-6 py-3.5"},ii={class:"text-sm font-semibold text-gray-900"},ci={class:"text-xs text-gray-400 mt-0.5"},di={key:0,class:"inline-flex items-center cursor-pointer"},ui={class:"relative"},mi=["checked","onChange"],pi=["checked","onChange"],fi={class:"px-6 py-3"},gi={class:"ml-6"},yi={class:"text-sm text-black font-medium"},hi={class:"text-xs text-gray-400 mt-0.5"},bi=["checked","onChange"],xi={key:1},ki=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),s=e.ref({}),c=e.ref({}),p=e.computed(()=>{var x;return((x=r.data)==null?void 0:x.routers)||[]});e.watch(()=>r.modelValue,x=>{const N={};(x||[]).forEach($=>{N[$.id]=new Set($.actions||[])}),c.value=N},{immediate:!0});function f(){const x=Object.entries(c.value).map(([N,$])=>({id:N,actions:Array.from($)}));a("update:modelValue",x)}function k(x){return x?x.id||x.path||x.table||x.ua||JSON.stringify(x):""}function l(x){return x?x.id||x.ua||x.name:""}function y(x){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[x]||x}function u(x,N){var _;const $=k(x);return((_=c.value[$])==null?void 0:_.has(N))||!1}function m(x){const N=l(x);return s.value[N]===!0}function b(x){const N=l(x);s.value[N]=!m(x)}function g(x,N){var $;return($=x.menu)!=null&&$.length?x.menu.every(_=>u(_,N)):u(x,N)}function d(x,N,$){var _;if((_=x.menu)!=null&&_.length){const w={...c.value};x.menu.forEach(E=>{const B=k(E),z=new Set(w[B]||[]);$?z.add(N):z.delete(N),w[B]=z}),c.value=w,f()}}function h(x,N,$){const _=k(x),w=new Set(c.value[_]||[]);$?w.add(N):w.delete(N),c.value={...c.value,[_]:w},f()}return n({getSelected:()=>r.modelValue}),(x,N)=>{var $;return e.openBlock(),e.createElementBlock("div",ei,[e.createElementVNode("table",ti,[e.createElementVNode("thead",ni,[e.createElementVNode("tr",null,[N[0]||(N[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(i.value,_=>(e.openBlock(),e.createElementBlock("th",{key:_,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(y(_)),1))),128))])]),($=p.value)!=null&&$.length?(e.openBlock(),e.createElementBlock("tbody",oi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,_=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:k(_)},[e.createElementVNode("tr",ri,[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:w=>b(_)},[e.createElementVNode("button",ai,[e.createVNode(e.unref(pe.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":m(_)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(_.ua),1)])],8,li)):(e.openBlock(),e.createElementBlock("td",si,[e.createElementVNode("div",ii,e.toDisplayString(_.ua),1),e.createElementVNode("div",ci,e.toDisplayString(_.path||_.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,w=>(e.openBlock(),e.createElementBlock("td",{key:w,class:"px-4 py-3.5 text-center"},[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("label",di,[e.createElementVNode("div",ui,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:g(_,w),onChange:E=>d(_,w,E.target.checked)},null,40,mi),N[1]||(N[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:u(_,w),onChange:E=>h(_,w,E.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,pi))]))),128))]),_!=null&&_.menu&&m(_)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.menu,w=>(e.openBlock(),e.createElementBlock("tr",{key:k(w),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",fi,[e.createElementVNode("div",gi,[e.createElementVNode("div",yi,e.toDisplayString(w.ua),1),e.createElementVNode("div",hi,e.toDisplayString(w.path||w.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,E=>(e.openBlock(),e.createElementBlock("td",{key:E,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:u(w,E),onChange:B=>h(w,E,B.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,bi)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",xi,[...N[2]||(N[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),wi={class:"flex flex-col gap-4 mt-2 mx-2"},_i={class:"flex items-center gap-3"},Ei={class:"flex-1 relative"},Ci=e.defineComponent({__name:"VsPermissions",setup(t){const n=Ie.useRoute(),o=e.ref(""),r=e.ref(null),a=e.ref({categories:[],layers:[]}),i=e.ref([]),s=e.ref(["edit"]),c=e.computed(()=>f(a.value)),p=e.computed(()=>{const y=o.value.toLowerCase().trim();return y?c.value.map(u=>{const m=String(u.ua||"").toLowerCase().includes(y),b=(u.menu||[]).filter(g=>String(g.ua||"").toLowerCase().includes(y));return m?{...u,menu:u.menu}:b.length?{...u,menu:b}:null}).filter(Boolean):c.value}),f=y=>{const u=y.categories||[],m=y.layers||[],b=u.map(d=>{const h=m.filter(x=>x.category_id===d.category_id).map(x=>({id:String(x.layer_id),ua:x.name,path:String(x.layer_id)}));return h.length?{ua:d.name,menu:h,id:String(d.category_id)}:null}).filter(Boolean),g=m.filter(d=>!d.category_id).map(d=>({ua:d.name,id:String(d.layer_id),path:String(d.layer_id)}));return g.length&&b.push({ua:"Без категорії",menu:g,id:"noCategory"}),b},k=async()=>{const[y,u]=await Promise.all([fetch("/api/catalog").then(m=>m.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(m=>m.json())]);a.value=y,i.value=((u==null?void 0:u.layer_list)||[]).filter(m=>m.service_id).map(m=>({id:String(m.service_id),actions:m.actions||[]}))},l=async()=>{var m,b;const u=(((b=(m=r.value)==null?void 0:m.getSelected)==null?void 0:b.call(m))||i.value).filter(g=>{var d;return(d=g.actions)==null?void 0:d.length}).map(g=>({service_id:g.id,actions:g.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)}).then(g=>g.json()).then(g=>{ye.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(g=>{ye.notify({title:"Помилка",message:g.message,type:"error"})})};return e.onMounted(k),(y,u)=>(e.openBlock(),e.createElementBlock("div",wi,[e.createElementVNode("div",_i,[e.createElementVNode("div",Ei,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=m=>o.value=m),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:u[1]||(u[1]=m=>y.$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:l}," Зберегти ")]),e.createVNode(ki,{ref_key:"accessRef",ref:r,data:{routers:p.value},modelValue:i.value,"onUpdate:modelValue":u[2]||(u[2]=m=>i.value=m),actions:s.value},null,8,["data","modelValue","actions"])]))}});function Rt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function Ft(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Rt(t[0]),o=Rt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return Ft(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 a=Rt(o),i=Rt(r);if(a!=null&&i!=null)return[a,i]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Rt(n),a=Rt(o);return r!=null&&a!=null?[r,a]:null}return null}const Jo=Symbol("MapContext");function Ni(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const a=[],i=()=>{r=!0,a.length&&a.forEach(u=>u())},s=()=>{const u=t.container;return typeof u=="string"?document.getElementById(u):(u==null?void 0:u.value)!==void 0?u.value:u},c=()=>r?Promise.resolve():new Promise(u=>a.push(u)),p=(u,m)=>{if(u==null)return m;const b=Number(typeof u=="string"?u.trim():u);return Number.isFinite(b)?b:m},f=u=>{if(!n.value||!u)return;const m=Ft(u.center);m&&n.value.setCenter(m);const b=n.value.getZoom(),g=p(u.zoom,b);if(g!==b&&n.value.setZoom(g),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const d=n.value.getMaxZoom(),h=p(u.maxZoom,d);h!==d&&n.value.setMaxZoom(h)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const d=n.value.getMinZoom(),h=p(u.minZoom,d);h!==d&&n.value.setMinZoom(h)}u.bounds&&n.value.fitBounds(u.bounds,{animate:!1})},k=async()=>{var N,$,_,w,E,B,z;if(typeof window>"u"||n.value)return;const u=s();if(!u)throw new Error("Map container not found");const m=e.unref(t.settings)||null,b=Ft((N=m==null?void 0:m.map)==null?void 0:N.center)||[30,50],g=p(($=m==null?void 0:m.map)==null?void 0:$.zoom,7),d=p((_=m==null?void 0:m.map)==null?void 0:_.maxZoom,20),x={...{attributionControl:!1,center:b,zoom:g,maxZoom:d,minZoom:4},...t.mapOptions||{},container:u};x.maxZoom==null&&(x.maxZoom=d),n.value=new maplibregl.Map(x),(w=t.controls)!=null&&w.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var ee;const Z=n.value.getContainer(),P=(ee=Z==null?void 0:Z.querySelector)==null?void 0:ee.call(Z,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");P&&typeof n.value.easeTo=="function"&&P.addEventListener("click",K=>{K.preventDefault(),K.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(E=t.controls)!=null&&E.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(B=t.controls)!=null&&B.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(z=t.controls)!=null&&z.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var Z;f((Z=e.unref(t.settings))==null?void 0:Z.map),o.value=!0,i()})};e.watch(()=>{var u;return(u=e.unref(t.settings))==null?void 0:u.map},u=>{f(u)},{deep:!0});const l=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(k),e.onUnmounted(l);const y={map:n,ready:c,flyTo:u=>{var m;return(m=n.value)==null?void 0:m.flyTo(u)},fitBounds:(u,m)=>{var b;return(b=n.value)==null?void 0:b.fitBounds(u,m)},setCenter:u=>{var m;return(m=n.value)==null?void 0:m.setCenter(u)},setZoom:u=>{var m;return(m=n.value)==null?void 0:m.setZoom(u)},addControl:(u,m)=>{var b;return(b=n.value)==null?void 0:b.addControl(u,m)},removeControl:u=>{var m;return(m=n.value)==null?void 0:m.removeControl(u)},on:(u,m,b)=>{var g,d;return typeof m=="string"?((g=n.value)==null||g.on(u,m,b),()=>{var h;return(h=n.value)==null?void 0:h.off(u,m,b)}):((d=n.value)==null||d.on(u,m),()=>{var h;return(h=n.value)==null?void 0:h.off(u,m)})},off:(u,m,b)=>{var g,d;typeof m=="string"?(g=n.value)==null||g.off(u,m,b):(d=n.value)==null||d.off(u,m)},project:u=>{var m;return(m=n.value)==null?void 0:m.project(u)},unproject:u=>{var m;return(m=n.value)==null?void 0:m.unproject(u)}};return e.provide(Jo,y),y}function et(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(Jo);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Qo=Symbol.for("gis.settingsRef");function co(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[Qo];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[Qo]=o),o}const Vi={class:"map-view-overlays"},An=Ne(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),a=e.ref(null),i=co(),s=Ni({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!0,scale:!0},settings:i});async function c(){var l;await e.nextTick();const k=(l=s.map)==null?void 0:l.value;k!=null&&k.resize&&k.resize()}function p(){typeof ResizeObserver>"u"||a.value||!r.value||(a.value=new ResizeObserver(()=>{c()}),a.value.observe(r.value))}function f(){var k;(k=a.value)==null||k.disconnect(),a.value=null}return e.onMounted(()=>{c(),p(),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",c),f()}),n({ctx:s}),(k,l)=>(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",Vi,[e.renderSlot(k.$slots,"default",{},void 0,!0)])],512))}}),[["__scopeId","data-v-e25e5962"]]),Bi=["Noto Sans Regular"],$i=12,Si="#0f172a",vi="#fff",Li=14;function rt(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 Ti(t){return t?Array.isArray(t)?t:[t]:Bi}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 Ai(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 Mi(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 Di(t,n={}){if(!t)return[];const o=rt(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Ai(o);if(!r)return[];const a=r,i=(n.geometry||t.type||"point").toString().toLowerCase(),s=rt(t,["text-font","textFont"]),c=uo(rt(t,["text-size","textSize"]),$i),p=rt(t,["text-allow-overlap","textAllowOverlap"]),f=rt(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),k=rt(t,["text-maxzoom","textMaxZoom","maxzoom"]),l=rt(t,["text-color","textColor"])||Si,y=rt(t,["text-halo-color","textHaloColor"])||vi,u=rt(t,["text-halo-width","textHaloWidth"]),m=rt(t,["text-halo-blur","textHaloBlur"]),b=rt(t,["text-offset","textOffset"]),g=rt(t,["text-anchor","textAnchor"]),d=rt(t,["text-justify","textJustify"]),h=rt(t,["text-letter-spacing","textLetterSpacing"]),x=rt(t,["text-transform","textTransform"]),N=rt(t,["symbol-placement","symbolPlacement"]),$=rt(t,["symbol-spacing","symbolSpacing"]),_=rt(t,["text-rotation-alignment","textRotationAlignment"]),w=rt(t,["text-pitch-alignment","textPitchAlignment"]),E=rt(t,["text-opacity","textOpacity"]),B={"text-field":a,"text-font":Ti(s),"text-size":c,"text-allow-overlap":p??!1};b&&(B["text-offset"]=b),i!=="line"&&(B["text-anchor"]=g??"center"),d&&(B["text-justify"]=d),h!==void 0&&(B["text-letter-spacing"]=h),x&&(B["text-transform"]=x),$!==void 0&&(B["symbol-spacing"]=$),i==="line"?(B["symbol-placement"]=N||"line",B["text-rotation-alignment"]=_||"map",B["text-pitch-alignment"]=w||"map"):(_&&(B["text-rotation-alignment"]=_),w&&(B["text-pitch-alignment"]=w),N&&(B["symbol-placement"]=N)),g&&i==="line"&&(B["text-anchor"]=g);const z={"text-color":l,"text-opacity":E??1};z["text-halo-color"]=y,u!==void 0&&(z["text-halo-width"]=u),m!==void 0&&(z["text-halo-blur"]=m);const Z={type:"symbol",layout:B,paint:z},P=uo(f,Li);if(Z.minzoom=P,k!==void 0){const K=uo(k,void 0);K!==void 0&&(Z.maxzoom=K)}const ee=Mi(n.filter,n.excludeClusters);return ee&&(Z.filter=ee),[Z]}const Ot="#9ca3af";function mo(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const po=new Map,fo={};function go(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,Ot]}return null}function Fi(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.split("+")[0];return Object.values(t.colors).forEach(r=>{n.push(`${o}+${r.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((r,[a,i],s)=>r.concat([a,n[s]]),[]),t.icon]}function Ut(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function zi(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 a=["get","point_count"],i=["has","point_count"],s=["!",i],f={type:"circle",maxzoom:r,filter:i,paint:{"circle-color":["step",a,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",a,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},k={type:"symbol",maxzoom:r,filter:i,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],a]],"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}},l={...n,filter:["all",s,n.filter||!0]};return[f,k,l]}function er(t,n){const o=go(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||Ot,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},a=zi(t,r);return a||r}function Ii(t){const n=go(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||Ot,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||Ot}}}function ji(t){return{type:"line",paint:{"line-color":go(t)||t.color||Ot,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Pi(t){const n=Fi(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 tr(t,n={}){if(!t)return[];if(!Ri(t))return[];const o=[];t.icon&&Ut(o,Pi(t)),t.pointZoom&&Ut(o,er(t,t.pointZoom)),t.type==="polygon"?Ut(o,Ii(t)):t.type==="line"?Ut(o,ji(t)):Ut(o,er(t));const a=n.sourceType!=="raster"?Di(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Ut(o,a),o.filter(Boolean)}function Ri(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 nr(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let a=mo(t);if(a&&o&&(a.filter=o),a)return tr(a,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const i={type:"point",color:Ot};return o&&(i.filter=o),tr(i,{sourceType:n})}return[]}function Oi(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function or(t,n,o){const r=[n],a=n.split("+")[0];Object.values(o||{}).forEach(i=>{r.push(`${a}+${i.replace("#","")}.png`)});for(const i of r){if(t.getImage(i))continue;const s=await t.loadImage(`/api/gis-icon/${i}`);t.addImage(i,s.data)}}function Me(t,n,o){var P,ee;if(!t)return fo;if(!n)return fo[t];const{map:r,ready:a=()=>Promise.resolve()}=et(o),i=t||((P=n.layer)==null?void 0:P.id),s=n.sourceId??t,c={...n};c.point&&(c.source=Oi(c.point)),!c.layer&&((ee=c.source)==null?void 0:ee.type)==="raster"&&(c.layer={id:s,type:"raster",source:s}),c.layer&&!c.layer.source&&Object.assign(c.layer,{source:s});let p=!1,f=!1;const k=()=>{var K,le,J,G,M,j,I,S,R,Q;if(!(f||!r.value)){if(c.source&&!r.value.getSource(s)&&r.value.addSource(s,c.source),!r.value.getLayer(i)){const ue=c.beforeId===0?(le=(K=r.value.getStyle().layers)==null?void 0:K[0])==null?void 0:le.id:c.beforeId;(G=(J=c.layer)==null?void 0:J.style)!=null&&G.icon&&or(r.value,c.layer.style.icon,c.layer.style.colors);const fe=((M=c.source)==null?void 0:M.type)||((j=c.layer)==null?void 0:j.type),se=c.layer&&(c.layer.type||c.layer.ref)?c.layer:null,v=(I=c.layer)==null?void 0:I.style,A=((S=c.layer)==null?void 0:S["source-layer"])||((R=c.source)==null?void 0:R["source-layer"])||c.sourceLayer||s,O=c.style||v,F=nr(O,{sourceType:fe,filter:(Q=c.layer)==null?void 0:Q.filter,allowFallback:!se});if(!F.length){if(se){const Y={...se,id:se.id||i,source:se.source||s};fe==="vector"&&A&&(Y["source-layer"]=Y["source-layer"]||A),r.value.addLayer(Y,ue)}return}F.forEach((Y,ce)=>{const me={...Y,id:`${i}${ce||""}`,source:s};fe==="vector"&&A&&(me["source-layer"]=A),r.value.addLayer(me,ue)})}p=!0}};a().then(k);const l=(K,le)=>r.value?(r.value.on(K,i,le),()=>{var J;return(J=r.value)==null?void 0:J.off(K,i,le)}):()=>{},y=K=>{const le=r.value;if(!le)return;const J=le.getStyle(),G=J==null?void 0:J.layers;if(!(G!=null&&G.length))return;const M=K?"visible":"none";G.filter(j=>j.source===s||j.id===i||typeof j.id=="string"&&j.id.startsWith(String(i))).forEach(j=>{le.setLayoutProperty(j.id,"visibility",M)})},u=(K=!0)=>{var J,G,M;if(!r.value)return;(((M=(G=(J=r.value).getStyle)==null?void 0:G.call(J))==null?void 0:M.layers)??[]).filter(j=>j.source===i).forEach(j=>{r.value.removeLayer(j.id)}),f=!0,c.source&&K&&r.value.getSource(s)&&r.value.removeSource(s)},m=async K=>{var M,j,I,S,R;if(!r.value)return;K!=null&&K.icon&&or(r.value,K.icon,K.colors);const le=((M=c.source)==null?void 0:M.type)||((j=c.layer)==null?void 0:j.type),J=((I=c.layer)==null?void 0:I["source-layer"])||((S=c.source)==null?void 0:S["source-layer"])||c.sourceLayer||s,G=nr(K,{sourceType:le,filter:(R=c.layer)==null?void 0:R.filter,allowFallback:!0});u(!1),G.forEach((Q,ue)=>{var se;const fe={...Q,id:`${i}${ue}`,source:((se=c.layer)==null?void 0:se.source)||s};le==="vector"&&J&&(fe["source-layer"]=fe["source-layer"]||J),r.value.addLayer(fe)})},b=K=>{r.value&&Object.entries(K).forEach(([le,J])=>{r.value.setPaintProperty(i,le,J)})},g=(K,le,J)=>{const G=r.value;if(G)switch(le){case"raster":G.setPaintProperty(K,"raster-opacity",J);break;case"fill":G.setPaintProperty(K,"fill-opacity",J);break;case"line":G.setPaintProperty(K,"line-opacity",J);break;case"circle":G.setPaintProperty(K,"circle-opacity",J);break;case"symbol":G.setPaintProperty(K,"icon-opacity",J),G.setPaintProperty(K,"text-opacity",J);break}},B={ids:{layerId:i,sourceId:s},isMounted:()=>{var K;return p&&!!((K=r.value)!=null&&K.getLayer(i))},setVisible:y,updatePaint:b,updateLayout:K=>{r.value&&Object.entries(K).forEach(([le,J])=>{r.value.setLayoutProperty(i,le,J)})},updateFilter:K=>{r.value&&r.value.setFilter(i,K)},setOpacity:K=>{var G;if(!r.value)return;const J=(((G=r.value.getStyle())==null?void 0:G.layers)||[]).filter(M=>M.source===s);if(!J.length){const M=r.value.getLayer(i);M&&g(i,M.type,K);return}J.forEach(M=>g(M.id,M.type,K))},setData:K=>{if(!r.value)return;const le=r.value.getSource(s);le&&"setData"in le&&le.setData(K)},setTiles:K=>{if(!r.value)return;const le=r.value.getSource(s);le&&"setTiles"in le&&le.setTiles(K)},setStyle:m,setFilter:K=>{var J,G;if(!r.value)return;const le=r.value.getSource(s);if(le&&"setTiles"in le&&((G=(J=c.source)==null?void 0:J.tiles)!=null&&G[0])){const M=c.source.tiles[0];le.setTiles([`${M}${M.includes("?")?"&":"?"}filter=${K}`])}},setFeatureState:(K,le)=>{r.value&&r.value.setFeatureState({source:s,...K},le)},removeFeatureState:(K,le)=>{r.value&&r.value.removeFeatureState({source:s,...K},le?{key:le}:void 0)},remove:u,card:c.card,popup:c.popup,opts:c,getSource:()=>{var K;return(K=r.value)==null?void 0:K.getSource(s)},getLayer:()=>{var K;return(K=r.value)==null?void 0:K.getLayer(i)},on:l};po.set(i,B);const z=()=>{po.get(i)===B&&po.delete(i)},Z=B.remove;return B.remove=()=>{z(),Z()},e.getCurrentInstance()&&e.onBeforeUnmount(B.remove),fo[t]=B,B}const Ui={class:"flex flex-row gap-x-3 z-10 relative widget"},qi=["onClick"],Hi=["src","alt"],qt=e.defineComponent({__name:"BaseMaps",props:{layers:{},defaultLayer:{},title:{}},setup(t){var x,N,$,_,w;const n=t,o={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:{}},r={z:13,x:4790,y:2762};function a(E){if(E)return E.replace(/{z}/gi,String(r.z)).replace(/{x}/gi,String(r.x)).replace(/{y}/gi,String(r.y))}function i(E,B){let z=E||`layers-${Object.keys(B).length}`,Z=1;for(;B[z];)z=`${E}-${Z}`,Z+=1;return z}const s=e.getCurrentInstance(),c=(x=s==null?void 0:s.appContext.config.globalProperties)==null?void 0:x.$settings,p=c==null?void 0:c.map,f=Ie.useRoute(),k=Ie.useRouter();function l(){const E=f==null?void 0:f.query;return!E||typeof E!="object"?null:typeof E.basemap=="string"?E.basemap:null}const y=e.computed(()=>l()),u=e.computed(()=>{let E=[];if(Array.isArray(n.layers)&&n.layers.length>0?E=n.layers:n.layers&&typeof n.layers=="object"&&Object.keys(n.layers).length>0?E=Object.values(n.layers):Array.isArray(p==null?void 0:p.basemaps)&&(E=p.basemaps),!E.length)return{};const B={};return E.forEach((z,Z)=>{const P=z.name??z.title??`basemap-${Z}`,ee=(z.id??P??`basemap-${Z}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),K=i(ee||`basemap-${Z}`,B),le=z.preview||(z.url?a(z.url):void 0);B[K]={url:z.url,preview:le,title:P,overlayUrl:z.overlayUrl}}),B}),m=e.computed(()=>{const E=u.value;return Object.keys(E).length?E:o}),b=e.ref(y.value??Object.keys(m.value)[0]??"gki"),g=Me("base",{source:{type:"raster",tiles:(N=m.value[b.value])!=null&&N.url?[($=m.value[b.value])==null?void 0:$.url]:[]},beforeId:0}),d=Me("base-overlay",{source:{type:"raster",tiles:(_=m.value[b.value])!=null&&_.overlayUrl?[(w=m.value[b.value])==null?void 0:w.overlayUrl]:[]}});function h(E){if(!m.value[E])return;b.value=E;const B=m.value[E];B!=null&&B.url?(g.setVisible(!0),g.setTiles([B.url])):g.setVisible(!1),B!=null&&B.overlayUrl?(d.setVisible(!0),d.setTiles([B.overlayUrl])):d.setVisible(!1),typeof window<"u"&&l()!==E&&k.replace({query:{...f==null?void 0:f.query,basemap:E}}).catch(()=>{})}return e.watch(()=>m.value,E=>{const B=y.value&&E[y.value]?y.value:b.value;E[B]?b.value=B:b.value=Object.keys(E)[0]??B;const z=E[b.value];z!=null&&z.url?(g.setVisible(!0),g.setTiles([z.url])):g.setVisible(!1),z!=null&&z.overlayUrl?(d.setVisible(!0),d.setTiles([z.overlayUrl])):d.setVisible(!1)},{immediate:!0}),e.watch(()=>[y.value,m.value],([E])=>{if(typeof E!="string"||!m.value[E]||b.value===E)return;b.value=E;const B=m.value[E];B!=null&&B.url?(g.setVisible(!0),g.setTiles([B.url])):g.setVisible(!1),B!=null&&B.overlayUrl?(d.setVisible(!0),d.setTiles([B.overlayUrl])):d.setVisible(!1)}),(E,B)=>(e.openBlock(),e.createElementBlock("div",Ui,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,(z,Z)=>(e.openBlock(),e.createElementBlock("div",{key:Z,onClick:P=>h(Z)},[Z!=="none"&&z.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===Z?"border-blue-500":"border-gray-200"])},[z.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:z.preview,alt:z.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Hi)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===Z?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(pe.EyeOff),{class:"w-4 h-4 text-gray-500"})],2))],8,qi))),128))]))}}),Wi={class:"mapLayer-info__inner"},Yi={class:"mapLayer-info__item-label"},yo=Ne(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%)"}),a=e.ref(null),i=e.ref(null);let s=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 p(b){if(r.open){y();return}const g=b.currentTarget,d=g==null?void 0:g.closest(".mapLayer-info");if(!d){y();return}a.value=d,r.open=!0,e.nextTick(()=>{f(),u(),requestAnimationFrame(()=>{f()})})}function f(){if(!r.open||!a.value||!i.value)return;const b=a.value.getBoundingClientRect(),g=12,d=window.scrollX+g,h=window.scrollX+window.innerWidth-g,x=window.scrollY+g,N=window.scrollY+window.innerHeight-g,$=i.value.offsetWidth||Math.min(300,window.innerWidth-24),_=i.value.offsetHeight||0;let w=b.left+window.scrollX+(b.width-$)/2;w<d&&(w=d),w+$>h&&(w=Math.max(d,h-$)),r.left=w;let E=b.bottom+window.scrollY+g;E+_>N&&(E=b.top+window.scrollY-_-g,E<x&&(E=Math.max(x,N-_))),E<x&&(E=x),E+_>N&&(E=Math.max(x,N-_)),r.top=E,r.transform="none"}function k(b){var d,h;if(!r.open)return;const g=b.target;(d=a.value)!=null&&d.contains(g)||(h=i.value)!=null&&h.contains(g)||y()}function l(b){b.key==="Escape"&&y()}function y(){m(),r.open=!1,a.value=null,i.value=null}function u(){m(),i.value&&(s=new ResizeObserver(()=>{f()}),s.observe(i.value))}function m(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",l),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",l),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f),m()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>f())},{deep:!0}),n({close:y}),(b,g)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:a},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(p,["prevent","stop"])},[...g[1]||(g[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:i,onClick:g[0]||(g[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Wi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Yi,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),Gi={key:0,class:"map-info__title"},Zi={class:"map-info__actions"},Ki={key:0,class:"map-info__menu"},Xi=["href"],Ji=["innerHTML"],rr=Ne(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),a=e.ref(null),i=e.ref(null),s=e.ref({top:0,left:0});Ie.useRouter();const c=e.ref(!0),p=e.ref(!1),f=e.computed(()=>Array.isArray(n.links)?n.links.filter(N=>(N==null?void 0:N.name)&&(N==null?void 0:N.slug)):[]),k=e.computed(()=>({top:`${s.value.top}px`,left:`${s.value.left}px`})),l=e.computed(()=>{const N=[];return n.mapName&&N.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&N.push({label:"Опис",value:n.mapDescription,breakLine:!0}),N});function y(N){return N==null?!1:N.replace(/<[^>]*>/g,"").trim().length>0}const u=e.computed(()=>y(n.content)),m=e.computed(()=>u.value);function b(N){N.stopPropagation(),r.value=!r.value}function g(){const N=a.value;if(!N||!i.value)return;const $=N.getBoundingClientRect(),_=12,w=8,E=window.scrollX+_,B=window.scrollX+window.innerWidth-_,z=window.scrollY+_,Z=window.scrollY+window.innerHeight-_,P=i.value.offsetWidth||160,ee=i.value.offsetHeight||0;let K=$.bottom+window.scrollY+w,le=$.left+window.scrollX;le+P>B&&(le=$.right+window.scrollX-P,le<E&&(le=E)),le<E&&(le=E),K+ee>Z&&(K=$.top+window.scrollY-ee-w,K<z&&(K=Math.max(z,Z-ee))),K<z&&(K=z),K+ee>Z&&(K=Math.max(z,Z-ee)),s.value={top:K,left:le}}function d(N){if(!r.value)return;const $=o.value;if(!$){r.value=!1;return}$.contains(N.target)||(r.value=!1)}e.watch(r,N=>{N?e.nextTick(()=>{g(),requestAnimationFrame(()=>{g()}),window.addEventListener("scroll",g,!0),window.addEventListener("resize",g)}):(window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g))});function h(){c.value=!c.value}function x(){p.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",d,!0),x(),m.value?p.value&&(c.value=!1):c.value=!1,window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",d,!0),window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g),window.removeEventListener("resize",x)}),(N,$)=>(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||f.value.length||l.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([u.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",Gi,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Zi,[f.value.length?(e.openBlock(),e.createElementBlock("div",Ki,[e.createElementVNode("button",{ref_key:"menuButton",ref:a,type:"button",class:"map-info__menu-button",onClick:b,"aria-label":"Показати посилання"},[...$[1]||($[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:i,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(k.value),onClick:$[0]||($[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,_=>(e.openBlock(),e.createElementBlock("a",{key:_.slug||_.name,href:`/maps/${_.slug}`,class:"map-info__popover-link"},e.toDisplayString(_.name),9,Xi))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),l.value.length?(e.openBlock(),e.createBlock(yo,{key:1,items:l.value},null,8,["items"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__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-info__toggle-icon--rotated":c.value})},[...$[2]||($[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),u.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,Ji)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),Qi=new Set(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection"]);function lr(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"&&Qi.has(o)?{type:"FeatureCollection",features:[{type:"Feature",geometry:n,properties:{}}]}:null}function ec(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 sn(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=>sn(o,n)),n);if(typeof t=="object"){const o=t;Array.isArray(o.coordinates)&&sn(o.coordinates,n),Array.isArray(o.features)&&o.features.forEach(r=>sn(r==null?void 0:r.geometry,n)),Array.isArray(o.geometries)&&o.geometries.forEach(r=>sn(r,n))}return n}function ho(t){const n=sn(t);if(!n.length)return null;let o=n[0][0],r=n[0][0],a=n[0][1],i=n[0][1];return n.forEach(([s,c])=>{s<o&&(o=s),s>r&&(r=s),c<a&&(a=c),c>i&&(i=c)}),[[o,a],[r,i]]}const ar=["zip","shp","kml","gml","geojson","json"],tc=[".zip",".shp",".kml",".gml",".geojson",".json"].join(",");function nc(t){const n=t.toLowerCase().split(".");return n.length>1&&n.pop()||""}function sr(t){const n=nc(t.name);return ar.includes(n)}function ir(){return ar.map(t=>t.toUpperCase()).join(", ")}async function oc(t){var a;const n=new FormData;n.append("unique","true"),n.append("file",t);const o=await fetch("/file/upload/uploads",{method:"POST",body:n}),r=await o.json().catch(()=>null);if(!o.ok||(r==null?void 0:r.res)!=="ok"||!((a=r==null?void 0:r.result)!=null&&a.file_path))throw new Error((r==null?void 0:r.error)||`Помилка завантаження файлу (${o.status})`);return r.result}async function rc(t,n){if(t.size>52428800)throw new Error("Максимальний розмір файлу — 50MB");if(!sr(t))throw new Error(`Підтримуються формати: ${ir()}`);const r=await oc(t),a=await fetch("/api/gis-convert",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filepath:r.file_path,srid:Number(n)})}),i=await a.json().catch(()=>null);if(!a.ok)throw new Error((i==null?void 0:i.error)||`Помилка обробки файлу (${a.status})`);return i}const xt=e.ref([]);function lc(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const a=String(r||"").trim();if(!a)return"";const i=n[a];return i!=null?String(i):""}):t}function Mn(t){return t==null?"":String(t).trim()}function bo(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function ac(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function sc(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 a=n[r];if(!(!a||typeof a.id!="string")&&a.type&&a.type!=="background"&&a.type!=="raster")return a.id}}function cn(t){function n(s,c={},p,f){var N,$;const k=Mn(s==null?void 0:s.id),l=((N=s==null?void 0:s.title)==null?void 0:N.trim())||k,y=(s==null?void 0:s.type)||(s!=null&&s.data?"geojson":"raster"),u=(($=s==null?void 0:s.url)==null?void 0:$.trim())||"";if(!k||y==="raster"&&!u||y==="geojson"&&!(s!=null&&s.data))return;const m=f??t;if(!m)return;const b=ac(m);if(!b)return;const g=xt.value.findIndex(_=>_.id===k);g!==-1&&(bo(xt.value[g]),xt.value.splice(g,1));let d=null;const h=s.beforeId??sc(b);let x="";try{if(y==="geojson"){const _=ec(s.data),w=s.style||{type:_,color:"#2563eb",stroke:"#1d4ed8",opacity:_==="polygon"?.35:1,width:2,radius:6};d=Me(k,{source:{type:"geojson",data:s.data},style:w,beforeId:h},m)}else{if(x=lc(u,c),!x)return;d=Me(k,{source:{type:"raster",tiles:[x],tileSize:s.tileSize??256,minzoom:s.minzoom??0,maxzoom:s.maxzoom??19},layer:{id:k,type:"raster",source:k,paint:{"raster-opacity":s.opacity??.85}},beforeId:h},m)}}catch(_){const w=(_==null?void 0:_.message)??"";if(!(typeof w=="string"&&w.includes("Map provider")))throw _;return}xt.value=[...xt.value,{id:k,title:l,originalUrl:y==="raster"?u:"",resolvedUrl:y==="raster"?x:"",owner:p??null,handle:d??null}]}function o(s,c){const p=Mn(s);if(!p)return;const f=xt.value.findIndex(l=>l.id===p&&(!c||l.owner===c));if(f===-1)return;const[k]=xt.value.splice(f,1);bo(k)}function r(s,c,p){var l;const f=Mn(s);if(!f)return;const k=xt.value.find(y=>y.id===f&&(!p||y.owner===p));(l=k==null?void 0:k.handle)!=null&&l.setOpacity&&k.handle.setOpacity(c)}function a(s){if(!xt.value.length)return;const c=[];xt.value.forEach(p=>{(s?p.owner===s:!0)?bo(p):c.push(p)}),xt.value=c}function i(s,c){const p=Mn(s);return p?xt.value.some(f=>f.id===p&&(!c||f.owner===c)):!1}return{temporaryLayers:xt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:a,isTemporaryLayerActive:i}}const Ct=e.ref({}),dn="map:client-layer-added",Dn="map:client-layer-removed";function xo(){function t(i){Ct.value={...Ct.value,[i.id]:i}}function n(i){if(!Ct.value[i])return;const s={...Ct.value};delete s[i],Ct.value=s}function o(){Ct.value={}}function r(i){return!!Ct.value[i]}function a(i){return Ct.value[i]??null}return{clientLayers:Ct,registerClientLayer:t,unregisterClientLayer:n,clearClientLayers:o,isClientLayer:r,getClientLayer:a}}const un=e.ref(null);function ic(){un.value=null}function cc(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(un,s=>{s!==o()&&n.value&&(n.value=!1)});function r(){un.value=o(),n.value=!0}function a(){un.value===o()&&(un.value=null),n.value=!1}function i(){n.value?a():r()}return{isOpen:n,open:r,close:a,toggle:i}}const dc={class:"map-filter"},uc={class:"map-filter__header"},mc={class:"map-filter__title"},pc={"aria-hidden":"true"},ko="#map-filter-popover-host",Fn=Ne(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 I;return((I=o.layer)==null?void 0:I.id)??""}),a=e.computed(()=>`filter-popover-${r.value}`),{isOpen:i,close:s,toggle:c}=cc(a),p=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),f=e.ref(null),k=e.ref(null);let l=null;const y=e.ref({}),u=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),m=e.computed(()=>i.value),b=e.computed(()=>{var I;return Array.isArray((I=o.layer)==null?void 0:I.filters)?o.layer.filters:[]}),g=e.computed(()=>b.value.length>0),d=e.computed(()=>{var I;return((I=o.layer)==null?void 0:I.name)??""}),h=e.computed(()=>b.value),x=e.ref(null),N=e.computed(()=>b.value.length),$=e.computed(()=>N.value<=2),_=e.computed(()=>$.value?"body":typeof window>"u"||x.value?ko:"body"),w=e.computed(()=>{if(!m.value||!$.value)return{};const I=typeof window<"u"?window.innerWidth:280,R=Math.max(280,I-16*2);return{position:"absolute",top:`${p.top}px`,left:`${p.left}px`,transform:p.transform,zIndex:1e3,width:"280px",maxWidth:`${R}px`}});function E(){s()}function B(I,S,R=8){const Q=window.scrollY+R,ue=window.scrollY+window.innerHeight-R;let fe=I;return fe+S>ue&&(fe=ue-S),fe<Q&&(fe=Q),fe}function z(){var v,A,O;if(!f.value||!$.value)return;const I=f.value.getBoundingClientRect(),S=window.scrollX+8,R=window.scrollX+window.innerWidth-8,Q=((v=k.value)==null?void 0:v.offsetWidth)||280,ue=((A=k.value)==null?void 0:A.offsetHeight)||0;let fe=0,se=0;if((O=o.catalogAnchor)!=null&&O.value){const F=o.catalogAnchor.value.getBoundingClientRect(),Y=F.top+window.scrollY;fe=B(Y,ue,8);const ce=F.right+window.scrollX+12,me=R-Q,ge=S;se=Math.min(Math.max(ce,ge),Math.max(ge,me))}else{const F=I.bottom+window.scrollY+8;fe=B(F,ue,8);let Y=I.left+window.scrollX;Y<S&&(Y=S),Y+Q>R&&(Y=Math.max(S,R-Q)),se=Y}p.left=se,p.top=fe,p.transform="none"}function Z(){$.value||j(),c(),i.value&&$.value&&e.nextTick(()=>{z(),G(),requestAnimationFrame(()=>z())})}function P(){o.disabled||Z()}e.watch(m,I=>{I&&$.value?e.nextTick(()=>{z(),G(),requestAnimationFrame(()=>z())}):(M(),$.value||j())}),e.watch(h,()=>{!m.value||!$.value||e.nextTick(()=>z())},{deep:!0}),e.watch($,I=>{m.value&&(I?e.nextTick(()=>{z(),G()}):(M(),j()))}),e.watch(()=>o.disabled,I=>{I&&(s(),y.value={})});function ee(){!m.value||!$.value||z()}function K(I){const S=r.value;if(!S)return;const R=Me(S);if(!(R!=null&&R.setFilter))return;y.value=I;const Q=Object.entries(I).map(([ue,fe])=>`${ue}=${fe}`).join("|");R.setFilter(Q)}function le(I){if(!o.disabled)return;const S=I.currentTarget;if(!S)return;const R=S.getBoundingClientRect();u.left=R.left+R.width/2+window.scrollX,u.top=R.bottom+8+window.scrollY,u.visible=!0}function J(){u.visible=!1}e.onMounted(()=>{j(),window.addEventListener("resize",ee),window.addEventListener("scroll",ee,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",ee),window.removeEventListener("scroll",ee,!0),M()});function G(){M(),!(!k.value||!$.value)&&(l=new ResizeObserver(()=>{!m.value||!$.value||z()}),l.observe(k.value))}function M(){l&&(l.disconnect(),l=null)}function j(){typeof window>"u"||typeof document>"u"||(x.value=document.querySelector(ko))}return(I,S)=>g.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:f},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(P,["prevent","stop"]),onMouseenter:le,onMouseleave:J,onFocus:le,onBlur:J},[...S[2]||(S[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),m.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:_.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":!$.value}]),style:e.normalizeStyle(w.value),ref_key:"panel",ref:k,onClick:S[1]||(S[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",dc,[e.createElementVNode("div",uc,[e.createElementVNode("h3",mc,e.toDisplayString(d.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:E},[e.createElementVNode("span",pc,[e.createVNode(e.unref(pe.X),{class:"h-4 w-4"})]),S[3]||(S[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:h.value,value:y.value,limit:10,onChange:S[0]||(S[0]=R=>K(R.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${u.top}px`,left:`${u.left}px`})},e.toDisplayString(u.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-32948852"]]),fc={class:"opacity-popover__content"},gc={class:"opacity-popover__value"},cr=Ne(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),a=e.ref(null),i=e.ref(null),s=e.reactive({top:0,left:0});function c(){var $;const l=($=i.value)==null?void 0:$.querySelector("button");if(!l||!a.value)return;const y=l.getBoundingClientRect(),u=260,m=a.value.offsetHeight||60,b=8,g=12,d=window.innerWidth,h=window.innerHeight;let x=y.bottom+b+window.scrollY,N=y.left+window.scrollX;N+u>d-g&&(N=d-u-g+window.scrollX),N<g+window.scrollX&&(N=g+window.scrollX),x+m>h+window.scrollY-g&&(x=y.top-m-b+window.scrollY,x<g+window.scrollY&&(x=h-m-g+window.scrollY)),s.top=x,s.left=N}function p(){o.value=!o.value,o.value&&e.nextTick(c)}function f(){var m;const l=Me(n.layerId),y=(r.value??100)/100;if(l!=null&&l.setOpacity){l.setOpacity(y);return}const u=(m=l==null?void 0:l.getLayer)==null?void 0:m.call(l);if(u)switch(u.type){case"raster":l.updatePaint({"raster-opacity":y});break;case"fill":l.updatePaint({"fill-opacity":y});break;case"line":l.updatePaint({"line-opacity":y});break;case"circle":l.updatePaint({"circle-opacity":y});break;case"symbol":l.updatePaint({"icon-opacity":y});break}}function k(l){var u,m;if(!o.value)return;const y=l.target;(u=a.value)!=null&&u.contains(y)||(m=i.value)!=null&&m.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",k),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}),(l,y)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:i},[e.renderSlot(l.$slots,"trigger",{toggle:p,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(p,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:a,class:"opacity-popover",style:e.normalizeStyle({top:s.top+"px",left:s.left+"px"})},[e.createElementVNode("div",fc,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=u=>r.value=u),class:"opacity-popover__range",onInput:f},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",gc,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-39c90b6d"]]),yc={class:"layers-panel"},hc={class:"layers-panel__header"},bc={class:"layers-panel__heading"},xc={class:"layers-panel__heading-title"},kc={class:"layers-panel__count"},wc={class:"layers-panel__bulk-actions"},_c={class:"layers-panel__header-actions"},Ec={class:"layers-panel__header-controls"},Cc={class:"layers-panel__label"},Nc={class:"layers-panel__label-row"},Vc=["checked","onChange"],Bc={class:"layers-panel__title-block"},$c={class:"layers-panel__name"},Sc={class:"layers-panel__meta text-slate-500"},vc=["onClick"],Lc=["onClick"],Tc={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Ac={key:0,class:"layers-panel__actions"},Mc=["innerHTML","onClick"],dr="map:temporary-layer-request",Dc="#5763ba",ur=Ne(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),a=e.ref(!0),i=e.ref(!1),s=et(),{temporaryLayers:c,activateTemporaryLayer:p,deactivateTemporaryLayer:f,clearTemporaryLayers:k}=cn(s.map),{clientLayers:l,isClientLayer:y,getClientLayer:u,unregisterClientLayer:m}=xo(),b=e.computed(()=>{const v=o.layers.map(F=>({...F,isTemporary:!1,owner:null,visible:F.visible!==!1})),A=c.value.map(F=>({id:F.id,name:F.title,visible:r.value[F.id]??!0,actions:[],filters:null,isTemporary:!0,owner:F.owner??null,handle:F.handle??null,card:F.card??null,popup:F.popup??null,style:F.style??null,group_name:null,count:null,holder:null})),O=Object.values(l.value).filter(F=>!A.some(Y=>Y.id===F.id)).map(F=>({id:F.id,name:F.name,visible:r.value[F.id]??!0,actions:[],filters:null,isTemporary:!0,owner:"add-data",handle:Me(F.id)??null,card:null,popup:null,style:null,group_name:null,count:null,holder:null}));return[...v,...A,...O]}),g=e.computed(()=>b.value.length),d=e.computed(()=>b.value.filter(v=>w(v.id)).length),h=e.computed(()=>g.value>0&&d.value===g.value),x=n;function N(){var v;for(let A=0;A<o.layers.length;A++){const O=o.layers[A],F=$(O);if(!F)continue;const Y=Me(O.id,F),ce=O.visible!==!1;r.value[O.id]=ce,ce||(v=Y==null?void 0:Y.setVisible)==null||v.call(Y,!1)}}function $(v){const A=v.id;if(!A)return null;const O=(v.type||v.service_type||v.service||"").toString().toLowerCase(),F=v.service_url||v.url||null;if(!!F&&(O==="tms"||O==="wmts"||O==="wms"||O==="ogc")){const me=_(F);return me?{sourceId:A,service:O,source:{type:"raster",tiles:[me],tileSize:v.tileSize||256,minzoom:v.minzoom??0,maxzoom:v.maxzoom??22,scheme:v.scheme||"xyz"},layer:{id:A,type:"raster",source:A},card:v.card,popup:v.popup}:null}if(O==="cartocss"){const me=v.url?_(v.url):`${location.origin}/api/gis-rtile/${A}/{z}/{x}/{y}.png`;return me?{sourceId:A,service:O,source:{type:"raster",tiles:[me],tileSize:v.tileSize||256,minzoom:v.minzoom??0,maxzoom:v.maxzoom??22},layer:{id:A,type:"raster",source:A},card:v.card,popup:v.popup}:null}if(F&&(O==="vtile"||O==="vector")){const me=_(F);if(!me)return null;const ge=v.sourceLayer||v["source-layer"]||"dla";return{sourceId:A,service:O,source:{type:"vector",tiles:[me],minzoom:v.minzoom??0,maxzoom:v.maxzoom??22},layer:{id:A,source:A,"source-layer":ge,style:v.style,filter:v.filter},card:v.card,popup:v.popup}}if(F&&(O==="vtile"||O==="vector")){const me=_(F);if(!me)return null;const ge=v.sourceLayer||v["source-layer"]||"dla";return{sourceId:A,service:O,source:{type:"vector",tiles:[me],minzoom:v.minzoom??0,maxzoom:v.maxzoom??22},layer:{id:A,source:A,"source-layer":ge,style:v.style,filter:v.filter},card:v.card,popup:v.popup}}if(O==="raster"){const me=v.url?_(v.url):`${location.origin}/api/gis-rtile/${A}/{z}/{x}/{y}.png`;return me?{sourceId:A,service:O,source:{type:"raster",tiles:[me],tileSize:v.tileSize||256,minzoom:v.minzoom??0,maxzoom:v.maxzoom??22},layer:{id:A,type:"raster",source:A},card:v.card,popup:v.popup}:null}const ce=`${location.origin}/api/vtile/${A}/ua/{z}/{x}/{y}.vmt`;return{sourceId:A,service:O,source:{type:"vector",tiles:[ce],minZoom:4,maxZoom:14},layer:{id:A,source:A,"source-layer":A,style:v.style},card:v.card,popup:v.popup}}function _(v){return v?/^https?:\/\//i.test(v)?v:v.startsWith("//")?`${window.location.protocol}${v}`:v.startsWith("/")?`${location.origin}${v}`:`${location.origin}/${v}`:null}function w(v){const A=r.value[v];return A??!0}function E(v){var F,Y;if(!(v!=null&&v.id))return null;const A=(F=v.title)==null?void 0:F.trim();if(!A)return null;if(v.type==="geojson"||v.data)return v.data?{id:v.id,title:A,type:"geojson",data:v.data,style:v.style}:null;const O=(Y=v.url)==null?void 0:Y.trim();return O?{id:v.id,title:A,url:O,tileSize:v.tileSize,minzoom:v.minzoom,maxzoom:v.maxzoom,opacity:v.opacity}:null}function B(v){if(!v)return;const A=v.owner;if(v.action==="clear"){const F=c.value.filter(Y=>!A||Y.owner===A).map(Y=>Y.id);k(A),F.forEach(Y=>{Y in r.value&&delete r.value[Y]});return}const O=E(v.spec);if(O){if(v.action==="activate"){p(O,v.context||{},A),r.value[O.id]=!0;return}v.action==="deactivate"&&(f(O.id,A),delete r.value[O.id])}}function z(v){v instanceof CustomEvent&&B(v.detail)}e.watch(()=>c.value.map(v=>v.id),(v,A)=>{const O=new Set(A||[]),F=new Set(v);v.forEach(Y=>{Y in r.value||(r.value[Y]=!0)}),O.forEach(Y=>{F.has(Y)||delete r.value[Y]})},{immediate:!0});function Z(v){return v.owner==="add-data"||y(v.id)}function P(v){const A=u(v);if(!(A!=null&&A.data))return;const O={id:A.id,title:A.name,type:"geojson",data:A.data};p(O,{},"add-data"),B({action:"activate",owner:"add-data",spec:O})}function ee(v,A){var F,Y,ce,me,ge;if(Z(v)){r.value[v.id]=A;const we=Me(v.id);if(!A){(F=we==null?void 0:we.setVisible)==null||F.call(we,!1);return}if((Y=we==null?void 0:we.isMounted)!=null&&Y.call(we)){we.setVisible(!0);return}P(v.id);return}if(v.isTemporary){if(!A){f(v.id,v.owner||void 0),delete r.value[v.id];return}r.value[v.id]=!0;const we=v.handle||((ce=c.value.find(Se=>Se.id===v.id))==null?void 0:ce.handle);(me=we==null?void 0:we.setVisible)==null||me.call(we,!0);return}r.value[v.id]=A;const O=Me(v.id);(ge=O==null?void 0:O.setVisible)==null||ge.call(O,A)}function K(v,A){const O=A.target;ee(v,O.checked)}function le(v){b.value.forEach(A=>ee(A,v))}function J(){le(!h.value)}function G(v){return v.isTemporary?[{label:"Назва",value:v.name??null},{label:"Тип",value:"Тимчасовий шар"},v.owner==="add-data"?{label:"Джерело",value:"Завантажені дані"}:v.owner?{label:"Джерело",value:v.owner}:null].filter(Boolean):[{label:"Назва",value:v.name??null},{label:"Назва групи",value:v.group_name||null},{label:"Кількість",value:v.count??null},{label:"Балансоутримувач",value:v.holder??null}]}function M(v){const A=v.trim();return A?!!(/^#[\da-fA-F]{3,8}$/.test(A)||/^rgb\s*\(/.test(A)||/^rgba\s*\(/.test(A)||/^hsl\s*\(/.test(A)||/^hsla\s*\(/.test(A)||/^[a-zA-Z]+$/.test(A)&&A.length<25):!1}function j(v){var A,O,F,Y,ce,me;if(!v)return null;if(typeof v=="string"){const ge=v.trim();return!ge||!M(ge)?null:ge}if(Array.isArray(v)){for(const ge of v){const we=j(ge);if(we)return we}return null}if(typeof v=="object"){const ge=v;return j(ge.color??ge.fill??ge.stroke??ge.lineColor??ge.fillColor??((A=ge.paint)==null?void 0:A["fill-color"])??((O=ge.paint)==null?void 0:O["line-color"])??((F=ge.paint)==null?void 0:F["circle-color"])??((Y=ge.paint)==null?void 0:Y.color)??((ce=ge.paint)==null?void 0:ce.lineColor)??((me=ge.paint)==null?void 0:me.fillColor)??ge.paint??ge.value)}return null}function I(v){const A=Array.isArray(v==null?void 0:v.legend)?v.legend[0]:v==null?void 0:v.legend,O=j(A);return O||j(v==null?void 0:v.style)||Dc}function S(v){return{"--layers-panel-checkbox-color":I(v)}}function R(v){var Y;const{id:A}=v,O=v.owner||void 0;f(A,O);const F=Me(A);(Y=F==null?void 0:F.remove)==null||Y.call(F),(y(A)||O==="add-data")&&(m(A),window.dispatchEvent(new CustomEvent(Dn,{detail:{id:A}}))),delete r.value[A]}function Q(){a.value=!a.value}function ue(){i.value=window.innerWidth<=768}function fe(v){var O;if(!(v instanceof CustomEvent))return;const A=(O=v.detail)==null?void 0:O.id;A&&(r.value[A]=!0)}function se(v){var O;if(!(v instanceof CustomEvent))return;const A=(O=v.detail)==null?void 0:O.id;A&&(f(A),delete r.value[A])}return e.onMounted(()=>{N(),window.addEventListener(dr,z),window.addEventListener(dn,fe),window.addEventListener(Dn,se),ue(),i.value&&(a.value=!1),window.addEventListener("resize",ue)}),e.watch(()=>{var v;return((v=o.layers)==null?void 0:v.length)??0},(v,A)=>{v>0&&A===0&&N()}),e.onBeforeUnmount(()=>{window.removeEventListener(dr,z),window.removeEventListener(dn,fe),window.removeEventListener(Dn,se),window.removeEventListener("resize",ue)}),(v,A)=>(e.openBlock(),e.createElementBlock("div",yc,[e.createElementVNode("div",hc,[e.createElementVNode("div",bc,[e.createElementVNode("div",xc,[A[0]||(A[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",kc," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(g.value)+") ",1),e.createElementVNode("div",wc,[b.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:J},e.toDisplayString(h.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",_c,[e.createElementVNode("div",Ec,[b.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:Q,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":a.value})},[...A[1]||(A[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":!a.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,O=>{var F;return e.openBlock(),e.createElementBlock("div",{key:O.id,class:"layers-panel__item"},[e.createElementVNode("label",Cc,[e.createElementVNode("div",Nc,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:w(O.id),style:e.normalizeStyle(S(O)),onChange:Y=>K(O,Y)},null,44,Vc),e.createElementVNode("div",Bc,[e.createElementVNode("span",$c,e.toDisplayString(O.name),1)]),e.createElementVNode("div",Sc,[O.isTemporary?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__remove","aria-label":"Видалити шар",onClick:e.withModifiers(Y=>R(O),["stop"])},[...A[2]||(A[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,vc)):e.createCommentVNode("",!0),w(O.id)&&!O.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(cr,{"layer-id":O.id,class:"flex"},{trigger:e.withCtx(({toggle:Y})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(Y,["prevent","stop"])},[e.createElementVNode("div",Tc,[e.createVNode(e.unref(pe.Contrast))])],8,Lc)]),_:1},8,["layer-id"]),e.createVNode(Fn,{count:Array.isArray(O.filters)?O.filters.length:0,layer:O},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(yo,{items:G(O)},null,8,["items"])])])]),(F=O.actions)!=null&&F.length?(e.openBlock(),e.createElementBlock("div",Ac,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.actions,Y=>(e.openBlock(),e.createElementBlock("button",{key:Y.widget||Y.id||Y.icon,type:"button",class:"layers-panel__action",innerHTML:Y.icon,onClick:ce=>x("action",{layerId:Y.widget})},null,8,Mc))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-123cffa3"]]);function Fc(){const{map:t,ready:n}=et(),o=e.ref(null),r=e.ref(null),a=e.ref(null),i=e.ref(null);let s=[];function c(){s.forEach(u=>u()),s=[]}const p=u=>{const m=(u==null?void 0:u.properties)||{};return!!(m.cluster||m.point_count||m.point_count_abbreviated)},f=u=>{var d,h;o.value=[u.point.x,u.point.y];const m=t.value.queryRenderedFeatures(u.point);if(!(m!=null&&m.length)){k();return}const b=m.find(x=>!p(x));if(!b){k();return}const g=Me(b.source)||Me((d=b.layer)==null?void 0:d.id);g!=null&&g.popup&&(r.value=((h=g.popup)==null?void 0:h.fields)||g.popup,i.value=b.properties)},k=()=>{r.value=null,i.value=null,o.value=null};async function l(){await n(),t.value&&(c(),t.value.on("mousemove",f),t.value.on("mouseleave",k))}function y(){c(),r.value=null,i.value=null,o.value=null}return n().then(l),{popupCoords:o,popupFields:r,popupValues:i,disable:y,title:a}}const zc={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Ic={class:"space-y-1.5"},jc={class:"font-bold text-slate-700"},Pc={class:"text-slate-700"},mr=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:a}=Fc(),{map:i}=et(),s=e.ref(null),c=e.ref({left:"-9999px",top:"-9999px"}),p=e.ref({}),f=new Set,k=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function l(d,h){if(h==null||h==="")return h;if((d==null?void 0:d.type)==="number"){const x=typeof h=="number"?h:Number(h);if(Number.isFinite(x))return k.format(x)}return h}function y(d,h,x){const N=d.name||d.label||d.title||`field-${x}`,$=d.label||d.title||d.name||N,_=d.name?h[d.name]:void 0,w=d.name?h[`${d.name}_text`]:void 0;let E;if((d.format==="select"||d.format==="autocomplete")&&d.data&&_!=null){const z=p.value[d.data];z&&(E=z[String(_)])}const B=E??w??_??d.value??null;return{key:N,label:$,value:l(d,B)}}const u=e.computed(()=>{const d=o.value||[],h=r.value||{};return d.filter(x=>(x==null?void 0:x.meta)!=="title").map((x,N)=>y(x,h,N)).filter(x=>x.label)});e.watch([o,r],([d,h])=>{!d||!h||d.forEach(async x=>{if(x.format==="select"||x.format==="autocomplete"){const N=x.data;if(!N)return;if(!p.value[N]&&!f.has(N)){f.add(N);try{const $=await fetch(`/api/suggest/${N}`);if($.ok){const _=await $.json();if(_!=null&&_.data&&Array.isArray(_.data)){const w={};_.data.forEach(E=>{w[String(E.id)]=E.text}),p.value[N]=w}}}catch($){console.error(`Failed to fetch suggest for ${N}`,$)}}}})},{deep:!0,immediate:!0});const m=e.computed(()=>{const d=o.value||[],h=r.value||{},x=d.find(N=>(N==null?void 0:N.meta)==="title");return x?y(x,h,0):null}),b=e.computed(()=>{var h;const d=u.value;return(h=m.value)!=null&&h.value?[{...m.value,key:`${m.value.key}-title`,label:"Назва"},...d]:d});function g(){var I,S;if(!b.value.length||!n.value||!s.value){c.value={left:"-9999px",top:"-9999px"};return}const d=s.value,h=d.offsetParent||null,x=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},N=((S=(I=i.value)==null?void 0:I.getContainer)==null?void 0:S.call(I))||void 0,$=(N==null?void 0:N.getBoundingClientRect())??x,_=$.left-x.left,w=$.top-x.top,E=d.offsetWidth||0,B=d.offsetHeight||0,z=12,Z=8,[P,ee]=n.value;let K=_+P+z,le=w+ee+z;K+E+Z>x.width&&(K=_+P-E-z),le+B+Z>x.height&&(le=w+ee-B-z);const J=Z,G=Z,M=Math.max(Z,x.width-E-Z),j=Math.max(Z,x.height-B-Z);K=Math.min(Math.max(K,J),M),le=Math.min(Math.max(le,G),j),c.value={left:`${K}px`,top:`${le}px`}}return e.watch([n,b],()=>{e.nextTick(()=>g())}),e.onMounted(()=>{window.addEventListener("resize",g)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",g),a()}),(d,h)=>b.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:s,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(c.value)},[e.createElementVNode("div",zc,[e.createElementVNode("div",Ic,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex flex-col"},[e.createElementVNode("span",jc,e.toDisplayString(x.label),1),e.createElementVNode("span",Pc,e.toDisplayString(x.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Rc(){const t=Ie.useRoute(),n=Ie.useRouter(),o=e.ref(null),r=e.ref(null),a=e.ref(null),i=e.ref(!1),s=e.ref([]),c=e.ref(0),p=e.computed(()=>s.value.length),f=e.computed(()=>i.value||!!o.value||!!a.value);let k=!1;function l(){o.value=null,r.value=null,a.value=null,i.value=!1,s.value=[],c.value=0}function y(w,E=0){if(!w.length){l(),$(null);return}s.value=w,u(E)}function u(w){const E=s.value[w];if(!E)return;c.value=w;const B=Me(E.source);g(E,B==null?void 0:B.card)}function m(){c.value>=s.value.length-1||u(c.value+1)}function b(){c.value<=0||u(c.value-1)}async function g(w,E){var Z,P,ee,K,le;if(!((Z=w==null?void 0:w.properties)!=null&&Z.id))return;const B=new URLSearchParams;B.set("layer",w.source),B.set("id",String((P=w.properties)==null?void 0:P.id));const z=Array.isArray(E)&&E.length>0;i.value=z,a.value=null,o.value=null,r.value=w||null;try{const J=await fetch(`/api/map-format?${B.toString()}`);if(!J.ok)throw new Error(`Failed (${J.status})`);const G=await J.json(),M=Array.isArray(G.columns)?G.columns:[],j=Array.isArray(E)?E:[];if(!M.length&&!j.length){console.error("Configure layer in admin"),d();return}const I=G.rows??G.data??{};o.value={rows:I,fields:j,columns:M,html:G.html||null},k||$(r.value);const S=((ee=G.rows)==null?void 0:ee.geom)??((K=G.data)==null?void 0:K.geom);if(S){const R=typeof S=="string"?JSON.parse(S):S;R&&(r.value={...r.value,geometry:R,properties:{...((le=r.value)==null?void 0:le.properties)||{},geom:R,geom_4326:R}})}}catch(J){console.error("Failed to load feature card:",J),d()}finally{i.value=!1}}function d(){l(),$(null)}function h(){l()}_(x()),e.onBeforeUnmount(()=>h());function x(){const w=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof w!="string")return null;const E=w.trim();return E.startsWith("external:")?null:E||null}function N(w){var Z,P;const E=(w==null?void 0:w.source)??((Z=w==null?void 0:w.layer)==null?void 0:Z.id),B=(P=w==null?void 0:w.properties)==null?void 0:P.id;return!E||B===void 0||B===null?null:`${E},${B}`.trim()||null}function $(w){const E=N(w),B=x();if(E===B)return;const z={...t.query};E?z.info=E:delete z.info,n.push({query:z}).catch(()=>{})}async function _(w){if(!w){l();return}if(w===N(r.value))return;const[E,B]=w.split(","),z=E==null?void 0:E.trim(),Z=B==null?void 0:B.trim();if(!z||!Z){l(),$(null);return}k=!0;try{y([{source:z,properties:{id:Z}}],0)}finally{k=!1}}return e.watch(()=>x(),w=>{w!==N(r.value)&&(k=!0,_(w).finally(()=>{k=!1}))}),{card:o,cardFeature:r,cardError:a,cardLoading:i,isOpen:f,close:d,openFeature:w=>y(w?[w]:[],0),openFeatures:y,next:m,prev:b,count:p,index:c}}function Oc(){const{map:t,ready:n}=et(),o=e.ref([]),r=e.ref(0),a=e.ref(0),i=e.ref(!1),s=e.ref(null),c=e.ref({}),p=e.ref(null),f=e.ref([]),k=e.computed(()=>o.value[a.value]||null),l=e.computed(()=>o.value.length>0);let y=null;const u=()=>{y==null||y.remove(),y=null},m=E=>E?E.type==="FeatureCollection"?E:E.type==="Feature"?{type:"FeatureCollection",features:[E]}:E.type&&Array.isArray(E.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:E,properties:{}}]}:Array.isArray(E.features)?{type:"FeatureCollection",features:E.features}:E.geometry?m(E.geometry):null:null,b=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),g=E=>Number(E.toFixed(5)),d=async E=>{if(await n(),!t.value)return;const B=m(E);B&&(u(),y=Me("feature-highlight",{source:{type:"geojson",data:B},style:b()},t))},h=async(E,B,z)=>{var ee,K;const[Z,P]=[g(E),g(B)];p.value={x:Z,y:P},f.value=z,i.value=!0,s.value=null,o.value=[],c.value={},a.value=0;try{const le=z.map(async I=>{const S=`/api/map-info-point?x=${Z}&y=${P}&layers=${I}`,R=await fetch(S);if(!R.ok)return null;const Q=await R.json();if(!Q.count)return null;const fe=await(await fetch(`${S}&index=0`)).json();return{layerId:I,data:fe,count:Q.count}}),G=(await Promise.all(le)).filter(Boolean);if(G.length===0){r.value=0;return}o.value=G.map(I=>I.data);const[M]=o.value;r.value=G.reduce((I,S)=>I+(S.count||0),0),c.value[0]=M;const j=((ee=M==null?void 0:M.data)==null?void 0:ee.geom_4326)??((K=M==null?void 0:M.data)==null?void 0:K.geom);await d(j)}catch(le){s.value=le.message}finally{i.value=!1}},x=async E=>{if(!p.value||!f.value.length)return;if(c.value[E]){o.value[E]=c.value[E];return}const{x:B,y:z}=p.value,Z=f.value.join(","),P=`/api/map-info-point?x=${B}&y=${z}&index=${E}&layers=${Z}`;try{i.value=!0;const ee=await fetch(P);if(!ee.ok)throw new Error("Failed to fetch feature by index");const K=await ee.json();o.value[E]=K,c.value[E]=K}catch(ee){s.value=ee.message}finally{i.value=!1}},N=async()=>{a.value<r.value-1&&(a.value+=1,c.value[a.value]||await x(a.value))},$=async()=>{a.value>0&&(a.value-=1,c.value[a.value]||await x(a.value))},_=()=>{o.value=[],r.value=0,a.value=0,c.value={},p.value=null,f.value=[],u()};e.watch(a,async()=>{var B,z;const E=k.value;if(E){const Z=((B=E==null?void 0:E.data)==null?void 0:B.geom_4326)??((z=E==null?void 0:E.data)==null?void 0:z.geom);await d(Z)}});let w=null;return e.onMounted(async()=>{await n(),t.value&&(w=async E=>{const{lng:B,lat:z}=E.lngLat,Z=Me(),ee=Object.entries(Z).map(([K,le])=>{var J,G,M,j;return{id:K,service:((J=le==null?void 0:le.opts)==null?void 0:J.service)??((M=(G=le==null?void 0:le.opts)==null?void 0:G.source)==null?void 0:M.service)??null,count:((j=le==null?void 0:le.opts)==null?void 0:j.count)??null,visible:(()=>{var I;try{return((I=t.value)==null?void 0:I.getLayer(K))?t.value.getLayoutProperty(K,"visibility")!=="none":!0}catch{return!0}})()}}).filter(K=>K.service==="ogc"&&K.visible).map(K=>K.id);ee.length>0&&await h(B,z,ee)},t.value.on("dblclick",w))}),e.onBeforeUnmount(()=>{t.value&&w&&t.value.off("dblclick",w),u()}),{features:o,count:r,index:a,current:k,loading:i,error:s,active:l,next:N,prev:$,close:_}}const pr=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function a(f){const k=f.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(k)return k;const l=Array.from(f).map(y=>y.charCodeAt(0).toString(16)).join("").slice(0,8);return l?`layer-${l}`:"layer-temp"}const i=e.computed(()=>{var f;return((f=o.id)==null?void 0:f.trim())||a(o.title)}),s=e.computed(()=>o.buttonText||"Показати шар");function c(){return{id:i.value,title:o.title,url:o.url}}function p(){r("activate",c())}return(f,k)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:p},[e.renderSlot(f.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.value),1)])]))}}),wo="map-card:external-payload",zn="map-card:click-results",fr=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,Uc={key:0,class:"card pointer-events-auto absolute top-4 lg:left-auto right-[52px] md:left-4 z-[82] 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"},qc={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Hc={class:"min-w-0 flex-1"},Wc={class:"text-base font-semibold text-slate-900 truncate"},Yc={key:0,class:"flex gap-1 mt-1"},Gc=["disabled"],Zc=["disabled"],Kc={key:1,class:"flex gap-1 mt-1"},Xc=["disabled"],Jc=["disabled"],Qc={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},ed={key:0,class:"text-center text-xs text-slate-500"},td={key:1,class:"text-center text-xs text-red-500"},nd={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},od={class:"divide-y divide-gray-100 py-[5px]"},rd={class:"text-gray-900 sm:col-span-4 font-normal"},ld={key:0,class:"flex gap-1 flex-wrap"},ad={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},sd=["innerHTML"],id=["innerHTML"],cd={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},dd={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},ud={class:"text-xs tracking-[0.02em] leading-none"},md={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},pd={class:"space-y-1"},fd={class:"flex items-center cursor-pointer gap-2 flex-1"},gd=["checked","onChange"],yd={class:"text-[13px] text-gray-600"},hd={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},bd={key:5,class:"text-center text-xs text-slate-400"},xd="map:temporary-layer-request",gr="cardHideEmpty",kd=14,_o=Ne(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Rc(),r=Oc(),a=Ie.useRouter(),i=e.ref([]),s=e.ref(0),c=e.computed(()=>i.value[s.value]||null),p=e.computed(()=>{var C;return((C=c.value)==null?void 0:C.type)==="external"?c.value:null}),f=e.computed(()=>i.value.length>0),k=e.computed(()=>{var C,L;return!!((L=(C=p.value)==null?void 0:C.html)!=null&&L.trim())}),l=e.computed(()=>{var C;return((C=p.value)==null?void 0:C.geometry)??null});function y(){i.value=[],s.value=0}function u(C){if(!C)return null;if(typeof C=="string")try{return JSON.parse(C)}catch{return null}return C}function m(){const C=Array.isArray(le.query.info)?le.query.info[0]:le.query.info;return typeof C!="string"?null:C.trim()||null}function b(C){if(!C||!C.startsWith("external:"))return null;const L=C.slice(9),[X,ae]=L.split(","),be=X==null?void 0:X.trim(),Ve=ae==null?void 0:ae.trim();return!be||!Ve?null:{layer:be,id:Ve,token:`external:${be},${Ve}`}}function g(C){const L=m(),X=(C==null?void 0:C.trim())||null;if(L===X)return;const ae={...le.query};if(X)ae.info=X;else if(L!=null&&L.startsWith("external:"))delete ae.info;else return;a.push({query:ae}).catch(()=>{})}function d(C){var X;const L=i.value[C];if(!L){y(),o.close(),Fe();return}if(s.value=C,L.type==="feature"){o.openFeature(L.feature);return}o.close(),g(L.infoToken??null),(X=L.html)!=null&&X.trim()?N():Fe()}function h(C,L=0){if(r.close(),i.value=C.map(X=>({type:"external",...X})),!i.value.length){o.close(),g(null),Fe();return}d(Math.min(Math.max(L,0),i.value.length-1))}function x(C){r.close();const L=Array.isArray(C==null?void 0:C.features)?C.features.filter(Boolean):[],X=Array.isArray(C==null?void 0:C.externalItems)?C.externalItems.filter(ae=>typeof(ae==null?void 0:ae.html)=="string"&&ae.html.trim()):[];if(i.value=[...L.map(ae=>({type:"feature",feature:ae})),...X.map(ae=>({type:"external",...ae}))],!i.value.length){o.close(),g(null),Fe();return}d(0)}function N(){return k.value?l.value?(Kl(l.value),!0):(Fe(),!0):(Fe(),!1)}const $=C=>{var ae,be,Ve,Le;const L=C,X=Array.isArray((ae=L.detail)==null?void 0:ae.items)?(be=L.detail)==null?void 0:be.items.filter(Re=>typeof(Re==null?void 0:Re.html)=="string"&&Re.html.trim()):[];X.length?h(X,Number(((Ve=L.detail)==null?void 0:Ve.index)??0)):typeof((Le=L.detail)==null?void 0:Le.html)=="string"&&L.detail.html.trim()?h([{html:L.detail.html,geometry:L.detail.geometry??null,infoToken:L.detail.infoToken??null}],0):(y(),o.close(),g(null),Fe())},_=C=>{x(C.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(zn,_),window.addEventListener(wo,$))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(zn,_),window.removeEventListener(wo,$))});const w=e.computed(()=>r.active.value),E=e.computed(()=>w.value||o.isOpen.value||k.value),B=e.computed(()=>w.value?r.loading.value:o.cardLoading.value),z=e.computed(()=>w.value?r.error.value:o.cardError.value),Z=e.computed(()=>{var C,L,X;return w.value?((C=r.current.value)==null?void 0:C.html)||null:k.value?((L=p.value)==null?void 0:L.html)||null:((X=o.card.value)==null?void 0:X.html)||null}),P=et(),ee=co(),K=e.computed(()=>{var C,L;return((L=(C=ee.value)==null?void 0:C.map)==null?void 0:L.cardHideEmpty)??null}),le=Ie.useRoute(),{activateTemporaryLayer:J,deactivateTemporaryLayer:G,clearTemporaryLayers:M,isTemporaryLayerActive:j}=cn(P.map);function I(C){window.dispatchEvent(new CustomEvent(xd,{detail:C}))}const S=e.computed(()=>{var C;return((C=o.cardFeature.value)==null?void 0:C.source)??null}),R=e.computed(()=>S.value?`map-card:${S.value}`:"map-card"),Q=e.computed(()=>{var ae,be;const C=o.cardFeature.value,L=(C==null?void 0:C.source)||((ae=C==null?void 0:C.layer)==null?void 0:ae.id),X=((be=C==null?void 0:C.properties)==null?void 0:be.id)??(C==null?void 0:C.id);return L&&X!=null?`${L}:${X}`:null}),ue=e.ref(null),fe=e.ref([]),se=e.ref(0),v=new Map;function A(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const O=e.computed(()=>{const C=typeof n.mapId=="string"?n.mapId.trim():"";if(C.length)return C;const L=typeof le.params.slug=="string"?le.params.slug.trim():"";if(L.length)return L;const X=typeof le.query.slug=="string"?le.query.slug.trim():"";return X.length?X:A()}),F=e.ref(null),Y=e.ref(null),ce=new Map;function me(C){const L=C.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const X=Array.from(C).map(ae=>ae.charCodeAt(0).toString(16)).join("").slice(0,8);return X?`layer-${X}`:`layer-${Math.random().toString(36).slice(2,8)}`}function ge(C){if(typeof C!="string")return"";const L=C.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 X=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?X?`${X}${L}`:L:X?`${X}/${L}`:L}function we(C){if(C==null)return[];if(Array.isArray(C))return C.flatMap(L=>we(L));if(typeof C=="number")return Number.isFinite(C)?[C]:[];if(typeof C=="string"){const L=C.match(/-?\d+(?:\.\d+)?/g);return!L||!L.length?[]:L.map(X=>Number(X)).filter(X=>Number.isFinite(X))}return[]}function Se(C){const L=we(C);if(L.length<4)return null;const[X,ae,be,Ve]=L;return[X,ae,be,Ve].every(Le=>Number.isFinite(Le))?[X,ae,be,Ve]:null}function We(C){if(!C)return null;const L=C.trim();if(!L.length)return null;try{const be=JSON.parse(L),Ve=Se(be);if(Ve)return Ve}catch{}const X=L.match(/-?\d+(?:\.\d+)?/g);if(!X||X.length<4)return null;const ae=X.slice(0,4).map(be=>Number(be));return ae.every(be=>Number.isFinite(be))?[ae[0],ae[1],ae[2],ae[3]]:null}function Ze(C){const L={},X=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let ae;for(;(ae=X.exec(C))!==null;){const be=ae[1],Ve=ae[2]??ae[3]??ae[4]??"";be&&(L[be]=Ve)}return L}function Oe(C,L){for(const X of L)if(C[X]!=null&&String(C[X]).trim().length)return String(C[X]).trim();return""}function at(C){if(!(C!=null&&C.length))return;const L=Number(C);return Number.isFinite(L)?L:void 0}function ne(C){if(typeof C!="string"||!C.length)return[];const L=[],X=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let ae=0,be;const Ve=new Set,Le=Re=>{let Qe=Re,it=2;for(;Ve.has(Qe);)Qe=`${Re}-${it}`,it+=1;return Ve.add(Qe),Qe};for(;(be=X.exec(C))!==null;){const[Re,Qe="",it=""]=be,Xe=be.index;if(Xe>ae){const Ql=C.slice(ae,Xe);Ql.trim().length&&L.push({type:"html",content:Ql})}const dt=Ze(Qe),bt=Oe(dt,["title"])||"Тимчасовий шар",Dt=ge(Oe(dt,["url"]));if(!Dt){L.push({type:"html",content:Re}),ae=Xe+Re.length;continue}const vn=Oe(dt,["id"]),Yo=Oe(dt,["button-text","buttonText","show","show-label","showLabel"]),_C=at(Oe(dt,["tile-size","tileSize"])),EC=at(Oe(dt,["minzoom","minZoom"])),CC=at(Oe(dt,["maxzoom","maxZoom"])),NC=at(Oe(dt,["opacity"])),VC=We(Oe(dt,["bounds","data-bounds","bbox"])),BC=vn||me(`${bt}-${Dt}`)||me(bt),Xl=Le(BC||`layer-${L.length+1}`),Go=it.trim(),Jl=/<[^>]+>/.test(Go),$C=Jl?Go:null,Zo=Jl?null:Go,SC=Yo&&Yo.trim().length?Yo.trim():Zo&&Zo.trim().length?Zo.trim():void 0;L.push({type:"layer",spec:{id:Xl,title:bt,url:Dt,tileSize:_C,minzoom:EC,maxzoom:CC,opacity:NC,bounds:VC},componentProps:{title:bt,url:Dt,id:Xl,buttonText:SC},slotText:$C}),ae=Xe+Re.length}if(ae<C.length){const Re=C.slice(ae);Re.trim().length&&L.push({type:"html",content:Re})}return!L.length&&C.trim().length&&L.push({type:"html",content:C}),L}function re(C){if(!C)return null;const L=typeof C.id=="string"?C.id.trim():"",X=typeof C.title=="string"?C.title.trim():"",ae=ge(typeof C.url=="string"?C.url:"");return!L||!ae?null:{id:L,title:X||L,url:ae,tileSize:C.tileSize,minzoom:C.minzoom,maxzoom:C.maxzoom,opacity:C.opacity,bounds:C.bounds}}const Ee=e.computed(()=>{if(w.value&&r.current.value)return r.current.value.data??{};const C=o.card.value;return(C==null?void 0:C.rows)??{}}),Ue=e.computed(()=>{if(w.value&&r.current.value){const ae=r.current.value,be=Array.isArray(ae.columns)?ae.columns:[];return be.length?be:ae.fields??[]}const C=o.card.value;if(!C)return[];const L=Array.isArray(C.columns)?C.columns:[];return L.length?L:Array.isArray(C.fields)?C.fields:[]}),He=e.computed(()=>{const C=Ue.value;if(!C.length)return[];const L=Ee.value;return C.map(X=>({key:X.name,label:X.ua||X.label||X.title||X.name,value:nt(L[X.name],X.format||"text",X.type||"text"),format:X.format||"text"}))}),ve=new Set(["—","-","–","−"]);function Ge(C){const L=C.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return C;const[,X,ae,be]=L;return`${be}.${ae}.${X}`}function Ae(C){return Number.isFinite(C)?new Intl.NumberFormat("uk-UA").format(C):"—"}function nt(C,L,X){if(C==null)return"—";if(L==="tags")return C;if(Array.isArray(C))return C.length?C.map(ae=>nt(ae,"text","text")).join(", "):"—";if(typeof C=="boolean")return C?"так":"ні";if(X==="number"&&typeof C=="number")return Ae(C);if(typeof C=="string"){const ae=C.trim();if(!ae.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(ae))return Ge(ae);if(X==="number"&&/^-?\d+(?:\.\d+)?$/.test(ae)){const be=Number(ae);return Number.isFinite(be)?Ae(be):ae}return ae}return String(C)}function W(C){if(C==null)return!0;if(typeof C=="string"){const L=C.trim();return L.length?ve.has(L):!0}return!1}function V(C){if(!C)return[];if(Array.isArray(C))return C;if(typeof C=="string"){const L=C.trim();if(L.startsWith("{")&&L.endsWith("}")){const ae=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return ae?ae.map(be=>be.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const D=e.ref(!1),te=e.ref(!0),T=()=>{var C,L;return typeof window>"u"?null:((L=(C=window.localStorage)==null?void 0:C.getItem)==null?void 0:L.call(C,gr))??null},U=e.ref(T()),q=C=>{const L=typeof C=="string"&&C.toLowerCase()==="true";D.value=L,te.value=!L},ie=C=>{U.value=C};if(typeof window<"u"){const C=L=>{L.key===gr&&ie(L.newValue)};window.addEventListener("storage",C),e.onBeforeUnmount(()=>{window.removeEventListener("storage",C)})}const de=e.computed(()=>typeof U.value=="string");e.watch(U,C=>{q(typeof C=="string"?C:K.value)},{immediate:!0}),e.watch(K,C=>{de.value||q(C)},{immediate:!0});const ke=e.computed(()=>He.value.filter(C=>W(C.value)).length),Be=e.computed(()=>D.value&&!te.value?He.value.filter(C=>!W(C.value)):He.value);function $e(C){const L=typeof C=="string"?C:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const ae=new DOMParser().parseFromString(L,"text/html");let be=0;return ae.querySelectorAll("dd").forEach(Ve=>{var Qe;const Le=((Qe=Ve.textContent)==null?void 0:Qe.trim())??"",Re=Ve.closest("div");if(W(Le)){be+=1,Re?Re.remove():Ve.remove();return}}),{sanitized:ae.body.innerHTML,hiddenCount:be}}const ot=e.computed(()=>$e(Z.value)),gt=e.computed(()=>Z.value?ot.value.hiddenCount:0),ut=e.computed(()=>ke.value+gt.value),Et=e.computed(()=>{var C;return D.value&&!te.value&&!!((C=Z.value)!=null&&C.trim())}),en=e.computed(()=>D.value&&ut.value>0),no=e.computed(()=>te.value?"Приховати пусті значення":"Показати пусті значення"),qo=e.computed(()=>te.value?pe.ChevronUp:pe.ChevronDown);function Ho(){te.value=!te.value}const tn=e.computed(()=>{const C=Et.value?ot.value.sanitized:Z.value??"";return ne(C)}),Vn=e.computed(()=>tn.value.filter(C=>C.type==="layer"));function Wo(C){return Array.isArray(C)?C.map((L,X)=>{const ae=ge(typeof(L==null?void 0:L.url)=="string"?L.url:""),be=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)||`Шар ${X+1}`).toString(),Le=(L==null?void 0:L.id)!=null?String(L.id):me(`${Ve}-${X+1}`),Re=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,Qe=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,it=ae||ge(be)||"";if(!it)return null;const Xe={id:Le,title:Ve,url:it,subtitle:Qe,buttonText:Re||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Xe.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Xe.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Xe.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Xe.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Xe.opacity=L.opacity);const dt=Se((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return dt&&(Xe.bounds=dt),Xe}).filter(Boolean):[]}const nn=e.computed(()=>{var ae,be;const C=o.card.value,L=r.current.value,X=[(ae=C==null?void 0:C.rows)==null?void 0:ae.layers,C==null?void 0:C.layers,(be=L==null?void 0:L.data)==null?void 0:be.layers,L==null?void 0:L.layers];for(const Ve of X){const Le=Wo(Ve);if(Le.length)return Le}return[]}),Bn=e.computed(()=>tn.value.length>0||He.value.length>0||nn.value.length>0),$n=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function Pt(){const C={},L=F.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([X,ae])=>{typeof ae=="string"&&(C[X]=ae)}),S.value&&(C.layer=S.value),!C.geohub){const X=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,ae=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,be=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;C.geohub=X||ae||be||C.layer||""}return C}async function on(){const C=S.value;if(!C)return F.value=null,Y.value=null,null;if(Y.value===C&&F.value)return F.value;if(ce.has(C)){const L=ce.get(C);return F.value=L,Y.value=C,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(C)}`);if(!L.ok)return null;const X=await L.json();return ce.set(C,X),F.value=X,Y.value=C,X}catch{return null}}async function rn(C){if(!(C!=null&&C.id))return;await on();const L=Pt(),X=Vn.value.find(Re=>Re.spec.id===C.id),ae=nn.value.find(Re=>Re.id===C.id),be=(X==null?void 0:X.spec)||re(ae)||re(C),Ve=(X==null?void 0:X.spec.bounds)??(ae==null?void 0:ae.bounds);if(!be||j(be.id,R.value))return;const Le=R.value||void 0;ue.value=Le??null,J(be,L,Le),I({action:"activate",owner:Le,spec:be,context:L}),oo(Ve)}async function oo(C){var Ve;if(!(C!=null&&C.length))return;const[L,X,ae,be]=C;[L,X,ae,be].every(Le=>Number.isFinite(Le))&&typeof P.fitBounds=="function"&&(await((Ve=P.ready)==null?void 0:Ve.call(P)),P.fitBounds([[L,X],[ae,be]],{padding:48,maxZoom:18}))}function ro(C){if(!C)return;const L=H()||void 0;G(C,L),I({action:"deactivate",owner:L,spec:{id:C}})}function lo(C){return j(C,H())}function ao(C,L){const X=L.target;!!(X!=null&&X.checked)?rn(C):ro(C.id)}function H(){return ue.value||R.value||null}e.watch(S,(C,L)=>{C!==L&&(F.value=null,Y.value=null)});const{next:oe,prev:Ce,count:Te,index:he}=r,je=e.computed(()=>o.count.value),De=e.computed(()=>o.index.value),xe=e.computed(()=>w.value?!1:f.value?i.value.length>1:je.value>1),ze=e.computed(()=>w.value?Te.value:f.value?i.value.length:je.value),qe=e.computed(()=>w.value?he.value:f.value?s.value:De.value),Pe=()=>{if(f.value){if(s.value>=i.value.length-1)return;d(s.value+1);return}o.next()},Je=()=>{if(f.value){if(s.value<=0)return;d(s.value-1);return}o.prev()};function tt(){const C=H();C&&(M(C),I({action:"clear",owner:C}),ue.value=null)}function Ye(){y(),o.close(),r.close(),tt(),g(null)}e.watch(E,(C,L)=>{!C&&L&&(tt(),Fe())});function pt(){!o.isOpen.value&&!r.active.value&&tt()}e.watch(()=>o.isOpen.value,()=>{pt()}),e.watch(()=>r.active.value,()=>{pt()}),e.watch(S,(C,L)=>{C&&L&&C!==L&&tt()}),e.watch(he,(C,L)=>{C!==L&&tt()}),e.watch(Q,(C,L)=>{C&&L&&C!==L&&tt()});function st(C){if(!C)return null;if(C.geometry)return C.geometry;const L=(C==null?void 0:C.data)??(C==null?void 0:C.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Fe(){fe.value.length&&(fe.value.forEach((C,L)=>{var X;(X=C==null?void 0:C.remove)==null||X.call(C,L===0)}),fe.value=[])}function wt(C){var X,ae,be;const L=(C==null?void 0:C.type)||((be=(ae=(X=C==null?void 0:C.features)==null?void 0:X[0])==null?void 0:ae.geometry)==null?void 0:be.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 ln=null;function Zl(){return m()}function yC(C){var be,Ve;if(!C)return null;const L=(C==null?void 0:C.source)??((be=C==null?void 0:C.layer)==null?void 0:be.id),X=((Ve=C==null?void 0:C.properties)==null?void 0:Ve.id)??(C==null?void 0:C.id);return!L||X===void 0||X===null?null:`${L},${X}`.trim()||null}function so(C,L){if(C){if(Array.isArray(C)){if(C.length>=2&&typeof C[0]=="number"&&typeof C[1]=="number"){L.push([C[0],C[1]]);return}C.forEach(X=>so(X,L));return}typeof C=="object"&&(Array.isArray(C.coordinates)&&so(C.coordinates,L),Array.isArray(C.features)&&C.features.forEach(X=>so(X==null?void 0:X.geometry,L)))}}function hC(C){var Re,Qe;if(!C)return null;const L=C.type==="FeatureCollection"?(Qe=(Re=C.features)==null?void 0:Re[0])==null?void 0:Qe.geometry:C.type==="Feature"?C.geometry:C,X=[];if(so(L,X),!X.length)return null;let ae=X[0][0],be=X[0][0],Ve=X[0][1],Le=X[0][1];return X.forEach(([it,Xe])=>{it<ae&&(ae=it),it>be&&(be=it),Xe<Ve&&(Ve=Xe),Xe>Le&&(Le=Xe)}),[(ae+be)/2,(Ve+Le)/2]}async function bC(C,L){var Ve;const X=Zl();if(!X||X.startsWith("external:"))return;const ae=yC(C);if(!ae||ae!==X||ln===X)return;const be=hC(L);be&&(await((Ve=P.ready)==null?void 0:Ve.call(P)),P.flyTo({center:be,zoom:kd}),ln=X)}function Kl(C){var be;if(!C){Fe();return}const L=(be=P.map)==null?void 0:be.value,X={type:"FeatureCollection",features:[{type:"Feature",geometry:C,properties:{}}]};Fe();const ae=wt(C);if(fe.value=ae.map((Ve,Le)=>Me(`feature-card-highlight${Le||""}`,{...Le===0?{source:{type:"geojson",data:X}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Le||""}`,type:Ve.type,source:"feature-card-highlight",paint:Ve.paint}},P.map)),L!=null&&L.moveLayer){const Ve=()=>{try{fe.value.forEach(it=>{var dt;const Xe=(dt=it==null?void 0:it.ids)==null?void 0:dt.layerId;Xe&&L.moveLayer(Xe)})}catch{}},Le=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Ve)}):setTimeout(Ve,0)};Le();const Re=()=>Le();L.once("styledata",Re);const Qe=()=>{Le(),L.off("styledata",Re),L.off("idle",Qe)};L.on("idle",Qe)}}function xC(C){var ae,be;const L=(C==null?void 0:C.source)||((ae=C==null?void 0:C.layer)==null?void 0:ae.id)||"unknown",X=((be=C==null?void 0:C.properties)==null?void 0:be.id)??(C==null?void 0:C.id)??"unknown";return`${L}:${X}`}async function kC(C){var Ve,Le,Re,Qe,it;if(!C)return null;const L=st(C);if(L)return L;const X=((Ve=C==null?void 0:C.properties)==null?void 0:Ve.id)??(C==null?void 0:C.id);if(!X)return null;const ae=xC(C);if(v.has(ae))return v.get(ae);const be=[O.value,C==null?void 0:C.source,(Le=C==null?void 0:C.layer)==null?void 0:Le.id].map(Xe=>typeof Xe=="string"?Xe.trim():"").filter(Boolean);for(const Xe of be)try{const dt=await fetch(`/api/map-features/${encodeURIComponent(Xe)}/${encodeURIComponent(String(X))}`);if(!dt.ok)continue;const bt=await dt.json(),Dt=((Re=bt==null?void 0:bt.data)==null?void 0:Re.geom)||((Qe=bt==null?void 0:bt.data)==null?void 0:Qe.geometry)||((it=bt==null?void 0:bt.data)==null?void 0:it.geom_4326)||null,vn=typeof Dt=="string"?JSON.parse(Dt):Dt;if(vn)return v.set(ae,vn),vn}catch{continue}return null}async function Sn(C){se.value+=1;const L=se.value;if(N())return;if(!C||w.value){Fe();return}if(!$n.value){Fe();return}const X=await kC(C);if(L===se.value){if(!X){Fe();return}Kl(X),bC(C,X)}}async function wC(C){var X,ae,be;const L=b(C);if(!L){(X=m())!=null&&X.startsWith("external:")&&(y(),Fe());return}if(((ae=p.value)==null?void 0:ae.infoToken)===L.token){N();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 Le=await Ve.json(),Re=typeof(Le==null?void 0:Le.html)=="string"?Le.html:null,Qe=u(((be=Le==null?void 0:Le.data)==null?void 0:be.geom)??(Le==null?void 0:Le.geom)??null);if(!Re&&!Qe){y(),Fe();return}h([{html:Re,geometry:Qe,infoToken:L.token}],0)}catch{y(),Fe()}}return e.watch(()=>o.cardFeature.value,C=>{Sn(C)},{immediate:!0}),e.watch(()=>o.index.value,()=>{w.value||Sn(o.cardFeature.value)}),e.watch(w,C=>{if(C){k.value||Fe();return}if(k.value){N();return}Sn(o.cardFeature.value)}),e.watch(O,()=>{if(k.value){N();return}!w.value&&o.cardFeature.value&&Sn(o.cardFeature.value)}),e.watch($n,C=>{N()||(C?Sn(o.cardFeature.value):Fe())}),e.watch(()=>Zl(),C=>{if(ln=null,C!=null&&C.startsWith("external:")){wC(C);return}p.value&&(y(),Fe())},{immediate:!0}),e.watch(p,C=>{var L;if(!((L=C==null?void 0:C.html)!=null&&L.trim())){Fe();return}N()}),e.onBeforeUnmount(()=>{tt(),Fe()}),(C,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[E.value?(e.openBlock(),e.createElementBlock("div",Uc,[e.createElementVNode("div",qc,[e.createElementVNode("div",Hc,[e.createElementVNode("p",Wc,[w.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(qe.value+1)+" / "+e.toDisplayString(ze.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[xe.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(qe.value+1)+" / "+e.toDisplayString(ze.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),w.value&&e.unref(Te)>1?(e.openBlock(),e.createElementBlock("div",Yc,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...X)=>e.unref(Ce)&&e.unref(Ce)(...X)),disabled:e.unref(he)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(pe.ArrowLeft),{class:"h-4 w-4"})],8,Gc),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...X)=>e.unref(oe)&&e.unref(oe)(...X)),disabled:e.unref(he)===e.unref(Te)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(pe.ArrowRight),{class:"h-4 w-4"})],8,Zc)])):!w.value&&xe.value?(e.openBlock(),e.createElementBlock("div",Kc,[e.createElementVNode("button",{onClick:Je,disabled:qe.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(pe.ArrowLeft),{class:"h-4 w-4"})],8,Xc),e.createElementVNode("button",{onClick:Pe,disabled:qe.value>=ze.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(pe.ArrowRight),{class:"h-4 w-4"})],8,Jc)])):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:Ye}," ✕ ")]),e.createElementVNode("div",Qc,[B.value?(e.openBlock(),e.createElementBlock("div",ed," Завантаження даних… ")):z.value?(e.openBlock(),e.createElementBlock("div",td,e.toDisplayString(z.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[He.value.length?(e.openBlock(),e.createElementBlock("div",nd,[e.createElementVNode("dl",od,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Be.value,X=>(e.openBlock(),e.createElementBlock("div",{key:X.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",rd,e.toDisplayString(X.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-6 font-normal whitespace-pre-wrap",X.format==="badge"?"font-semibold text-yellow-800":""])},[X.format==="tags"?(e.openBlock(),e.createElementBlock("div",ld,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V(X.value),(ae,be)=>(e.openBlock(),e.createElementBlock("span",{key:be,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(ae),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(X.value),1)],64))],2)]))),128))])])):tn.value.length?(e.openBlock(),e.createElementBlock("div",ad,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(tn.value,(X,ae)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:ae},[X.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:X.content},null,8,sd)):(e.openBlock(),e.createBlock(pr,{key:1,title:X.componentProps.title,url:X.componentProps.url,id:X.componentProps.id,"button-text":X.componentProps.buttonText,onActivate:rn},e.createSlots({_:2},[X.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:X.slotText},null,8,id)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),Vn.value.length?(e.openBlock(),e.createElementBlock("div",cd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Vn.value,X=>(e.openBlock(),e.createBlock(pr,{key:X.spec.id,title:X.componentProps.title,url:X.componentProps.url,id:X.spec.id,"button-text":X.componentProps.buttonText,onActivate:rn},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),en.value?(e.openBlock(),e.createElementBlock("div",dd,[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:Ho},[e.createElementVNode("span",ud,e.toDisplayString(no.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(qo.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),nn.value.length?(e.openBlock(),e.createElementBlock("div",md,[L[3]||(L[3]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",pd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(nn.value,X=>(e.openBlock(),e.createElementBlock("div",{key:X.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",fd,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:lo(X.id),onChange:ae=>ao(X,ae)},null,40,gd),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",yd,e.toDisplayString(X.title),1)]),X.subtitle?(e.openBlock(),e.createElementBlock("div",hd,e.toDisplayString(X.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Bn.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",bd," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-6e054ce5"]]),wd={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%"}},_d={class:"flex flex-col gap-1 p-5"},Ed={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},Eo=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=et(),a=e.ref([]);let i=null;function s(k){return k?k.map((l,y)=>{var b;const u=(l==null?void 0:l.name)||(l==null?void 0:l.label)||(l==null?void 0:l.title)||(l==null?void 0:l.id)||`Layer ${y+1}`,m=(l==null?void 0:l.color)||(l==null?void 0:l.fill)||((b=l==null?void 0:l.paint)==null?void 0:b.color)||"#3388ff";return{id:`${u}-${y}`,label:u,color:m}}):[]}function c(k){return k!=null&&k.layers?k.layers.filter(l=>{const y=l.paint||{};return y["fill-color"]||y["line-color"]||y["circle-color"]}).map((l,y)=>{var b;const u=l.paint||{},m=u["fill-color"]||u["line-color"]||u["circle-color"]||"#3388ff";return{id:l.id||`layer-${y}`,label:((b=l.metadata)==null?void 0:b.title)||l.id||`Layer ${y+1}`,color:m}}):[]}async function p(){var y;await r();const k=o.value;if(!k)return;const l=(y=k.getStyle)==null?void 0:y.call(k);a.value=c(l)}function f(){o.value&&(i==null||i())}return e.watch(()=>n.items,async k=>{k!=null?(a.value=s(k),i==null||i()):(await r(),f(),p())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),f(),p())}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(k,l)=>a.value.length?(e.openBlock(),e.createElementBlock("div",wd,[e.createElementVNode("div",_d,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:y.color})},null,4),e.createElementVNode("span",Ed,[e.createElementVNode("span",null,e.toDisplayString(y.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Cd={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"},Co=Ne(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",Cd,[e.createVNode(Fn,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),In=e.ref({}),jn=e.ref([]);function Nd(t){const n={};t.forEach(o=>{o!=null&&o.id&&(n[o.id]=o)}),In.value=n}function Vd(t){jn.value=[...t]}function Bd(){In.value={},jn.value=[]}function $d(t){return t.legend?(Array.isArray(t.legend)?t.legend:[t.legend]).filter(Boolean):[]}const yr=e.computed(()=>{const t=[];return jn.value.forEach(n=>{const o=In.value[n];o&&$d(o).forEach(r=>{t.push({...r,name:r.name??r.label??o.name,label:r.label??r.name??o.name})})}),t});function Sd(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?yr.value:[]}function hr(){return{layersById:In,selectedLayerIds:jn,catalogLegendItems:yr,registerCatalogLayers:Nd,setCatalogSelectedLayerIds:Vd,resetMapCatalogLegend:Bd,resolveMapLegendItems:Sd}}const vd={class:"catalog-tab__search relative mt-[10px]"},Ld={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%)"}},Td={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Ad={key:0,class:"text-sm text-gray-400 text-center mt-6"},Md=["onClick"],Dd={class:"flex items-center gap-x-3"},Fd={class:"max-w-[260px] text-[14px] text-[#4b5563]"},zd={class:"text-xs opacity-60 text-[#4b5563]"},Id={class:"flex items-center cursor-pointer gap-2 flex-1"},jd=["checked","onChange"],Pd={class:"text-[13px] text-gray-600 max-w-[260px]"},Rd={class:"flex items-center gap-2"},Od=Ne(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,a=e.reactive({}),i=e.ref(null),s=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),c=new Intl.Collator("uk",{sensitivity:"base"}),p=e.computed(()=>{const d=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const x=h.layers.filter(N=>{const $=b(N);return $?d?$.toLowerCase().includes(d):!0:!1}).sort((N,$)=>c.compare(b(N),b($)));return{...h,layers:x}}).filter(h=>h.layers.length>0).sort((h,x)=>c.compare(h.name,x.name))}),f=e.computed({get:()=>o.search,set:d=>r("update:search",d)});function k(d){a[d]=!a[d],ic()}function l(d){return!!a[d]}function y(d,h){if(o.selected.includes(h)){s.visible=!1,s.layerId=null;return}const x=d.currentTarget;if(!x)return;const N=x.getBoundingClientRect(),$=typeof window<"u"?window.scrollX:0,_=typeof window<"u"?window.scrollY:0;s.left=N.left+N.width/2+$,s.top=N.bottom+8+_,s.layerId=h,s.visible=!0}function u(){s.visible=!1,s.layerId=null}function m(d){return[{label:"Назва",value:g(d.name)},{label:"Сервіс",value:g(d.service)},{label:"Посилання",value:g(d.url),breakLine:!0}]}function b(d){return typeof(d==null?void 0:d.name)=="string"?d.name.trim():""}function g(d){return d==null||d===""?null:String(d)}return e.watch(()=>o.selected?o.selected.slice():[],d=>{!s.visible||!s.layerId||d.includes(s.layerId)&&(s.visible=!1,s.layerId=null)}),(d,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:i,class:"catalog-tab"},[e.createElementVNode("div",vd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=x=>f.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,f.value]]),(e.openBlock(),e.createElementBlock("svg",Ld,[...h[1]||(h[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",Td,[p.value.length===0?(e.openBlock(),e.createElementBlock("div",Ad," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.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:N=>k(x.id)},[e.createElementVNode("div",Dd,[(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",l(x.id)?"rotate-90":""])},[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",Fd,e.toDisplayString(x.name),1)]),e.createElementVNode("div",zd,e.toDisplayString(x.layers.length),1)],8,Md),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,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Id,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(N.id),onChange:$=>d.$emit("toggle-layer",N.id,$.target.checked,N)},null,40,jd),h[3]||(h[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 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",Pd,e.toDisplayString(N.name),1)]),e.createElementVNode("div",Rd,[Array.isArray(N.filters)&&N.filters.length?(e.openBlock(),e.createBlock(Fn,{key:0,count:N.filters.length,layer:N,disabled:!t.selected.includes(N.id),onMouseenter:$=>y($,N.id),onMouseleave:u,onFocus:$=>y($,N.id),onBlur:u},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(yo,{items:m(N)},null,8,["items"])])]))),128))],512),[[e.vShow,l(x.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${s.top}px`,left:`${s.left}px`})},e.toDisplayString(s.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-36ed2aad"]]),Ud={class:"flex flex-col gap-0"},qd={class:"text-xs text-slate-600 font-semibold"},Hd=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%)"}),a=e.ref(null),i=e.ref(null);let s=null;const c=e.computed(()=>{if(!r.open)return{display:"none"};const b=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${b}px`,maxWidth:`${b}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function p(){if(r.open){y();return}if(!a.value){y();return}r.open=!0,e.nextTick(()=>{f(),u(),requestAnimationFrame(()=>{f()})})}function f(){if(!r.open||!a.value||!i.value)return;const b=a.value.getBoundingClientRect(),g=12,d=window.scrollX+g,h=window.scrollX+window.innerWidth-g,x=window.scrollY+g,N=window.scrollY+window.innerHeight-g,$=i.value.offsetWidth||Math.min(460,window.innerWidth-24),_=i.value.offsetHeight||0;let w=b.left+window.scrollX+(b.width-$)/2;w<d&&(w=d),w+$>h&&(w=Math.max(d,h-$)),r.left=w;let E=b.bottom+window.scrollY+g;E+_>N&&(E=b.top+window.scrollY-_-g,E<x&&(E=Math.max(x,N-_))),E<x&&(E=x),E+_>N&&(E=Math.max(x,N-_)),r.top=E,r.transform="none"}function k(b){var d,h;if(!r.open)return;const g=b.target;(d=a.value)!=null&&d.contains(g)||(h=i.value)!=null&&h.contains(g)||y()}function l(b){b.key==="Escape"&&y()}function y(){m(),r.open=!1,a.value=null,i.value=null}function u(){m(),i.value&&(s=new ResizeObserver(()=>{f()}),s.observe(i.value))}function m(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",l),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",l),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f),m()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>f())},{deep:!0}),n({close:y}),(b,g)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:a},[e.createElementVNode("div",{onClick:e.withModifiers(p,["prevent","stop"])},[e.renderSlot(b.$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:i,onClick:g[0]||(g[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ud,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",qd,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Wd={class:"selected-tab"},Yd={class:"selected-tab__actions"},Gd={key:0,class:"selected-tab__scroll"},Zd=["onDragstart","onDragover","onDrop"],Kd={class:"selected-tab__item-header"},Xd={class:"selected-tab__item-info"},Jd=["checked","onChange"],Qd={class:"selected-tab__item-name"},eu={class:"selected-tab__item-controls"},tu=["onClick"],nu={class:"selected-tab__menu-inner"},ou=Ne(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{},clientLayers:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,a=e.reactive({}),i=e.ref(null),s=e.ref(null),c=new Map,p=e.reactive({top:0,left:0}),f=e.ref(null),k=e.reactive({top:0,left:0}),l=e.ref(null),y=new Map,u=e.reactive({});function m(M){var I,S;const j=(I=o.clientLayers)==null?void 0:I[M];if(j){const R=j.bounds?[j.bounds[0][0],j.bounds[0][1],j.bounds[1][0],j.bounds[1][1]]:null;return{id:j.id,name:j.name,service:"geojson",isClient:!0,extent:R}}for(const R of((S=o.catalog)==null?void 0:S.groups)??[]){const Q=R.layers.find(ue=>ue.id===M);if(Q)return Q}return null}e.watch(()=>o.selected,M=>{M.forEach(j=>{a[j]==null&&(a[j]=100)})},{immediate:!0});function b(){if(!i.value)return;const M=c.get(i.value);if(!M)return;const j=M.getBoundingClientRect();p.top=j.bottom+8+window.scrollY,p.left=j.left+window.scrollX}e.watch(()=>o.selected,M=>{M.forEach(j=>{u[j]==null&&(u[j]=!0)})},{immediate:!0});function g(M,j){var S;if(u[M]=j,(S=o.clientLayers)!=null&&S[M]){r("toggle-layer",M,j);return}const I=Me(M);I&&I.setVisible(j)}function d(M,j){j?y.set(M,j):y.delete(M)}function h(M){f.value=f.value===M?null:M,f.value&&e.nextTick(()=>{x(M),requestAnimationFrame(()=>{x(M)})})}function x(M){const j=y.get(M);if(!j||!l.value)return;const I=j.getBoundingClientRect(),S=12,R=6,Q=window.scrollX+S,ue=window.scrollX+window.innerWidth-S,fe=window.scrollY+S,se=window.scrollY+window.innerHeight-S,v=l.value.offsetWidth||190,A=l.value.offsetHeight||0;let O=I.bottom+window.scrollY+R,F=I.left+window.scrollX;F+v>ue&&(F=I.right+window.scrollX-v,F<Q&&(F=Q)),F<Q&&(F=Q),O+A>se&&(O=I.top+window.scrollY-A-R,O<fe&&(O=Math.max(fe,se-A))),O<fe&&(O=fe),O+A>se&&(O=Math.max(fe,se-A)),k.top=O,k.left=F}function N(M){const j=Me(M);j&&j.remove(),r("remove",M),f.value=null}function $(M){const j=M.target,I=i.value,S=f.value;if(I){const R=s.value,Q=c.get(I);if(R&&R.contains(j)||Q&&Q.contains(j))return;i.value=null}if(S){const R=l.value,Q=y.get(S);if(R&&R.contains(j)||Q&&Q.contains(j))return;f.value=null}}function _(){i.value&&b(),f.value&&x(f.value)}e.onMounted(()=>{document.addEventListener("click",$),window.addEventListener("resize",_),window.addEventListener("scroll",_,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",$),window.removeEventListener("resize",_),window.removeEventListener("scroll",_,!0)});const{map:w}=et();function E(M){var Q,ue,fe,se,v,A;if(!M)return;const j=Me(M),I=m(M);if(!j&&!I)return;if(((Q=I==null?void 0:I.extent)==null?void 0:Q.length)===4&&((ue=w.value)!=null&&ue.fitBounds)){const O=I.extent.map(F=>Number(F));if(O.every(F=>Number.isFinite(F))){const[F,Y,ce,me]=O;w.value.fitBounds([[F,Y],[ce,me]],{padding:40}),f.value=null;return}}const S=(se=(fe=o.clientLayers)==null?void 0:fe[M])==null?void 0:se.bounds;if(S&&((v=w.value)!=null&&v.fitBounds)){w.value.fitBounds(S,{padding:40}),f.value=null;return}(A=j==null?void 0:j.getSource)!=null&&A.call(j)&&(f.value=null)}const B=e.ref(null),z=e.ref(null);function Z(M,j){B.value=j,z.value=j,M.dataTransfer&&(M.dataTransfer.effectAllowed="move",M.dataTransfer.setData("text/plain",String(j)))}function P(M){z.value=M}function ee(M,j){if(M.preventDefault(),B.value===null||B.value===j){B.value=null,z.value=null;return}const S=[...o.selected],[R]=S.splice(B.value,1);S.splice(j,0,R),r("reorder",S),B.value=null,z.value=null}function K(){B.value=null,z.value=null}function le(M){return M==null||M===""?null:String(M)}function J(M,j){return!Array.isArray(M)||M.length===0?null:`${M.length} ${j}`}function G(M){var O,F,Y,ce,me,ge;const j=Me(M),I=m(M);if(!j&&!I)return[];const S=(I==null?void 0:I.name)||((F=(O=j==null?void 0:j.opts)==null?void 0:O.layer)==null?void 0:F.name)||null,R=(I==null?void 0:I.service)||((Y=j==null?void 0:j.opts)==null?void 0:Y.service)||null,Q=(ce=j==null?void 0:j.getSource)==null?void 0:ce.call(j),ue=Q&&"tiles"in Q?(me=Q.tiles)==null?void 0:me[0]:(I==null?void 0:I.url)||null,fe=(I==null?void 0:I.source_path)||null,se=(j==null?void 0:j.popup)||(I==null?void 0:I.popup),v=(j==null?void 0:j.card)||(I==null?void 0:I.card),A=(I==null?void 0:I.filters)||((ge=j==null?void 0:j.opts)==null?void 0:ge.filters);return[{label:"Назва",value:le(S)},{label:"Сервіс",value:le(I!=null&&I.isClient?"Завантажені дані":R)},{label:"Посилання",value:le(ue),breakLine:!0},{label:"Джерело",value:le(fe),breakLine:!0},{label:"Popup",value:J(se,"полів")},{label:"Картка",value:J(v,"полів")},{label:"Фільтри",value:J(A,"фільтрів")}]}return(M,j)=>(e.openBlock(),e.createElementBlock("div",Wd,[e.createElementVNode("div",Yd,[e.createElementVNode("button",{class:"selected-tab__add",onClick:j[0]||(j[0]=I=>r("select-layer"))},[...j[3]||(j[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",Gd,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(I,S)=>{var R;return e.openBlock(),e.createElementBlock("div",{key:I,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":B.value===S,"selected-tab__item--over":z.value===S}]),draggable:"true",onDragstart:Q=>Z(Q,S),onDragover:e.withModifiers(Q=>P(S),["prevent"]),onDrop:Q=>ee(Q,S),onDragend:K},[e.createElementVNode("div",Kd,[e.createElementVNode("div",Xd,[j[4]||(j[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:u[I]??!0,onChange:Q=>g(I,Q.target.checked)},null,40,Jd),e.createElementVNode("span",Qd,e.toDisplayString(((R=m(I))==null?void 0:R.name)||"Шар"),1)]),e.createElementVNode("div",eu,[e.createVNode(cr,{"layer-id":I},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:Q=>d(I,Q),onClick:e.withModifiers(Q=>h(I),["stop"])},[...j[5]||(j[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,tu)])])],42,Zd)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[f.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:l,class:"selected-tab__menu",style:e.normalizeStyle({top:k.top+"px",left:k.left+"px"})},[e.createElementVNode("div",nu,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:j[1]||(j[1]=I=>E(f.value))},[...j[6]||(j[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(Hd,{items:G(f.value)},{default:e.withCtx(()=>[...j[7]||(j[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"]),j[9]||(j[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:j[2]||(j[2]=I=>N(f.value))},[...j[8]||(j[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"]]),ru={class:"filter-tab"},lu={key:0,class:"filter-tab__header"},au={class:"filter-tab__title"},su={key:1,class:"filter-tab__content rounded-md"},iu={class:"filter-tab__scroll"},cu={key:2,class:"filter-tab__empty"},du=Ne(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,a=n,i=e.computed(()=>{var p;return((p=r.layer)==null?void 0:p.filters)??[]}),s=e.computed(()=>i.value.length>0);function c(p){a("change",p.data)}return(p,f)=>(e.openBlock(),e.createElementBlock("div",ru,[t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",lu,[e.createElementVNode("div",null,[e.createElementVNode("p",au,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",su,[e.createElementVNode("div",iu,[e.createVNode(e.unref(o),{view:"vertical",schema:i.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:f[0]||(f[0]=k=>c(k))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",cu,[...f[1]||(f[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),uu={class:"flex items-center justify-between mb-1"},mu={class:"flex items-center gap-2"},pu={class:"text-lg font-semibold text-gray-800"},fu={key:0},gu={key:1,class:"block text-sm font-normal text-gray-500"},yu={class:"flex items-center gap-2"},hu={class:"flex mb-4 border-b border-gray-200"},bu={class:"map-catalog-widget__body"},br=Ne(e.defineComponent({__name:"MapCatalogWidget",setup(t){const{registerCatalogLayers:n,setCatalogSelectedLayerIds:o,resetMapCatalogLegend:r}=hr(),a=Ie.useRoute(),i=Ie.useRouter();function s(){const F=a.query["catalog-tab"];return(Array.isArray(F)?F[0]:F)==="selected"?"selected":"catalog"}const c=e.ref(s()),p=e.ref({groups:[]}),f=e.ref([]),k=e.ref(""),{map:l}=et(),{clientLayers:y,isClientLayer:u,getClientLayer:m,unregisterClientLayer:b,clearClientLayers:g}=xo(),d=e.reactive({}),h=e.ref(null),x=e.ref(!0),N=e.ref(!1),{activateTemporaryLayer:$}=cn(l);function _(F){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"activate",owner:"add-data",spec:F}}))}function w(F,Y){var we,Se;const ce=y.value[F]||m(F),me=Me(F);if(!Y){(we=me==null?void 0:me.setVisible)==null||we.call(me,!1);return}if((Se=me==null?void 0:me.isMounted)!=null&&Se.call(me)){me.setVisible(!0);return}if(!(ce!=null&&ce.data))return;const ge={id:ce.id,title:ce.name,type:"geojson",data:ce.data};$(ge,{},"add-data"),_(ge)}function E(F){const Y=y.value[F];if(Y){const ce=Y.bounds?[Y.bounds[0][0],Y.bounds[0][1],Y.bounds[1][0],Y.bounds[1][1]]:null;return{id:Y.id,name:Y.name,service:"geojson",isClient:!0,extent:ce}}return p.value.groups.map(ce=>ce.layers.find(me=>me.id===F)).find(Boolean)||null}function B(F){return typeof(F==null?void 0:F.name)=="string"&&F.name.trim().length>0}function z(){const F=h.value;if(!F)return;delete d[F];const Y=Me(F);Y!=null&&Y.setFilter&&Y.setFilter("")}function Z(F,Y){const ce=Me(F);if(d[F]={...Y},!(ce!=null&&ce.setFilter))return;const me=Object.entries(Y).filter(([,ge])=>ge!=null&&ge!=="").map(([ge,we])=>`${ge}=${we}`);ce.setFilter(me.join("|"))}function P(F){const Y=h.value;Y&&Z(Y,F)}function ee(F){const Y=F.url;let ce=null;if(Y&&(ce=Y.startsWith("http")?Y:`${window.location.origin}${Y}`),!ce)return null;const me=(F.service||"").toString().toLowerCase(),ge=F.count??null;return me&&me!=="vtile"?{service:me,count:ge,source:{type:"raster",tiles:[ce],tileSize:256,minzoom:0,maxzoom:20}}:{service:me,count:ge,source:{type:"vector",tiles:[ce],minzoom:0,maxzoom:14},layer:{style:F.style},card:F.card,popup:F.popup}}function K(F,Y,ce){var Se;const me=ce??E(F);if(!me)return;if(me.isClient){w(F,Y),Y&&!f.value.includes(F)&&f.value.push(F);return}const ge=ee(me);if(!ge)return;const we=Me(me.id,ge,l);if(we)if(we.setVisible(Y),Y){if(!f.value.includes(F)&&(f.value.push(F),(Se=l.value)!=null&&Se.getLayer(F)))try{l.value.moveLayer(F)}catch(We){console.warn("Cannot move new layer",F,We)}}else f.value=f.value.filter(We=>We!==F),h.value===F&&(z(),h.value=null)}function le(){f.value.forEach(F=>{var ce;const Y=Me(F);Y&&Y.setVisible(!1),u(F)&&((ce=Y==null?void 0:Y.remove)==null||ce.call(Y),b(F))}),f.value=[],g()}function J(F){var ce;const Y=Me(F);(ce=Y==null?void 0:Y.remove)==null||ce.call(Y),u(F)&&(b(F),window.dispatchEvent(new CustomEvent(Dn,{detail:{id:F}})),window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"deactivate",spec:{id:F},owner:"add-data"}}))),f.value=f.value.filter(me=>me!==F),h.value===F&&(z(),h.value=null)}function G(F){if(!(F instanceof CustomEvent))return;const{id:Y}=F.detail||{};!Y||typeof Y!="string"||(f.value.includes(Y)||f.value.push(Y),c.value="selected")}function M(F){f.value=[...F],e.nextTick(()=>{var ge;if(!l.value)return;const Y=((ge=l.value.getStyle())==null?void 0:ge.layers)??[];let ce;const me=we=>Y.filter(Se=>{var We,Ze;return(Se==null?void 0:Se.source)===we||(Se==null?void 0:Se.id)===we||((Ze=(We=Se==null?void 0:Se.id)==null?void 0:We.startsWith)==null?void 0:Ze.call(We,`${we}`))}).map(Se=>Se.id);for(let we=F.length-1;we>=0;we-=1){const Se=F[we],We=me(Se);We.length&&(We.forEach(Ze=>{var Oe;if((Oe=l.value)!=null&&Oe.getLayer(Ze))try{l.value.moveLayer(Ze,ce)}catch(at){console.warn("Cannot move layer",Ze,at)}}),ce=We[0])}})}function j(F){!F||!Array.isArray(F.filters)||F.filters.length===0||f.value.includes(F.id)&&(h.value=F.id,d[F.id]||(d[F.id]={}),c.value="filter")}function I(){c.value="catalog"}const S=e.computed(()=>h.value?E(h.value):null),R=e.computed(()=>{const F=h.value;return F?d[F]??{}:{}}),Q=e.computed(()=>p.value.groups.reduce((F,Y)=>F+Y.layers.filter(B).length,0)),ue=e.computed(()=>c.value==="selected"?"Вибрані шари":c.value==="filter"?"Фільтр шарів":"Каталог"),fe=e.computed(()=>c.value==="selected"?f.value.length:c.value==="catalog"?Q.value:null),se=e.computed(()=>{var F;return c.value==="filter"?((F=S.value)==null?void 0:F.name)??"":""});async function v(){const Y=await(await fetch("/api/gis-layer-list")).json(),ce=new Map;Y.forEach(we=>{const Se=we.group_id??"other";ce.has(Se)||ce.set(Se,{id:Se,name:we.group_name||"Інші шари",layers:[]}),ce.get(Se).layers.push(we)}),p.value={groups:Array.from(ce.values())},n(p.value.groups.flatMap(we=>we.layers)),o(f.value);const me=a.query.layers;if(!me)return;const ge=Array.isArray(me)?me[0]:me;typeof ge=="string"&&ge.split(",").forEach(we=>{const Se=we.trim();if(!Se)return;const We=E(Se);We&&K(Se,!0,We)})}e.watch(h,F=>{!F&&c.value==="filter"&&(c.value="catalog")}),e.watch(S,F=>{!F&&h.value&&(h.value=null)}),e.watch(f,F=>{const Y=F.filter(me=>!u(me));o(Y);const ce={...a.query};Y.length?ce.layers=Y.join(","):delete ce.layers,i.replace({query:ce}).catch(()=>{})},{deep:!0});function A(){x.value=!x.value}function O(){N.value=window.innerWidth<=768}return e.onMounted(()=>{v(),O(),N.value&&(x.value=!1),window.addEventListener("resize",O),window.addEventListener(dn,G)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",O),window.removeEventListener(dn,G),r()}),(F,Y)=>(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"||fe.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",uu,[e.createElementVNode("div",mu,[Y[4]||(Y[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",pu,[e.createTextVNode(e.toDisplayString(ue.value)+" ",1),fe.value!==null?(e.openBlock(),e.createElementBlock("span",fu,"("+e.toDisplayString(fe.value)+")",1)):e.createCommentVNode("",!0),se.value?(e.openBlock(),e.createElementBlock("span",gu,e.toDisplayString(se.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",yu,[e.createElementVNode("button",{onClick:le,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...Y[5]||(Y[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:A,"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})},[...Y[6]||(Y[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",hu,[e.createElementVNode("button",{onClick:Y[0]||(Y[0]=ce=>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:Y[1]||(Y[1]=ce=>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",bu,[c.value==="catalog"?(e.openBlock(),e.createBlock(Od,{key:0,class:"map-catalog-widget__scroll",catalog:p.value,selected:f.value,search:k.value,"onUpdate:search":Y[2]||(Y[2]=ce=>k.value=ce),onToggleLayer:K,onOpenFilter:j},null,8,["catalog","selected","search"])):c.value==="selected"?(e.openBlock(),e.createBlock(ou,{key:1,catalog:p.value,selected:f.value,"client-layers":e.unref(y),onToggleLayer:K,onSelectLayer:Y[3]||(Y[3]=ce=>c.value="catalog"),onReorder:M,onRemove:J},null,8,["catalog","selected","client-layers"])):(e.openBlock(),e.createBlock(du,{key:2,layer:S.value,value:R.value,onChange:P,onClose:I},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-b81b0112"]]),xu={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},ku={class:"flex items-start justify-between gap-3 p-5 pb-3"},wu={class:"inline-block text-xl font-semibold text-gray-800"},_u={key:0,class:"mt-1 text-sm text-gray-500"},Eu={class:"flex items-center gap-[6px]"},Cu={class:"px-5 pb-5 space-y-6"},Nu={key:0,class:"space-y-2"},Vu={class:"flex flex-wrap gap-4"},Bu=["value"],$u={key:1,class:"text-sm text-gray-500"},Su={key:2,class:"text-sm text-gray-500"},vu={class:"text-4xl font-medium text-gray-800"},Lu={class:"space-y-[14px]"},Tu={class:"flex items-center gap-[10px] text-gray-600"},Au={class:"font-medium text-gray-700"},Mu={class:"flex items-center justify-end text-end gap-3"},Du={class:"font-medium text-gray-800"},Fu={class:"min-w-[40px] font-medium text-[#3C3C4399]"},xr=Ne(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),a=e.ref(!1),i=e.ref([]),s=e.ref(null),c=e.ref(null),p=e.ref(null),f=e.ref(null),k=e.ref(null),l=e.ref({}),y=e.ref(null);function u(J){return J&&JSON.parse(JSON.stringify(J))}const m=e.computed(()=>{const J=o.config.layer;if(typeof J!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const G=J.trim();if(!G)throw new Error("MapAttributeWidget: `layer` must be non-empty");return G}),b=e.computed(()=>{const{list:J,attribute:G}=o.config;if(Array.isArray(J)&&J.length)return J.map(M=>({id:(M==null?void 0:M.id)!=null?String(M.id).trim():"",text:(M==null?void 0:M.text)!=null&&String(M.text).trim()||null})).filter(M=>M.id.length);if(Array.isArray(G))return G.map(M=>M!=null?String(M).trim():"").filter(M=>M.length).map(M=>({id:M,text:null}));if(typeof G=="string"){const M=G.trim();if(!M)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:M,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),g=e.computed(()=>b.value.map(J=>({id:J.id,label:J.text||l.value[J.id]||J.id})));e.watch(b,J=>{if(!J.length){y.value=null,i.value=[];return}(!y.value||!J.some(G=>G.id===y.value))&&(y.value=J[0].id)},{immediate:!0});const d=e.computed(()=>{var J;return y.value||((J=b.value[0])==null?void 0:J.id)||null});e.watch(m,()=>{var J,G;(G=(J=c.value)==null?void 0:J.remove)==null||G.call(J),c.value=null,p.value=null,f.value=null,k.value=null,l.value={}});const h=e.computed(()=>{var J;return(J=f.value)!=null&&J.length?{id:m.value,name:p.value,filters:f.value}:null}),x=e.computed(()=>{var J,G;return((G=(J=h.value)==null?void 0:J.filters)==null?void 0:G.length)||0});async function N(J){var j;const G=await fetch(`/api/gis-service/${encodeURIComponent(J)}`);if(!G.ok){let I="Не вдалося завантажити налаштування шару";try{const S=await G.json();I=((j=S==null?void 0:S.message)==null?void 0:j.error)||(S==null?void 0:S.message)||I}catch{}throw new Error(I)}const M=await G.json();return p.value=(M==null?void 0:M.name)||null,f.value=Array.isArray(M==null?void 0:M.filters)?M.filters:null,k.value=u((M==null?void 0:M.style)||{}),l.value=((M==null?void 0:M.attributes)||[]).reduce((I,S)=>{const R=typeof(S==null?void 0:S.name)=="string"?S.name.trim():"",Q=typeof(S==null?void 0:S.ua)=="string"?S.ua.trim():"";return R&&(I[R]=Q||R),I},{}),M}function $(J,G){let M=Me(J);if(!M){const j=`${location.origin}/api/vtile/${J}/ua/{z}/{x}/{y}.vmt`;M=Me(J,{source:{type:"vector",tiles:[j],minzoom:0,maxzoom:14},layer:{id:J,source:J,"source-layer":J,style:(G==null?void 0:G.style)||{}},card:G==null?void 0:G.card,popup:G==null?void 0:G.popup})}return c.value=M,M}async function _(J,G){var I;const M=`/api/gis-service/${encodeURIComponent(J)}/${encodeURIComponent(G)}`,j=await fetch(M);if(!j.ok){let S="Не вдалося отримати статистику";try{const R=await j.json();S=((I=R==null?void 0:R.message)==null?void 0:I.error)||(R==null?void 0:R.message)||S}catch{}throw new Error(S)}return j.json()}function w(J){const G=new Map;return J&&(J.rules||[]).forEach(j=>{const I=(j==null?void 0:j.value)??(j==null?void 0:j.id);I!=null&&G.set(String(I),j)}),G}function E(J,G,M,j,I){if(typeof(G==null?void 0:G.color)=="string"&&G.color.trim())return G.color.trim();const S=o.config.colors||{};if(S[J])return S[J];const Q=w(M==null?void 0:M.style).get(J);return typeof(Q==null?void 0:Q.color)=="string"&&Q.color.trim()?Q.color.trim():n[I%n.length]}function B(J,G,M,j){var I;return(G==null?void 0:G.text)||(G==null?void 0:G.label)||(G==null?void 0:G.name)||(G==null?void 0:G[`${j}_text`])||((I=w(M==null?void 0:M.style).get(J))==null?void 0:I.label)||J}function z(J,G,M,j){if(!J)return;const I=u((G==null?void 0:G.style)||k.value)||{},S=j.trim();if(!S)return;const R={...I.colors||{},...o.config.colors||{}};S===j&&M.forEach(Q=>{Q.color.trim()&&(R[Q.id]=Q.color)}),J.setStyle({...I,type:I.type||"polygon",colorAttr:S,opacity:.8,colors:R})}async function Z(){var S,R;i.value=[],s.value=null;const J=m.value,G=d.value;if(!G)return;a.value=!0;const M=await N(J);$(J,M);const j=await _(J,G),I=Array.isArray(j==null?void 0:j.rows)?j.rows.map((Q,ue)=>{const fe=(Q==null?void 0:Q.id)??(Q==null?void 0:Q.value),se=fe!=null?String(fe):"";if(!se)return null;const v=B(se,Q,M,G),A=Number((Q==null?void 0:Q.count)??0)||0,O=E(se,Q,M,G,ue);return{id:se,label:v,count:A,color:O}}).filter(Boolean):[];i.value=I,s.value=((S=j==null?void 0:j.field)==null?void 0:S.label)||((R=j==null?void 0:j.field)==null?void 0:R.name)||null,z(c.value,M,I,G),a.value=!1}e.watch(()=>[m.value,d.value],()=>{Z()},{immediate:!0});const P=e.computed(()=>"Набори даних"),ee=e.computed(()=>i.value.reduce((J,G)=>J+G.count,0)),K=e.computed(()=>{var M;const J=d.value;return((M=g.value.find(j=>j.id===J))==null?void 0:M.label)||null||s.value||J||null});function le(J){return ee.value?`${(J/ee.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var J,G;(G=(J=c.value)==null?void 0:J.remove)==null||G.call(J)}),(J,G)=>r.value?(e.openBlock(),e.createElementBlock("div",xu,[e.createElementVNode("div",ku,[e.createElementVNode("div",null,[e.createElementVNode("h2",wu,e.toDisplayString(P.value),1),K.value&&g.value.length===1?(e.openBlock(),e.createElementBlock("p",_u,e.toDisplayString(K.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Eu,[h.value?(e.openBlock(),e.createBlock(Fn,{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:h.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:G[1]||(G[1]=M=>r.value=!1)},[...G[3]||(G[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",Cu,[g.value.length>1?(e.openBlock(),e.createElementBlock("div",Nu,[e.createElementVNode("div",Vu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,M=>(e.openBlock(),e.createElementBlock("label",{key:M.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:M.id,"onUpdate:modelValue":G[2]||(G[2]=j=>y.value=j)},null,8,Bu),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(M.label),1)]))),128))])])):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createElementBlock("div",$u,"Завантаження…")):i.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",vu,e.toDisplayString(ee.value),1),e.createElementVNode("ul",Lu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,M=>(e.openBlock(),e.createElementBlock("li",{key:M.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Tu,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:M.color})},null,4),e.createElementVNode("span",Au,e.toDisplayString(M.label),1)]),e.createElementVNode("div",Mu,[e.createElementVNode("span",Du,e.toDisplayString(M.count),1),e.createElementVNode("span",Fu,e.toDisplayString(le(M.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Su,"Дані відсутні"))])])):(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:G[0]||(G[0]=M=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),zu=["title"],Iu={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"},ju=["onClick"],Pu=["placeholder"],Ru={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Ou={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},Uu={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},qu={class:"max-h-[60vh] overflow-auto"},Hu={key:0,class:"divide-y divide-gray-100"},Wu=["onClick"],Yu={key:1,class:"px-3 py-3 text-xs text-gray-500"},kr="mapSearchAddressHistory",mn="search-geom-source",pn="search-geom-layer-fill",Pn="search-geom-layer-line",Gu=12,Zu="https://data.softpro.ua/api-user/gis-url-proxy",Ku="https://data.softpro.ua/api/parcel",Xu="https://nominatim.openstreetmap.org/search",wr=Ne(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(T,U){if(typeof document>"u")return;let q=null;const ie=8,de=()=>{const Be=String((U==null?void 0:U.value)??"");if(!Be)return;q=document.createElement("div"),q.textContent=Be,Object.assign(q.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(q);const $e=T.getBoundingClientRect();q.style.left=`${$e.right+window.scrollX+ie}px`,q.style.top=`${$e.top+window.scrollY+($e.height-q.offsetHeight)/2}px`},ke=()=>{q!=null&&q.parentNode&&q.parentNode.removeChild(q),q=null};T.addEventListener("mouseenter",de),T.addEventListener("mouseleave",ke),Object.assign(T,{tooltipRightHandlers:{show:de,hide:ke}})},unmounted(T){if(typeof document>"u")return;const U=T.tooltipRightHandlers;U&&(T.removeEventListener("mouseenter",U.show),T.removeEventListener("mouseleave",U.hide))}},o=t,r=et(),a=e.getCurrentInstance();function i(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function s(){var ie,de,ke;const T=(ie=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:ie.$settings,U=(de=T==null?void 0:T.map)==null?void 0:de.searchViewbox;if(U)return U;const q=i();return(ke=q==null?void 0:q.map)==null?void 0:ke.searchViewbox}function c(){var de,ke,Be;const T=(de=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:de.$settings,U=(ke=T==null?void 0:T.map)==null?void 0:ke.addressSuggest;if(typeof U=="string"&&U.trim())return U.trim();const q=i(),ie=(Be=q==null?void 0:q.map)==null?void 0:Be.addressSuggest;if(typeof ie=="string"&&ie.trim())return ie.trim()}const p=!!c(),f=!!s(),k=e.computed(()=>{const T=["xy","parcel"];return p&&T.push("address"),f&&T.push("nominatim"),T}),l=e.computed(()=>{var q,ie;const T=k.value,U=(ie=(q=o.config)==null?void 0:q.tools)==null?void 0:ie.filter(de=>T.includes(de));return U&&U.length?U:T}),y=e.computed(()=>{var T,U;return((U=(T=o.config)==null?void 0:T.placeholder)==null?void 0:U.trim())||"Пошук…"}),u=e.ref(l.value[0]);e.watch(l,T=>{T.includes(u.value)||(u.value=T[0])});const m=e.ref(""),b=e.ref(!1),g=e.ref(null),d=e.ref(null),h=e.ref(null),x=e.ref(null),N=e.ref([]),$=e.ref(null),_=e.ref(!1),w=e.ref([]),E=e.computed(()=>(u.value==="address"||u.value==="nominatim")&&_.value),B=e.computed(()=>{var T;return((T=o.config)==null?void 0:T.addressDebounceMs)??1e3});let z=null;const Z=e.ref(!1),P=e.computed(()=>m.value.trim().length>0?N.value:w.value),ee=e.computed(()=>m.value.trim().length?`Знайдено ${N.value.length}`:"Історія пошуку"),K=e.computed(()=>m.value.trim().length?"Нічого не знайдено":"Історія порожня");function le(){var T,U;if(typeof window>"u")return[];try{const q=(U=(T=window.localStorage)==null?void 0:T.getItem)==null?void 0:U.call(T,kr);if(!q)return[];const ie=JSON.parse(q);return Array.isArray(ie)?ie:[]}catch{return[]}}function J(T){var U,q;typeof window>"u"||(q=(U=window.localStorage)==null?void 0:U.setItem)==null||q.call(U,kr,JSON.stringify(T))}function G(T){const q=[T,...w.value.filter(ie=>ie.id!==T.id)].slice(0,10);w.value=q,J(q)}let M=null;function j(){M&&(M.remove(),M=null)}function I(){var U;const T=(U=r.map)==null?void 0:U.value;T&&(T.getLayer(pn)&&T.removeLayer(pn),T.getLayer(Pn)&&T.removeLayer(Pn),T.getSource(mn)&&T.removeSource(mn))}function S(T){var de,ke,Be,$e;if(!((de=o.config)!=null&&de.showMarker)||!T)return;const U=(ke=r.map)==null?void 0:ke.value;if(!U)return;I(),Q();const q={type:"Feature",geometry:T,properties:{}};U.addSource(mn,{type:"geojson",data:q});const ie=((Be=o.config)==null?void 0:Be.geometryColor)||(($e=o.config)==null?void 0:$e.markerColor)||"#3B82F6";U.addLayer({id:pn,type:"fill",source:mn,paint:{"fill-color":ie,"fill-opacity":.3}}),U.addLayer({id:Pn,type:"line",source:mn,paint:{"line-color":ie,"line-width":1,"line-opacity":1}}),ue(U)}let R=null;function Q(){R&&(cancelAnimationFrame(R),R=null)}function ue(T){const q=performance.now();function ie(de){if(!T.getLayer(pn))return;const Be=(de-q)%1200/1200,$e=Math.sin(Be*Math.PI),ot=.2+$e*.3,gt=1+$e*1;T.setPaintProperty(pn,"fill-opacity",ot),T.setPaintProperty(Pn,"line-width",gt),R=requestAnimationFrame(ie)}R=requestAnimationFrame(ie)}function fe(T,U){var de,ke,Be;if(!((de=o.config)!=null&&de.showMarker))return;j(),I();const q=(ke=r.map)==null?void 0:ke.value;if(!q)return;if(U){S(U);return}const ie=((Be=o.config)==null?void 0:Be.markerColor)||"#3B82F6";M=new maplibregl.Marker({color:ie}).setLngLat([T.lng,T.lat]).addTo(q)}const se=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function v(){var ke;if(!x.value)return;const T=x.value.getBoundingClientRect(),U=(ke=h.value)==null?void 0:ke.getBoundingClientRect(),q=(U==null?void 0:U.width)??T.width,ie=((U==null?void 0:U.left)??T.left)+window.scrollX,de=T.bottom+window.scrollY+Gu;se.left=`${ie}px`,se.top=`${de}px`,se.width=`${q}px`,se.display="block"}const A=()=>{E.value&&v()};function O(){z&&(clearTimeout(z),z=null)}e.watch(u,()=>{m.value="",b.value=!1,N.value=[],_.value=!1,O(),Z.value=!1,j(),I()}),e.watch(E,T=>{T?e.nextTick(()=>{v()}):se.display="none"}),e.watch(m,T=>{if(u.value!=="address"&&u.value!=="nominatim"){N.value=[],O();return}if(!T.trim()){N.value=[],_.value=w.value.length>0,O();return}O(),_.value=!0,z=window.setTimeout(()=>{Ae(T).catch(U=>{const q=(U==null?void 0:U.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:q})})},B.value)});function F(T){var ie;const U=[];d.value&&U.push(d.value),T instanceof HTMLElement&&U.push(T);const q=(ie=g.value)==null?void 0:ie.querySelectorAll("li");q==null||q.forEach(de=>{U.push(de)}),U.forEach(de=>{de.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function Y(T){b.value&&F(T.target),b.value=!b.value}function ce(T,U){F(U==null?void 0:U.target),u.value=T}function me(){m.value="",N.value=[],_.value=!1,Z.value=!1,j(),I()}function ge(T){const U=T.target;if(b.value){const q=g.value;q&&!q.contains(U)&&(F(U),b.value=!1)}if(E.value){const q=$.value,ie=x.value;q&&!q.contains(U)&&(!ie||!ie.contains(U))&&(_.value=!1)}}e.onMounted(()=>{w.value=le(),window.addEventListener("click",ge,!0),window.addEventListener("scroll",A,!0),window.addEventListener("resize",A)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",ge,!0),window.removeEventListener("scroll",A,!0),window.removeEventListener("resize",A),O(),j(),I()});function we(T){return T==="xy"?"Координати":T==="parcel"?"Кадастр":T==="nominatim"?"Nominatim":"Адресний"}function Se(T){switch(T){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 We(T){const U=T.replace(/[,]+/g," ").trim();if(!U)return null;const q=U.split(/\s+/).filter(Boolean);if(q.length<2)return null;const ie=q.slice(0,2).map(Number);if(!ie.every(ut=>Number.isFinite(ut)))return null;let[de,ke]=ie,Be=de,$e=ke;const ot=ut=>Math.abs(ut)<=90,gt=ut=>Math.abs(ut)<=180;if(!ot(Be)||!gt($e))if(ot($e)&&gt(Be))Be=ke,$e=de;else return null;return{lat:Be,lng:$e}}function Ze(T){return((T==null?void 0:T.items)||[]).map((q,ie)=>{var de,ke,Be;return{id:String((q==null?void 0:q.id)??ie),title:(q==null?void 0:q.title)||((de=q==null?void 0:q.address)==null?void 0:de.label)||"Знайдений обʼєкт",lat:Number((ke=q==null?void 0:q.position)==null?void 0:ke.lat),lng:Number((Be=q==null?void 0:q.position)==null?void 0:Be.lng)}})}function Oe(T){const U=(T==null?void 0:T.result)||(T==null?void 0:T.data)||T;if(!U)return[];const q=U.geom_centroid;if(!q||!Array.isArray(q.coordinates))return[];const[ie,de]=q.coordinates;return!Number.isFinite(de)||!Number.isFinite(ie)?[]:[{id:"parcel",title:U.cadnum||U.cad_num||"Земельна ділянка",lat:de,lng:ie,geom:U.geom||null}]}function at(T){return(Array.isArray(T==null?void 0:T.features)?T.features:[]).map((q,ie)=>{var ut,Et,en;const de=(ut=q==null?void 0:q.geometry)==null?void 0:ut.coordinates,ke=Number(de==null?void 0:de[0]),Be=Number(de==null?void 0:de[1]);if(!Number.isFinite(Be)||!Number.isFinite(ke))return null;const $e=(q==null?void 0:q.properties)||{},ot=((Et=$e==null?void 0:$e.geocoding)==null?void 0:Et.label)||($e==null?void 0:$e.display_name)||($e==null?void 0:$e.label)||"Адреса";return{id:String(((en=$e==null?void 0:$e.geocoding)==null?void 0:en.place_id)||($e==null?void 0:$e.place_id)||ie),title:ot,lat:Be,lng:ke}}).filter(q=>!!q)}function ne(T){return Number.isFinite(T.lat)&&Number.isFinite(T.lng)}function re(T){const U=Number(T);return Number.isFinite(U)?U:null}function Ee(T){var de,ke,Be,$e,ot,gt;const U=re(T.lng)??re(T.lon)??re(T.longitude)??re(T.x),q=re(T.lat)??re(T.latitude)??re(T.y);if(U!=null&&q!=null)return{lat:q,lng:U};const ie=((de=T==null?void 0:T.geometry)==null?void 0:de.coordinates)??((ke=T==null?void 0:T.geom_centroid)==null?void 0:ke.coordinates)??((Be=T==null?void 0:T.centroid)==null?void 0:Be.coordinates)??((ot=($e=T==null?void 0:T.geojson)==null?void 0:$e.geometry)==null?void 0:ot.coordinates)??((gt=T==null?void 0:T.geom)==null?void 0:gt.coordinates);if(Array.isArray(ie)&&ie.length>=2){const ut=re(ie[0]),Et=re(ie[1]);if(ut!=null&&Et!=null)return{lat:Et,lng:ut}}return null}function Ue(T){return(Array.isArray(T==null?void 0:T.data)?T.data:[]).map((q,ie)=>{const de=Ee(q),ke=String(q.text??q.title??q.label??q.name??q.address??q.display_name??q.id??"Адреса"),Be=String(q.id??q.code??q.value??ie);return de?{id:Be,title:ke,...de}:{id:Be,title:ke}}).filter(q=>!!(q!=null&&q.title))}function He(T){const U=c();if(!U)return null;if(U.includes(":name"))return U.replace(":name",encodeURIComponent(T));try{const q=new URL(U,window.location.origin);return T.trim()&&q.searchParams.set("q",T),q.toString()}catch{return U}}async function ve(T){const U=He(T);if(!U)return[];const q=await fetch(U);if(!q.ok)throw new Error(`HTTP ${q.status}`);const ie=await q.json();return Ue(ie)}async function Ge(T){const U=new URL(Xu);U.searchParams.set("format","geojson"),U.searchParams.set("q",T),U.searchParams.set("addressdetails","1"),U.searchParams.set("bounded","1");const q=s();q&&U.searchParams.set("viewbox",q);const ie=await fetch(U.toString());if(!ie.ok)throw new Error(`HTTP ${ie.status}`);const de=await ie.json();return at(de)}async function Ae(T){if(N.value=[],O(),u.value==="address"){if(!c()){ye.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ie=await ve(T);if(!ie.length){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=ie;return}const U=await Ge(T);if(!U.length){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=U}async function nt(T){if(ne(T)){D(T),G(T);return}ye.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function W(){u.value!=="address"&&u.value!=="nominatim"||m.value.trim().length||w.value.length&&(_.value=!0,e.nextTick(()=>{v()}))}function V(T){const q=T.replace(/\s+/g,"").split(":");if(console.log(q),q.length!==4)return!1;const ie=[10,2,3,4];return q.every((de,ke)=>de.length===ie[ke]&&/^\d+$/.test(de))}function D(T){var q,ie;const U=((q=o.config)==null?void 0:q.zoom)??17;(ie=r.flyTo)==null||ie.call(r,{center:[T.lng,T.lat],zoom:U}),fe(T,T.geom),Z.value=!0}async function te(){const T=m.value.trim();if(T){if(u.value==="xy"){const U=We(T);if(!U){ye.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}D(U);return}if(u.value==="address"||u.value==="nominatim"){try{await Ae(T)}catch(U){const q=(U==null?void 0:U.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:q})}return}try{const U=new URL(u.value==="here"?Zu:Ku);if(u.value==="here")U.searchParams.set("searchtext",T);else{if(!V(T)){ye.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}U.searchParams.set("cadnum",T)}const q=await fetch(U.toString());if(!q.ok)throw new Error(`HTTP ${q.status}`);const ie=await q.json(),de=u.value==="here"?Ze(ie):Oe(ie);if(!de.length)ye.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const ke=de[0];D(ke)}}catch(U){const q=(U==null?void 0:U.message)||"Помилка пошуку";ye.notify({type:"error",title:"Пошук",message:q})}}}return(T,U)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:h,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(te,["prevent"])},[l.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:g,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:Y},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:d,class:"block w-full truncate",title:we(u.value)},[e.createTextVNode(e.toDisplayString(we(u.value)),1)],8,zu)),[[n,Se(u.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":b.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...U[3]||(U[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),b.value?(e.openBlock(),e.createElementBlock("div",Iu,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,q=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:q,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ie=>ce(q,ie)},[e.createTextVNode(e.toDisplayString(we(q)),1)],8,ju)),[[n,Se(q)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:x,class:"relative flex-1 min-w-[140px]"},[u.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Ko.VsInputMask),{key:0,modelValue:m.value,"onUpdate:modelValue":U[0]||(U[0]=q=>m.value=q),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",Z.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":U[1]||(U[1]=q=>m.value=q),placeholder:y.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",Z.value?"!pr-14":"!pr-8"]),onFocus:W},null,42,Pu)),[[e.vModelText,m.value,void 0,{trim:!0}]]),e.createElementVNode("div",Ru,[Z.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},[...U[4]||(U[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),U[5]||(U[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))]),E.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:$,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(se)},[e.createElementVNode("div",Ou,[e.createElementVNode("span",Uu,e.toDisplayString(ee.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:U[2]||(U[2]=q=>_.value=!1)}," ✕ ")]),e.createElementVNode("div",qu,[P.value.length?(e.openBlock(),e.createElementBlock("ul",Hu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,q=>(e.openBlock(),e.createElementBlock("li",{key:q.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ie=>nt(q)},e.toDisplayString(q.title),9,Wu))),128))])):(e.openBlock(),e.createElementBlock("div",Yu,e.toDisplayString(K.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-8c4f8551"]]),Ju="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Qu="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",em=Ne(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:a}=et(),i=e.ref(null),s=e.ref(null),c=e.ref(null),p=e.ref(null);let f=null;function k(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function l(_){if(Array.from(document.styleSheets).some(B=>{var z;return(z=B==null?void 0:B.href)==null?void 0:z.includes(_)}))return;const E=document.createElement("link");E.rel="stylesheet",E.href=_,document.head.appendChild(E)}function y(_){return new Promise((w,E)=>{const B=Array.from(document.scripts).find(Z=>Z.src===_);if(B){if(B._loaded)return w();B.addEventListener("load",()=>w()),B.addEventListener("error",()=>E(new Error(`Failed ${_}`)));return}const z=document.createElement("script");z.src=_,z.async=!0,z.onload=()=>{z._loaded=!0,w()},z.onerror=()=>E(new Error(`Failed ${_}`)),document.head.appendChild(z)})}function u(){var w,E,B;const _=window;return _.MapboxExportControl||((w=_.mapboxgl)==null?void 0:w.MapboxExportControl)||((E=_.mapboxglExport)==null?void 0:E.MapboxExportControl)||((B=_.mapboxglExport)==null?void 0:B.default)||null}function m(){const _=document.createElementNS("http://www.w3.org/2000/svg","svg");return _.setAttribute("xmlns","http://www.w3.org/2000/svg"),_.setAttribute("viewBox","0 0 24 24"),_.setAttribute("width","18"),_.setAttribute("height","18"),_.setAttribute("fill","none"),_.setAttribute("stroke","currentColor"),_.setAttribute("stroke-width","2"),_.setAttribute("stroke-linecap","round"),_.setAttribute("stroke-linejoin","round"),_.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((E,B)=>{const z=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(E).forEach(([Z,P])=>{z.setAttribute(Z,P)}),_.appendChild(z)}),_}function b(){const _=document.createElement("button");_.id="print-btn",_.type="button",_.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),_.setAttribute("aria-label","Друк карти");const w=m(),E=document.createElement("span");return E.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(" "),E.textContent="Друк карти",E.setAttribute("aria-hidden","true"),_.appendChild(w),_.appendChild(E),_.addEventListener("click",B=>{B.stopPropagation(),g()}),p.value=_,_}function g(){if(!c.value)return;c.value.style.display==="block"?h():d()}function d(){var _,w,E;c.value&&(c.value.style.display="block",(_=p.value)==null||_.classList.add("scale-105","shadow-xl"),(w=s.value)==null||w.toggleCrosshair(!0),(E=s.value)==null||E.togglePrintableArea(!0),document.addEventListener("click",x))}function h(){var _,w,E;c.value&&(c.value.style.display="none",(_=p.value)==null||_.classList.remove("scale-105","shadow-xl"),(w=s.value)==null||w.toggleCrosshair(!1),(E=s.value)==null||E.togglePrintableArea(!1),document.removeEventListener("click",x))}function x(_){const w=i.value;w&&(_.target&&w.contains(_.target)||h())}function N(_){const w={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};_.querySelectorAll("label, option").forEach(B=>{var Z;const z=(Z=B.textContent)==null?void 0:Z.trim();z&&w[z]&&(B.textContent=w[z])});const E=_.querySelector("button");E&&(E.textContent="Друкувати")}function $(_){const w=_.querySelector(".mapboxgl-export-list");if(!w||!i.value)return;c.value=w;const E=_.querySelector("button");if(E&&(E.style.display="none"),_.style.display="none",!p.value){const z=b();i.value.appendChild(z)}w.style.display="none";const B="_printControlBound";if(!w[B]){const z=Z=>Z.stopPropagation();w.addEventListener("click",z),w.addEventListener("mousedown",z),w[B]=!0}i.value.appendChild(w),N(w)}return e.onMounted(async()=>{await(o==null?void 0:o());const _=n.value;if(!_)return;l(Ju),k();try{await y(Qu)}catch(B){console.warn("[MapPrintControl] load error",B);return}const w=u();if(!w)return;const E=new w({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(s.value=E,typeof E.onAdd=="function"){const B=E.onAdd.bind(E);E.onAdd=z=>{const Z=B(z);return setTimeout(()=>Z&&$(Z),50),Z}}r?r(E,"top-right"):_.addControl(E,"top-right"),f=B=>{B.key==="Escape"&&h()},document.addEventListener("keyup",f)}),e.onBeforeUnmount(()=>{h(),f&&(document.removeEventListener("keyup",f),f=null);const _=n.value;if(s.value)try{a?a(s.value):_==null||_.removeControl(s.value)}catch{}s.value=null}),(_,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),tm={class:"map-center-control"},nm=["aria-label"],om={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"},zt=Ne(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=et(),a=e.ref(null),i=e.ref(null),s=e.ref(null),c=e.ref(null),p=co(),f=e.computed(()=>{var h;return((h=p.value)==null?void 0:h.map)??null});function k(h){if(Array.isArray(h)&&h.length>=2){const[x,N]=h.slice(0,2).map($=>Number($));return Number.isNaN(x)||Number.isNaN(N)?null:[x,N]}if(h&&typeof h=="object"){const x=h,N=x.lng??x.lon??x.long??x.x,$=x.lat??x.y;if(N!=null&&$!=null){const _=Number(N),w=Number($);if(!Number.isNaN(_)&&!Number.isNaN(w))return[_,w]}}if(typeof h=="string"){const x=h.split(",").map(N=>Number(N.trim()));if(x.length>=2&&x.every(N=>!Number.isNaN(N)))return[x[0],x[1]]}return null}function l(h){const x=k(h);x&&(a.value=x)}function y(h){const x=Number(h);Number.isNaN(x)||(i.value=x)}e.watch(()=>n.center,h=>l(h),{immediate:!0}),e.watch(()=>n.zoom,h=>y(h),{immediate:!0}),e.watch(()=>n.targetCenter,h=>{s.value=k(h)},{immediate:!0}),e.watch(()=>n.targetZoom,h=>{const x=Number(h);c.value=Number.isNaN(x)?null:x},{immediate:!0}),e.watch(()=>{var h;return(h=f.value)==null?void 0:h.center},h=>{l(h)},{immediate:!0}),e.watch(()=>{var h;return(h=f.value)==null?void 0:h.zoom},h=>{y(h)},{immediate:!0});const u=e.computed(()=>{var h;return((h=n.targetLabel)==null?void 0:h.trim())||"Точка"}),m=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),b=e.computed(()=>!!s.value);e.onMounted(async()=>{await(r==null?void 0:r());const h=o.value;if(h){if(!a.value){const x=h.getCenter();a.value=[x.lng,x.lat]}i.value==null&&(i.value=h.getZoom())}});function g(){const h=o.value;if(!h)return;const x=a.value||(()=>{const $=h.getCenter();return[$.lng,$.lat]})(),N=i.value??h.getZoom();h.flyTo({center:x,zoom:N})}function d(){const h=o.value;if(!h||!s.value)return;const x=c.value??i.value??h.getZoom();h.flyTo({center:s.value,zoom:x})}return(h,x)=>(e.openBlock(),e.createElementBlock("div",tm,[b.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(g,["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(pe.House),{class:"w-4 h-4"})])),b.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":m.value,onClick:e.withModifiers(d,["stop"])},[e.createElementVNode("span",om,e.toDisplayString(u.value),1),e.createVNode(e.unref(pe.MapPin),{class:"w-4 h-4"})],8,nm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),rm={class:"cursor-coordinates"},lm={class:"cursor-coordinates__text"},am=Ne(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",rm,[e.createElementVNode("span",lm,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),sm={class:"minimap__wrapper"},Rn="minimap-viewport",im="minimap-viewport-layer",cm=Ne(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var x,N,$,_;const n=t,o=((N=(x=e.getCurrentInstance())==null?void 0:x.appContext.config.globalProperties)==null?void 0:N.$settings)||null,r=Ft(($=o==null?void 0:o.map)==null?void 0:$.center)||[30,50],a=e.ref(null),i=e.shallowRef(null),s=(_=n.options)==null?void 0:_.active,c=e.ref(s===void 0?!1:!!s);function p(w,E){return typeof w=="number"&&Number.isFinite(w)?w:E}const f=e.computed(()=>{var Z,P;const w=(Z=n.options)==null?void 0:Z.width,E=(P=n.options)==null?void 0:P.height,B=p(n.width??w,210),z=p(n.height??E,150);return{width:`${B}px`,height:`${z}px`}});function k(){var E,B;const w=(B=(E=n.mapContext)==null?void 0:E.map)==null?void 0:B.value;if(!w||typeof w.getStyle!="function")return null;try{const z=w.getStyle();return z?JSON.parse(JSON.stringify(z)):null}catch{return null}}let l=null;function y(){var Z;if(typeof window>"u"||i.value||!a.value)return;const w=k(),E=r,B={container:a.value,style:w??{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:E,zoom:((Z=n.options)==null?void 0:Z.zoom)??3,interactive:!1,attributionControl:!1},z={...B,...n.options??{}};z.container=B.container,i.value=new maplibregl.Map(z),i.value.on("load",()=>{m(),g()})}function u(){if(!i.value)return;const w=k();w&&(i.value.once("styledata",()=>{m(),g()}),i.value.setStyle(w))}function m(){if(i.value){if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{m(),g()});return}i.value.getSource(Rn)||(i.value.addSource(Rn,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),i.value.addLayer({id:im,type:"fill",source:Rn,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function b(){c.value=!c.value,c.value&&e.nextTick(()=>{var w;return(w=i.value)==null?void 0:w.resize()})}function g(){var ee,K;const w=(K=(ee=n.mapContext)==null?void 0:ee.map)==null?void 0:K.value;if(!i.value||!w||!w.getBounds)return;if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{g()});return}const E=w.getBounds();if(!E)return;const B=E.getNorthEast(),z=E.getSouthWest();if(!B||!z)return;const Z=[[z.lng,B.lat],[B.lng,B.lat],[B.lng,z.lat],[z.lng,z.lat],[z.lng,B.lat]],P=i.value.getSource(Rn);if(!P){m();return}P.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[Z]},properties:{}})}function d(){var B;const w=n.mapContext,E=(B=w==null?void 0:w.map)==null?void 0:B.value;!(w!=null&&w.on)||!E||(l==null||l(),l=w.on("move",g),g())}async function h(){const w=n.mapContext;if(w){if(typeof w.ready=="function")try{await w.ready()}catch{return}d()}}return e.onMounted(()=>{y(),h()}),e.watch(()=>n.mapContext,()=>{h(),g()}),e.watch(()=>{var w,E;return(E=(w=n.mapContext)==null?void 0:w.map)==null?void 0:E.value},()=>{i.value&&(u(),h())}),e.watch(f,()=>{i.value&&e.nextTick(()=>{var w;return(w=i.value)==null?void 0:w.resize()})}),e.watch(()=>n.options,()=>{var E;l==null||l(),l=null,i.value&&(i.value.remove(),i.value=null);const w=(E=n.options)==null?void 0:E.active;typeof w=="boolean"&&(c.value=w),e.nextTick(()=>{y(),h()})},{deep:!0}),e.onBeforeUnmount(()=>{l==null||l(),l=null,i.value&&(i.value.remove(),i.value=null)}),(w,E)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":c.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:b},[e.createVNode(e.unref(pe.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",sm,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:a,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(f.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,c.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),dm={class:"pt-1 border-t border-gray-100"},um={class:"space-y-1"},mm=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),a=e.ref(null),i=(p,f,k)=>Math.min(Math.max(p,f),k),s=()=>{if(r.value===null||a.value===null||!Number.isFinite(r.value)||!Number.isFinite(a.value))return;const p=i(r.value,-90,90),f=i(a.value,-180,180);o("submit",{lat:p,lng:f}),r.value=null,a.value=null},c=()=>{r.value=null,a.value=null,o("cancel")};return(p,f)=>(e.openBlock(),e.createElementBlock("div",dm,[f[2]||(f[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",um,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=k=>r.value=k),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":f[1]||(f[1]=k=>a.value=k),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,a.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:s}," Додати "),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}," Скасувати ")])])]))}}),pm=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(pe.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),fm=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(pe.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),gm=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(pe.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),ym=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function It(t){return ym.format(t)}function _r(t){return t>=1e3?`${It(t/1e3)} км`:`${It(t)} м`}const hm={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},bm={key:0,class:"flex-1 flex gap-1"},xm={key:1,class:"flex-1 font-mono text-gray-700"},km=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,a=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),i=e.ref(!1),s=e.ref(o.coords.lat),c=e.ref(o.coords.lng);e.watch(()=>o.coords,y=>{s.value=y.lat,c.value=y.lng},{deep:!0,immediate:!0});const p=(y,u,m)=>Math.min(Math.max(y,u),m),f=()=>{i.value=!0},k=()=>{if(!Number.isFinite(s.value)||!Number.isFinite(c.value))return;const y=p(s.value,-90,90),u=p(c.value,-180,180);r("update",{id:o.id,coords:{lat:y,lng:u}}),i.value=!1},l=()=>{r("delete",o.id)};return(y,u)=>(e.openBlock(),e.createElementBlock("div",hm,[e.createVNode(e.unref(pe.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),i.value?(e.openBlock(),e.createElementBlock("div",bm,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=m=>s.value=m),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,s.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[1]||(u[1]=m=>c.value=m),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:k}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",xm,e.toDisplayString(a.value),1)),i.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:f}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:l}," ✕ ")]))}}),wm={class:"ruler-control px-3 py-2.5 space-y-2"},_m={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},Em={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"},Cm={class:"text-sm font-semibold text-slate-700"},Nm={class:"ruler-row"},Vm={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},Bm={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"},$m={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},Sm=["onClick"],vm={class:"flex items-center gap-2 mt-0.5 pl-7"},Lm={key:0,class:"text-base font-semibold text-green-600"},Tm={key:1,class:"text-xs text-gray-400"},Am={class:"ruler-row flex items-center gap-2 cursor-pointer"},Mm={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"},Dm={class:"text-xs font-medium text-gray-600 flex-1"},Fm={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},zm=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"),a=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],i=()=>{o.value=!o.value},s=(m,b)=>{const g=B=>B*Math.PI/180,d=g(b.lat-m.lat),h=g(b.lng-m.lng),x=g(m.lat),N=g(b.lat),$=Math.sin(d/2),_=Math.sin(h/2);return 6371e3*(2*Math.asin(Math.sqrt($*$+Math.cos(x)*Math.cos(N)*_*_)))},c=e.computed(()=>{if(n.points.length<2)return 0;let m=0;for(let b=1;b<n.points.length;b+=1)m+=s(n.points[b-1].coords,n.points[b].coords);return n.isShapeClosed&&n.points.length>=2&&(m+=s(n.points[n.points.length-1].coords,n.points[0].coords)),m}),p=e.computed(()=>c.value>=1e3?`${It(c.value/1e3)} км`:`${It(c.value)} м`);function f(m){if(m.length<3)return 0;const b=m[0].lat,g=m[0].lng,d=(x,N)=>{const $=(x-b)*110574;return{x:(N-g)*111320*Math.cos(b*Math.PI/180),y:$}};let h=0;for(let x=0;x<m.length;x++){const N=(x+1)%m.length,$=d(m[x].lat,m[x].lng),_=d(m[N].lat,m[N].lng);h+=$.x*_.y-$.y*_.x}return Math.abs(h)*.5}const k=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const m=n.points.map(b=>b.coords);return f(m)}),l=e.computed(()=>k.value>0),y=e.computed(()=>{const m=k.value;if(m===0)return"—";if(r.value==="km2"){const g=m/1e6;return`${It(g)} км²`}if(r.value==="ha"){const g=m/1e4;return`${It(g)} га`}const b=m>=1?Math.round(m):m;return`${It(b)} м²`}),u=e.computed(()=>{const m=n.points.length;return m===1?"1 точка":m>=2&&m<=4?`${m} точки`:`${m} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(m,b)=>(e.openBlock(),e.createElementBlock("div",wm,[e.createElementVNode("button",_m,[e.createElementVNode("span",Em,[e.createVNode(e.unref(pe.Info),{size:12,"stroke-width":2.5})]),b[1]||(b[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",Cm,e.toDisplayString(p.value),1)]),e.createElementVNode("div",Nm,[e.createElementVNode("button",Vm,[e.createElementVNode("span",Bm,[e.createVNode(e.unref(pe.Info),{size:12,"stroke-width":2.5})]),b[2]||(b[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",$m,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,(g,d)=>e.createElementVNode("button",{key:g.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",d===0&&"rounded-l-md",d===a.length-1&&"rounded-r-md",r.value===g.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(h=>r.value=g.id,["stop"])},e.toDisplayString(g.label),11,Sm)),64))])]),e.createElementVNode("div",vm,[l.value?(e.openBlock(),e.createElementBlock("span",Lm,e.toDisplayString(y.value),1)):(e.openBlock(),e.createElementBlock("span",Tm,"—"))])]),e.createElementVNode("div",Am,[e.createElementVNode("span",Mm,[e.createVNode(e.unref(pe.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",Dm,e.toDisplayString(u.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(i,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",Fm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(g,d)=>(e.openBlock(),e.createBlock(km,{key:g.id,id:g.id,index:d+1,coords:g.coords,onUpdate:b[0]||(b[0]=h=>m.$emit("update-point",h)),onDelete:h=>m.$emit("delete-point",g.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),Im={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},jm={class:"flex items-start gap-2"},Pm=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Im,[e.createElementVNode("div",jm,[e.createVNode(e.unref(pe.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))])]))}}),Rm={class:"space-y-1.5"},Om={class:"space-y-1 max-h-40 overflow-y-auto"},Um={class:"text-gray-700"},qm={class:"font-semibold text-slate-800"},Hm=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(i,s){const c=u=>u*Math.PI/180,p=c(s.lat-i.lat),f=c(s.lng-i.lng),k=c(i.lat),l=c(s.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(p/2)**2+Math.cos(k)*Math.cos(l)*Math.sin(f/2)**2)))}function r(i){return _r(i)}const a=e.computed(()=>{const i=[],s=n.points;if(s.length<2)return i;for(let c=0;c<s.length;c++){const p=c===s.length-1&&n.isShapeClosed?0:c+1;if(p>=s.length)break;const f=o(s[c].coords,s[p].coords);i.push({from:c+1,to:p+1,label:r(f)})}return i});return(i,s)=>(e.openBlock(),e.createElementBlock("div",Rm,[s[0]||(s[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",Om,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(c,p)=>(e.openBlock(),e.createElementBlock("div",{key:p,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",Um,"Точка "+e.toDisplayString(c.from)+" → Точка "+e.toDisplayString(c.to),1),e.createElementVNode("span",qm,e.toDisplayString(c.label),1)]))),128))])]))}}),Wm={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Ym={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Gm={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Zm={class:"flex items-center gap-2"},Km={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Xm={class:"flex border-b border-gray-200"},Jm={key:1,class:"px-3 py-2.5"},Qm={key:1,class:"text-xs text-gray-500"},ep={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},tp={class:"flex gap-1.5"},np=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,a=e.ref([]),i=e.computed(()=>a.value.length>0),s=e.ref(!1),c=e.ref(!1),p=e.ref("general");function f(Z){p.value=Z,r("tab-change",Z)}e.onMounted(()=>{r("tab-change",p.value)});const k=e.computed(()=>a.value.length>=3&&!c.value);let l=1;const y=()=>a.value.map(Z=>({id:Z.id,coords:{...Z.coords}})),u=()=>{a.value.length<3&&c.value&&(c.value=!1,r("shape-closed-change",!1)),r("points-change",y())},m=()=>{const Z=l;return l+=1,Z},b=Z=>{a.value=[...a.value,{id:m(),coords:{lat:Z.lat,lng:Z.lng}}],u()},g=({id:Z,coords:P})=>{const ee=a.value.findIndex(le=>le.id===Z);if(ee===-1)return;const K=[...a.value];K[ee]={id:Z,coords:{...P}},a.value=K,u()},d=Z=>{a.value=a.value.filter(P=>P.id!==Z),u()},h=()=>{a.value=[],c.value&&(c.value=!1,r("shape-closed-change",!1)),u()},x=Z=>{g(Z)},N=Z=>{d(Z)},$=()=>{s.value=!0,r("add-request")},_=Z=>{b(Z),s.value=!1},w=()=>{s.value=!1},E=()=>{k.value&&(c.value=!0,r("complete"),r("shape-closed-change",!0))},B=Z=>{const P=(Z??[]).map(ee=>({id:ee.id??m(),coords:{...ee.coords}}));a.value=P,P.length===0?l=1:l=Math.max(...P.map(ee=>ee.id))+1,u()},z=()=>{h(),s.value=!1,r("close")};return n({addPoint:b,setPoints:B,clearPoints:h}),(Z,P)=>(e.openBlock(),e.createElementBlock("div",Wm,[e.createElementVNode("div",Ym,[e.createElementVNode("div",Gm,[e.createElementVNode("div",Zm,[e.createElementVNode("div",Km,[e.createVNode(e.unref(pe.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),P[2]||(P[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:z},[e.createVNode(e.unref(pe.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Xm,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",p.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:P[0]||(P[0]=ee=>f("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",p.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:P[1]||(P[1]=ee=>f("topoint"))}," До точки ",2)]),p.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[i.value?(e.openBlock(),e.createBlock(zm,{key:1,points:a.value,"is-shape-closed":c.value,onUpdatePoint:x,onDeletePoint:N},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(Pm,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",Jm,[i.value?(e.openBlock(),e.createBlock(Hm,{key:0,points:a.value,"is-shape-closed":c.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",Qm,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",ep,[e.createElementVNode("div",tp,[s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(pm,{key:0,onClick:$})),k.value?(e.openBlock(),e.createBlock(gm,{key:1,onClick:E})):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createBlock(mm,{key:0,onSubmit:_,onCancel:w})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(fm,{key:1,onClick:h})):e.createCommentVNode("",!0)])])]))}}),kt="ruler-points",Nt="ruler-line",Vt="ruler-polygon",Bt="ruler-segments",op=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(g,d){const h=E=>E*Math.PI/180,x=h(d.lat-g.lat),N=h(d.lng-g.lng),$=h(g.lat),_=h(d.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(x/2)**2+Math.cos($)*Math.cos(_)*Math.sin(N/2)**2)))}function o(g){return _r(g)}const r=t,{map:a,ready:i}=et();function s(){return{type:"FeatureCollection",features:[]}}function c(g,d,h){const x=h??"general",N=[];let $=0;N.push(0);for(let _=1;_<g.length;_++)$+=n(g[_-1].coords,g[_].coords),N.push($);return d&&g.length>=2&&($+=n(g[g.length-1].coords,g[0].coords)),{type:"FeatureCollection",features:g.map((_,w)=>{const E=x==="general"?w===0?"0":o(N[w]):w===0?"0":o(n(g[w-1].coords,g[w].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[_.coords.lng,_.coords.lat]},properties:{id:_.id,index:w+1,label:E}}})}}function p(g,d){if(g.length<2)return s();const h=[];for(let x=0;x<g.length;x++){const N=x===g.length-1&&d?0:x+1;if(N>=g.length)break;const $=g[x].coords,_=g[N].coords,w=n($,_);h.push({type:"Feature",geometry:{type:"LineString",coordinates:[[$.lng,$.lat],[_.lng,_.lat]]},properties:{distance:o(w)}})}return{type:"FeatureCollection",features:h}}function f(g,d){if(g.length<2)return s();const h=g.map(x=>[x.coords.lng,x.coords.lat]);return d&&h.push(h[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:h},properties:{}}]}}function k(g){if(g.length<3)return s();const d=g.map(h=>[h.coords.lng,h.coords.lat]);return d.push(d[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[d]},properties:{}}]}}let l=!1;function y(g){g.getSource(kt)||(g.addSource(kt,{type:"geojson",data:s()}),g.addLayer({id:`${kt}-circle`,type:"circle",source:kt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),g.addLayer({id:`${kt}-labels`,type:"symbol",source:kt,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}})),g.getSource(Bt)||(g.addSource(Bt,{type:"geojson",data:s()}),g.addLayer({id:`${Bt}-labels`,type:"symbol",source:Bt,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}})),g.getSource(Nt)||(g.addSource(Nt,{type:"geojson",data:s()}),g.addLayer({id:`${Nt}-layer`,type:"line",source:Nt,paint:{"line-color":"#3b82f6","line-width":2}})),g.getSource(Vt)||(g.addSource(Vt,{type:"geojson",data:s()}),g.addLayer({id:`${Vt}-layer`,type:"fill",source:Vt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),l=!0}function u(g){if(g){try{g.getLayer(`${Vt}-layer`)&&g.removeLayer(`${Vt}-layer`),g.getSource(Vt)&&g.removeSource(Vt),g.getLayer(`${Nt}-layer`)&&g.removeLayer(`${Nt}-layer`),g.getSource(Nt)&&g.removeSource(Nt),g.getLayer(`${Bt}-labels`)&&g.removeLayer(`${Bt}-labels`),g.getSource(Bt)&&g.removeSource(Bt),g.getLayer(`${kt}-labels`)&&g.removeLayer(`${kt}-labels`),g.getLayer(`${kt}-circle`)&&g.removeLayer(`${kt}-circle`),g.getSource(kt)&&g.removeSource(kt)}catch{}l=!1}}function m(g){if(!g)return;const d=g.getSource(kt),h=g.getSource(Nt),x=g.getSource(Vt),N=g.getSource(Bt),$=r.points,_=r.labelMode??"general";d&&d.setData(c($,r.isShapeClosed,_)),h&&h.setData(f($,r.isShapeClosed)),x&&x.setData(k($)),N&&N.setData(_==="topoint"?p($,r.isShapeClosed):s())}function b(){i().then(()=>{const g=a.value;g&&(l||y(g),m(g))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>b(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{i().then(()=>u(a.value))}),(g,d)=>null}}),rp={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},lp={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ap={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},sp={class:"flex items-center gap-2"},ip=["disabled"],cp={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},dp={class:"text-sm font-mono text-slate-700"},up={class:"flex items-center gap-2 shrink-0"},mp={key:0,class:"text-xs font-[100] text-gray-500"},pp=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,a=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),i=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),s=e.ref(!1);let c=null;function p(){if(o.position==null)return;const l=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(l).then(()=>{s.value=!0,c&&clearTimeout(c),c=setTimeout(()=>{s.value=!1,c=null},600)})}function f(){r("close")}function k(){o.position!=null&&r("recenter")}return(l,y)=>(e.openBlock(),e.createElementBlock("div",rp,[e.createElementVNode("div",lp,[e.createElementVNode("div",ap,[e.createElementVNode("div",sp,[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:k},[e.createVNode(e.unref(pe.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,ip),y[0]||(y[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:f},[e.createVNode(e.unref(pe.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",cp,[e.createElementVNode("div",null,[y[4]||(y[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",dp,[y[1]||(y[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(a.value)+" ",1),y[2]||(y[2]=e.createElementVNode("br",null,null,-1)),y[3]||(y[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(i.value),1)])]),e.createElementVNode("div",up,[s.value?(e.openBlock(),e.createElementBlock("span",mp," Скопійовано! ")):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:p},[e.createVNode(e.unref(pe.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),$t="geolocation-marker",fp=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=et();let a=!1;function i(){return{type:"FeatureCollection",features:[]}}function s(l){return{type:"Feature",geometry:{type:"Point",coordinates:[l.lng,l.lat]},properties:{}}}function c(l){l.getSource($t)||(l.addSource($t,{type:"geojson",data:i()}),l.addLayer({id:`${$t}-circle`,type:"circle",source:$t,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),a=!0)}function p(l){try{l.getLayer(`${$t}-circle`)&&l.removeLayer(`${$t}-circle`),l.getSource($t)&&l.removeSource($t)}catch{}a=!1}function f(l){const y=l.getSource($t);if(y){if(n.position==null){y.setData(i());return}y.setData({type:"FeatureCollection",features:[s(n.position)]})}}function k(){r().then(()=>{const l=o.value;if(l){if(n.position==null){a&&p(l);return}a||c(l),f(l)}})}return e.watch(()=>n.position,()=>k(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>p(o.value))}),(l,y)=>null}}),gp={class:"animate-slide-up"},yp={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},hp={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},bp={class:"flex items-center gap-2"},xp={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},kp={class:"px-3 py-2.5 border-b border-gray-200"},wp={class:"flex gap-1 flex-nowrap"},_p=["title","onClick"],Ep={class:"px-3 py-2.5 border-b border-gray-200"},Cp={class:"flex items-center gap-4"},Np={class:"flex items-center gap-2 cursor-pointer shrink-0"},Vp={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},Bp={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},$p={class:"flex items-center gap-1.5"},Sp=Ne(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,a=[{id:"pen",icon:pe.Pen,title:"Олівець"},{id:"line",icon:pe.Minus,title:"Лінія"},{id:"rect",icon:pe.Square,title:"Прямокутник"},{id:"circle",icon:pe.Circle,title:"Коло"},{id:"polygon",icon:pe.Pentagon,title:"Полігон"},{id:"paint",icon:pe.PaintBucket,title:"Балончик"},{id:"eraser",icon:pe.Eraser,title:"Стирачка"}],i=e.ref("pen"),s=e.ref("#2563eb"),c=e.ref(3),p=()=>r("update:stroke-color",s.value),f=()=>r("update:stroke-width",c.value);e.watch(i,b=>r("update:tool",b)),e.watch(s,b=>r("update:stroke-color",b)),e.watch(c,b=>r("update:stroke-width",b));function k(){r("close")}function l(){r("undo")}function y(){r("finish-polygon")}function u(){r("clear")}function m(){r("download")}return n({tool:i,strokeColor:s,strokeWidth:c}),(b,g)=>(e.openBlock(),e.createElementBlock("div",gp,[e.createElementVNode("div",yp,[e.createElementVNode("div",hp,[e.createElementVNode("div",bp,[e.createElementVNode("div",xp,[e.createVNode(e.unref(pe.Pen),{size:14,"stroke-width":2,class:"text-white"})]),g[2]||(g[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:k},[e.createVNode(e.unref(pe.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",kp,[g[3]||(g[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",wp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,d=>e.createElementVNode("button",{key:d.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",i.value===d.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:d.title,onClick:h=>i.value=d.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.icon),{size:16,"stroke-width":2}))],10,_p)),64))])]),e.createElementVNode("section",Ep,[g[6]||(g[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",Cp,[e.createElementVNode("label",Np,[g[4]||(g[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=d=>s.value=d),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:p},null,544),[[e.vModelText,s.value]])]),e.createElementVNode("label",Vp,[g[5]||(g[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[1]||(g[1]=d=>c.value=d),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:f},null,544),[[e.vModelText,c.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",Bp,[e.createElementVNode("div",$p,[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:l},[e.createVNode(e.unref(pe.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:u},[e.createVNode(e.unref(pe.Trash2),{size:14,"stroke-width":2}),g[7]||(g[7]=e.createTextVNode(" Очистити ",-1))])]),i.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:y},[e.createVNode(e.unref(pe.Pentagon),{size:14,"stroke-width":2}),g[8]||(g[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:m},[e.createVNode(e.unref(pe.Download),{size:14,"stroke-width":2}),g[9]||(g[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),vp=Ne(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),a=e.ref(null),i=e.ref({x:0,y:0}),s=e.ref(!1),c=t,p=e.computed(()=>Math.max(c.strokeWidth*3,12)),f=e.computed(()=>{const S=p.value*2;return{width:`${S}px`,height:`${S}px`,left:`${i.value.x}px`,top:`${i.value.y}px`,marginLeft:`-${p.value}px`,marginTop:`-${p.value}px`}}),{ready:k}=et(),l=e.ref(!1),y=e.ref([]),u=e.ref([]);let m=0,b=0,g=0,d=0,h=null;function x(){const S=r.value,R=a.value,Q=o.value;if(!S||!Q)return;const ue=Q.parentElement;if(!ue)return;const fe=ue.clientWidth,se=ue.clientHeight;if(fe<=0||se<=0)return;const v=window.devicePixelRatio||1;S.width=fe*v,S.height=se*v,S.style.width=`${fe}px`,S.style.height=`${se}px`;const A=S.getContext("2d");if(A&&A.scale(v,v),R){R.width=fe*v,R.height=se*v,R.style.width=`${fe}px`,R.style.height=`${se}px`;const O=R.getContext("2d");O&&O.scale(v,v)}}function N(S){const R=r.value;if(!R)return{x:0,y:0};const Q=R.getBoundingClientRect();return{x:S.clientX-Q.left,y:S.clientY-Q.top}}function $(){const S=r.value;return S?S.getContext("2d"):null}function _(){const S=a.value;return S?S.getContext("2d"):null}function w(){const S=a.value;if(!S)return;const R=window.devicePixelRatio||1,Q=S.getContext("2d");Q&&Q.clearRect(0,0,S.width/R,S.height/R)}function E(){const S=_();if(S){if(w(),S.globalCompositeOperation="source-over",S.strokeStyle=c.strokeColor,S.lineWidth=c.strokeWidth,S.lineCap="round",S.lineJoin="round",c.tool==="line")S.beginPath(),S.moveTo(m,b),S.lineTo(g,d),S.stroke();else if(c.tool==="rect"){const R=Math.min(m,g),Q=Math.min(b,d),ue=Math.abs(g-m),fe=Math.abs(d-b);S.strokeRect(R,Q,ue,fe)}else if(c.tool==="circle"){const R=Math.sqrt((g-m)**2+(d-b)**2);S.beginPath(),S.arc(m,b,Math.max(R,1),0,2*Math.PI),S.stroke()}else if(c.tool==="polygon"&&y.value.length>0){const R=y.value;S.beginPath(),S.moveTo(R[0].x,R[0].y);for(let Q=1;Q<R.length;Q++)S.lineTo(R[Q].x,R[Q].y);S.lineTo(g,d),S.stroke()}}}function B(S){S.strokeStyle=c.strokeColor,S.lineWidth=c.strokeWidth,S.lineCap="round",S.lineJoin="round"}function z(){const S=r.value;if(!S)return;const R=S.getContext("2d");if(!R)return;const Q=R.getImageData(0,0,S.width,S.height);u.value=[...u.value.slice(-19),Q]}function Z(S){if(!r.value)return;const{x:R,y:Q}=N(S);m=R,b=Q,g=R,d=Q;const ue=$();if(ue){if(c.tool==="pen"||c.tool==="eraser"){z(),l.value=!0,c.tool==="eraser"?(ue.globalCompositeOperation="destination-out",ue.lineWidth=Math.max(c.strokeWidth*3,12)):(ue.globalCompositeOperation="source-over",B(ue)),ue.beginPath(),ue.moveTo(R,Q);return}if(c.tool==="paint"){z(),l.value=!0,ue.globalCompositeOperation="source-over",ue.fillStyle=c.strokeColor,le(ue,R,Q);return}if(c.tool==="line"||c.tool==="rect"||c.tool==="circle"){z(),l.value=!0;return}if(c.tool==="polygon"){y.value=[...y.value,{x:R,y:Q}],g=R,d=Q,E();return}}}function P(S){const{x:R,y:Q}=N(S);g=R,d=Q,c.tool==="eraser"&&(i.value={x:S.clientX,y:S.clientY},s.value=!0);const ue=$();if(ue){if(c.tool==="pen"&&l.value){ue.globalCompositeOperation="source-over",B(ue),ue.lineTo(R,Q),ue.stroke();return}if(c.tool==="eraser"&&l.value){ue.globalCompositeOperation="destination-out",ue.lineWidth=Math.max(c.strokeWidth*3,12),ue.lineTo(R,Q),ue.stroke();return}if(c.tool==="paint"&&l.value){ue.globalCompositeOperation="source-over",ue.fillStyle=c.strokeColor,le(ue,R,Q);return}l.value&&(c.tool==="line"||c.tool==="rect"||c.tool==="circle")&&E(),c.tool==="polygon"&&y.value.length>0&&E()}}function ee(){s.value=!1}function K(){c.tool==="polygon"&&G()}function le(S,R,Q){const ue=Math.max(c.strokeWidth*2.5,8),fe=12+Math.floor(c.strokeWidth);for(let se=0;se<fe;se++){const v=Math.random()*2*Math.PI,A=ue*Math.random(),O=R+Math.cos(v)*A,F=Q+Math.sin(v)*A,Y=1+Math.random()*2;S.beginPath(),S.arc(O,F,Y,0,2*Math.PI),S.fill()}}function J(){if(!l.value)return;const S=$();if(!S){l.value=!1;return}if(c.tool==="paint"){w(),l.value=!1,S.globalCompositeOperation="source-over";return}if(c.tool==="line")S.globalCompositeOperation="source-over",B(S),S.beginPath(),S.moveTo(m,b),S.lineTo(g,d),S.stroke();else if(c.tool==="rect"){S.globalCompositeOperation="source-over",B(S);const R=Math.min(m,g),Q=Math.min(b,d),ue=Math.abs(g-m),fe=Math.abs(d-b);S.strokeRect(R,Q,ue,fe)}else if(c.tool==="circle"){S.globalCompositeOperation="source-over",B(S);const R=Math.sqrt((g-m)**2+(d-b)**2);S.beginPath(),S.arc(m,b,Math.max(R,1),0,2*Math.PI),S.stroke()}w(),l.value=!1,S.globalCompositeOperation="source-over"}function G(){const S=$(),R=y.value;if(!S||R.length<2){y.value=[],w();return}z(),S.globalCompositeOperation="source-over",B(S),S.beginPath(),S.moveTo(R[0].x,R[0].y);for(let Q=1;Q<R.length;Q++)S.lineTo(R[Q].x,R[Q].y);S.closePath(),S.stroke(),y.value=[],w(),S.globalCompositeOperation="source-over"}function M(){const S=r.value;if(!S||u.value.length===0)return;const R=S.getContext("2d");if(!R)return;const Q=u.value[u.value.length-1];u.value=u.value.slice(0,-1),R.putImageData(Q,0,0)}function j(){const S=r.value;if(!S)return;const R=S.getContext("2d");if(!R)return;const Q=window.devicePixelRatio||1;R.clearRect(0,0,S.width/Q,S.height/Q),y.value=[],u.value=[],w()}function I(){return r.value}return e.watch(()=>c.tool,(S,R)=>{R==="polygon"&&S!=="polygon"&&(y.value=[],w())}),e.onMounted(()=>{k().then(()=>{var R;x();const S=(R=o.value)==null?void 0:R.parentElement;S&&typeof ResizeObserver<"u"&&(h=new ResizeObserver(x),h.observe(S))})}),e.onBeforeUnmount(()=>{h==null||h.disconnect(),h=null}),n({clear:j,getCanvas:I,finishPolygon:G,undo:M,canUndo:()=>u.value.length>0}),(S,R)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:Z,onMousemove:P,onMouseup:J,onDblclick:K,onMouseleave:R[0]||(R[0]=()=>{ee(),J()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:a,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(f.value)},null,4),[[e.vShow,t.tool==="eraser"&&s.value]])],34))}}),[["__scopeId","data-v-ed2688bc"]]),Lp={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"},Tp={class:"flex items-center justify-between px-6 py-4 border-b border-slate-200"},Ap={class:"grid grid-cols-1 lg:grid-cols-2 min-h-0 flex-1"},Mp={class:"px-6 py-5 border-b lg:border-b-0 lg:border-r border-slate-200 overflow-y-auto"},Dp={class:"block mb-4"},Fp={class:"block mb-4"},zp={key:0,class:"mb-4"},Ip={key:1,class:"mb-4"},jp={class:"block mb-4"},Pp={class:"relative"},Rp={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"},Op=["onMousedown"],Up={key:0,class:"px-3 py-2 text-sm text-slate-500"},qp={key:1,class:"px-3 py-2 text-sm text-slate-500"},Hp={class:"flex flex-col items-center text-center gap-3 px-4 py-8"},Wp={class:"w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center"},Yp={class:"text-sm text-slate-600 leading-relaxed"},Gp={key:0,class:"text-sm font-medium text-slate-700"},Zp=["accept"],Kp={key:2,class:"mb-4 text-sm text-red-600"},Xp={class:"flex items-center gap-3"},Jp=["disabled"],Qp=["disabled"],ef={class:"px-6 py-5 bg-slate-50 overflow-y-auto flex flex-col justify-center"},tf={class:"rounded-xl border border-slate-200 bg-white p-4 space-y-2"},nf={class:"text-sm text-slate-700"},of={class:"text-sm text-slate-700"},rf={key:0,class:"text-sm text-slate-700"},lf={class:"text-sm text-slate-500 leading-relaxed"},No="client-layer-preview",On="add-data-preview",Er="add-data",Un="4326",af=Ne(e.defineComponent({name:"MapAddDataPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=et(),{registerClientLayer:a}=xo(),{activateTemporaryLayer:i,deactivateTemporaryLayer:s,clearTemporaryLayers:c}=cn(r.map),p=e.ref("file"),f=tc,k=ir(),l=e.ref(""),y=e.ref(""),u=e.ref(null),m=e.ref(Un),b=e.ref("EPSG:4326"),g=e.ref([{id:Un,text:"EPSG:4326"}]),d=e.ref(null),h=e.ref(""),x=e.ref(!1),N=e.ref(!1),$=e.ref(!1),_=e.ref(!1),w=e.ref(null);let E=null;const B=e.computed(()=>l.value.trim()?p.value==="geometry"?!!y.value.trim():!!(u.value&&m.value):!1),z=e.computed(()=>B.value),Z=e.computed(()=>{if(!d.value)return null;const v=Array.isArray(d.value.features)?d.value.features:[],A=[...new Set(v.map(Y=>{var ce;return(ce=Y==null?void 0:Y.geometry)==null?void 0:ce.type}).filter(Boolean))].join(", ")||"—",O=ho(d.value),F=O?`${O[0][1].toFixed(5)}, ${O[0][0].toFixed(5)} — ${O[1][1].toFixed(5)}, ${O[1][0].toFixed(5)}`:null;return{featureCount:v.length,geometryTypes:A,boundsText:F}});function P(v){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:v}))}function ee(){s(No,On),P({action:"deactivate",owner:On,spec:{id:No}})}function K(v){const A={id:No,title:l.value.trim()||"Попередній перегляд",type:"geojson",data:v};i(A,{},On),P({action:"activate",owner:On,spec:A});const O=ho(v);O&&r.fitBounds&&r.fitBounds(O,{padding:48,duration:600})}function le(v){if(!v||typeof v!="object")return null;const A=v,O=A.id??A.srid??A.code??A.value;if(O==null||O==="")return null;const F=String(O),Y=A.text??A.name??A.title??A.label,ce=Y?String(Y):`EPSG:${F}`;return{id:F,text:ce.includes(F)?ce:`${ce} (${F})`}}async function J(v="",A=!1){try{$.value=!0;const O=v.trim(),F=O?`/api/suggest/srid?key=${encodeURIComponent(O)}`:"/api/suggest/srid",Y=await fetch(F);if(!Y.ok){g.value=[];return}const ce=await Y.json(),ge=(Array.isArray(ce==null?void 0:ce.data)?ce.data:Array.isArray(ce)?ce:[]).map(le).filter(Boolean);if(ge.length){if(g.value=ge,A){const we=ge.find(Se=>Se.id===Un)||ge[0];G(we,!1)}return}g.value=[]}catch(O){console.error("Failed to load SRID classifier:",O)}finally{$.value=!1}}function G(v,A=!0){m.value=v.id,b.value=v.text,A&&(N.value=!1)}function M(){const v=b.value.trim(),A=g.value.find(O=>O.id===m.value);(!A||v!==A.id&&v!==A.text)&&(m.value=""),N.value=!0,E&&clearTimeout(E),E=setTimeout(()=>{J(v)},300)}function j(){setTimeout(()=>{N.value=!1},150)}function I(v){var O;const A=[v,v==null?void 0:v.data,v==null?void 0:v.result,v==null?void 0:v.geojson];for(const F of A){const Y=lr(F);if((O=Y==null?void 0:Y.features)!=null&&O.length)return Y}return null}async function S(){var O,F;if(h.value="",p.value==="geometry"){let Y;try{Y=JSON.parse(y.value.trim())}catch{throw new Error("Некоректний JSON у полі геометрії")}const ce=lr(Y);if(!((O=ce==null?void 0:ce.features)!=null&&O.length))throw new Error("Не вдалося розпізнати геометрію GeoJSON");return ce}if(!u.value)throw new Error(`Оберіть файл (${k})`);const v=await rc(u.value,m.value),A=I(v);if(!((F=A==null?void 0:A.features)!=null&&F.length))throw new Error("Не вдалося розпізнати геометрію у файлі");return A}async function R(){x.value=!0,h.value="";try{const v=await S();d.value=v,ee(),K(v)}catch(v){d.value=null,ee(),h.value=(v==null?void 0:v.message)||"Не вдалося підготувати попередній перегляд"}finally{x.value=!1}}async function Q(){if(!d.value&&(await R(),!d.value))return;const v=`client-layer-${Date.now()}`,A={id:v,title:l.value.trim(),type:"geojson",data:d.value};ee(),i(A,{},Er),P({action:"activate",owner:Er,spec:A});const O=ho(d.value),F=l.value.trim();a({id:v,name:F,bounds:O,data:d.value}),window.dispatchEvent(new CustomEvent(dn,{detail:{id:v,name:F,bounds:O}})),O&&r.fitBounds&&r.fitBounds(O,{padding:48,duration:600}),o("close")}function ue(v){if(!v){u.value=null;return}if(!sr(v)){h.value=`Підтримуються формати: ${k}`,u.value=null,d.value=null,ee();return}u.value=v,d.value=null,ee(),h.value=""}function fe(v){var O;const A=v.target;ue(((O=A.files)==null?void 0:O[0])||null)}function se(v){var A,O;_.value=!1,ue(((O=(A=v.dataTransfer)==null?void 0:A.files)==null?void 0:O[0])||null)}return e.watch(p,()=>{d.value=null,h.value="",ee()}),e.onMounted(()=>{J(Un,!0)}),e.onBeforeUnmount(()=>{E&&clearTimeout(E),ee()}),(v,A)=>(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:A[9]||(A[9]=e.withModifiers(O=>o("close"),["self"]))},[e.createElementVNode("div",Lp,[e.createElementVNode("div",Tp,[A[10]||(A[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:A[0]||(A[0]=O=>o("close"))},[e.createVNode(e.unref(pe.X),{size:18})])]),e.createElementVNode("div",Ap,[e.createElementVNode("div",Mp,[e.createElementVNode("label",Dp,[A[12]||(A[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":A[1]||(A[1]=O=>p.value=O),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"},[...A[11]||(A[11]=[e.createElementVNode("option",{value:"file"},"Файл",-1),e.createElementVNode("option",{value:"geometry"},"Геометрія",-1)])],512),[[e.vModelSelect,p.value]])]),e.createElementVNode("label",Fp,[A[13]||(A[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":A[2]||(A[2]=O=>l.value=O),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,l.value]])]),p.value==="geometry"?(e.openBlock(),e.createElementBlock("div",zp,[A[14]||(A[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":A[3]||(A[3]=O=>y.value=O),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,y.value]]),A[15]||(A[15]=e.createElementVNode("p",{class:"mt-1.5 text-xs text-slate-500"}," Вставте GeoJSON-геометрію, Feature або FeatureCollection. ",-1))])):(e.openBlock(),e.createElementBlock("div",Ip,[e.createElementVNode("label",jp,[A[16]||(A[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",Pp,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":A[4]||(A[4]=O=>b.value=O),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:A[5]||(A[5]=O=>N.value=!0),onInput:M,onBlur:j},null,544),[[e.vModelText,b.value]]),N.value?(e.openBlock(),e.createElementBlock("div",Rp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,O=>(e.openBlock(),e.createElementBlock("button",{key:O.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(F=>G(O),["prevent"])},e.toDisplayString(O.text),41,Op))),128)),!g.value.length&&!$.value?(e.openBlock(),e.createElementBlock("p",Up," Нічого не знайдено ")):e.createCommentVNode("",!0),$.value?(e.openBlock(),e.createElementBlock("p",qp," Пошук... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["add-data-modal__dropzone",{"add-data-modal__dropzone--active":_.value}]),onDragover:A[6]||(A[6]=e.withModifiers(O=>_.value=!0,["prevent"])),onDragleave:A[7]||(A[7]=e.withModifiers(O=>_.value=!1,["prevent"])),onDrop:e.withModifiers(se,["prevent"]),onClick:A[8]||(A[8]=O=>{var F;return(F=w.value)==null?void 0:F.click()})},[e.createElementVNode("div",Hp,[e.createElementVNode("div",Wp,[e.createVNode(e.unref(pe.Upload),{size:22})]),e.createElementVNode("p",Yp," Ви можете підключити власний файл у форматах "+e.toDisplayString(e.unref(k))+". Для цього перетягніть файл зі свого сховища у цю область або завантажте з комп'ютера ",1),A[17]||(A[17]=e.createElementVNode("p",{class:"text-xs text-slate-400"},"Максимальний розмір: 50MB",-1)),u.value?(e.openBlock(),e.createElementBlock("p",Gp,e.toDisplayString(u.value.name),1)):e.createCommentVNode("",!0)]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:w,type:"file",accept:e.unref(f),class:"hidden",onChange:fe},null,40,Zp)],34)])),h.value?(e.openBlock(),e.createElementBlock("p",Kp,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Xp,[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:!z.value||x.value,onClick:Q}," Додати ",8,Jp),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:!B.value||x.value,onClick:R}," Попередній перегляд ",8,Qp)])]),e.createElementVNode("div",ef,[Z.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[A[21]||(A[21]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Попередній перегляд ",-1)),e.createElementVNode("div",tf,[e.createElementVNode("p",nf,[A[18]||(A[18]=e.createElementVNode("span",{class:"font-medium"},"Об'єктів:",-1)),e.createTextVNode(" "+e.toDisplayString(Z.value.featureCount),1)]),e.createElementVNode("p",of,[A[19]||(A[19]=e.createElementVNode("span",{class:"font-medium"},"Тип:",-1)),e.createTextVNode(" "+e.toDisplayString(Z.value.geometryTypes),1)]),Z.value.boundsText?(e.openBlock(),e.createElementBlock("p",rf,[A[20]||(A[20]=e.createElementVNode("span",{class:"font-medium"},"Межі:",-1)),e.createTextVNode(" "+e.toDisplayString(Z.value.boundsText),1)])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[A[22]||(A[22]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Немає даних для попереднього перегляду ",-1)),e.createElementVNode("p",lf,[p.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"]]),Cr=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var y,u;const n=t,o=((u=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:u.$settings)||null,{map:r,ready:a}=et();let i=null;function s(){i==null||i.remove(),i=null}function c(m){if(!m)return null;if(typeof m=="string")try{m=JSON.parse(m)}catch{return null}return m.type==="FeatureCollection"?m:m.type==="Feature"?{type:"FeatureCollection",features:[m]}:m.type&&Array.isArray(m.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:m,properties:{}}]}:Array.isArray(m.features)?{type:"FeatureCollection",features:m.features}:m.geometry?c(m.geometry):null}function p(m){var d,h,x;return{type:"line",color:"#8e4484",width:2,opacity:((((x=(h=(d=m==null?void 0:m.features)==null?void 0:d[0])==null?void 0:h.geometry)==null?void 0:x.type)||"").includes("Polygon"),.95)}}async function f(m){const b=await fetch(m);if(!b.ok)throw new Error(String(b.status));return b.json()}async function k(m,b){if(m){const g=/^https?:\/\//.test(m)?m:new URL(m,location.origin).toString(),d=await f(g).catch(()=>null),h=c(d);if(h)return h}if(b){const g=await f(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(b)}`).catch(()=>null),d=c(g);if(d)return d}return null}async function l(){var d,h,x,N;if(!n.layerId||!r.value){s();return}typeof a=="function"&&await a().catch(()=>{});const m=n.boundary??((d=n.settingsMap)==null?void 0:d.boundary)??((h=o==null?void 0:o.map)==null?void 0:h.boundary)??null,b=n.katottg??((x=n.settingsMap)==null?void 0:x.katottg)??((N=o==null?void 0:o.map)==null?void 0:N.katottg)??null;if(!m&&!b){s();return}const g=await k(m,b);if(!g){s();return}s(),i=Me(`${n.layerId}-boundary`,{source:{type:"geojson",data:g},style:p(g)},r)}return e.watch(()=>{var m,b;return[n.layerId,n.boundary,n.katottg,(m=n.settingsMap)==null?void 0:m.boundary,(b=n.settingsMap)==null?void 0:b.katottg,r.value]},()=>{l()},{immediate:!0}),e.onBeforeUnmount(s),(m,b)=>null}}),sf={key:2,class:"absolute bottom-16 right-4 z-[100] pointer-events-auto"},cf={key:3,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2 pointer-events-auto"},df={class:"absolute top-[103px] right-[6.5px] z-[100] flex flex-col items-end gap-1 pointer-events-auto"},uf=["aria-label","disabled"],mf={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"},pf=["aria-label"],ff={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"},gf=["aria-label"],yf={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"},hf=["aria-label"],bf={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"},xf={class:"map-widget__overlay-grid"},kf={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},wf={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},_f={class:"map-widget__stack"},Ef={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Cf={class:"map-widget__stack map-widget__stack--bottom"},Nf={key:0,class:"map-widget__state"},Vf={key:1,class:"map-widget__state map-widget__state--error"},qn=Ne(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var oo,ro,lo,ao;const n=t;console.log("props.data",n.data);const o=Ie.useRoute(),r=Ie.useRouter(),a=e.ref(null),i=e.ref({}),s=e.ref(null),c=e.ref(!1),p=e.ref(null),f=e.ref(!1),k=e.ref([]),{resolveMapLegendItems:l}=hr(),y=e.ref(null),u=e.computed(()=>y.value==="ruler"),m=e.computed(()=>y.value==="draw"),b=e.computed(()=>y.value==="geolocation"),g=e.computed(()=>y.value==="add-data"),d=e.ref("general"),h=e.ref(null),x=e.ref(null),N=e.ref(null),$=e.ref("pen"),_=e.ref("#2563eb"),w=e.ref(3),E=e.ref([]),B=e.ref(!1),z=e.ref(null),Z=e.ref(!1),P=e.ref(null),ee=e.computed(()=>n.id||"main"),K=e.computed(()=>{var H,oe;return{height:((H=n.height)==null?void 0:H.trim())||((oe=i.value)==null?void 0:oe.height)||"calc(100vh - 65px)"}}),le=e.computed(()=>{var H;return((H=i.value)==null?void 0:H.name)??null}),J=e.computed(()=>{var H;return((H=i.value)==null?void 0:H.description)??null}),G=e.computed(()=>{var H;return Y((H=i.value)==null?void 0:H.maps)}),M=e.computed(()=>{var oe,Ce;const H=((oe=i.value)==null?void 0:oe.minZoom)??((Ce=i.value)==null?void 0:Ce.minzoom)??null;return typeof H=="number"?H:null}),j=e.computed(()=>{var oe,Ce;const H=((oe=i.value)==null?void 0:oe.maxZoom)??((Ce=i.value)==null?void 0:Ce.maxzoom)??null;return typeof H=="number"?H:typeof n.maxZoom=="number"?n.maxZoom:20}),I=e.ref(null),S=e.computed(()=>{if(!I.value)return null;const{lng:H,lat:oe}=I.value;return`${oe.toFixed(6)}, ${H.toFixed(6)}`}),R=e.computed(()=>{var H;return((H=a.value)==null?void 0:H.ctx)??null}),Q=e.computed(()=>{var H;return((H=i.value)==null?void 0:H.minimap)??null});function ue(H){if(!H||typeof H!="object")return H;const oe=Ft(H.center);return oe?{...H,center:oe}:H}const fe=((ro=(oo=e.getCurrentInstance())==null?void 0:oo.appContext.config.globalProperties)==null?void 0:ro.$settings)||null;function se(H){if(H==null)return null;const oe=Number(typeof H=="string"?H.trim():H);return Number.isFinite(oe)?oe:null}const v=Ft((lo=fe==null?void 0:fe.map)==null?void 0:lo.center),A=se((ao=fe==null?void 0:fe.map)==null?void 0:ao.zoom),O=e.computed(()=>{const H=(fe==null?void 0:fe.map)||null,oe=(H==null?void 0:H.boundary)??null,Ce=(H==null?void 0:H.katottg)??null;return!oe&&!Ce?null:{boundary:oe,katottg:Ce}});function F(H){return typeof H=="string"&&H.trim()?H.trim().toLowerCase():"top-left"}function Y(H){return Array.isArray(H)?H:H&&typeof H=="object"?Object.values(H).filter(Boolean):[]}const ce=e.computed(()=>{var H;return Y((H=i.value)==null?void 0:H.widgets)}),me=e.computed(()=>ce.value.some(H=>(H==null?void 0:H.type)==="catalog"));function ge(H){return l(H,{hasCatalogWidget:me.value})}const we=e.computed(()=>ce.value.some(H=>(H==null?void 0:H.type)==="basemaps")),Se=["left","right"],We=e.computed(()=>{const H={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},oe={"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 ce.value.forEach(Ce=>{const Te=F(Ce.position),he=oe[Te]??{side:"left",align:"top"};H[he.side][he.align].push(Ce)}),H});function Ze(H){return Array.isArray(H)?H[0]??null:typeof H=="string"?H:null}async function Oe(){var oe;await e.nextTick();const H=(oe=a.value)==null?void 0:oe.ctx;return H?(H.ready&&await H.ready(),H):null}function at(){var H,oe,Ce;return((Ce=(oe=(H=a.value)==null?void 0:H.ctx)==null?void 0:oe.map)==null?void 0:Ce.value)??null}function ne(){const H=at();if(!H)return null;const oe=H.getCenter();return{z:H.getZoom().toFixed(2),x:oe.lng.toFixed(5),y:oe.lat.toFixed(5)}}async function re(){var Ce;const H=await Oe(),oe=(Ce=H==null?void 0:H.map)==null?void 0:Ce.value;oe&&(typeof M.value=="number"&&oe.setMinZoom(M.value),typeof j.value=="number"&&oe.setMaxZoom(j.value))}async function Ee(){var he;if(s.value)return;const H=await Oe(),oe=(he=H==null?void 0:H.map)==null?void 0:he.value;if(!oe)return;const Ce=oe.getCenter(),Te=oe.getZoom();s.value={center:[Ce.lng,Ce.lat],zoom:Te}}function Ue(){if(nt.value)return;const H=ne();if(!H)return;const oe=Ze(o.query.x),Ce=Ze(o.query.y),Te=Ze(o.query.z);oe===H.x&&Ce===H.y&&Te===H.z||(W.value=H,r.replace({query:{...o.query,...H}}).catch(()=>{}))}function He(H,oe,Ce=1e-6){return Math.abs(H-oe)<=Ce}async function ve(){var qe;if(V())return;const H=await Oe(),oe=(qe=H==null?void 0:H.map)==null?void 0:qe.value;if(!H||!oe)return;const Ce=parseFloat(Ze(o.query.x)??""),Te=parseFloat(Ze(o.query.y)??""),he=parseFloat(Ze(o.query.z)??""),je=!Number.isNaN(Ce),De=!Number.isNaN(Te),xe=!Number.isNaN(he);let ze=!1;nt.value=!0;try{if(je&&De){const Pe=oe.getCenter();(!He(Pe.lng,Ce)||!He(Pe.lat,Te))&&(oe.setCenter([Ce,Te]),ze=!0)}if(xe){const Pe=oe.getZoom();He(Pe,he,.001)||(oe.setZoom(he),ze=!0)}(!je||!De||!xe||ze)&&Ue()}finally{nt.value=!1}}let Ge=null,Ae=null;const nt=e.ref(!1),W=e.ref(null);function V(){const H=W.value;if(!H)return!1;const oe=Ze(o.query.x),Ce=Ze(o.query.y),Te=Ze(o.query.z);return oe===H.x&&Ce===H.y&&Te===H.z?(W.value=null,!0):!1}function D(H){const oe=H==null?void 0:H.lngLat;oe&&(I.value={lng:oe.lng,lat:oe.lat})}let te=null;function T(H){typeof window>"u"||window.dispatchEvent(new CustomEvent(zn,{detail:H}))}function U(H){if(!H)return null;if(typeof H=="string")try{return JSON.parse(H)}catch{return null}return H}async function q(H){const oe=await fetch(`/api/map-format?${H.toString()}`);if(!oe.ok)throw new Error(`API returned ${oe.status}`);return oe.json()}function ie(){const H=at();return H?Object.entries(Me()).filter(([,oe])=>{var Pe,Je,tt,Ye,pt,st,Fe;const Ce=(Je=(Pe=oe==null?void 0:oe.opts)==null?void 0:Pe.source)==null?void 0:Je.type,Te=(Ye=(tt=oe==null?void 0:oe.opts)==null?void 0:tt.layer)==null?void 0:Ye.type,he=(((pt=oe==null?void 0:oe.opts)==null?void 0:pt.service)||"").toString().toLowerCase(),je=Array.isArray(oe==null?void 0:oe.card)?oe.card.length>0:!!(oe!=null&&oe.card),De=Array.isArray(oe==null?void 0:oe.popup)?oe.popup.length>0:!!(oe!=null&&oe.popup),xe=(st=oe==null?void 0:oe.ids)==null?void 0:st.sourceId;if(Ce!=="raster"&&Te!=="raster"||he!=="cartocss"&&!je&&!De||!xe||!H.getSource(xe))return!1;const qe=(((Fe=H.getStyle())==null?void 0:Fe.layers)||[]).filter(wt=>wt.source===xe);return qe.length?qe.some(wt=>{try{return H.getLayoutProperty(wt.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([oe])=>oe):[]}function de(H){const oe=at();return oe?(oe.queryRenderedFeatures(H==null?void 0:H.point)||[]).filter(Te=>{var xe,ze,qe,Pe,Je;if(!((xe=Te==null?void 0:Te.properties)!=null&&xe.id))return!1;const he=Me(Te.source);if(!he)return!1;const je=(qe=(ze=he==null?void 0:he.opts)==null?void 0:ze.source)==null?void 0:qe.type,De=(Je=(Pe=he==null?void 0:he.opts)==null?void 0:Pe.layer)==null?void 0:Je.type;return je!=="raster"&&De!=="raster"}):[]}async function ke(H){var je,De,xe,ze,qe;const oe=(je=H==null?void 0:H.lngLat)==null?void 0:je.lng,Ce=(De=H==null?void 0:H.lngLat)==null?void 0:De.lat;if(typeof oe!="number"||typeof Ce!="number")return[];const Te=ie();if(!Te.length)return[];const he=[];for(let Pe=0;Pe<Te.length;Pe+=1){const Je=Te[Pe],tt=new URLSearchParams({layer:Je,lat:Ce.toFixed(6),lng:oe.toFixed(6)});try{const Ye=await q(tt),pt=U(((xe=Ye==null?void 0:Ye.data)==null?void 0:xe.geom)??(Ye==null?void 0:Ye.geom)??null),st=((ze=Ye==null?void 0:Ye.data)==null?void 0:ze.id)??(Ye==null?void 0:Ye.id);if(st!=null){const Fe=await q(new URLSearchParams({layer:Je,id:String(st)})),wt=typeof(Fe==null?void 0:Fe.html)=="string"?Fe.html:null,ln=U(((qe=Fe==null?void 0:Fe.data)==null?void 0:qe.geom)??(Fe==null?void 0:Fe.geom)??null);if(wt||ln){he.push({html:wt,geometry:ln??pt,infoToken:`external:${Je},${String(st)}`});continue}}fr({html:Ye==null?void 0:Ye.html})&&he.push({html:Ye.html,geometry:pt,infoToken:null})}catch{}}return he}async function Be(H){var he;const oe=H==null?void 0:H.lngLat;k.value.includes("ruler")&&u.value&&oe&&((he=h.value)==null||he.addPoint({lat:oe.lat,lng:oe.lng}));const Ce=de(H),Te=await ke(H).catch(()=>[]);T({features:Ce,externalItems:Te})}function $e(){var H;y.value==="ruler"?(E.value=[],B.value=!1,(H=h.value)==null||H.clearPoints(),y.value=null):(z.value=null,P.value=null,y.value="ruler")}function ot(){y.value=null,E.value=[],B.value=!1}function gt(){y.value==="draw"?y.value=null:(z.value=null,P.value=null,y.value="draw")}function ut(){y.value==="add-data"?y.value=null:(z.value=null,P.value=null,y.value="add-data")}function Et(){if(y.value==="geolocation"&&z.value!=null){no();return}if(P.value=null,Z.value=!0,!navigator.geolocation){P.value="Геолокація не підтримується браузером",Z.value=!1;return}navigator.geolocation.getCurrentPosition(H=>{const oe=H.coords.latitude,Ce=H.coords.longitude;z.value={lat:oe,lng:Ce},P.value=null,Z.value=!1,y.value="geolocation",Oe().then(Te=>{Te!=null&&Te.flyTo&&Te.flyTo({center:[Ce,oe],zoom:15})})},()=>{P.value="Не вдалося визначити місце розташування",Z.value=!1},{enableHighAccuracy:!0})}function en(){y.value=null,z.value=null,P.value=null}function no(){const H=z.value;H!=null&&Oe().then(oe=>{oe!=null&&oe.flyTo&&oe.flyTo({center:[H.lng,H.lat],zoom:15})})}function qo(H){E.value=H}function Ho(){var H;(H=N.value)==null||H.clear()}function tn(){var H;(H=N.value)==null||H.finishPolygon()}function Vn(){var H;(H=N.value)==null||H.undo()}function Wo(){var he,je,De,xe;const H=(De=(je=(he=a.value)==null?void 0:he.ctx)==null?void 0:je.map)==null?void 0:De.value,oe=(xe=N.value)==null?void 0:xe.getCanvas();if(!H||!oe)return;const Ce=(ze,qe)=>{const Pe=document.createElement("a");Pe.download=qe,Pe.rel="noopener",typeof ze=="string"?Pe.href=ze:(Pe.href=URL.createObjectURL(ze),setTimeout(()=>URL.revokeObjectURL(Pe.href),100)),document.body.appendChild(Pe),Pe.click(),document.body.removeChild(Pe)},Te=()=>{const ze=H.getCanvas();if(!ze)return;const qe=ze.width,Pe=ze.height;if(qe<=0||Pe<=0)return;const Je=document.createElement("canvas");Je.width=qe,Je.height=Pe;const tt=Je.getContext("2d");if(!tt)return;tt.drawImage(ze,0,0),tt.drawImage(oe,0,0,oe.width,oe.height,0,0,qe,Pe);const Ye=`map-drawing-${Date.now()}.png`;Je.toBlob(pt=>{if(pt){Ce(pt,Ye);return}try{const st=Je.toDataURL("image/png");Ce(st,Ye)}catch{const st=document.createElement("canvas");st.width=oe.width,st.height=oe.height;const Fe=st.getContext("2d");Fe&&(Fe.drawImage(oe,0,0),st.toBlob(wt=>wt&&Ce(wt,Ye),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Te))}async function nn(){const H=await Oe();H!=null&&H.on&&(Ge==null||Ge(),Ge=H.on("moveend",Ue),Ae==null||Ae(),Ae=H.on("mousemove",D),te==null||te(),te=H.on("click",Be))}e.onUnmounted(()=>{Ge==null||Ge(),Ge=null,Ae==null||Ae(),Ae=null,te==null||te(),te=null});async function Bn(H=!1){var Ce,Te;f.value=!1,p.value=null,I.value=null;const oe=H||!n.data;c.value=oe;try{const he=oe?await(async()=>{const qe=await fetch(`/api/gis-map/${encodeURIComponent(ee.value)}`);if(!qe.ok)throw new Error(`Помилка завантаження (${qe.status})`);return qe.json()})():n.data;oe||(f.value=!0);const je=Ft(he.center)??v,De=Y(he.layers).map(qe=>ue(qe)),xe=se(he.zoom)??A;i.value={...he,center:je??null,zoom:xe??he.zoom??null,layers:De,widgets:he.widgets},k.value=he.tools||["home","print","ruler","draw","add-data"];const ze=await Oe();ze&&(je&&((Ce=ze.setCenter)==null||Ce.call(ze,je)),xe!=null&&((Te=ze.setZoom)==null||Te.call(ze,xe)),s.value||await Ee()),await re(),await ve(),await nn(),f.value=!0}catch(he){p.value=(he==null?void 0:he.message)||"Не вдалося завантажити карту"}finally{oe&&(c.value=!1)}}const $n=e.computed(()=>{var Te;const H=new Map;return Y((Te=i.value)==null?void 0:Te.layers).forEach(he=>{if(!(he!=null&&he.id))return;const je=ue(he)||he;H.set(he.id,{...je})}),ce.value.filter(he=>(he==null?void 0:he.type)==="layers").flatMap(he=>{var je;return Y((je=he==null?void 0:he.config)==null?void 0:je.layers)}).forEach(he=>{if(!(he!=null&&he.id))return;const je=H.get(he.id)||{},De=ue(he)||he;H.set(he.id,{...je,...De,actions:he.actions||je.actions||null,name:je.name||he.name||he.title||je.title||he.id,title:je.title||he.title||je.name||null,visible:je.visible??he.visible??!0})}),Array.from(H.values())}),Pt=e.ref([]);function on(H){Pt.value.includes(H)?Pt.value=Pt.value.filter(oe=>oe!==H):Pt.value.push(H)}const rn=e.computed(()=>H=>Pt.value.includes(H.id));return e.watch([M,j],()=>{re()},{immediate:!0}),e.watch(ee,()=>{Bn(!0)}),e.watch(()=>n.data,H=>{H&&Bn()}),e.onMounted(()=>{Bn()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{ve()}),(H,oe)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(K.value)},[oe[9]||(oe[9]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(An,{ref_key:"mapViewRef",ref:a,class:"map-widget__view"},{default:e.withCtx(()=>{var Ce,Te,he,je;return[we.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(qt,{key:0,class:"hidden"})),O.value?(e.openBlock(),e.createBlock(Cr,{key:1,"layer-id":"app-boundary",boundary:O.value.boundary,katottg:O.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),R.value&&k.value.includes("draw")&&m.value?(e.openBlock(),e.createElementBlock("div",sf,[e.createVNode(Sp,{ref_key:"drawingPanelRef",ref:x,onClose:oe[0]||(oe[0]=De=>y.value=null),onClear:Ho,onDownload:Wo,onFinishPolygon:tn,onUndo:Vn,"onUpdate:tool":oe[1]||(oe[1]=De=>$.value=De),"onUpdate:strokeColor":oe[2]||(oe[2]=De=>_.value=De),"onUpdate:strokeWidth":oe[3]||(oe[3]=De=>w.value=De)},null,512)])):e.createCommentVNode("",!0),R.value?(e.openBlock(),e.createElementBlock("div",cf,[S.value?(e.openBlock(),e.createBlock(am,{key:0,coordinates:S.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(cm,{"map-context":R.value,options:Q.value},null,8,["map-context","options"]),k.value.includes("ruler")&&u.value?(e.openBlock(),e.createBlock(np,{key:1,ref_key:"rulerPanelRef",ref:h,onClose:ot,onTabChange:oe[4]||(oe[4]=De=>d.value=De),onPointsChange:qo,onShapeClosedChange:oe[5]||(oe[5]=De=>B.value=De)},null,512)):e.createCommentVNode("",!0),k.value.includes("geolocation")&&b.value?(e.openBlock(),e.createBlock(pp,{key:2,position:z.value,onClose:en,onRecenter:no},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",df,[k.value.includes("home")?(e.openBlock(),e.createBlock(zt,{key:0,center:((Ce=i.value)==null?void 0:Ce.center)||((Te=s.value)==null?void 0:Te.center)||null,zoom:((he=i.value)==null?void 0:he.zoom)??((je=s.value)==null?void 0:je.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),k.value.includes("print")?(e.openBlock(),e.createBlock(em,{key:1})):e.createCommentVNode("",!0),k.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:2,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?"Вимкнути геолокацію":"Ваше розташування",disabled:Z.value,onClick:e.withModifiers(Et,["stop"])},[e.createElementVNode("span",mf,e.toDisplayString(b.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(pe.MapPin),{class:"w-4 h-4"})],10,uf)):e.createCommentVNode("",!0),k.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:3,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",u.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":u.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers($e,["stop"])},[e.createElementVNode("span",ff,e.toDisplayString(u.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(pe.Ruler),{class:"w-4 h-4"})],10,pf)):e.createCommentVNode("",!0),k.value.includes("draw")?(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",m.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":m.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(gt,["stop"])},[e.createElementVNode("span",yf,e.toDisplayString(m.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(pe.Pen),{class:"w-4 h-4"})],10,gf)):e.createCommentVNode("",!0),k.value.includes("add-data")?(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",g.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":g.value?"Закрити додавання даних":"Додавання даних",onClick:e.withModifiers(ut,["stop"])},[e.createElementVNode("span",bf,e.toDisplayString(g.value?"Закрити додавання даних":"Додавання даних"),1),e.createVNode(e.unref(pe.Upload),{class:"w-4 h-4"})],10,hf)):e.createCommentVNode("",!0)]),f.value&&u.value&&E.value.length>0?(e.openBlock(),e.createBlock(op,{key:4,points:E.value,"is-shape-closed":B.value,"label-mode":d.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),f.value&&z.value!=null?(e.openBlock(),e.createBlock(fp,{key:5,position:z.value},null,8,["position"])):e.createCommentVNode("",!0),f.value&&m.value?(e.openBlock(),e.createBlock(vp,{key:6,ref_key:"drawingCanvasRef",ref:N,tool:$.value,"stroke-color":_.value,"stroke-width":w.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[g.value?(e.openBlock(),e.createBlock(af,{key:0,onClose:oe[6]||(oe[6]=De=>y.value=null)})):e.createCommentVNode("",!0)])),f.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",xf,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Se,De=>e.createElementVNode("div",{key:De,class:e.normalizeClass(["map-widget__side",`map-widget__side--${De}`])},[De==="left"?(e.openBlock(),e.createElementBlock("div",kf)):e.createCommentVNode("",!0),We.value[De].top.length?(e.openBlock(),e.createElementBlock("div",wf,[e.createElementVNode("div",_f,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(We.value[De].top,xe=>{var ze,qe,Pe,Je,tt,Ye,pt;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:xe.id||xe.type,class:"map-overlay__item"},[xe.type==="info"?(e.openBlock(),e.createBlock(rr,{key:0,title:((ze=xe.config)==null?void 0:ze.title)||xe.title||null,content:((qe=xe.config)==null?void 0:qe.content)||"",links:G.value,"map-name":le.value,"map-description":J.value},null,8,["title","content","links","map-name","map-description"])):xe.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Pe=xe.config)==null?void 0:Pe.api)||null},null,8,["api"])):xe.type==="layers"?(e.openBlock(),e.createBlock(ur,{key:2,layers:$n.value,onAction:oe[7]||(oe[7]=st=>on(st.layerId)),config:xe.config},null,8,["layers","config"])):xe.type==="basemaps"?(e.openBlock(),e.createBlock(qt,{key:3,layers:((Je=xe.config)==null?void 0:Je.layers)||null,"default-layer":((tt=xe.config)==null?void 0:tt.default)||null,title:xe.title||((Ye=xe.config)==null?void 0:Ye.title)||null},null,8,["layers","default-layer","title"])):xe.type==="legend"?(e.openBlock(),e.createBlock(Eo,{key:4,items:ge(xe)},null,8,["items"])):xe.type==="filters"&&rn.value(xe)?(e.openBlock(),e.createBlock(Co,{key:5,"layer-id":(pt=xe.config)==null?void 0:pt.layer,onClose:on},null,8,["layer-id"])):xe.type==="dataset"||xe.type==="attribute"?(e.openBlock(),e.createBlock(xr,{key:6,config:xe.config},null,8,["config"])):xe.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:xe.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,xe.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),We.value[De].bottom.length?(e.openBlock(),e.createElementBlock("div",Ef,[e.createElementVNode("div",Cf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(We.value[De].bottom,xe=>{var ze,qe,Pe,Je,tt,Ye,pt;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:xe.id||xe.type,class:"map-overlay__item"},[xe.type==="info"?(e.openBlock(),e.createBlock(rr,{key:0,title:((ze=xe.config)==null?void 0:ze.title)||xe.title||null,content:((qe=xe.config)==null?void 0:qe.content)||"",links:G.value,"map-name":le.value,"map-description":J.value},null,8,["title","content","links","map-name","map-description"])):xe.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Pe=xe.config)==null?void 0:Pe.api)||null},null,8,["api"])):xe.type==="layers"?(e.openBlock(),e.createBlock(ur,{key:2,layers:$n.value,onAction:oe[8]||(oe[8]=st=>on(st.layerId)),config:xe.config},null,8,["layers","config"])):xe.type==="basemaps"?(e.openBlock(),e.createBlock(qt,{key:3,layers:((Je=xe.config)==null?void 0:Je.layers)||null,"default-layer":((tt=xe.config)==null?void 0:tt.default)||null,title:xe.title||((Ye=xe.config)==null?void 0:Ye.title)||null},null,8,["layers","default-layer","title"])):xe.type==="legend"?(e.openBlock(),e.createBlock(Eo,{key:4,items:ge(xe)},null,8,["items"])):xe.type==="filters"&&rn.value(xe)?(e.openBlock(),e.createBlock(Co,{key:5,"layer-id":(pt=xe.config)==null?void 0:pt.layer,onClose:on},null,8,["layer-id"])):xe.type==="dataset"||xe.type==="attribute"?(e.openBlock(),e.createBlock(xr,{key:6,config:xe.config},null,8,["config"])):xe.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:xe.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,xe.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(mr),e.createVNode(_o,{"map-id":ee.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),c.value?(e.openBlock(),e.createElementBlock("div",Nf,"Завантаження карти…")):p.value?(e.openBlock(),e.createElementBlock("div",Vf,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-f70ea2c6"]]),Bf=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function fn(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,a,i]=n.split("-");if(!r||!a||!i)return t;const s=parseInt(a,10),c=Bf[s]||a;let p=`${parseInt(i,10)} ${c} ${r}`;if(o){const f=o.split(".")[0],[k,l,y]=f.split(":");k&&l&&y?p+=`, ${k}:${l}:${y}`:k&&l?p+=`, ${k}:${l}`:k&&(p+=`, ${k}`)}return p}function gn(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 $f={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"},Sf={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"},vf={class:"flex flex-col gap-2 md:flex-row md:items-center"},Lf={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},Tf={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},Af={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"},Mf={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Df={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"},Ff={class:"p-3 md:p-3.5 lg:p-4 pt-2"},zf={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},If={class:"text-gray-500 shrink-0 md:max-w-[50%]"},jf={class:"font-medium flex flex-wrap gap-1"},Pf={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},Rf=["href"],Of=["href"],Nr=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=l=>(l==null?void 0:l.service_id)&&(l==null?void 0:l.is_map)&&l[n.id_key]&&(l==null?void 0:l.geom),a=e.computed(()=>n.columns.find(l=>l.meta==="title")),i=e.computed(()=>n.columns.filter(l=>l.meta==="category")),s=e.computed(()=>n.columns.filter(l=>l.meta==="tags")),c=e.computed(()=>n.columns.filter(l=>l.meta!=="title")),p=(l,y)=>{if(y)return l[y]},f=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},k=(l,y)=>{const u=p(l,n.id_key);return`/map?layers=${y}&info=${y},${u}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var m,b,g;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",$f,[e.createElementVNode("div",Sf,[e.createElementVNode("div",vf,[e.createElementVNode("h2",Lf,e.toDisplayString(u[`${(m=a.value)==null?void 0:m.name}_text`]||u[(b=a.value)==null?void 0:b.name]||u[(g=a.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Tf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("div",Af,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Mf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("span",Df,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ff,[e.createElementVNode("div",zf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,d=>{var h;return e.openBlock(),e.createElementBlock("div",{key:d.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",If,e.toDisplayString((d==null?void 0:d.ua)||d.label||d.name)+": ",1),e.createElementVNode("span",jf,[Array.isArray(u[d==null?void 0:d.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,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},[d.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):d.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=u[(d==null?void 0:d.name)+"_data"])==null?void 0:h.text)||u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Pf,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:k(u,u==null?void 0:u.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"},[...y[0]||(y[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,Rf)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:f(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 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...y[1]||(y[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,Of))])])}),128))}}),Uf={class:"p-0"},qf={class:"border-l-4 border-l-slate-400"},Hf={class:"p-4"},Wf={class:"flex flex-wrap items-center gap-2 mb-3"},Yf={class:"text-lg font-bold"},Gf={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"},Zf={key:1,class:"flex"},Kf={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"},Xf={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"},Jf={class:"text-xs text-gray-500 mb-1"},Qf={class:"font-medium"},eg={class:"flex justify-end gap-2 mt-3 border-t pt-3"},tg=["href"],ng=["href"],Vr=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=l=>(l==null?void 0:l.service_id)&&(l==null?void 0:l.is_map)&&l[n.id_key]&&(l==null?void 0:l.geom),a=e.computed(()=>n.columns.find(l=>l.meta==="title")),i=e.computed(()=>n.columns.filter(l=>l.meta==="category")),s=e.computed(()=>n.columns.filter(l=>l.meta==="tags")),c=e.computed(()=>n.columns.filter(l=>l.meta!=="title")),p=(l,y)=>{if(y)return l[y]},f=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},k=(l,y)=>{const u=p(l,n.id_key);return`/map?layers=${y}&info=${y},${u}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var m,b,g;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("div",Hf,[e.createElementVNode("div",Wf,[e.createElementVNode("h2",Yf,e.toDisplayString(u[`${(m=a.value)==null?void 0:m.name}_text`]||u[(b=a.value)==null?void 0:b.name]||u[(g=a.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("div",Gf,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Zf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.name,class:"flex flex-wrap gap-1 ml-2"},[u[d.name]?(e.openBlock(),e.createElementBlock("span",Kf,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Xf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,d=>{var h;return e.openBlock(),e.createElementBlock("div",{key:d.name},[e.createElementVNode("p",Jf,e.toDisplayString(d.ua),1),e.createElementVNode("p",Qf,[Array.isArray(u[d==null?void 0:d.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[d==null?void 0:d.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,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},[d.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):d.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=u[(d==null?void 0:d.name)+"_data"])==null?void 0:h.text)||u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",eg,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:k(u,u==null?void 0:u.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"},[...y[0]||(y[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,tg)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:f(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 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...y[1]||(y[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,ng))])])])])])}),128))}}),og={class:"space-y-4"},rg={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},lg={class:"flex-1"},ag={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},sg={class:"col-span-1 lg:col-span-4"},ig={class:"flex items-start"},cg={class:"flex flex-col"},dg={class:"font-bold text-xs lg:text-sm"},ug={key:0,class:"flex flex-wrap gap-1 mt-1"},mg={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},pg={key:1,class:"flex flex-wrap gap-1 mt-1"},fg={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"},gg={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},yg={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},hg={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},bg={class:"truncate font-medium text-xs lg:text-sm"},xg={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},kg=["href"],wg=["href"],Br=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=y=>(y==null?void 0:y.service_id)&&(y==null?void 0:y.is_map)&&y[n.id_key]&&(y==null?void 0:y.geom),a=e.computed(()=>n.columns.find(y=>y.meta==="title")),i=e.computed(()=>n.columns.filter(y=>y.meta==="category")),s=e.computed(()=>n.columns.filter(y=>y.meta==="tags")),c=e.computed(()=>n.columns.filter(y=>y.meta!=="title")),p=e.computed(()=>"bg-blue-500"),f=(y,u)=>{if(u)return y[u]},k=y=>{const u=f(y,n.id_key);return`${n.path}?id=${u}`},l=(y,u)=>{const m=f(y,n.id_key);return`/map?layers=${u}&info=${u},${m}`};return(y,u)=>(e.openBlock(),e.createElementBlock("div",og,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var b,g,d;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",rg,[e.createElementVNode("div",lg,[e.createElementVNode("div",ag,[e.createElementVNode("div",sg,[e.createElementVNode("div",ig,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",p.value])},null,2),e.createElementVNode("div",cg,[e.createElementVNode("p",dg,e.toDisplayString(m[`${(b=a.value)==null?void 0:b.name}_text`]||m[(g=a.value)==null?void 0:g.name]||m[(d=a.value)==null?void 0:d.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",ug,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.name},[m[h.name]?(e.openBlock(),e.createElementBlock("span",mg,e.toDisplayString(m[`${h.name}_text`]||m[h.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",pg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.name},[m[h.name]?(e.openBlock(),e.createElementBlock("span",fg,e.toDisplayString(m[`${h.name}_text`]||m[h.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",gg,[e.createElementVNode("div",yg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,h=>{var x;return e.openBlock(),e.createElementBlock("div",{key:h.name},[e.createElementVNode("p",hg,e.toDisplayString(h.ua),1),e.createElementVNode("p",bg,[Array.isArray(m[h.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[h.name],(N,$)=>(e.openBlock(),e.createElementBlock("span",{key:$,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(N),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[h.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(m[h.name])||"Немає даних"),1)],64)):h.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(m[h.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((x=m[h.name+"_data"])==null?void 0:x.text)||m[h.name+"_text"]||m[h.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",xg,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:l(m,m.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"},[...u[0]||(u[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,kg)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:k(m),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"},[...u[1]||(u[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,wg))])])])}),128))]))}}),_g={class:"flex flex-col space-y-1.5 p-6 pb-2"},Eg={class:"flex items-center gap-2 flex-wrap"},Cg={class:"tracking-tight text-lg font-medium"},Ng={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"},Vg={key:1,class:"flex"},Bg={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"},$g={class:"p-6 pt-0 pb-4"},Sg={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},vg={class:"text-sm text-gray-500"},Lg={class:"font-medium"},Tg={class:"flex items-center p-6 pt-0 gap-2"},Ag=["href"],Mg=["href"],$r=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=l=>(l==null?void 0:l.service_id)&&(l==null?void 0:l.is_map)&&l[n.id_key]&&(l==null?void 0:l.geom),a=e.computed(()=>n.columns.find(l=>l.meta==="title")),i=e.computed(()=>n.columns.filter(l=>l.meta==="category")),s=e.computed(()=>n.columns.filter(l=>l.meta==="tags")),c=e.computed(()=>n.columns.filter(l=>l.meta!=="title")),p=(l,y)=>{if(y)return l[y]},f=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},k=(l,y)=>{const u=p(l,n.id_key);return`/map?layers=${y}&info=${y},${u}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var m,b,g;return e.openBlock(),e.createElementBlock("div",{key:u.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",_g,[e.createElementVNode("div",Eg,[e.createElementVNode("h3",Cg,e.toDisplayString(u[`${(m=a.value)==null?void 0:m.name}_text`]||u[(b=a.value)==null?void 0:b.name]||u[(g=a.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("div",Ng,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Vg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.name,class:"flex flex-wrap gap-1 ml-2"},[u[d.name]?(e.openBlock(),e.createElementBlock("span",Bg,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",$g,[e.createElementVNode("div",Sg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,d=>{var h;return e.openBlock(),e.createElementBlock("div",{key:d.name},[e.createElementVNode("p",vg,e.toDisplayString(d.ua),1),e.createElementVNode("p",Lg,[Array.isArray(u[d==null?void 0:d.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[d==null?void 0:d.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,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},[d.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):d.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=u[(d==null?void 0:d.name)+"_data"])==null?void 0:h.text)||u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Tg,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:k(u,u==null?void 0:u.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,Ag)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:f(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 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," Детальніше ",8,Mg))])])}),128))}}),Dg={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},Fg={key:0,class:"w-full lg:w-auto lg:col-span-1"},zg=["src"],Ig={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},jg={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},Pg={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},Rg={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},Og={class:"flex flex-wrap gap-2 lg:gap-0"},Ug={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"},qg={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},Hg={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},Wg={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},Yg=["innerHTML"],Gg={class:"text-gray-500 font-medium md:font-normal"},Zg={class:"text-gray-600 break-words line-clamp-2"},Kg={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"},Xg={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},Jg={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},Qg={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"},ey={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"},ty={class:"w-full space-y-2"},ny=["href"],oy=["href"],Sr=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=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),a=e.computed(()=>n.columns.find(u=>u.meta==="title")),i=e.computed(()=>n.columns.filter(u=>u.meta==="category")),s=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),c=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),p=e.computed(()=>n.columns.find(u=>u.meta==="image")),f=e.computed(()=>n.columns.find(u=>u.meta==="desc")||n.columns.find(u=>u.name==="description")),k=(u,m)=>{if(m)return u[m]},l=u=>{const m=k(u,n.id_key);return`${n.path}?id=${m}`},y=(u,m)=>{const b=k(u,n.id_key);return`/map?layers=${m}&info=${m},${b}`};return(u,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,b=>{var g,d,h,x,N,$,_,w,E;return e.openBlock(),e.createElementBlock("div",{key:b.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",Dg,[p.value?(e.openBlock(),e.createElementBlock("div",Fg,[b[(g=p.value)==null?void 0:g.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:b[(d=p.value)==null?void 0:d.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,zg)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Ig,[...m[0]||(m[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",jg,[e.createElementVNode("div",Pg,[e.createElementVNode("h3",Rg,e.toDisplayString(b[`${(h=a.value)==null?void 0:h.name}_text`]||b[(x=a.value)==null?void 0:x.name]||b[(N=a.value)==null?void 0:N.label]||"Не вказано"),1),e.createElementVNode("div",Og,[Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,B=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:B.name},[b[B.name]?(e.openBlock(),e.createElementBlock("div",Ug,e.toDisplayString(b[`${B.name}_text`]||b[B.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",qg,e.toDisplayString(((_=b[(($=f.value)==null?void 0:$.name)+"_data"])==null?void 0:_.text)||b[((w=f.value)==null?void 0:w.name)+"_text"]||b[(E=f.value)==null?void 0:E.name]),1),e.createElementVNode("div",Hg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,B=>{var z;return e.openBlock(),e.createElementBlock("div",{key:B.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",Wg,[B.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:B.icon},null,8,Yg)):e.createCommentVNode("",!0),e.createElementVNode("span",Gg,e.toDisplayString((B==null?void 0:B.ua)||B.label||B.name)+":",1)]),e.createElementVNode("span",Zg,[Array.isArray(b[B==null?void 0:B.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(b[B==null?void 0:B.name],(Z,P)=>(e.openBlock(),e.createElementBlock("span",{key:P,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(Z),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(gn)(b[B==null?void 0:B.name])||"Немає даних"),1)],64)):B.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(b[B==null?void 0:B.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((z=b[(B==null?void 0:B.name)+"_data"])==null?void 0:z.text)||b[(B==null?void 0:B.name)+"_text"]||b[B==null?void 0:B.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Kg,[e.createElementVNode("p",Xg," Теги: "+e.toDisplayString(s.value.length&&b[s.value[0].name]?"":"відсутні"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Jg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,B=>(e.openBlock(),e.createElementBlock("div",{key:B.name,class:"flex flex-wrap gap-1"},[b[B.name]?(e.openBlock(),e.createElementBlock("span",Qg,e.toDisplayString(b[`${B.name}_text`]||b[B.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ey,[e.createElementVNode("div",ty,[!t.hideDetailsButton&&r(b)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(b,b==null?void 0:b.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,ny)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:l(b),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,oy))])])])])}),128))}});function ry(t){t.component("MapCustom",qn)}const ly={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},ay={key:0,class:"flex items-center gap-2 flex-shrink-0"},sy={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},Ht=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(a,i)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[a.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",ly,[e.renderSlot(a.$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(a.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])],2),a.$slots.actions?(e.openBlock(),e.createElementBlock("div",ay,[e.renderSlot(a.$slots,"actions")])):e.createCommentVNode("",!0)],2),a.$slots.description?(e.openBlock(),e.createElementBlock("p",sy,[e.renderSlot(a.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),iy={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},cy={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"},dy={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},uy={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},my={class:"p-3 border-b border-gray-200"},py={class:"flex flex-col sm:flex-row gap-2"},fy={class:"entity-table-root"},gy={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},yy={key:0,class:"gap-2 inline-flex"},hy=["onClick"],by={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"},xy={class:"text-sm text-gray-500"},ky={class:"font-medium text-gray-700"},wy={class:"font-medium text-gray-700"},_y={class:"font-medium text-gray-700"},Ey={class:"flex items-center justify-end gap-3"},Hn=Object.freeze(Object.defineProperty({__proto__:null,default:Ne(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Ie.useRoute(),r=Ie.useRouter(),a=t,i=e.computed(()=>a.entityKey||String(o.name??"").split("-")[0]),s=e.computed(()=>{var R;let S=(((R=o.matched[o.matched.length-1])==null?void 0:R.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return S.startsWith("/")||(S=`/${S}`),S}),c=e.computed(()=>a.entityBasePath||s.value),p=e.computed(()=>{var S;const I=((S=o.matched[o.matched.length-1])==null?void 0:S.path)||"";return/:id\??/.test(I)&&/:action\??/.test(I)}),f=e.computed(()=>{var S,R;return(S=o.meta)!=null&&S.title?o.meta.title:o.name?o.name:((R=o.path)==null?void 0:R.replace(/^\//,""))||""||"GIS"}),k=e.computed(()=>{var I;return((I=o.meta)==null?void 0:I.description)||""}),l=e.computed(()=>{const I=String(f.value||"").trim();return I?`Пошук ${I}...`:"Пошук..."}),y=e.ref([]),u=e.ref(!0),m=e.ref([]),b=e.ref([]),g=e.ref({}),d=e.ref([]),h=e.ref(String(o.query.search??"")),x=e.ref(Math.max(1,Number(o.query.page)||1)),N=e.ref(15),$=e.ref(0),_=e.computed(()=>$.value>0),w=e.computed(()=>$.value?(x.value-1)*N.value+1:0),E=e.computed(()=>$.value?Math.min(x.value*N.value,$.value):0);function B(I){const S=new URLSearchParams;return Object.entries(I).forEach(([R,Q])=>{if(!(Q==null||Q==="")){if(Array.isArray(Q)){Q.forEach(ue=>{ue!=null&&ue!==""&&S.append(R,String(ue))});return}S.append(R,String(Q))}}),S.toString()}function z(){return p.value?`${c.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function Z(I){if(p.value)return`${c.value}/${I}/edit`;const S=String(o.name??"").split("_")[0];return S==="services"?`/gis.datasets/${I}/edit`:`/gis.${S}/edit/${I}`}const P=async()=>{const I=`/api/data/gis.${i.value}.table`;if(!I){y.value=[],u.value=!1;return}try{u.value=!0;const S=B({...g.value,page:x.value,limit:N.value}),R=await fetch(S?`${I}?${S}`:I);if(!R.ok)throw new Error(`Rows fetch failed: ${R.status}`);const Q=await R.json();y.value=Q.rows||[],$.value=Number(Q.filtered??Q.total??Q.count??y.value.length)||0,m.value=a.columnsConfig.length?a.columnsConfig:Q.columns||[],b.value=Q.filters||[],u.value=!1,d.value=Q.actions,Q.card!==!1&&m.value.length&&(p.value?m.value[0].link=`${c.value}/{id}`:m.value[0].link||(m.value[0].link=`/${o.name}/{id}`))}catch{y.value=[],u.value=!1}};function ee(I){g.value=I,x.value=1,j(),P()}e.onMounted(()=>{P(),document.title=f.value}),e.watch(()=>o.name,()=>{x.value=1,h.value="",P(),document.title=f.value}),e.watch(()=>o.query,I=>{const S=Math.max(1,Number(I.page)||1),R=String(I.search??""),Q=S!==x.value,ue=R!==h.value;!Q&&!ue||(x.value=S,h.value=R,g.value={...g.value,search:R||void 0},P())});async function K(I,S,R){const Q=await fetch(`/api/form/gis.${i.value}.table/${I.id}`);if(!Q.ok)throw new Error(`Form fetch failed: ${Q.status}`);const fe=(await Q.json()).token,se={[S]:R},v=await fetch(`/api/table/${fe}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(se)});if(!v.ok)throw ye.notify({type:"error",title:"Помилка збереження",message:`Поле "${S}" не оновлено`}),new Error(`Save failed: ${v.status}`);ye.notify({title:"Збережено",message:`Поле "${S}" оновлено`})}function le(I,S){g.value={...g.value,[I]:S},x.value=1,j(),P()}function J(I){le((I==null?void 0:I.name)||"search",(I==null?void 0:I.value)??h.value)}function G(I){h.value="",le(I||"search",void 0)}function M(I){!I||I===x.value||(x.value=I,j(),P())}function j(){const I={...o.query,page:String(x.value),...h.value?{search:h.value}:{}};h.value||delete I.search,r.replace({query:I})}return(I,S)=>(e.openBlock(),e.createElementBlock("div",iy,[e.createVNode(Ht,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(f.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",cy,[e.createVNode(e.unref(pe.RefreshCw),{size:16}),S[2]||(S[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:S[0]||(S[0]=R=>e.unref(r).push(z())),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(pe.Plus),{size:16}),S[3]||(S[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[k.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",dy,[e.createElementVNode("div",uy,[e.createElementVNode("div",my,[e.createElementVNode("div",py,[e.createVNode(e.unref(Ln.FilterField),{modelValue:h.value,"onUpdate:modelValue":S[1]||(S[1]=R=>h.value=R),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:J,onClear:G,placeholder:l.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Ln.Filter),{schema:b.value,value:g.value,onChange:ee,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",fy,[e.createVNode(e.unref(n),{rows:y.value,columns:m.value,loading:u.value,router:e.unref(r),selectable:!1,onCellUpdate:K,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:R,value:Q,column:ue})=>[e.renderSlot(I.$slots,"badge",{row:R,value:Q,column:ue},()=>[e.createElementVNode("span",gy,e.toDisplayString((Q==null?void 0:Q.text)||Q||"-"),1)],!0)]),action:e.withCtx(({row:R})=>[e.renderSlot(I.$slots,"action",{row:R},()=>[d.value.includes("add")?(e.openBlock(),e.createElementBlock("div",yy,[e.createElementVNode("button",{onClick:Q=>e.unref(r).push(Z(R.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(Tn)],8,hy)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),_.value?(e.openBlock(),e.createElementBlock("div",by,[e.createElementVNode("div",xy,[S[4]||(S[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",ky,e.toDisplayString(w.value),1),S[5]||(S[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",wy,e.toDisplayString(E.value),1),S[6]||(S[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",_y,e.toDisplayString($.value),1)]),e.createElementVNode("div",Ey,[e.createVNode(e.unref(ye.VsPagination),{total:$.value,page:x.value,"page-size":N.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":M,onPageChange:M},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),Cy={class:"mx-1"},Ny={class:"flex items-center gap-2 mt-[0.4rem]"},Vy={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},By={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},$y={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"},Sy={class:"vs-form w-full"},yn=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),a=e.ref(null),i=Ie.useRouter(),s=Ie.useRoute(),c=t,p=e.ref({}),f=e.ref(""),k=e.computed(()=>s.path.replace(/\/(add|new)$/,"")),l=e.computed(()=>{var g;return((g=i.resolve(k.value).meta)==null?void 0:g.title)??""}),y=e.computed(()=>l.value?`Додати в ${l.value.toLowerCase()}`:"Додати"),u=e.computed(()=>{var g;return((g=s.meta)==null?void 0:g.description)??""});function m(){i.push(k.value||"/")}async function b(){if(!a.value){ye.notify({type:"error",title:"Error",message:"Create token is missing."});return}const g=p.value.validate();if(g){ye.notify({type:"warning",title:"Validation",message:Object.entries(g).map(([h,x])=>`${h}: ${x}`).join(`
3
- `)});return}const d=await fetch("/api/table/"+a.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!d.ok){ye.notify({type:"error",title:"Error",message:`Error code: ${d.status}`});return}await d.json(),ye.notify({title:"Success!",message:"Object created."}),i.back()}return e.onMounted(async()=>{const g=c.entityKey||String(s.name??"").split("-")[0],d=await fetch(`/api/form/gis.${g}.table`).then(h=>h.json());a.value=d.token,f.value=d.id,r.value=d.schema,document.title=y.value}),(g,d)=>{const h=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Ht,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[k.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(h,{to:k.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Cy,[e.createVNode(e.unref(pe.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),d[2]||(d[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Ny,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:m,"aria-label":"Назад"},[e.createVNode(e.unref(pe.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(l.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:m}," Назад "),e.createElementVNode("button",{onClick:b,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},[u.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Vy,[e.createElementVNode("div",By,[e.createElementVNode("div",$y,[e.createElementVNode("div",Sy,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":d[0]||(d[0]=x=>o.value=x),form:p.value,"onUpdate:form":d[1]||(d[1]=x=>p.value=x),schema:r.value,style:{primaryColor:"blue"},formId:f.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),vy={class:"mx-1"},Ly={class:"mx-1"},Ty={class:"flex items-center gap-2 mt-[0.4rem]"},Ay={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},My={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Dy={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"},Fy={class:"vs-form w-full"},hn=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),a=e.ref(null),i=e.ref({}),s=e.ref(""),c=Ie.useRoute(),p=Ie.useRouter(),k=t.entityKey||String(c.name??"").split("-")[0],{id:l}=c.params,y=e.computed(()=>c.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),u=e.computed(()=>l?`${y.value}/${l}`:y.value||"/"),m=e.computed(()=>{var h;return((h=p.resolve(y.value).meta)==null?void 0:h.title)??""}),b=e.computed(()=>{var h;return((h=c.meta)==null?void 0:h.description)??""});function g(){p.push(y.value||"/")}async function d(){const h=i.value.validate();if(h){ye.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([N,$])=>`${N}: ${$}`).join(`
4
- `)});return}if(!a.value){ye.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const x=await fetch(`/api/table/${a.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!x.ok){ye.notify({type:"error",title:"Error",message:`Error code: ${x.status}`});return}await x.json(),ye.notify({title:"Success!",message:"Your changes have been saved."}),p.back()}return e.onMounted(async()=>{const h=await fetch(`/api/form/gis.${k}.table/${l}`).then(N=>N.json());o.value=h.data,a.value=h.token,r.value=h.schema;const x=h.data;s.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)||""}),(h,x)=>{const N=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Ht,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[y.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(N,{to:y.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.value),1)]),_:1},8,["to"]),e.createElementVNode("span",vy,[e.createVNode(e.unref(pe.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(N,{to:u.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Ly,[e.createVNode(e.unref(pe.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",Ty,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:g,"aria-label":"Назад"},[e.createVNode(e.unref(pe.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(s.value||m.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:g}," Назад "),e.createElementVNode("button",{onClick:d,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},[b.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(b.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Ay,[e.createElementVNode("div",My,[e.createElementVNode("div",Dy,[e.createElementVNode("div",Fy,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":x[0]||(x[0]=$=>o.value=$),form:i.value,"onUpdate:form":x[1]||(x[1]=$=>i.value=$),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),zy={class:"flex items-center justify-center col-span-3 gap-2"},Iy={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},jy=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(k=>k.VsModal)),r=t,a=e.useModel(t,"columns"),i=e.ref(!1),s=e.ref({}),c=e.ref({...r.data||{}});e.watch(()=>r.data,k=>{c.value={...k||{}}},{deep:!0});const p=()=>a.value=a.value.filter((k,l)=>l!==r.index),f=async()=>{const k=s.value.validate();if(k){ye.notify({type:"warning",title:"Validation",message:Object.entries(k).map(([l,y])=>`${l}: ${y}`).join(`
5
- `)});return}a.value[r.index]=c.value,i.value=!1};return(k,l)=>(e.openBlock(),e.createElementBlock("div",zy,[e.createElementVNode("button",{onClick:l[0]||(l[0]=y=>{i.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(pe.Edit),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:p,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(pe.Trash),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:i.value,"onUpdate:visible":l[4]||(l[4]=y=>i.value=y),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",Iy,[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:l[3]||(l[3]=y=>i.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:f}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:c.value,"onUpdate:values":l[1]||(l[1]=y=>c.value=y),schema:t.scheme,form:s.value,"onUpdate:form":l[2]||(l[2]=y=>s.value=y)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),Py={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")})}},Ry={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"},vr=t=>Ry[t==null?void 0:t.toLowerCase()]||"gray",Oy=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],Lr=t=>{var n;return Oy.includes((n=t||"")==null?void 0:n.toLowerCase())},Uy={},qy={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 Hy(t,n){return e.openBlock(),e.createElementBlock("svg",qy,[...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 Wy=Ne(Uy,[["render",Hy]]),Yy={},Gy={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 Zy(t,n){return e.openBlock(),e.createElementBlock("svg",Gy,[...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 Ky=Ne(Yy,[["render",Zy]]),Xy={},Jy={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 Qy(t,n){return e.openBlock(),e.createElementBlock("svg",Jy,[...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 e0=Ne(Xy,[["render",Qy]]),t0={},n0={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 o0(t,n){return e.openBlock(),e.createElementBlock("svg",n0,[...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 r0=Ne(t0,[["render",o0]]),l0={},a0={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 s0(t,n){return e.openBlock(),e.createElementBlock("svg",a0,[...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 i0=Ne(l0,[["render",s0]]),c0={},d0={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 u0(t,n){return e.openBlock(),e.createElementBlock("svg",d0,[...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 m0=Ne(c0,[["render",u0]]),p0={},f0={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-file-text",__v0_r:"0,5361,5384"};function g0(t,n){return e.openBlock(),e.createElementBlock("svg",f0,[...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 y0=Ne(p0,[["render",g0]]),h0={},b0={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 x0(t,n){return e.openBlock(),e.createElementBlock("svg",b0,[...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 k0=Ne(h0,[["render",x0]]),w0={},_0={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 E0(t,n){return e.openBlock(),e.createElementBlock("svg",_0,[...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 C0=Ne(w0,[["render",E0]]),N0={},V0={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 B0(t,n){return e.openBlock(),e.createElementBlock("svg",V0,[...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 $0=Ne(N0,[["render",B0]]),S0={},v0={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 L0(t,n){return e.openBlock(),e.createElementBlock("svg",v0,[...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 T0=Ne(S0,[["render",L0]]),A0={},M0={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 D0(t,n){return e.openBlock(),e.createElementBlock("svg",M0,[...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 F0=Ne(A0,[["render",D0]]),z0={},I0={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 j0(t,n){return e.openBlock(),e.createElementBlock("svg",I0,[...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 P0=Ne(z0,[["render",j0]]),R0={},O0={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 U0(t,n){return e.openBlock(),e.createElementBlock("svg",O0,[...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 q0=Ne(R0,[["render",U0]]),H0={},W0={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 Y0(t,n){return e.openBlock(),e.createElementBlock("svg",W0,[...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 G0=Ne(H0,[["render",Y0]]),Z0={},K0={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function X0(t,n){return e.openBlock(),e.createElementBlock("svg",K0,[...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 Tr={IconText:Wy,IconNumber:Ky,IconDate:e0,IconDatetime:r0,IconRichtext:i0,IconBoolean:m0,IconFile:y0,IconImage:k0,IconArray:C0,IconSelect:$0,IconSlug:T0,IconDatalist:F0,IconReference:P0,IconReferenceList:q0,IconBadge:G0,IconCheck:Ne(Z0,[["render",X0]])},J0={key:0,class:"flex items-center justify-between mb-6"},Q0={class:"flex justify-end w-full"},eh={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},th={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},nh={class:"table-fixed w-full text-[13px]"},oh={class:"bg-gray-50 border-b border-gray-200"},rh={key:0},lh=["onDragstart","onDragover","onDrop"],ah={key:0,class:"flex w-fit items-center gap-2 text-left"},sh={class:"flex-1 min-w-0"},ih={class:"font-medium text-gray-900 truncate"},ch={class:"text-xs text-gray-500"},dh={key:1,class:"flex items-center justify-center"},uh={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"},mh={key:1,class:"text-gray-500 text-sm"},ph={key:3},fh={class:"px-6 py-4"},gh={key:1},yh=["colspan"],Lt=Ne(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(_){return _.charAt(0).toUpperCase()+_.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(_=>_.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=t,c=e.ref({}),p=e.ref(!1),f=e.ref({}),k=e.ref(null),l=e.useSlots(),y=_=>!!(_&&l[_]);n({openCreateDialog:()=>{p.value=!0}});const u=e.computed({get(){return Array.isArray(i.value)?i.value:i.value&&Array.isArray(i.value.columns)?i.value.columns:[]},set(_){Array.isArray(i.value)?i.value=_:i.value&&Array.isArray(i.value.columns)&&(i.value.columns=_)}}),m=e.computed(()=>{const _=s.columnsScheme.map(w=>w.key);return _.includes("name")&&_.includes("label")||_.includes("id")&&_.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...s.columnsScheme.filter(w=>!["name","id","label"].includes(w.key))]:s.columnsScheme});function b(){p.value=!1,f.value={},k.value=null}async function g(){const _=c.value.validate();if(_){ye.notify({type:"warning",title:"Validation",message:Object.entries(_).map(([w,E])=>`${w}: ${E}`).join(`
6
- `)});return}if(k.value===null)u.value=[...u.value,{...f.value}];else{const w=[...u.value];w[k.value]={...f.value},u.value=w}b()}const d=e.ref(null),h=e.ref(null),x=_=>{d.value=_},N=_=>{h.value=_},$=_=>{if(d.value===null||d.value===_){d.value=null,h.value=null;return}const w=[...u.value],[E]=w.splice(d.value,1);w.splice(_,0,E),u.value=w,d.value=null,h.value=null};return(_,w)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",J0,[e.createElementVNode("div",Q0,[e.createElementVNode("button",{onClick:w[0]||(w[0]=E=>p.value=!0),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 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...w[4]||(w[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Додати поле ",-1)])])])])):e.createCommentVNode("",!0),e.createElementVNode("div",eh,[e.createElementVNode("div",th,[e.createElementVNode("table",nh,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,E=>(e.openBlock(),e.createElementBlock("col",{key:E.key,style:e.normalizeStyle(E.type==="main"?`width: ${t.mainColWidth}`:E.width?`width: ${E.width}`:"auto")},null,4))),128)),w[5]||(w[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",oh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,E=>(e.openBlock(),e.createElementBlock("th",{key:E.key,class:"px-6 py-4"},e.toDisplayString(E.label),1))),128)),w[6]||(w[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),u.value.length?(e.openBlock(),e.createElementBlock("tbody",rh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(E,B)=>(e.openBlock(),e.createElementBlock("tr",{key:E.id||E.name||B,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":d.value===B,"border-t-2 border-b-2 border-blue-500 bg-blue-50":h.value===B}]),draggable:"true",onDragstart:z=>x(B),onDragover:e.withModifiers(z=>N(B),["prevent"]),onDrop:z=>$(B)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,z=>(e.openBlock(),e.createElementBlock("td",{key:z.key,class:"px-6 py-4 align-middle text-center"},[z.type==="main"?(e.openBlock(),e.createElementBlock("div",ah,[w[7]||(w[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(Lr)(E.format==="yes/no"?"check":E.format||E.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(vr)(E.format==="yes/no"?"check":E.format||E.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(E.format==="yes/no"?"icon-check":e.unref(Tr)["Icon"+o(E.format||E.type)]||e.unref(Tr).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",sh,[e.withDirectives((e.openBlock(),e.createElementBlock("p",ih,[e.createTextVNode(e.toDisplayString(E.name||E.id),1)])),[[e.unref(Py)]]),e.createElementVNode("p",ch,e.toDisplayString(E.ua||E.label||E.name||E.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[z.slot&&y(z.slot)?e.renderSlot(_.$slots,z.slot,{key:0,row:E,column:z,value:E[z.key],rowIndex:B},void 0,!0):z.type==="color"?(e.openBlock(),e.createElementBlock("div",dh,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${E[z.key]}]`])},null,2)])):["format","type","meta"].includes(z.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[E[z.key]?(e.openBlock(),e.createElementBlock("span",uh,e.toDisplayString(E[z.key]),1)):(e.openBlock(),e.createElementBlock("span",mh,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",ph,e.toDisplayString(E[z.key]),1))],64))]))),128)),e.createElementVNode("td",fh,[e.createVNode(jy,{columns:u.value,"onUpdate:columns":w[1]||(w[1]=z=>u.value=z),data:E,index:B,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,lh))),128))])):(e.openBlock(),e.createElementBlock("tr",gh,[e.createElementVNode("td",{colspan:m.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,yh)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:p.value,"onUpdate:visible":w[3]||(w[3]=E=>p.value=E)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:b,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"}," Скасувати "),e.createElementVNode("button",{type:"button",onClick:g,class:"px-4 py-2 rounded bg-blue-600 text-white"}," Зберегти1 ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{ref_key:"form",ref:c,modelValue:f.value,"onUpdate:modelValue":w[2]||(w[2]=E=>f.value=E),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),hh={class:"p-4 text-[13px]"},bh={class:"grid grid-cols-2 gap-x-6 gap-y-2"},xh=["id","checked","onChange"],kh={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},wh={class:"font-medium text-gray-900 truncate"},_h={class:"text-xs text-gray-500"},Eh={key:0,class:"text-xs text-[#B2C9D6]"},Ch={class:"flex justify-end gap-2 p-4 border-t w-full"},Wt=e.defineComponent({__name:"import-fields-dialog",props:e.mergeModels({fields:{default:()=>[]},title:{},idPrefix:{default:"import"},confirmText:{default:"Імпортувати"},cancelText:{default:"Скасувати"}},{visible:{type:Boolean,default:!1},visibleModifiers:{},selection:{default:[]},selectionModifiers:{}}),emits:e.mergeModels(["confirm","cancel"],["update:visible","update:selection"]),setup(t,{emit:n}){const o=e.useModel(t,"visible"),r=e.useModel(t,"selection"),a=t,i=n,s=e.defineAsyncComponent(()=>import("@opengis/core").then(x=>x.VsModal)),c=e.computed(()=>Array.isArray(a.fields)?a.fields.filter(Boolean):[]),p=x=>(x==null?void 0:x.name)??(x==null?void 0:x.id)??(x==null?void 0:x.key)??(x==null?void 0:x.code)??(x==null?void 0:x.field)??(x==null?void 0:x.value)??"",f=x=>String(p(x)??"").trim(),k=x=>(x==null?void 0:x.title)??(x==null?void 0:x.label)??f(x),l=x=>String((x==null?void 0:x.type)??"").trim(),y=e.computed(()=>new Set(r.value.map(x=>String(x??"").trim()))),u=x=>y.value.has(f(x)),m=x=>{const N=f(x);if(!N)return;const $=new Set(y.value);$.has(N)?$.delete(N):$.add(N),r.value=Array.from($)},b=e.computed(()=>a.confirmText||"Імпортувати"),g=e.computed(()=>a.cancelText||"Скасувати"),d=()=>{o.value=!1,i("cancel")},h=()=>{i("confirm"),o.value=!1};return(x,N)=>(e.openBlock(),e.createBlock(e.unref(s),{visible:o.value,"onUpdate:visible":N[0]||(N[0]=$=>o.value=$),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Ch,[e.createElementVNode("button",{onClick:d,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(g.value),1),e.createElementVNode("button",{onClick:h,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(b.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",hh,[e.createElementVNode("div",bh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,$=>(e.openBlock(),e.createElementBlock("label",{key:f($),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${f($)}`,checked:u($),onChange:_=>m($)},null,40,xh),e.createElementVNode("div",kh,[e.unref(Lr)($.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(vr)($.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${$.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",wh,e.toDisplayString(f($)),1),e.createElementVNode("p",_h,e.toDisplayString(k($)),1),l($)?(e.openBlock(),e.createElementBlock("p",Eh,e.toDisplayString(l($)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function Yt(t){return t==null?"":String(t).trim()}function Tt(t){return Yt((t==null?void 0:t.name)??(t==null?void 0:t.id)??(t==null?void 0:t.key)??(t==null?void 0:t.code)??(t==null?void 0:t.field)??(t==null?void 0:t.value)??"")}function Gt(t,n,o){const r=Array.isArray(t)?[...t]:[],a=Array.isArray(n)?n:[],{selectedKeys:i,resolveKey:s}=o,c=new Set;for(const l of i){const y=Yt(l);y&&c.add(y)}if(c.size===0)return[];const p=l=>Yt(s(l)),f=[],k=new Set;for(const l of r){const y=p(l);!y||!c.has(y)||(f.push(l),k.add(y))}for(const l of a){const y=p(l);!y||k.has(y)||!c.has(y)||(f.push(l),k.add(y))}return f}const Nh={class:"vs-form"},Vh={class:"vs-form__body auto-rows-max container"},Bh={class:"flex flex-wrap"},$h={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},Sh={class:"h-fit w-full flex flex-wrap"},vh={class:"w-full"},Lh=e.defineComponent({__name:"list-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,a=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=h=>Tt(h||{}),s=e.defineAsyncComponent(()=>import("@opengis/form")),c=e.ref(),p=e.ref(!1),f=e.ref([]),k=()=>{const h=y.value.map(x=>i(x)).filter(x=>x.length>0);f.value=[...h],p.value=!0},l=e.computed(()=>{var h,x;return((h=n.value)==null?void 0:h.token)||((x=n.value)==null?void 0:x.id)||"register-form"}),y=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.columns)||(n.value.columns=[]),n.value.columns),set:h=>{n.value||(n.value={}),n.value.columns=Array.isArray(h)?h:[]}}),u=e.computed({get:()=>n.value||{},set:h=>{var N;const x=Array.isArray((N=n.value)==null?void 0:N.columns)?n.value.columns:[];n.value={...n.value,...h,columns:x}}});e.watch(()=>c.value,h=>{o.value=h||null},{immediate:!0}),e.watch(p,h=>{h||(f.value=[])});const m=()=>{const h=new Set(f.value.map($=>Yt($)).filter($=>$.length>0)),x=Array.isArray(y.value)?[...y.value]:[],N=a.value.filter($=>h.has(i($))).map($=>{const _=i($),w=$.title??$.label??_;return{...$,name:_,label:w,type:$.type||"text",meta:$.meta??"features"}});y.value=Gt(x,N,{selectedKeys:f.value,resolveKey:i}),p.value=!1,f.value=[]},b={table_name:{type:"select",label:"Таблиця",required:!0,data:"pg.table_name",placeholder:"Таблиця в БД",validators:["required"],col:6},name:{type:"text",label:"Назва",required:!0,placeholder:"Назва",validators:["required"],col:6},query:{type:"text",label:"Умова",placeholder:"Умова",col:6},order:{type:"text",label:"Сортування",placeholder:"Сортування",col:6},description:{type:"textarea",label:"Опис",placeholder:"Опис",col:12}},g=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],d={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},is_export:{type:"switcher",label:"Експорт",info:"Чи експортувати дані колонки?",view:"switcher"},meta:{type:"combobox",label:"Мета",mode:"combo",options:[{text:"Title",id:"title"},{text:"Features",id:"features"},{text:"Status",id:"status"},{text:"Tags",id:"tags"},{text:"Category",id:"category"},{text:"Image",id:"image"}]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(h,x)=>(e.openBlock(),e.createElementBlock("div",Nh,[e.createElementVNode("div",Vh,[e.createElementVNode("div",Bh,[e.createElementVNode("div",$h,[(e.openBlock(),e.createBlock(e.unref(s),{ref_key:"formEl",ref:c,key:l.value,schema:b,modelValue:u.value,"onUpdate:modelValue":x[0]||(x[0]=N=>u.value=N)},null,8,["modelValue"]))]),e.createElementVNode("div",Sh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:k,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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...x[4]||(x[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",vh,[e.createVNode(Lt,{modelValue:y.value,"onUpdate:modelValue":x[1]||(x[1]=N=>y.value=N),"columns-scheme":g,"form-scheme":d,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:p.value,"onUpdate:visible":x[2]||(x[2]=N=>p.value=N),selection:f.value,"onUpdate:selection":x[3]||(x[3]=N=>f.value=N),fields:a.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:m},null,8,["visible","selection","fields"])]))}}),Th={class:"vs-form"},Ah={class:"vs-form__body auto-rows-max container"},Mh={class:"flex flex-wrap"},Dh={class:"h-fit w-full flex flex-wrap"},Fh={class:"w-full"},zh=e.defineComponent({__name:"filter-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,a=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=u=>Tt(u||{}),s=e.ref(!1),c=e.ref([]),p=()=>{const u=f.value.map(m=>i(m)).filter(m=>m.length>0);c.value=[...u],s.value=!0},f=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:u=>{n.value||(n.value={}),n.value.filters=Array.isArray(u)?u:[]}});e.watch(s,u=>{u||(c.value=[])});const k=()=>{const u=new Set(c.value.map(g=>Yt(g)).filter(g=>g.length>0)),m=Array.isArray(f.value)?[...f.value]:[],b=a.value.filter(g=>u.has(i(g))).map(g=>({name:i(g),label:g.title??g.label??i(g),type:g.type||"text"}));f.value=Gt(m,b,{selectedKeys:c.value,resolveKey:i}),s.value=!1,c.value=[]},l=[{key:"id",label:"Name"},{key:"label",label:"Назва"},{key:"type",label:"Тип"}],y={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},type:{type:"radio",label:"Тип",validators:["required"],position:"horizontal",options:[{text:"Check",id:"Check"},{text:"Range",id:"Range"},{text:"Date",id:"Date"},{text:"Text",id:"Text"},{text:"Select",id:"Select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["Select","Autocomplete","Check"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(u,m)=>(e.openBlock(),e.createElementBlock("div",Th,[e.createElementVNode("div",Ah,[e.createElementVNode("div",Mh,[m[4]||(m[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте фільтри реєстру. Оберіть поля для імпорту або відредагуйте властивості вручну. ")],-1)),e.createElementVNode("div",Dh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:p,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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...m[3]||(m[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",Fh,[e.createVNode(Lt,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=b=>f.value=b),"columns-scheme":l,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":m[1]||(m[1]=b=>s.value=b),selection:c.value,"onUpdate:selection":m[2]||(m[2]=b=>c.value=b),fields:a.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:k},null,8,["visible","selection","fields"])]))}}),Ih={class:"vs-form"},jh={class:"vs-form__body auto-rows-max container"},Ph={class:"flex flex-wrap"},Rh={class:"h-fit w-full flex flex-wrap"},Oh={class:"w-full"},Uh=e.defineComponent({__name:"card-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,a=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=u=>Tt(u||{}),s=e.ref(!1),c=e.ref([]),p=()=>{const u=f.value.map(m=>i(m)).filter(m=>m.length>0);c.value=[...u],s.value=!0},f=e.computed({get:()=>n.value.card,set:u=>{n.value||(n.value={}),n.value.card=Array.isArray(u)?u:[]}});e.watch(s,u=>{var m;if(u){const b=((m=f.value)==null?void 0:m.map(g=>g.name))||[];c.value=[...b]}});const k=()=>{const u=new Set(c.value.map(g=>Yt(g)).filter(g=>g.length>0)),m=Array.isArray(f.value)?[...f.value]:[],b=a.value.filter(g=>u.has(i(g))).map(g=>{const d=i(g),h=g.title??g.label??d;return{...g,name:d,label:h,format:g.format||g.type||"text",meta:g.meta||"title"}});f.value=Gt(m,b,{selectedKeys:c.value,resolveKey:i}),s.value=!1,c.value=[]},l=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"format",label:"Формат",type:"text"}],y={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(u,m)=>(e.openBlock(),e.createElementBlock("div",Ih,[e.createElementVNode("div",jh,[e.createElementVNode("div",Ph,[m[4]||(m[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте відображення картки. Оберіть потрібні поля та відредагуйте їхні властивості. ")],-1)),e.createElementVNode("div",Rh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:p,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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...m[3]||(m[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",Oh,[e.createVNode(Lt,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=b=>f.value=b),"columns-scheme":l,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":m[1]||(m[1]=b=>s.value=b),selection:c.value,"onUpdate:selection":m[2]||(m[2]=b=>c.value=b),fields:a.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:k},null,8,["visible","selection","fields"])]))}}),Ar={template1:Nr,template2:Vr,template3:Br,template4:$r,template5:Sr},qh={class:"space-y-4"},Hh={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},Wh={class:"text-lg font-semibold mb-4"},Yh={class:"bg-white"},Gh={key:1,class:"text-gray-400 text-center py-12"},Zh={key:2,class:"text-gray-400 text-center py-12"},Kh=e.defineComponent({__name:"preview-tab",props:e.mergeModels({hideDetailsButton:{type:Boolean,default:!1}},{data:{default:{}},dataModifiers:{}}),emits:["update:data"],setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.useModel(t,"data"),r=[{text:"template1",id:"template1"},{text:"template2",id:"template2"},{text:"template3",id:"template3"},{text:"template4",id:"template4"},{text:"template5",id:"template5"}],a={view:{type:"radio",label:"Вигляд",position:"horizontal",required:!0,options:r,col:12}},i=e.computed(()=>{var k;return Array.isArray((k=o.value)==null?void 0:k.columns)?o.value.columns:[]}),s=e.computed(()=>{var k;return((k=o.value)==null?void 0:k.view)||"template1"}),c=e.computed(()=>Ar[s.value]||Ar.template1),p=e.computed(()=>{var y;const k=(y=o.value)==null?void 0:y.view;if(!k)return"template1";const l=r.find(u=>u.id===k);return(l==null?void 0:l.text)||k}),f=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(l=>{var y,u;return{...l,service_id:(y=o.value)==null?void 0:y.service_id,is_map:(u=o.value)==null?void 0:u.is_map}}));return(k,l)=>(e.openBlock(),e.createElementBlock("div",qh,[e.createElementVNode("div",Hh,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:a,modelValue:o.value,"onUpdate:modelValue":l[0]||(l[0]=y=>o.value=y)},null,8,["modelValue"]))]),e.createElementVNode("h2",Wh," Превʼю таблиці ("+e.toDisplayString(p.value)+") ",1),e.createElementVNode("div",Yh,[c.value&&f.value.length&&i.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value),{items:f.value,columns:i.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:s.value},null,8,["items","columns","hide-details-button"])):f.value.length?(e.openBlock(),e.createElementBlock("div",Zh," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",Gh," Немає даних для превʼю "))])]))}}),Xh={class:"w-full mb-6"},Jh={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},Qh=["onClick"],Mr=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,r=a=>{o("update:activeTab",a)};return(a,i)=>(e.openBlock(),e.createElementBlock("div",Xh,[e.createElementVNode("div",Jh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,s=>(e.openBlock(),e.createElementBlock("button",{key:s.id,onClick:c=>r(s.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",s.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(s.name),11,Qh))),128))])]))}}),eb={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},tb={class:"mx-1"},nb={class:"text-gray-900 font-semibold"},ob={key:0,class:"text-center py-12 mt-6 px-[24px]"},rb={key:1,class:"px-[24px] overflow-y-auto"},lb={class:"space-y-6"},ab=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=Ie.useRoute(),o=Ie.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),a=e.computed(()=>{var d;return((d=o.resolve(r.value).meta)==null?void 0:d.title)??""}),i=e.computed(()=>{var d;return((d=y.value)==null?void 0:d.name)||"Налаштування реєстру"}),s=e.ref("list"),c=e.ref(""),p=e.ref(!0),f=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],k={list:Lh,filters:zh,card:Uh,preview:Kh},l=f.map(d=>d.id),y=e.ref({columns:[],filters:[],card:[],tableData:[]}),u=e.ref([]),m=async()=>{var h;if(!((h=y.value)==null?void 0:h.token)){ye.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const x=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y.value)});if(!x.ok)throw new Error(`Failed to save content: ${x.status}`);ye.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(x){ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(x)}},b=async d=>{try{const x=await(await fetch(`/api/gis-registry/${d}`)).json(),N=Array.isArray(x==null?void 0:x.rows)?x.rows:[];y.value.tableData=N.slice(0,3)}catch(h){console.error("Помилка завантаження превʼю:",h)}},g=async()=>{var d,h;try{p.value=!0;const N=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),$=((d=N==null?void 0:N.rows)==null?void 0:d[0])||{};c.value=$.register_key||"",y.value={...$,columns:Array.isArray($.columns)?$.columns:[],filters:Array.isArray($.filters)?$.filters:[],card:Array.isArray($.card)?$.card:[],tableData:Array.isArray($.tableData)?$.tableData:[]},(h=N==null?void 0:N.tokens)!=null&&h.edit&&(y.value.token=N.tokens.edit),u.value=Array.isArray(N==null?void 0:N.fields)?N.fields:[]}catch(x){console.error("Помилка завантаження даних:",x)}finally{p.value=!1}};return e.onMounted(async()=>{const d=n.query.tab;typeof d=="string"&&l.includes(d)&&(s.value=d),await g(),c.value&&await b(c.value)}),e.watch(s,d=>{n.query.tab!==d&&o.replace({query:{...n.query,tab:d}})}),e.watch(()=>n.query.tab,d=>{typeof d=="string"&&l.includes(d)&&s.value!==d&&(s.value=d)}),e.watch(()=>n.params.id,async(d,h)=>{!d||d===h||(await g(),c.value&&await b(c.value))}),(d,h)=>{const x=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",eb,[e.createVNode(Ht,{variant:"form",title:i.value},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(x,{to:r.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",tb,[e.createVNode(e.unref(pe.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",nb,e.toDisplayString(i.value),1)]),description:e.withCtx(()=>[...h[3]||(h[3]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:h[0]||(h[0]=N=>e.unref(o).back()),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium border h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700"}," Зберегти ")]),_:1},8,["title"]),p.value?(e.openBlock(),e.createElementBlock("div",ob,[...h[4]||(h[4]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",rb,[e.createVNode(Mr,{tabs:f,activeTab:s.value,"onUpdate:activeTab":h[1]||(h[1]=N=>s.value=N)},null,8,["activeTab"]),e.createElementVNode("div",lb,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(k[s.value]),{data:y.value,"onUpdate:data":h[2]||(h[2]=N=>y.value=N),fields:u.value,"hide-details-button":t.hideDetailsButton,key:s.value},null,40,["data","fields","hide-details-button"]))])]))])}}})},Symbol.toStringTag,{value:"Module"}));/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */function Dr(t){return typeof t>"u"||t===null}function sb(t){return typeof t=="object"&&t!==null}function ib(t){return Array.isArray(t)?t:Dr(t)?[]:[t]}function cb(t,n){var o,r,a,i;if(n)for(i=Object.keys(n),o=0,r=i.length;o<r;o+=1)a=i[o],t[a]=n[a];return t}function db(t,n){var o="",r;for(r=0;r<n;r+=1)o+=t;return o}function ub(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var mb=Dr,pb=sb,fb=ib,gb=db,yb=ub,hb=cb,ct={isNothing:mb,isObject:pb,toArray:fb,repeat:gb,isNegativeZero:yb,extend:hb};function Fr(t,n){var o="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(o+='in "'+t.mark.name+'" '),o+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!n&&t.mark.snippet&&(o+=`
1
+ (function(Ke,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):(Ke=typeof globalThis<"u"?globalThis:Ke||self,e(Ke.MapCustom={},Ke.Vue,Ke.vueRouter,Ke.lucide,Ke.openGIScore,Ke.openGISfilter,Ke.openGISform))})(this,(function(Ke,e,Ie,me,ge,Ln,Ko){"use strict";const an=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=Ie.useRoute(),r=e.useSlots(),a=e.computed(()=>{const i=String(o.params.id??""),s=String(o.params.action??"");return i?s===n.editAction?n.components.edit:i===n.createParam?n.components.create:n.components.card:n.components.table});return(i,s)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),{"entity-key":n.entityKey,"entity-base-path":n.entityBasePath,"columns-config":n.columnsConfig},e.createSlots({_:2},[e.renderList(e.unref(r),(c,p)=>({name:p,fn:e.withCtx(f=>[e.renderSlot(i.$slots,p,e.normalizeProps(e.guardReactiveProps(f)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),ea="registers",ta="/gis.registers",na=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>ab)),i={table:n,create:o,edit:r,card:a},s=[{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,p)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":ea,"entity-base-path":ta,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),oa="services",ra="/gis.datasets",la=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Yw)),i={table:n,create:o,edit:r,card:a},s=[{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(p){const f=String((p==null?void 0:p.text)||p||"").toLowerCase();return f.includes("error")||f.includes("inactive")?"bg-red-100 text-red-800":f.includes("warning")||f.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(p,f)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":oa,"entity-base-path":ra,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:k})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(k)])},e.toDisplayString((k==null?void 0:k.text)||k||"-"),3)]),_:1}))}}),aa="rasters",sa="/gis.rasters",ia=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>c2)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>__)),i={table:n,create:o,edit:r,card:a},s=[{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,p)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":aa,"entity-base-path":sa,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),ca="cartocss",da="/gis.cartocss",ua=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>NE)),i={table:n,create:o,edit:r,card:a},s=[{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(p){const f=String((p==null?void 0:p.text)||p||"").toLowerCase();return f.includes("error")||f.includes("inactive")?"bg-red-100 text-red-800":f.includes("warning")||f.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(p,f)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":ca,"entity-base-path":da,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:k})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(k)])},e.toDisplayString((k==null?void 0:k.text)||k||"-"),3)]),_:1}))}}),Ve=(t,n)=>{const o=t.__vccOpts||t;for(const[r,a]of n)o[r]=a;return o},ma={},pa={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 fa(t,n){return e.openBlock(),e.createElementBlock("svg",pa,[...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 Tn=Ve(ma,[["render",fa]]),ga={class:"gap-2 inline-flex"},ya=["href"],ha="maps",Xo="/gis.maps",ba=Ve(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Hn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>yn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>hn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>gC)),i={table:n,create:o,edit:r,card:a},s=[{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,p)=>(e.openBlock(),e.createBlock(an,{components:i,"entity-key":ha,"entity-base-path":Xo,"columns-config":s,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:f})=>[e.createElementVNode("div",ga,[e.createElementVNode("a",{href:`${Xo}/${f.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(Tn)],8,ya)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),xa={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%]"},ka={class:"pt-0 mt-0"},wa={key:0,class:"flex items-center justify-center py-12"},_a={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Ea={key:2,class:"text-center py-12 text-gray-500"},Ca={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},Na=["onClick"],Va={class:"flex items-start justify-between"},Ba={class:"flex items-start gap-3"},$a={class:"flex-1 min-w-0"},Sa={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},va=["onClick"],La={class:"relative"},Ta=["onClick"],Aa={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"},Ma={class:"text-xs text-gray-600 line-clamp-2"},Da={class:"flex items-center gap-2 shrink-0"},Fa={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},za={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},io=30,Ia=Ve(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=Ie.useRouter(),s=Ie.useRoute(),c=e.ref(Number(s.query.page)||1),p=e.ref(!1),f=e.ref(0),k=e.ref([]),l=e.computed(()=>{const w=(c.value-1)*io,E=w+io;return k.value.slice(w,E)}),y=e.ref(!0),u=e.ref(null),m=e.ref(null);let b=null,g=null;const d=(w="",E="")=>{const B=new URLSearchParams,F=w.trim();F&&B.set("search",F);const Y=(E||"").trim();Y&&B.set("type",Y);const P=B.toString();return P?`/api/user-cls?${P}`:"/api/user-cls"},h=async(w="",E="")=>{try{y.value=!0,u.value=null;const B=d(w,E),F=await fetch(B);if(!F.ok)throw new Error(`HTTP error: ${F.status}`);const Y=await F.json();if(k.value=Y.data,!w.trim())f.value=Y.data.length;else if(f.value===0){const P=await fetch(d("",E));if(P.ok){const Q=await P.json();f.value=Q.data.length}}a("update:counts",{filtered:k.value.length,total:f.value})}catch(B){u.value=B instanceof Error?B.message:"Failed to load classifiers",console.error("Error fetching classifiers:",B)}finally{y.value=!1}};e.onMounted(()=>{p.value=!0,h(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([w,E])=>{b&&clearTimeout(b),b=setTimeout(()=>{h(w,E??""),c.value=1},300)});const x=w=>{i.push({name:"classifier-detail",params:{name:w.name}})},N=()=>{h(r.search,r.type??"")},$=async w=>{try{await navigator.clipboard.writeText(w),m.value=w,g&&clearTimeout(g),g=setTimeout(()=>{m.value=null},500)}catch(E){console.error("Failed to copy text: ",E)}};n({refetch:N});const _=w=>{c.value=w,i.replace({query:{...s.query,page:String(w)}})};return(w,E)=>(e.openBlock(),e.createElementBlock("div",xa,[e.createElementVNode("div",ka,[y.value?(e.openBlock(),e.createElementBlock("div",wa,[e.createVNode(e.unref(me.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):u.value?(e.openBlock(),e.createElementBlock("div",_a,e.toDisplayString(u.value),1)):k.value.length===0?(e.openBlock(),e.createElementBlock("div",Ea," Нічого не знайдено ")):e.createCommentVNode("",!0),k.value.length>0?(e.openBlock(),e.createElementBlock("div",Ca,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(B,F)=>(e.openBlock(),e.createElementBlock("div",{key:F,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:Y=>x(B)},[e.createElementVNode("div",Va,[e.createElementVNode("div",Ba,[B.type==="sql"?(e.openBlock(),e.createBlock(e.unref(me.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(me.Code),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",$a,[e.createElementVNode("div",Sa,[e.createElementVNode("h4",{onClick:e.withModifiers(Y=>$(B.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(B.name),9,va),e.createElementVNode("div",La,[e.createElementVNode("button",{onClick:e.withModifiers(Y=>$(B.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(me.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,Ta),m.value===B.name?(e.openBlock(),e.createElementBlock("div",Aa," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",Ma,e.toDisplayString(B.description||"Опис відсутній"),1)])]),e.createElementVNode("div",Da,[B.type!="sql"?(e.openBlock(),e.createElementBlock("span",Fa,e.toDisplayString(B.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(me.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,Na))),128))])):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",za,[e.createVNode(e.unref(ge.VsPagination),{total:k.value.length,page:c.value,"page-size":io,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":_,onPageChange:_},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3556f06d"]]),ja={class:"bg-white rounded-lg shadow-xl max-w-md w-full overflow-hidden"},Pa={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Ra={class:"text-lg font-semibold text-gray-900"},Oa={key:0,class:"p-6 flex items-center justify-center"},Ua={key:1,class:"p-6"},qa={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Ha={class:"flex items-center gap-3 mt-6 pt-6 border-t border-gray-200"},Wa=["disabled"],Ya=["disabled"],Ga=e.defineComponent({__name:"DictModale",props:{editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,a=n,i=e.computed(()=>!!r.editData),s=e.ref(null),c=e.ref({name:"",description:"",alias:[]}),p=e.computed(()=>[{name:"name",type:"text",label:"Назва (унікальна)",placeholder:"Назва класифікатора",validators:["required"],disabled:i.value,hint:"Використовується як ідентифікатор в API"},{name:"description",type:"textarea",label:"Опис",placeholder:"Опис довідника"},{name:"alias",type:"tags",label:"Аліас",placeholder:"Аліас",addButtonText:"Додати аліас"}]),f=e.ref([]),k=e.ref(!1),l=e.ref(!1),y=e.ref(null),u=async g=>{try{l.value=!0;const d=await fetch(`/api/suggest/${encodeURIComponent(g)}`);if(!d.ok)throw new Error(`HTTP error: ${d.status}`);const h=await d.json();f.value=h.data||[]}catch(d){console.error("Error fetching suggest data:",d),f.value=[]}finally{l.value=!1}};e.onMounted(async()=>{r.editData&&(c.value={name:r.editData.name,description:r.editData.description||"",alias:r.editData.alias||[]},await u(r.editData.name))});const m=async()=>{var d,h;const g=(h=(d=s.value)==null?void 0:d.validate)==null?void 0:h.call(d);if(g){ge.notify({type:"warning",title:"Валідація",message:Object.entries(g).map(([x,N])=>`${x}: ${N}`).join(`
2
+ `)});return}if(c.value.name.trim())try{k.value=!0,y.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:f.value.length>0?f.value:[]},N=i.value?`/api/user-cls/${encodeURIComponent(c.value.name.trim())}`:"/api/user-cls",$=await fetch(N,{method:i.value?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!$.ok){const _=await $.json().catch(()=>({}));throw new Error(_.message||`HTTP error: ${$.status}`)}a("created"),a("close")}catch(x){let N="Помилка створення довідника";x instanceof Error?N=x.message:i.value&&(N="Помилка оновлення довідника"),ge.notify({type:"error",title:"Помилка",message:N}),console.error("Error saving classifier:",x)}finally{k.value=!1}},b=()=>{const g=document.createElement("input");g.type="file",g.accept=".json",g.onchange=d=>{var $;const h=($=d.target.files)==null?void 0:$[0];if(!h)return;const x=h.name.replace(/\.json$/i,"").trim(),N=new FileReader;N.onload=async _=>{try{const w=JSON.parse(_.target.result);if(!Array.isArray(w))throw new Error("Файл повинен містити масив обʼєктів");k.value=!0,y.value=null;const B=await fetch("/api/user-cls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:x,description:null,alias:null,data:w})});if(!B.ok){const F=await B.json().catch(()=>({}));throw new Error(F.message||`HTTP error: ${B.status}`)}ge.notify({title:"Імпорт успішний",type:"success",message:`Створено класифікатор "${x}" з ${w.length} записами`}),a("created"),a("close")}catch(w){ge.notify({title:"Помилка імпорту",type:"error",message:w.message||"Некоректний формат файлу"})}finally{k.value=!1}},N.readAsText(h)},g.click()};return(g,d)=>(e.openBlock(),e.createElementBlock("div",{onClick:d[3]||(d[3]=e.withModifiers(h=>a("close"),["self"])),class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},[e.createElementVNode("div",ja,[e.createElementVNode("div",Pa,[e.createElementVNode("h3",Ra,e.toDisplayString(i.value?"Редагувати довідник":"Створити довідник"),1),e.createElementVNode("button",{onClick:d[0]||(d[0]=h=>a("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(me.X),{width:20,height:20,"stroke-width":2,class:"lucide lucide-x-icon lucide-x"})])]),l.value?(e.openBlock(),e.createElementBlock("div",Oa,[e.createVNode(e.unref(me.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):(e.openBlock(),e.createElementBlock("div",Ua,[e.createVNode(e.unref(o),{ref_key:"formRef",ref:s,schema:p.value,values:c.value,"onUpdate:values":d[1]||(d[1]=h=>c.value=h)},null,8,["schema","values"]),y.value?(e.openBlock(),e.createElementBlock("div",qa,e.toDisplayString(y.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Ha,[e.createElementVNode("button",{type:"button",onClick:m,disabled:k.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"},[k.value?(e.openBlock(),e.createBlock(e.unref(me.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(k.value?"Збереження...":"Зберегти"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(k.value?"Створення...":"Створити"),1)],64))],8,Wa),e.createElementVNode("button",{type:"button",onClick:b,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:d[2]||(d[2]=h=>a("close")),disabled:k.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,Ya)])]))])]))}}),Za={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Ka={class:""},Xa={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Ja={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Qa={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},es={class:"w-full md:w-auto"},ts=["value"],ns={class:"relative w-full lg:w-[16rem]"},os={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},rs={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},ls=["value"],as=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,a=c=>{const p=c.target.value;r("update:filter",p)},i=e.ref(!1),s=()=>{r("refresh")};return(c,p)=>(e.openBlock(),e.createElementBlock("div",Za,[e.createElementVNode("div",Ka,[e.createElementVNode("h1",Xa,[p[4]||(p[4]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Ja,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),p[5]||(p[5]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Qa,[e.createElementVNode("div",es,[p[7]||(p[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:a},[...p[6]||(p[6]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,ts)]),e.createElementVNode("div",ns,[e.createElementVNode("div",os,[e.createElementVNode("div",rs,[e.createVNode(e.unref(me.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:p[0]||(p[0]=f=>c.$emit("update:modelValue",f.target.value))},null,40,ls),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:p[1]||(p[1]=f=>c.$emit("update:modelValue",""))},[e.createVNode(e.unref(me.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:p[2]||(p[2]=f=>i.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(me.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),p[8]||(p[8]=e.createTextVNode(" Додати ",-1))]),i.value?(e.openBlock(),e.createBlock(Ga,{key:0,onClose:p[3]||(p[3]=f=>i.value=!1),onCreated:s})):e.createCommentVNode("",!0)])]))}}),ss={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},is={key:0,class:"flex items-center justify-center py-12"},cs={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},ds={key:2,class:"text-center py-12 text-gray-500"},us={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},ms={class:"bg-gray-50 border-b border-gray-200"},ps={class:"divide-y divide-gray-200"},fs={class:"px-4 py-3 w-1/12"},gs={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},ys={class:"px-4 py-3 text-sm text-gray-600 font-mono"},hs={class:"px-4 py-3 w-1/12"},bs={class:"flex gap-1"},xs=["onClick"],ks=["onClick"],ws=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},emits:["edit"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=m=>{a("edit",m)},s=[{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([]),p=e.ref(!0),f=e.ref(null),k=e.computed(()=>{var b;if(!((b=r.search)!=null&&b.trim()))return c.value;const m=r.search.toLowerCase().trim();return c.value.filter(g=>{var d,h;return((d=g.text)==null?void 0:d.toLowerCase().includes(m))||((h=g.id)==null?void 0:h.toLowerCase().includes(m))})}),l=async m=>{try{p.value=!0,f.value=null;const b=await fetch(`/api/suggest/${encodeURIComponent(m)}`);if(!b.ok)throw new Error(`HTTP error: ${b.status}`);const g=await b.json();c.value=g.data}catch(b){f.value=b instanceof Error?b.message:"Failed to load items",console.error("Error fetching suggest items:",b)}finally{p.value=!1}},y=async(m,b)=>{ge.confirm({title:"Підтвердіть дію",type:"error",message:"Ви впевнені, що хочете видалити даний обʼєкт?",onConfirm:async()=>{const g=await fetch(`/api/user-cls/${m}/${b}`,{method:"DELETE"});if(!g.ok){ge.notify({type:"error",title:"Помилка",message:(await g.json()).error||"Something went wrong"});return}ge.notify({title:"Видалено",type:"success",message:"Обʼєкт успішно видалено"}),l(m)}})};return e.onMounted(()=>{r.classifierName&&l(r.classifierName)}),e.watch(()=>r.classifierName,m=>{m&&l(m)}),n({refetch:()=>{l(r.classifierName)}}),(m,b)=>(e.openBlock(),e.createElementBlock("div",ss,[p.value?(e.openBlock(),e.createElementBlock("div",is,[e.createVNode(e.unref(me.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):f.value?(e.openBlock(),e.createElementBlock("div",cs,e.toDisplayString(f.value),1)):c.value.length===0?(e.openBlock(),e.createElementBlock("div",ds," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",us,[e.createElementVNode("thead",ms,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,g=>e.createElementVNode("th",{key:g.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[g.width,g.align]])},e.toDisplayString(g.label),3)),64))])]),e.createElementVNode("tbody",ps,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,g=>(e.openBlock(),e.createElementBlock("tr",{key:g.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",fs,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:g.color})},null,4)]),e.createElementVNode("td",gs,e.toDisplayString(g.text),1),e.createElementVNode("td",ys,e.toDisplayString(g.id),1),e.createElementVNode("td",hs,[e.createElementVNode("div",bs,[e.createElementVNode("button",{onClick:d=>i(g),class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати"},[e.createVNode(e.unref(me.PenLine),{size:14,"stroke-width":2})],8,xs),e.createElementVNode("button",{onClick:d=>y(t.classifierName,g.id),class:"p-1 text-gray-400 hover:text-red-600 transition-all rounded hover:bg-red-50",title:"Видалити"},[e.createVNode(e.unref(me.Trash2),{size:14,"stroke-width":2})],8,ks)])])]))),128))])]))]))}}),_s={class:"bg-white rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto"},Es={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Cs={class:"text-lg font-semibold text-gray-900"},Ns={class:"space-y-5"},Vs={class:"space-y-3"},Bs={class:"grid grid-cols-6 gap-2"},$s=["onClick"],Ss={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},vs={class:"flex items-center gap-3 pt-6"},Ls=["disabled"],Ts=["disabled"],As=e.defineComponent({__name:"TableAddModale",props:{classifierName:{},editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=t,r=n,a=["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)"],i=e.ref(null),s=e.ref(!1),c=e.ref(null),p=e.reactive({id:"",text:""});e.onMounted(()=>{o.editData&&(p.id=o.editData.id||"",p.text=o.editData.text,i.value=o.editData.color||null)});const f=async()=>{if(p.text.trim())try{s.value=!0,c.value=null;const k=await fetch(`/api/suggest/${encodeURIComponent(o.classifierName)}`);if(!k.ok)throw new Error(`HTTP error: ${k.status}`);const y=(await k.json()).data||[],u={id:p.id.trim(),text:p.text.trim(),color:i.value||null};let m;o.editData?m=y.map(g=>{var d;return g.id===((d=o.editData)==null?void 0:d.id)?u:g}):m=[...y,u];const b=await fetch(`/api/user-cls/${encodeURIComponent(o.classifierName)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.classifierName,data:m})});if(!b.ok){const g=await b.json().catch(()=>({}));throw new Error(g.message||`HTTP error: ${b.status}`)}r("created"),r("close")}catch(k){c.value=k instanceof Error?k.message:"Помилка збереження",console.error("Error saving record:",k)}finally{s.value=!1}};return(k,l)=>(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:l[4]||(l[4]=e.withModifiers(y=>r("close"),["self"]))},[e.createElementVNode("div",_s,[e.createElementVNode("div",Es,[e.createElementVNode("h2",Cs,e.toDisplayString(t.editData?"Редагувати запис":"Додати запис"),1),e.createElementVNode("button",{onClick:l[0]||(l[0]=y=>r("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(me.X),{width:20,height:20,"stroke-width":2,class:""})])]),e.createElementVNode("form",{class:"p-6",onSubmit:e.withModifiers(f,["prevent"])},[e.createElementVNode("div",Ns,[e.createElementVNode("div",null,[l[6]||(l[6]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"}," Колір ",-1)),e.createElementVNode("div",Vs,[e.createElementVNode("div",Bs,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,y=>e.createElementVNode("button",{key:y,type:"button",class:e.normalizeClass(["w-full aspect-square rounded-lg border-2 transition-all",i.value===y?"border-gray-900 scale-110":"border-gray-300 hover:border-gray-400"]),style:e.normalizeStyle({backgroundColor:y}),onClick:u=>i.value=y},null,14,$s)),64))]),l[5]||(l[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,[l[7]||(l[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":l[1]||(l[1]=y=>p.id=y),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,p.id]])]),e.createElementVNode("div",null,[l[8]||(l[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":l[2]||(l[2]=y=>p.text=y),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,p.text]])])]),c.value?(e.openBlock(),e.createElementBlock("div",Ss,e.toDisplayString(c.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",vs,[e.createElementVNode("button",{type:"submit",disabled:s.value||!p.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"},[s.value?(e.openBlock(),e.createBlock(e.unref(me.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(s.value?"Збереження...":t.editData?"Зберегти зміни":"Зберегти"),1)],8,Ls),e.createElementVNode("button",{type:"button",onClick:l[3]||(l[3]=y=>r("close")),disabled:s.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,Ts)])],32)])])]))}}),Ms={class:"space-y-6 flex-1 overflow-y-auto p-0"},Ds={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Fs={class:"text-gray-900"},zs={class:"flex items-start justify-between mb-6"},Is={class:"flex-1 mr-4"},js={class:"text-2xl font-bold text-gray-900"},Ps={key:0,class:"flex items-center gap-2 group mt-1"},Rs={class:"text-sm text-gray-500"},Os={key:1,class:"flex items-center gap-2 mt-1"},Us=["disabled"],qs=["disabled"],Hs={class:"flex items-center gap-3"},Ws={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4 grid grid-cols-2 justify-between"},Ys={class:"relative max-w-md grid"},Gs={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},Zs={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},Ks=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Ie.useRouter(),o=Ie.useRoute(),r=e.computed(()=>o.params.name),a=e.ref(!1),i=e.ref(null),s=e.ref(null),c=e.ref(""),p=e.ref(""),f=e.ref(""),k=e.ref(!1),l=e.ref(!1),y=e.ref(null),u=async()=>{var _;try{const w=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!w.ok)return;const B=(_=(await w.json()).data)==null?void 0:_[0];B&&(p.value=B.description||"")}catch(w){console.error("Error fetching classifier details:",w)}},m=()=>{f.value=p.value,k.value=!0,e.nextTick(()=>{var _;(_=y.value)==null||_.focus()})},b=()=>{k.value=!1,f.value=""},g=async()=>{try{l.value=!0;const E=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],B={name:r.value,description:f.value.trim()||null,data:E},F=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)});if(!F.ok)throw new Error(`HTTP error: ${F.status}`);p.value=f.value,k.value=!1}catch(_){console.error("Error saving description:",_)}finally{l.value=!1}};e.onMounted(()=>{u()}),e.watch(r,()=>{u()});const d=()=>{i.value=null,a.value=!0},h=_=>{i.value=_,a.value=!0},x=()=>{a.value=!1,i.value=null},N=()=>{var _;(_=s.value)==null||_.refetch()},$=async()=>{try{const _=await fetch(`/api/suggest/${encodeURIComponent(r.value)}`);if(!_.ok)throw new Error(`HTTP error: ${_.status}`);const E=(await _.json()).data||[],B=new Blob([JSON.stringify(E,(P,Q)=>Q===null?void 0:Q,2)],{type:"application/json"}),F=URL.createObjectURL(B),Y=document.createElement("a");Y.href=F,Y.download=`${r.value}.json`,document.body.appendChild(Y),Y.click(),document.body.removeChild(Y),URL.revokeObjectURL(F),ge.notify({title:"Експорт завершено",type:"success",message:"Файл успішно експортовано"})}catch(_){console.error("Error exporting classifier to json:",_),ge.notify({title:"Помилка",type:"error",message:"Не вдалося експортувати дані"})}};return(_,w)=>(e.openBlock(),e.createElementBlock("div",Ms,[e.createElementVNode("div",null,[e.createElementVNode("div",Ds,[e.createElementVNode("button",{onClick:w[0]||(w[0]=E=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),w[4]||(w[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Fs,e.toDisplayString(r.value),1)]),e.createElementVNode("div",zs,[e.createElementVNode("div",Is,[e.createElementVNode("h1",js,e.toDisplayString(r.value),1),k.value?(e.openBlock(),e.createElementBlock("div",Os,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":w[1]||(w[1]=E=>f.value=E),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(g,["enter"]),e.withKeys(b,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,f.value]]),e.createElementVNode("button",{onClick:g,disabled:l.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(me.Check),{width:18,height:18,"stroke-width":2})],8,Us),e.createElementVNode("button",{onClick:b,disabled:l.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(me.X),{width:18,height:18,"stroke-width":2})],8,qs)])):(e.openBlock(),e.createElementBlock("div",Ps,[e.createElementVNode("p",Rs,e.toDisplayString(p.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:m,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(me.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Hs,[e.createElementVNode("button",{onClick:d,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(me.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),w[5]||(w[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:w[2]||(w[2]=E=>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",Ws,[e.createElementVNode("div",Ys,[e.createElementVNode("div",Gs,[e.createElementVNode("div",Zs,[e.createVNode(e.unref(me.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[3]||(w[3]=E=>c.value=E),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:$,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"}," Експорт ")]),a.value?(e.openBlock(),e.createBlock(As,{key:0,"classifier-name":r.value,"edit-data":i.value,onClose:x,onCreated:N},null,8,["classifier-name","edit-data"])):e.createCommentVNode("",!0),e.createVNode(ws,{ref_key:"detailsTableRef",ref:s,"classifier-name":r.value,search:c.value,onEdit:h},null,8,["classifier-name","search"])]))}}),Xs={class:"flex-col justify-between h-full"},Js={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},Qs=e.defineComponent({__name:"index",setup(t){const n=Ie.useRoute(),o=e.ref(""),r=e.ref(""),a=e.ref(null),i=e.ref({filtered:0,total:0}),s=p=>{i.value=p},c=()=>{var p;(p=a.value)==null||p.refetch()};return(p,f)=>(e.openBlock(),e.createElementBlock("div",Xs,[e.createElementVNode("div",Js,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(as,{key:0,modelValue:o.value,"onUpdate:modelValue":f[0]||(f[0]=k=>o.value=k),filter:r.value,"onUpdate:filter":f[1]||(f[1]=k=>r.value=k),counts:i.value,onRefresh:c},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(Ks,{key:2})):(e.openBlock(),e.createBlock(Ia,{key:1,ref_key:"gridRef",ref:a,search:o.value,type:r.value,"onUpdate:counts":s},null,8,["search","type"]))]),f[2]||(f[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),ei={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},ti={class:"w-full bg-white relative"},ni={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},oi={key:0,class:"bg-white divide-y divide-gray-200"},ri={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},li=["onClick"],ai={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},si={key:1,class:"px-6 py-3.5"},ii={class:"text-sm font-semibold text-gray-900"},ci={class:"text-xs text-gray-400 mt-0.5"},di={key:0,class:"inline-flex items-center cursor-pointer"},ui={class:"relative"},mi=["checked","onChange"],pi=["checked","onChange"],fi={class:"px-6 py-3"},gi={class:"ml-6"},yi={class:"text-sm text-black font-medium"},hi={class:"text-xs text-gray-400 mt-0.5"},bi=["checked","onChange"],xi={key:1},ki=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),s=e.ref({}),c=e.ref({}),p=e.computed(()=>{var x;return((x=r.data)==null?void 0:x.routers)||[]});e.watch(()=>r.modelValue,x=>{const N={};(x||[]).forEach($=>{N[$.id]=new Set($.actions||[])}),c.value=N},{immediate:!0});function f(){const x=Object.entries(c.value).map(([N,$])=>({id:N,actions:Array.from($)}));a("update:modelValue",x)}function k(x){return x?x.id||x.path||x.table||x.ua||JSON.stringify(x):""}function l(x){return x?x.id||x.ua||x.name:""}function y(x){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[x]||x}function u(x,N){var _;const $=k(x);return((_=c.value[$])==null?void 0:_.has(N))||!1}function m(x){const N=l(x);return s.value[N]===!0}function b(x){const N=l(x);s.value[N]=!m(x)}function g(x,N){var $;return($=x.menu)!=null&&$.length?x.menu.every(_=>u(_,N)):u(x,N)}function d(x,N,$){var _;if((_=x.menu)!=null&&_.length){const w={...c.value};x.menu.forEach(E=>{const B=k(E),F=new Set(w[B]||[]);$?F.add(N):F.delete(N),w[B]=F}),c.value=w,f()}}function h(x,N,$){const _=k(x),w=new Set(c.value[_]||[]);$?w.add(N):w.delete(N),c.value={...c.value,[_]:w},f()}return n({getSelected:()=>r.modelValue}),(x,N)=>{var $;return e.openBlock(),e.createElementBlock("div",ei,[e.createElementVNode("table",ti,[e.createElementVNode("thead",ni,[e.createElementVNode("tr",null,[N[0]||(N[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(i.value,_=>(e.openBlock(),e.createElementBlock("th",{key:_,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(y(_)),1))),128))])]),($=p.value)!=null&&$.length?(e.openBlock(),e.createElementBlock("tbody",oi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,_=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:k(_)},[e.createElementVNode("tr",ri,[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:w=>b(_)},[e.createElementVNode("button",ai,[e.createVNode(e.unref(me.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":m(_)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(_.ua),1)])],8,li)):(e.openBlock(),e.createElementBlock("td",si,[e.createElementVNode("div",ii,e.toDisplayString(_.ua),1),e.createElementVNode("div",ci,e.toDisplayString(_.path||_.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,w=>(e.openBlock(),e.createElementBlock("td",{key:w,class:"px-4 py-3.5 text-center"},[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("label",di,[e.createElementVNode("div",ui,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:g(_,w),onChange:E=>d(_,w,E.target.checked)},null,40,mi),N[1]||(N[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:u(_,w),onChange:E=>h(_,w,E.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,pi))]))),128))]),_!=null&&_.menu&&m(_)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.menu,w=>(e.openBlock(),e.createElementBlock("tr",{key:k(w),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",fi,[e.createElementVNode("div",gi,[e.createElementVNode("div",yi,e.toDisplayString(w.ua),1),e.createElementVNode("div",hi,e.toDisplayString(w.path||w.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,E=>(e.openBlock(),e.createElementBlock("td",{key:E,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:u(w,E),onChange:B=>h(w,E,B.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,bi)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",xi,[...N[2]||(N[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),wi={class:"flex flex-col gap-4 mt-2 mx-2"},_i={class:"flex items-center gap-3"},Ei={class:"flex-1 relative"},Ci=e.defineComponent({__name:"VsPermissions",setup(t){const n=Ie.useRoute(),o=e.ref(""),r=e.ref(null),a=e.ref({categories:[],layers:[]}),i=e.ref([]),s=e.ref(["edit"]),c=e.computed(()=>f(a.value)),p=e.computed(()=>{const y=o.value.toLowerCase().trim();return y?c.value.map(u=>{const m=String(u.ua||"").toLowerCase().includes(y),b=(u.menu||[]).filter(g=>String(g.ua||"").toLowerCase().includes(y));return m?{...u,menu:u.menu}:b.length?{...u,menu:b}:null}).filter(Boolean):c.value}),f=y=>{const u=y.categories||[],m=y.layers||[],b=u.map(d=>{const h=m.filter(x=>x.category_id===d.category_id).map(x=>({id:String(x.layer_id),ua:x.name,path:String(x.layer_id)}));return h.length?{ua:d.name,menu:h,id:String(d.category_id)}:null}).filter(Boolean),g=m.filter(d=>!d.category_id).map(d=>({ua:d.name,id:String(d.layer_id),path:String(d.layer_id)}));return g.length&&b.push({ua:"Без категорії",menu:g,id:"noCategory"}),b},k=async()=>{const[y,u]=await Promise.all([fetch("/api/catalog").then(m=>m.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(m=>m.json())]);a.value=y,i.value=((u==null?void 0:u.layer_list)||[]).filter(m=>m.service_id).map(m=>({id:String(m.service_id),actions:m.actions||[]}))},l=async()=>{var m,b;const u=(((b=(m=r.value)==null?void 0:m.getSelected)==null?void 0:b.call(m))||i.value).filter(g=>{var d;return(d=g.actions)==null?void 0:d.length}).map(g=>({service_id:g.id,actions:g.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)}).then(g=>g.json()).then(g=>{ge.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(g=>{ge.notify({title:"Помилка",message:g.message,type:"error"})})};return e.onMounted(k),(y,u)=>(e.openBlock(),e.createElementBlock("div",wi,[e.createElementVNode("div",_i,[e.createElementVNode("div",Ei,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=m=>o.value=m),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:u[1]||(u[1]=m=>y.$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:l}," Зберегти ")]),e.createVNode(ki,{ref_key:"accessRef",ref:r,data:{routers:p.value},modelValue:i.value,"onUpdate:modelValue":u[2]||(u[2]=m=>i.value=m),actions:s.value},null,8,["data","modelValue","actions"])]))}});function Rt(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function Ft(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Rt(t[0]),o=Rt(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return Ft(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 a=Rt(o),i=Rt(r);if(a!=null&&i!=null)return[a,i]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Rt(n),a=Rt(o);return r!=null&&a!=null?[r,a]:null}return null}const Jo=Symbol("MapContext");function Ni(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const a=[],i=()=>{r=!0,a.length&&a.forEach(u=>u())},s=()=>{const u=t.container;return typeof u=="string"?document.getElementById(u):(u==null?void 0:u.value)!==void 0?u.value:u},c=()=>r?Promise.resolve():new Promise(u=>a.push(u)),p=(u,m)=>{if(u==null)return m;const b=Number(typeof u=="string"?u.trim():u);return Number.isFinite(b)?b:m},f=u=>{if(!n.value||!u)return;const m=Ft(u.center);m&&n.value.setCenter(m);const b=n.value.getZoom(),g=p(u.zoom,b);if(g!==b&&n.value.setZoom(g),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const d=n.value.getMaxZoom(),h=p(u.maxZoom,d);h!==d&&n.value.setMaxZoom(h)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const d=n.value.getMinZoom(),h=p(u.minZoom,d);h!==d&&n.value.setMinZoom(h)}u.bounds&&n.value.fitBounds(u.bounds,{animate:!1})},k=async()=>{var N,$,_,w,E,B,F;if(typeof window>"u"||n.value)return;const u=s();if(!u)throw new Error("Map container not found");const m=e.unref(t.settings)||null,b=Ft((N=m==null?void 0:m.map)==null?void 0:N.center)||[30,50],g=p(($=m==null?void 0:m.map)==null?void 0:$.zoom,7),d=p((_=m==null?void 0:m.map)==null?void 0:_.maxZoom,20),x={...{attributionControl:!1,center:b,zoom:g,maxZoom:d,minZoom:4},...t.mapOptions||{},container:u};x.maxZoom==null&&(x.maxZoom=d),n.value=new maplibregl.Map(x),(w=t.controls)!=null&&w.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var Q;const Y=n.value.getContainer(),P=(Q=Y==null?void 0:Y.querySelector)==null?void 0:Q.call(Y,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");P&&typeof n.value.easeTo=="function"&&P.addEventListener("click",Z=>{Z.preventDefault(),Z.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(E=t.controls)!=null&&E.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(B=t.controls)!=null&&B.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(F=t.controls)!=null&&F.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var Y;f((Y=e.unref(t.settings))==null?void 0:Y.map),o.value=!0,i()})};e.watch(()=>{var u;return(u=e.unref(t.settings))==null?void 0:u.map},u=>{f(u)},{deep:!0});const l=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(k),e.onUnmounted(l);const y={map:n,ready:c,flyTo:u=>{var m;return(m=n.value)==null?void 0:m.flyTo(u)},fitBounds:(u,m)=>{var b;return(b=n.value)==null?void 0:b.fitBounds(u,m)},setCenter:u=>{var m;return(m=n.value)==null?void 0:m.setCenter(u)},setZoom:u=>{var m;return(m=n.value)==null?void 0:m.setZoom(u)},addControl:(u,m)=>{var b;return(b=n.value)==null?void 0:b.addControl(u,m)},removeControl:u=>{var m;return(m=n.value)==null?void 0:m.removeControl(u)},on:(u,m,b)=>{var g,d;return typeof m=="string"?((g=n.value)==null||g.on(u,m,b),()=>{var h;return(h=n.value)==null?void 0:h.off(u,m,b)}):((d=n.value)==null||d.on(u,m),()=>{var h;return(h=n.value)==null?void 0:h.off(u,m)})},off:(u,m,b)=>{var g,d;typeof m=="string"?(g=n.value)==null||g.off(u,m,b):(d=n.value)==null||d.off(u,m)},project:u=>{var m;return(m=n.value)==null?void 0:m.project(u)},unproject:u=>{var m;return(m=n.value)==null?void 0:m.unproject(u)}};return e.provide(Jo,y),y}function et(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(Jo);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Qo=Symbol.for("gis.settingsRef");function co(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[Qo];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[Qo]=o),o}const Vi={class:""},An=Ve(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),a=e.ref(null),i=co(),s=Ni({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!0,scale:!0},settings:i});async function c(){var l;await e.nextTick();const k=(l=s.map)==null?void 0:l.value;k!=null&&k.resize&&k.resize()}function p(){typeof ResizeObserver>"u"||a.value||!r.value||(a.value=new ResizeObserver(()=>{c()}),a.value.observe(r.value))}function f(){var k;(k=a.value)==null||k.disconnect(),a.value=null}return e.onMounted(()=>{c(),p(),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",c),f()}),n({ctx:s}),(k,l)=>(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",Vi,[e.renderSlot(k.$slots,"default",{},void 0,!0)])],512))}}),[["__scopeId","data-v-558f0621"]]),Bi=["Noto Sans Regular"],$i=12,Si="#0f172a",vi="#fff",Li=14;function rt(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 Ti(t){return t?Array.isArray(t)?t:[t]:Bi}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 Ai(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 Mi(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 Di(t,n={}){if(!t)return[];const o=rt(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Ai(o);if(!r)return[];const a=r,i=(n.geometry||t.type||"point").toString().toLowerCase(),s=rt(t,["text-font","textFont"]),c=uo(rt(t,["text-size","textSize"]),$i),p=rt(t,["text-allow-overlap","textAllowOverlap"]),f=rt(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),k=rt(t,["text-maxzoom","textMaxZoom","maxzoom"]),l=rt(t,["text-color","textColor"])||Si,y=rt(t,["text-halo-color","textHaloColor"])||vi,u=rt(t,["text-halo-width","textHaloWidth"]),m=rt(t,["text-halo-blur","textHaloBlur"]),b=rt(t,["text-offset","textOffset"]),g=rt(t,["text-anchor","textAnchor"]),d=rt(t,["text-justify","textJustify"]),h=rt(t,["text-letter-spacing","textLetterSpacing"]),x=rt(t,["text-transform","textTransform"]),N=rt(t,["symbol-placement","symbolPlacement"]),$=rt(t,["symbol-spacing","symbolSpacing"]),_=rt(t,["text-rotation-alignment","textRotationAlignment"]),w=rt(t,["text-pitch-alignment","textPitchAlignment"]),E=rt(t,["text-opacity","textOpacity"]),B={"text-field":a,"text-font":Ti(s),"text-size":c,"text-allow-overlap":p??!1};b&&(B["text-offset"]=b),i!=="line"&&(B["text-anchor"]=g??"center"),d&&(B["text-justify"]=d),h!==void 0&&(B["text-letter-spacing"]=h),x&&(B["text-transform"]=x),$!==void 0&&(B["symbol-spacing"]=$),i==="line"?(B["symbol-placement"]=N||"line",B["text-rotation-alignment"]=_||"map",B["text-pitch-alignment"]=w||"map"):(_&&(B["text-rotation-alignment"]=_),w&&(B["text-pitch-alignment"]=w),N&&(B["symbol-placement"]=N)),g&&i==="line"&&(B["text-anchor"]=g);const F={"text-color":l,"text-opacity":E??1};F["text-halo-color"]=y,u!==void 0&&(F["text-halo-width"]=u),m!==void 0&&(F["text-halo-blur"]=m);const Y={type:"symbol",layout:B,paint:F},P=uo(f,Li);if(Y.minzoom=P,k!==void 0){const Z=uo(k,void 0);Z!==void 0&&(Y.maxzoom=Z)}const Q=Mi(n.filter,n.excludeClusters);return Q&&(Y.filter=Q),[Y]}const Ot="#9ca3af";function mo(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const po=new Map,fo={};function go(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,Ot]}return null}function Fi(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.split("+")[0];return Object.values(t.colors).forEach(r=>{n.push(`${o}+${r.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((r,[a,i],s)=>r.concat([a,n[s]]),[]),t.icon]}function Ut(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function zi(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 a=["get","point_count"],i=["has","point_count"],s=["!",i],f={type:"circle",maxzoom:r,filter:i,paint:{"circle-color":["step",a,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",a,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},k={type:"symbol",maxzoom:r,filter:i,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],a]],"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}},l={...n,filter:["all",s,n.filter||!0]};return[f,k,l]}function er(t,n){const o=go(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||Ot,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},a=zi(t,r);return a||r}function Ii(t){const n=go(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||Ot,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||Ot}}}function ji(t){return{type:"line",paint:{"line-color":go(t)||t.color||Ot,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Pi(t){const n=Fi(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 tr(t,n={}){if(!t)return[];if(!Ri(t))return[];const o=[];t.icon&&Ut(o,Pi(t)),t.pointZoom&&Ut(o,er(t,t.pointZoom)),t.type==="polygon"?Ut(o,Ii(t)):t.type==="line"?Ut(o,ji(t)):Ut(o,er(t));const a=n.sourceType!=="raster"?Di(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Ut(o,a),o.filter(Boolean)}function Ri(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 nr(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let a=mo(t);if(a&&o&&(a.filter=o),a)return tr(a,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const i={type:"point",color:Ot};return o&&(i.filter=o),tr(i,{sourceType:n})}return[]}function Oi(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function or(t,n,o){const r=[n],a=n.split("+")[0];Object.values(o||{}).forEach(i=>{r.push(`${a}+${i.replace("#","")}.png`)});for(const i of r){if(t.getImage(i))continue;const s=await t.loadImage(`/api/gis-icon/${i}`);t.addImage(i,s.data)}}function Me(t,n,o){var P,Q;if(!t)return fo;if(!n)return fo[t];const{map:r,ready:a=()=>Promise.resolve()}=et(o),i=t||((P=n.layer)==null?void 0:P.id),s=n.sourceId??t,c={...n};c.point&&(c.source=Oi(c.point)),!c.layer&&((Q=c.source)==null?void 0:Q.type)==="raster"&&(c.layer={id:s,type:"raster",source:s}),c.layer&&!c.layer.source&&Object.assign(c.layer,{source:s});let p=!1,f=!1;const k=()=>{var Z,ae,X,G,M,j,z,v,R,J;if(!(f||!r.value)){if(c.source&&!r.value.getSource(s)&&r.value.addSource(s,c.source),!r.value.getLayer(i)){const ue=c.beforeId===0?(ae=(Z=r.value.getStyle().layers)==null?void 0:Z[0])==null?void 0:ae.id:c.beforeId;(G=(X=c.layer)==null?void 0:X.style)!=null&&G.icon&&or(r.value,c.layer.style.icon,c.layer.style.colors);const fe=((M=c.source)==null?void 0:M.type)||((j=c.layer)==null?void 0:j.type),ie=c.layer&&(c.layer.type||c.layer.ref)?c.layer:null,le=(z=c.layer)==null?void 0:z.style,S=((v=c.layer)==null?void 0:v["source-layer"])||((R=c.source)==null?void 0:R["source-layer"])||c.sourceLayer||s,I=c.style||le,A=nr(I,{sourceType:fe,filter:(J=c.layer)==null?void 0:J.filter,allowFallback:!ie});if(!A.length){if(ie){const H={...ie,id:ie.id||i,source:ie.source||s};fe==="vector"&&S&&(H["source-layer"]=H["source-layer"]||S),r.value.addLayer(H,ue)}return}A.forEach((H,ne)=>{const pe={...H,id:`${i}${ne||""}`,source:s};fe==="vector"&&S&&(pe["source-layer"]=S),r.value.addLayer(pe,ue)})}p=!0}};a().then(k);const l=(Z,ae)=>r.value?(r.value.on(Z,i,ae),()=>{var X;return(X=r.value)==null?void 0:X.off(Z,i,ae)}):()=>{},y=Z=>{const ae=r.value;if(!ae)return;const X=ae.getStyle(),G=X==null?void 0:X.layers;if(!(G!=null&&G.length))return;const M=Z?"visible":"none";G.filter(j=>j.source===s||j.id===i||typeof j.id=="string"&&j.id.startsWith(String(i))).forEach(j=>{ae.setLayoutProperty(j.id,"visibility",M)})},u=(Z=!0)=>{var X,G,M;if(!r.value)return;(((M=(G=(X=r.value).getStyle)==null?void 0:G.call(X))==null?void 0:M.layers)??[]).filter(j=>j.source===i).forEach(j=>{r.value.removeLayer(j.id)}),f=!0,c.source&&Z&&r.value.getSource(s)&&r.value.removeSource(s)},m=async Z=>{var M,j,z,v,R;if(!r.value)return;Z!=null&&Z.icon&&or(r.value,Z.icon,Z.colors);const ae=((M=c.source)==null?void 0:M.type)||((j=c.layer)==null?void 0:j.type),X=((z=c.layer)==null?void 0:z["source-layer"])||((v=c.source)==null?void 0:v["source-layer"])||c.sourceLayer||s,G=nr(Z,{sourceType:ae,filter:(R=c.layer)==null?void 0:R.filter,allowFallback:!0});u(!1),G.forEach((J,ue)=>{var ie;const fe={...J,id:`${i}${ue}`,source:((ie=c.layer)==null?void 0:ie.source)||s};ae==="vector"&&X&&(fe["source-layer"]=fe["source-layer"]||X),r.value.addLayer(fe)})},b=Z=>{r.value&&Object.entries(Z).forEach(([ae,X])=>{r.value.setPaintProperty(i,ae,X)})},g=(Z,ae,X)=>{const G=r.value;if(G)switch(ae){case"raster":G.setPaintProperty(Z,"raster-opacity",X);break;case"fill":G.setPaintProperty(Z,"fill-opacity",X);break;case"line":G.setPaintProperty(Z,"line-opacity",X);break;case"circle":G.setPaintProperty(Z,"circle-opacity",X);break;case"symbol":G.setPaintProperty(Z,"icon-opacity",X),G.setPaintProperty(Z,"text-opacity",X);break}},B={ids:{layerId:i,sourceId:s},isMounted:()=>{var Z;return p&&!!((Z=r.value)!=null&&Z.getLayer(i))},setVisible:y,updatePaint:b,updateLayout:Z=>{r.value&&Object.entries(Z).forEach(([ae,X])=>{r.value.setLayoutProperty(i,ae,X)})},updateFilter:Z=>{r.value&&r.value.setFilter(i,Z)},setOpacity:Z=>{var G;if(!r.value)return;const X=(((G=r.value.getStyle())==null?void 0:G.layers)||[]).filter(M=>M.source===s);if(!X.length){const M=r.value.getLayer(i);M&&g(i,M.type,Z);return}X.forEach(M=>g(M.id,M.type,Z))},setData:Z=>{if(!r.value)return;const ae=r.value.getSource(s);ae&&"setData"in ae&&ae.setData(Z)},setTiles:Z=>{if(!r.value)return;const ae=r.value.getSource(s);ae&&"setTiles"in ae&&ae.setTiles(Z)},setStyle:m,setFilter:Z=>{var X,G;if(!r.value)return;const ae=r.value.getSource(s);if(ae&&"setTiles"in ae&&((G=(X=c.source)==null?void 0:X.tiles)!=null&&G[0])){const M=c.source.tiles[0];ae.setTiles([`${M}${M.includes("?")?"&":"?"}filter=${Z}`])}},setFeatureState:(Z,ae)=>{r.value&&r.value.setFeatureState({source:s,...Z},ae)},removeFeatureState:(Z,ae)=>{r.value&&r.value.removeFeatureState({source:s,...Z},ae?{key:ae}:void 0)},remove:u,card:c.card,popup:c.popup,opts:c,getSource:()=>{var Z;return(Z=r.value)==null?void 0:Z.getSource(s)},getLayer:()=>{var Z;return(Z=r.value)==null?void 0:Z.getLayer(i)},on:l};po.set(i,B);const F=()=>{po.get(i)===B&&po.delete(i)},Y=B.remove;return B.remove=()=>{F(),Y()},e.getCurrentInstance()&&e.onBeforeUnmount(B.remove),fo[t]=B,B}const Ui={class:"flex flex-row gap-x-3 z-10 relative widget"},qi=["onClick"],Hi=["src","alt"],qt=e.defineComponent({__name:"BaseMaps",props:{layers:{},defaultLayer:{},title:{}},setup(t){var x,N,$,_,w;const n=t,o={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:{}},r={z:13,x:4790,y:2762};function a(E){if(E)return E.replace(/{z}/gi,String(r.z)).replace(/{x}/gi,String(r.x)).replace(/{y}/gi,String(r.y))}function i(E,B){let F=E||`layers-${Object.keys(B).length}`,Y=1;for(;B[F];)F=`${E}-${Y}`,Y+=1;return F}const s=e.getCurrentInstance(),c=(x=s==null?void 0:s.appContext.config.globalProperties)==null?void 0:x.$settings,p=c==null?void 0:c.map,f=Ie.useRoute(),k=Ie.useRouter();function l(){const E=f==null?void 0:f.query;return!E||typeof E!="object"?null:typeof E.basemap=="string"?E.basemap:null}const y=e.computed(()=>l()),u=e.computed(()=>{let E=[];if(Array.isArray(n.layers)&&n.layers.length>0?E=n.layers:n.layers&&typeof n.layers=="object"&&Object.keys(n.layers).length>0?E=Object.values(n.layers):Array.isArray(p==null?void 0:p.basemaps)&&(E=p.basemaps),!E.length)return{};const B={};return E.forEach((F,Y)=>{const P=F.name??F.title??`basemap-${Y}`,Q=(F.id??P??`basemap-${Y}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),Z=i(Q||`basemap-${Y}`,B),ae=F.preview||(F.url?a(F.url):void 0);B[Z]={url:F.url,preview:ae,title:P,overlayUrl:F.overlayUrl}}),B}),m=e.computed(()=>{const E=u.value;return Object.keys(E).length?E:o}),b=e.ref(y.value??Object.keys(m.value)[0]??"gki"),g=Me("base",{source:{type:"raster",tiles:(N=m.value[b.value])!=null&&N.url?[($=m.value[b.value])==null?void 0:$.url]:[]},beforeId:0}),d=Me("base-overlay",{source:{type:"raster",tiles:(_=m.value[b.value])!=null&&_.overlayUrl?[(w=m.value[b.value])==null?void 0:w.overlayUrl]:[]}});function h(E){if(!m.value[E])return;b.value=E;const B=m.value[E];B!=null&&B.url?(g.setVisible(!0),g.setTiles([B.url])):g.setVisible(!1),B!=null&&B.overlayUrl?(d.setVisible(!0),d.setTiles([B.overlayUrl])):d.setVisible(!1),typeof window<"u"&&l()!==E&&k.replace({query:{...f==null?void 0:f.query,basemap:E}}).catch(()=>{})}return e.watch(()=>m.value,E=>{const B=y.value&&E[y.value]?y.value:b.value;E[B]?b.value=B:b.value=Object.keys(E)[0]??B;const F=E[b.value];F!=null&&F.url?(g.setVisible(!0),g.setTiles([F.url])):g.setVisible(!1),F!=null&&F.overlayUrl?(d.setVisible(!0),d.setTiles([F.overlayUrl])):d.setVisible(!1)},{immediate:!0}),e.watch(()=>[y.value,m.value],([E])=>{if(typeof E!="string"||!m.value[E]||b.value===E)return;b.value=E;const B=m.value[E];B!=null&&B.url?(g.setVisible(!0),g.setTiles([B.url])):g.setVisible(!1),B!=null&&B.overlayUrl?(d.setVisible(!0),d.setTiles([B.overlayUrl])):d.setVisible(!1)}),(E,B)=>(e.openBlock(),e.createElementBlock("div",Ui,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,(F,Y)=>(e.openBlock(),e.createElementBlock("div",{key:Y,onClick:P=>h(Y)},[Y!=="none"&&F.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===Y?"border-blue-500":"border-gray-200"])},[F.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:F.preview,alt:F.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Hi)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",b.value===Y?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(me.EyeOff),{class:"w-4 h-4 text-gray-500"})],2))],8,qi))),128))]))}}),Wi={class:"mapLayer-info__inner"},Yi={class:"mapLayer-info__item-label"},yo=Ve(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%)"}),a=e.ref(null),i=e.ref(null);let s=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 p(b){if(r.open){y();return}const g=b.currentTarget,d=g==null?void 0:g.closest(".mapLayer-info");if(!d){y();return}a.value=d,r.open=!0,e.nextTick(()=>{f(),u(),requestAnimationFrame(()=>{f()})})}function f(){if(!r.open||!a.value||!i.value)return;const b=a.value.getBoundingClientRect(),g=12,d=window.scrollX+g,h=window.scrollX+window.innerWidth-g,x=window.scrollY+g,N=window.scrollY+window.innerHeight-g,$=i.value.offsetWidth||Math.min(300,window.innerWidth-24),_=i.value.offsetHeight||0;let w=b.left+window.scrollX+(b.width-$)/2;w<d&&(w=d),w+$>h&&(w=Math.max(d,h-$)),r.left=w;let E=b.bottom+window.scrollY+g;E+_>N&&(E=b.top+window.scrollY-_-g,E<x&&(E=Math.max(x,N-_))),E<x&&(E=x),E+_>N&&(E=Math.max(x,N-_)),r.top=E,r.transform="none"}function k(b){var d,h;if(!r.open)return;const g=b.target;(d=a.value)!=null&&d.contains(g)||(h=i.value)!=null&&h.contains(g)||y()}function l(b){b.key==="Escape"&&y()}function y(){m(),r.open=!1,a.value=null,i.value=null}function u(){m(),i.value&&(s=new ResizeObserver(()=>{f()}),s.observe(i.value))}function m(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",l),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",l),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f),m()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>f())},{deep:!0}),n({close:y}),(b,g)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:a},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(p,["prevent","stop"])},[...g[1]||(g[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:i,onClick:g[0]||(g[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Wi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Yi,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),Gi={key:0,class:"map-info__title"},Zi={class:"map-info__actions"},Ki={key:0,class:"map-info__menu"},Xi=["href"],Ji=["innerHTML"],rr=Ve(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),a=e.ref(null),i=e.ref(null),s=e.ref({top:0,left:0});Ie.useRouter();const c=e.ref(!0),p=e.ref(!1),f=e.computed(()=>Array.isArray(n.links)?n.links.filter(N=>(N==null?void 0:N.name)&&(N==null?void 0:N.slug)):[]),k=e.computed(()=>({top:`${s.value.top}px`,left:`${s.value.left}px`})),l=e.computed(()=>{const N=[];return n.mapName&&N.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&N.push({label:"Опис",value:n.mapDescription,breakLine:!0}),N});function y(N){return N==null?!1:N.replace(/<[^>]*>/g,"").trim().length>0}const u=e.computed(()=>y(n.content)),m=e.computed(()=>u.value);function b(N){N.stopPropagation(),r.value=!r.value}function g(){const N=a.value;if(!N||!i.value)return;const $=N.getBoundingClientRect(),_=12,w=8,E=window.scrollX+_,B=window.scrollX+window.innerWidth-_,F=window.scrollY+_,Y=window.scrollY+window.innerHeight-_,P=i.value.offsetWidth||160,Q=i.value.offsetHeight||0;let Z=$.bottom+window.scrollY+w,ae=$.left+window.scrollX;ae+P>B&&(ae=$.right+window.scrollX-P,ae<E&&(ae=E)),ae<E&&(ae=E),Z+Q>Y&&(Z=$.top+window.scrollY-Q-w,Z<F&&(Z=Math.max(F,Y-Q))),Z<F&&(Z=F),Z+Q>Y&&(Z=Math.max(F,Y-Q)),s.value={top:Z,left:ae}}function d(N){if(!r.value)return;const $=o.value;if(!$){r.value=!1;return}$.contains(N.target)||(r.value=!1)}e.watch(r,N=>{N?e.nextTick(()=>{g(),requestAnimationFrame(()=>{g()}),window.addEventListener("scroll",g,!0),window.addEventListener("resize",g)}):(window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g))});function h(){c.value=!c.value}function x(){p.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",d,!0),x(),m.value?p.value&&(c.value=!1):c.value=!1,window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",d,!0),window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g),window.removeEventListener("resize",x)}),(N,$)=>(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||f.value.length||l.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([u.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",Gi,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Zi,[f.value.length?(e.openBlock(),e.createElementBlock("div",Ki,[e.createElementVNode("button",{ref_key:"menuButton",ref:a,type:"button",class:"map-info__menu-button",onClick:b,"aria-label":"Показати посилання"},[...$[1]||($[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:i,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(k.value),onClick:$[0]||($[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,_=>(e.openBlock(),e.createElementBlock("a",{key:_.slug||_.name,href:`/maps/${_.slug}`,class:"map-info__popover-link"},e.toDisplayString(_.name),9,Xi))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),l.value.length?(e.openBlock(),e.createBlock(yo,{key:1,items:l.value},null,8,["items"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__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-info__toggle-icon--rotated":c.value})},[...$[2]||($[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),u.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,Ji)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),Qi=new Set(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection"]);function lr(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"&&Qi.has(o)?{type:"FeatureCollection",features:[{type:"Feature",geometry:n,properties:{}}]}:null}function ec(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 sn(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=>sn(o,n)),n);if(typeof t=="object"){const o=t;Array.isArray(o.coordinates)&&sn(o.coordinates,n),Array.isArray(o.features)&&o.features.forEach(r=>sn(r==null?void 0:r.geometry,n)),Array.isArray(o.geometries)&&o.geometries.forEach(r=>sn(r,n))}return n}function ho(t){const n=sn(t);if(!n.length)return null;let o=n[0][0],r=n[0][0],a=n[0][1],i=n[0][1];return n.forEach(([s,c])=>{s<o&&(o=s),s>r&&(r=s),c<a&&(a=c),c>i&&(i=c)}),[[o,a],[r,i]]}const ar=["zip","shp","kml","gml","geojson","json"],tc=[".zip",".shp",".kml",".gml",".geojson",".json"].join(",");function nc(t){const n=t.toLowerCase().split(".");return n.length>1&&n.pop()||""}function sr(t){const n=nc(t.name);return ar.includes(n)}function ir(){return ar.map(t=>t.toUpperCase()).join(", ")}async function oc(t){var a;const n=new FormData;n.append("unique","true"),n.append("file",t);const o=await fetch("/file/upload/uploads",{method:"POST",body:n}),r=await o.json().catch(()=>null);if(!o.ok||(r==null?void 0:r.res)!=="ok"||!((a=r==null?void 0:r.result)!=null&&a.file_path))throw new Error((r==null?void 0:r.error)||`Помилка завантаження файлу (${o.status})`);return r.result}async function rc(t,n){if(t.size>52428800)throw new Error("Максимальний розмір файлу — 50MB");if(!sr(t))throw new Error(`Підтримуються формати: ${ir()}`);const r=await oc(t),a=await fetch("/api/gis-convert",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filepath:r.file_path,srid:Number(n)})}),i=await a.json().catch(()=>null);if(!a.ok)throw new Error((i==null?void 0:i.error)||`Помилка обробки файлу (${a.status})`);return i}const xt=e.ref([]);function lc(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const a=String(r||"").trim();if(!a)return"";const i=n[a];return i!=null?String(i):""}):t}function Mn(t){return t==null?"":String(t).trim()}function bo(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function ac(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function sc(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 a=n[r];if(!(!a||typeof a.id!="string")&&a.type&&a.type!=="background"&&a.type!=="raster")return a.id}}function cn(t){function n(s,c={},p,f){var N,$;const k=Mn(s==null?void 0:s.id),l=((N=s==null?void 0:s.title)==null?void 0:N.trim())||k,y=(s==null?void 0:s.type)||(s!=null&&s.data?"geojson":"raster"),u=(($=s==null?void 0:s.url)==null?void 0:$.trim())||"";if(!k||y==="raster"&&!u||y==="geojson"&&!(s!=null&&s.data))return;const m=f??t;if(!m)return;const b=ac(m);if(!b)return;const g=xt.value.findIndex(_=>_.id===k);g!==-1&&(bo(xt.value[g]),xt.value.splice(g,1));let d=null;const h=s.beforeId??sc(b);let x="";try{if(y==="geojson"){const _=ec(s.data),w=s.style||{type:_,color:"#2563eb",stroke:"#1d4ed8",opacity:_==="polygon"?.35:1,width:2,radius:6};d=Me(k,{source:{type:"geojson",data:s.data},style:w,beforeId:h},m)}else{if(x=lc(u,c),!x)return;d=Me(k,{source:{type:"raster",tiles:[x],tileSize:s.tileSize??256,minzoom:s.minzoom??0,maxzoom:s.maxzoom??19},layer:{id:k,type:"raster",source:k,paint:{"raster-opacity":s.opacity??.85}},beforeId:h},m)}}catch(_){const w=(_==null?void 0:_.message)??"";if(!(typeof w=="string"&&w.includes("Map provider")))throw _;return}xt.value=[...xt.value,{id:k,title:l,originalUrl:y==="raster"?u:"",resolvedUrl:y==="raster"?x:"",owner:p??null,handle:d??null}]}function o(s,c){const p=Mn(s);if(!p)return;const f=xt.value.findIndex(l=>l.id===p&&(!c||l.owner===c));if(f===-1)return;const[k]=xt.value.splice(f,1);bo(k)}function r(s,c,p){var l;const f=Mn(s);if(!f)return;const k=xt.value.find(y=>y.id===f&&(!p||y.owner===p));(l=k==null?void 0:k.handle)!=null&&l.setOpacity&&k.handle.setOpacity(c)}function a(s){if(!xt.value.length)return;const c=[];xt.value.forEach(p=>{(s?p.owner===s:!0)?bo(p):c.push(p)}),xt.value=c}function i(s,c){const p=Mn(s);return p?xt.value.some(f=>f.id===p&&(!c||f.owner===c)):!1}return{temporaryLayers:xt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:a,isTemporaryLayerActive:i}}const Ct=e.ref({}),dn="map:client-layer-added",Dn="map:client-layer-removed";function xo(){function t(i){Ct.value={...Ct.value,[i.id]:i}}function n(i){if(!Ct.value[i])return;const s={...Ct.value};delete s[i],Ct.value=s}function o(){Ct.value={}}function r(i){return!!Ct.value[i]}function a(i){return Ct.value[i]??null}return{clientLayers:Ct,registerClientLayer:t,unregisterClientLayer:n,clearClientLayers:o,isClientLayer:r,getClientLayer:a}}const un=e.ref(null);function ic(){un.value=null}function cc(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(un,s=>{s!==o()&&n.value&&(n.value=!1)});function r(){un.value=o(),n.value=!0}function a(){un.value===o()&&(un.value=null),n.value=!1}function i(){n.value?a():r()}return{isOpen:n,open:r,close:a,toggle:i}}const dc={class:"map-filter"},uc={class:"map-filter__header"},mc={class:"map-filter__title"},pc={"aria-hidden":"true"},ko="#map-filter-popover-host",Fn=Ve(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 z;return((z=o.layer)==null?void 0:z.id)??""}),a=e.computed(()=>`filter-popover-${r.value}`),{isOpen:i,close:s,toggle:c}=cc(a),p=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),f=e.ref(null),k=e.ref(null);let l=null;const y=e.ref({}),u=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),m=e.computed(()=>i.value),b=e.computed(()=>{var z;return Array.isArray((z=o.layer)==null?void 0:z.filters)?o.layer.filters:[]}),g=e.computed(()=>b.value.length>0),d=e.computed(()=>{var z;return((z=o.layer)==null?void 0:z.name)??""}),h=e.computed(()=>b.value),x=e.ref(null),N=e.computed(()=>b.value.length),$=e.computed(()=>N.value<=2),_=e.computed(()=>$.value?"body":typeof window>"u"||x.value?ko:"body"),w=e.computed(()=>{if(!m.value||!$.value)return{};const z=typeof window<"u"?window.innerWidth:280,R=Math.max(280,z-16*2);return{position:"absolute",top:`${p.top}px`,left:`${p.left}px`,transform:p.transform,zIndex:1e3,width:"280px",maxWidth:`${R}px`}});function E(){s()}function B(z,v,R=8){const J=window.scrollY+R,ue=window.scrollY+window.innerHeight-R;let fe=z;return fe+v>ue&&(fe=ue-v),fe<J&&(fe=J),fe}function F(){var le,S,I;if(!f.value||!$.value)return;const z=f.value.getBoundingClientRect(),v=window.scrollX+8,R=window.scrollX+window.innerWidth-8,J=((le=k.value)==null?void 0:le.offsetWidth)||280,ue=((S=k.value)==null?void 0:S.offsetHeight)||0;let fe=0,ie=0;if((I=o.catalogAnchor)!=null&&I.value){const A=o.catalogAnchor.value.getBoundingClientRect(),H=A.top+window.scrollY;fe=B(H,ue,8);const ne=A.right+window.scrollX+12,pe=R-J,xe=v;ie=Math.min(Math.max(ne,xe),Math.max(xe,pe))}else{const A=z.bottom+window.scrollY+8;fe=B(A,ue,8);let H=z.left+window.scrollX;H<v&&(H=v),H+J>R&&(H=Math.max(v,R-J)),ie=H}p.left=ie,p.top=fe,p.transform="none"}function Y(){$.value||j(),c(),i.value&&$.value&&e.nextTick(()=>{F(),G(),requestAnimationFrame(()=>F())})}function P(){o.disabled||Y()}e.watch(m,z=>{z&&$.value?e.nextTick(()=>{F(),G(),requestAnimationFrame(()=>F())}):(M(),$.value||j())}),e.watch(h,()=>{!m.value||!$.value||e.nextTick(()=>F())},{deep:!0}),e.watch($,z=>{m.value&&(z?e.nextTick(()=>{F(),G()}):(M(),j()))}),e.watch(()=>o.disabled,z=>{z&&(s(),y.value={})});function Q(){!m.value||!$.value||F()}function Z(z){const v=r.value;if(!v)return;const R=Me(v);if(!(R!=null&&R.setFilter))return;y.value=z;const J=Object.entries(z).map(([ue,fe])=>`${ue}=${fe}`).join("|");R.setFilter(J)}function ae(z){if(!o.disabled)return;const v=z.currentTarget;if(!v)return;const R=v.getBoundingClientRect();u.left=R.left+R.width/2+window.scrollX,u.top=R.bottom+8+window.scrollY,u.visible=!0}function X(){u.visible=!1}e.onMounted(()=>{j(),window.addEventListener("resize",Q),window.addEventListener("scroll",Q,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",Q),window.removeEventListener("scroll",Q,!0),M()});function G(){M(),!(!k.value||!$.value)&&(l=new ResizeObserver(()=>{!m.value||!$.value||F()}),l.observe(k.value))}function M(){l&&(l.disconnect(),l=null)}function j(){typeof window>"u"||typeof document>"u"||(x.value=document.querySelector(ko))}return(z,v)=>g.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:f},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(P,["prevent","stop"]),onMouseenter:ae,onMouseleave:X,onFocus:ae,onBlur:X},[...v[2]||(v[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),m.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:_.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":!$.value}]),style:e.normalizeStyle(w.value),ref_key:"panel",ref:k,onClick:v[1]||(v[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",dc,[e.createElementVNode("div",uc,[e.createElementVNode("h3",mc,e.toDisplayString(d.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:E},[e.createElementVNode("span",pc,[e.createVNode(e.unref(me.X),{class:"h-4 w-4"})]),v[3]||(v[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:h.value,value:y.value,limit:10,onChange:v[0]||(v[0]=R=>Z(R.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[u.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${u.top}px`,left:`${u.left}px`})},e.toDisplayString(u.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-32948852"]]),fc={class:"opacity-popover__content"},gc={class:"opacity-popover__value"},cr=Ve(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),a=e.ref(null),i=e.ref(null),s=e.reactive({top:0,left:0});function c(){var $;const l=($=i.value)==null?void 0:$.querySelector("button");if(!l||!a.value)return;const y=l.getBoundingClientRect(),u=260,m=a.value.offsetHeight||60,b=8,g=12,d=window.innerWidth,h=window.innerHeight;let x=y.bottom+b+window.scrollY,N=y.left+window.scrollX;N+u>d-g&&(N=d-u-g+window.scrollX),N<g+window.scrollX&&(N=g+window.scrollX),x+m>h+window.scrollY-g&&(x=y.top-m-b+window.scrollY,x<g+window.scrollY&&(x=h-m-g+window.scrollY)),s.top=x,s.left=N}function p(){o.value=!o.value,o.value&&e.nextTick(c)}function f(){var m;const l=Me(n.layerId),y=(r.value??100)/100;if(l!=null&&l.setOpacity){l.setOpacity(y);return}const u=(m=l==null?void 0:l.getLayer)==null?void 0:m.call(l);if(u)switch(u.type){case"raster":l.updatePaint({"raster-opacity":y});break;case"fill":l.updatePaint({"fill-opacity":y});break;case"line":l.updatePaint({"line-opacity":y});break;case"circle":l.updatePaint({"circle-opacity":y});break;case"symbol":l.updatePaint({"icon-opacity":y});break}}function k(l){var u,m;if(!o.value)return;const y=l.target;(u=a.value)!=null&&u.contains(y)||(m=i.value)!=null&&m.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",k),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}),(l,y)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:i},[e.renderSlot(l.$slots,"trigger",{toggle:p,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(p,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:a,class:"opacity-popover",style:e.normalizeStyle({top:s.top+"px",left:s.left+"px"})},[e.createElementVNode("div",fc,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=u=>r.value=u),class:"opacity-popover__range",onInput:f},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",gc,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-39c90b6d"]]),yc={class:"layers-panel"},hc={class:"layers-panel__header"},bc={class:"layers-panel__heading"},xc={class:"layers-panel__heading-title"},kc={class:"layers-panel__count"},wc={class:"layers-panel__bulk-actions"},_c={class:"layers-panel__header-actions"},Ec={class:"layers-panel__header-controls"},Cc={class:"layers-panel__label"},Nc={class:"layers-panel__label-row"},Vc=["checked","onChange"],Bc={class:"layers-panel__title-block"},$c={class:"layers-panel__name"},Sc={class:"layers-panel__meta text-slate-500"},vc=["onClick"],Lc=["onClick"],Tc={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Ac={key:0,class:"layers-panel__actions"},Mc=["innerHTML","onClick"],dr="map:temporary-layer-request",Dc="#5763ba",ur=Ve(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),a=e.ref(!0),i=e.ref(!1),s=et(),{temporaryLayers:c,activateTemporaryLayer:p,deactivateTemporaryLayer:f,clearTemporaryLayers:k}=cn(s.map),{clientLayers:l,isClientLayer:y,getClientLayer:u,unregisterClientLayer:m}=xo(),b=e.computed(()=>{const S=o.layers.map(H=>({...H,isTemporary:!1,owner:null,visible:H.visible!==!1})),I=c.value.map(H=>({id:H.id,name:H.title,visible:r.value[H.id]??!0,actions:[],filters:null,isTemporary:!0,owner:H.owner??null,handle:H.handle??null,card:H.card??null,popup:H.popup??null,style:H.style??null,group_name:null,count:null,holder:null})),A=Object.values(l.value).filter(H=>!I.some(ne=>ne.id===H.id)).map(H=>({id:H.id,name:H.name,visible:r.value[H.id]??!0,actions:[],filters:null,isTemporary:!0,owner:"add-data",handle:Me(H.id)??null,card:null,popup:null,style:null,group_name:null,count:null,holder:null}));return[...S,...I,...A]}),g=e.computed(()=>b.value.length),d=e.computed(()=>b.value.filter(S=>E(S.id)).length),h=e.computed(()=>g.value>0&&d.value===g.value),x=n;function N(){var S;for(let I=0;I<o.layers.length;I++){const A=o.layers[I],H=_(A);if(!H)continue;const ne=Me(A.id,H),pe=A.visible!==!1;r.value[A.id]=pe,pe||(S=ne==null?void 0:ne.setVisible)==null||S.call(ne,!1)}}function $(S,I){const A=S.sourceLayer||S["source-layer"];return A||((S.service_url||S.url||"").toString().includes("/dla/vtile")?"dla":I)}function _(S){const I=S.id;if(!I)return null;const A=(S.type||S.service_type||S.service||"").toString().toLowerCase(),H=S.service_url||S.url||null;if(!!H&&(A==="tms"||A==="wmts"||A==="wms"||A==="ogc")){const xe=w(H);return xe?{sourceId:I,service:A,source:{type:"raster",tiles:[xe],tileSize:S.tileSize||256,minzoom:S.minzoom??0,maxzoom:S.maxzoom??22,scheme:S.scheme||"xyz"},layer:{id:I,type:"raster",source:I},card:S.card,popup:S.popup}:null}if(A==="cartocss"){const xe=S.url?w(S.url):`${location.origin}/api/gis-rtile/${I}/{z}/{x}/{y}.png`;return xe?{sourceId:I,service:A,source:{type:"raster",tiles:[xe],tileSize:S.tileSize||256,minzoom:S.minzoom??0,maxzoom:S.maxzoom??22},layer:{id:I,type:"raster",source:I},card:S.card,popup:S.popup}:null}if(H&&(A==="vtile"||A==="vector")){const xe=w(H);if(!xe)return null;const ke=$(S,I);return{sourceId:I,service:A,source:{type:"vector",tiles:[xe],minzoom:S.minzoom??0,maxzoom:S.maxzoom??22},layer:{id:I,source:I,"source-layer":ke,style:S.style,filter:S.filter},card:S.card,popup:S.popup}}if(A==="raster"){const xe=S.url?w(S.url):`${location.origin}/api/gis-rtile/${I}/{z}/{x}/{y}.png`;return xe?{sourceId:I,service:A,source:{type:"raster",tiles:[xe],tileSize:S.tileSize||256,minzoom:S.minzoom??0,maxzoom:S.maxzoom??22},layer:{id:I,type:"raster",source:I},card:S.card,popup:S.popup}:null}const pe=`${location.origin}/api/vtile/${I}/ua/{z}/{x}/{y}.vmt`;return{sourceId:I,service:A,source:{type:"vector",tiles:[pe],minZoom:4,maxZoom:14},layer:{id:I,source:I,"source-layer":I,style:S.style},card:S.card,popup:S.popup}}function w(S){return S?/^https?:\/\//i.test(S)?S:S.startsWith("//")?`${window.location.protocol}${S}`:S.startsWith("/")?`${location.origin}${S}`:`${location.origin}/${S}`:null}function E(S){const I=r.value[S];return I??!0}function B(S){var H,ne;if(!(S!=null&&S.id))return null;const I=(H=S.title)==null?void 0:H.trim();if(!I)return null;if(S.type==="geojson"||S.data)return S.data?{id:S.id,title:I,type:"geojson",data:S.data,style:S.style}:null;const A=(ne=S.url)==null?void 0:ne.trim();return A?{id:S.id,title:I,url:A,tileSize:S.tileSize,minzoom:S.minzoom,maxzoom:S.maxzoom,opacity:S.opacity}:null}function F(S){if(!S)return;const I=S.owner;if(S.action==="clear"){const H=c.value.filter(ne=>!I||ne.owner===I).map(ne=>ne.id);k(I),H.forEach(ne=>{ne in r.value&&delete r.value[ne]});return}const A=B(S.spec);if(A){if(S.action==="activate"){p(A,S.context||{},I),r.value[A.id]=!0;return}S.action==="deactivate"&&(f(A.id,I),delete r.value[A.id])}}function Y(S){S instanceof CustomEvent&&F(S.detail)}e.watch(()=>c.value.map(S=>S.id),(S,I)=>{const A=new Set(I||[]),H=new Set(S);S.forEach(ne=>{ne in r.value||(r.value[ne]=!0)}),A.forEach(ne=>{H.has(ne)||delete r.value[ne]})},{immediate:!0});function P(S){return S.owner==="add-data"||y(S.id)}function Q(S){const I=u(S);if(!(I!=null&&I.data))return;const A={id:I.id,title:I.name,type:"geojson",data:I.data};p(A,{},"add-data"),F({action:"activate",owner:"add-data",spec:A})}function Z(S,I){var H,ne,pe,xe,ke;if(P(S)){r.value[S.id]=I;const we=Me(S.id);if(!I){(H=we==null?void 0:we.setVisible)==null||H.call(we,!1);return}if((ne=we==null?void 0:we.isMounted)!=null&&ne.call(we)){we.setVisible(!0);return}Q(S.id);return}if(S.isTemporary){if(!I){f(S.id,S.owner||void 0),delete r.value[S.id];return}r.value[S.id]=!0;const we=S.handle||((pe=c.value.find(He=>He.id===S.id))==null?void 0:pe.handle);(xe=we==null?void 0:we.setVisible)==null||xe.call(we,!0);return}r.value[S.id]=I;const A=Me(S.id);(ke=A==null?void 0:A.setVisible)==null||ke.call(A,I)}function ae(S,I){const A=I.target;Z(S,A.checked)}function X(S){b.value.forEach(I=>Z(I,S))}function G(){X(!h.value)}function M(S){return S.isTemporary?[{label:"Назва",value:S.name??null},{label:"Тип",value:"Тимчасовий шар"},S.owner==="add-data"?{label:"Джерело",value:"Завантажені дані"}:S.owner?{label:"Джерело",value:S.owner}:null].filter(Boolean):[{label:"Назва",value:S.name??null},{label:"Назва групи",value:S.group_name||null},{label:"Кількість",value:S.count??null},{label:"Балансоутримувач",value:S.holder??null}]}function j(S){const I=S.trim();return I?!!(/^#[\da-fA-F]{3,8}$/.test(I)||/^rgb\s*\(/.test(I)||/^rgba\s*\(/.test(I)||/^hsl\s*\(/.test(I)||/^hsla\s*\(/.test(I)||/^[a-zA-Z]+$/.test(I)&&I.length<25):!1}function z(S){var I,A,H,ne,pe,xe;if(!S)return null;if(typeof S=="string"){const ke=S.trim();return!ke||!j(ke)?null:ke}if(Array.isArray(S)){for(const ke of S){const we=z(ke);if(we)return we}return null}if(typeof S=="object"){const ke=S;return z(ke.color??ke.fill??ke.stroke??ke.lineColor??ke.fillColor??((I=ke.paint)==null?void 0:I["fill-color"])??((A=ke.paint)==null?void 0:A["line-color"])??((H=ke.paint)==null?void 0:H["circle-color"])??((ne=ke.paint)==null?void 0:ne.color)??((pe=ke.paint)==null?void 0:pe.lineColor)??((xe=ke.paint)==null?void 0:xe.fillColor)??ke.paint??ke.value)}return null}function v(S){const I=Array.isArray(S==null?void 0:S.legend)?S.legend[0]:S==null?void 0:S.legend,A=z(I);return A||z(S==null?void 0:S.style)||Dc}function R(S){return{"--layers-panel-checkbox-color":v(S)}}function J(S){var ne;const{id:I}=S,A=S.owner||void 0;f(I,A);const H=Me(I);(ne=H==null?void 0:H.remove)==null||ne.call(H),(y(I)||A==="add-data")&&(m(I),window.dispatchEvent(new CustomEvent(Dn,{detail:{id:I}}))),delete r.value[I]}function ue(){a.value=!a.value}function fe(){i.value=window.innerWidth<=768}function ie(S){var A;if(!(S instanceof CustomEvent))return;const I=(A=S.detail)==null?void 0:A.id;I&&(r.value[I]=!0)}function le(S){var A;if(!(S instanceof CustomEvent))return;const I=(A=S.detail)==null?void 0:A.id;I&&(f(I),delete r.value[I])}return e.onMounted(()=>{N(),window.addEventListener(dr,Y),window.addEventListener(dn,ie),window.addEventListener(Dn,le),fe(),i.value&&(a.value=!1),window.addEventListener("resize",fe)}),e.watch(()=>{var S;return((S=o.layers)==null?void 0:S.length)??0},(S,I)=>{S>0&&I===0&&N()}),e.onBeforeUnmount(()=>{window.removeEventListener(dr,Y),window.removeEventListener(dn,ie),window.removeEventListener(Dn,le),window.removeEventListener("resize",fe)}),(S,I)=>(e.openBlock(),e.createElementBlock("div",yc,[e.createElementVNode("div",hc,[e.createElementVNode("div",bc,[e.createElementVNode("div",xc,[I[0]||(I[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",kc," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(g.value)+") ",1),e.createElementVNode("div",wc,[b.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:G},e.toDisplayString(h.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",_c,[e.createElementVNode("div",Ec,[b.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:ue,"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":a.value})},[...I[1]||(I[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":!a.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,A=>{var H;return e.openBlock(),e.createElementBlock("div",{key:A.id,class:"layers-panel__item"},[e.createElementVNode("label",Cc,[e.createElementVNode("div",Nc,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:E(A.id),style:e.normalizeStyle(R(A)),onChange:ne=>ae(A,ne)},null,44,Vc),e.createElementVNode("div",Bc,[e.createElementVNode("span",$c,e.toDisplayString(A.name),1)]),e.createElementVNode("div",Sc,[A.isTemporary?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__remove","aria-label":"Видалити шар",onClick:e.withModifiers(ne=>J(A),["stop"])},[...I[2]||(I[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,vc)):e.createCommentVNode("",!0),E(A.id)&&!A.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(cr,{"layer-id":A.id,class:"flex"},{trigger:e.withCtx(({toggle:ne})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(ne,["prevent","stop"])},[e.createElementVNode("div",Tc,[e.createVNode(e.unref(me.Contrast))])],8,Lc)]),_:1},8,["layer-id"]),e.createVNode(Fn,{count:Array.isArray(A.filters)?A.filters.length:0,layer:A},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(yo,{items:M(A)},null,8,["items"])])])]),(H=A.actions)!=null&&H.length?(e.openBlock(),e.createElementBlock("div",Ac,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.actions,ne=>(e.openBlock(),e.createElementBlock("button",{key:ne.widget||ne.id||ne.icon,type:"button",class:"layers-panel__action",innerHTML:ne.icon,onClick:pe=>x("action",{layerId:ne.widget})},null,8,Mc))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-6ee76aa5"]]);function Fc(){const{map:t,ready:n}=et(),o=e.ref(null),r=e.ref(null),a=e.ref(null),i=e.ref(null);let s=[];function c(){s.forEach(u=>u()),s=[]}const p=u=>{const m=(u==null?void 0:u.properties)||{};return!!(m.cluster||m.point_count||m.point_count_abbreviated)},f=u=>{var d,h;o.value=[u.point.x,u.point.y];const m=t.value.queryRenderedFeatures(u.point);if(!(m!=null&&m.length)){k();return}const b=m.find(x=>!p(x));if(!b){k();return}const g=Me(b.source)||Me((d=b.layer)==null?void 0:d.id);g!=null&&g.popup&&(r.value=((h=g.popup)==null?void 0:h.fields)||g.popup,i.value=b.properties)},k=()=>{r.value=null,i.value=null,o.value=null};async function l(){await n(),t.value&&(c(),t.value.on("mousemove",f),t.value.on("mouseleave",k))}function y(){c(),r.value=null,i.value=null,o.value=null}return n().then(l),{popupCoords:o,popupFields:r,popupValues:i,disable:y,title:a}}const zc={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Ic={class:"space-y-1.5"},jc={class:"font-bold text-slate-700"},Pc={class:"text-slate-700"},mr=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:a}=Fc(),{map:i}=et(),s=e.ref(null),c=e.ref({left:"-9999px",top:"-9999px"}),p=e.ref({}),f=new Set,k=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function l(d,h){if(h==null||h==="")return h;if((d==null?void 0:d.type)==="number"){const x=typeof h=="number"?h:Number(h);if(Number.isFinite(x))return k.format(x)}return h}function y(d,h,x){const N=d.name||d.label||d.title||`field-${x}`,$=d.label||d.title||d.name||N,_=d.name?h[d.name]:void 0,w=d.name?h[`${d.name}_text`]:void 0;let E;if((d.format==="select"||d.format==="autocomplete")&&d.data&&_!=null){const F=p.value[d.data];F&&(E=F[String(_)])}const B=E??w??_??d.value??null;return{key:N,label:$,value:l(d,B)}}const u=e.computed(()=>{const d=o.value||[],h=r.value||{};return d.filter(x=>(x==null?void 0:x.meta)!=="title").map((x,N)=>y(x,h,N)).filter(x=>x.label)});e.watch([o,r],([d,h])=>{!d||!h||d.forEach(async x=>{if(x.format==="select"||x.format==="autocomplete"){const N=x.data;if(!N)return;if(!p.value[N]&&!f.has(N)){f.add(N);try{const $=await fetch(`/api/suggest/${N}`);if($.ok){const _=await $.json();if(_!=null&&_.data&&Array.isArray(_.data)){const w={};_.data.forEach(E=>{w[String(E.id)]=E.text}),p.value[N]=w}}}catch($){console.error(`Failed to fetch suggest for ${N}`,$)}}}})},{deep:!0,immediate:!0});const m=e.computed(()=>{const d=o.value||[],h=r.value||{},x=d.find(N=>(N==null?void 0:N.meta)==="title");return x?y(x,h,0):null}),b=e.computed(()=>{var h;const d=u.value;return(h=m.value)!=null&&h.value?[{...m.value,key:`${m.value.key}-title`,label:"Назва"},...d]:d});function g(){var z,v;if(!b.value.length||!n.value||!s.value){c.value={left:"-9999px",top:"-9999px"};return}const d=s.value,h=d.offsetParent||null,x=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},N=((v=(z=i.value)==null?void 0:z.getContainer)==null?void 0:v.call(z))||void 0,$=(N==null?void 0:N.getBoundingClientRect())??x,_=$.left-x.left,w=$.top-x.top,E=d.offsetWidth||0,B=d.offsetHeight||0,F=12,Y=8,[P,Q]=n.value;let Z=_+P+F,ae=w+Q+F;Z+E+Y>x.width&&(Z=_+P-E-F),ae+B+Y>x.height&&(ae=w+Q-B-F);const X=Y,G=Y,M=Math.max(Y,x.width-E-Y),j=Math.max(Y,x.height-B-Y);Z=Math.min(Math.max(Z,X),M),ae=Math.min(Math.max(ae,G),j),c.value={left:`${Z}px`,top:`${ae}px`}}return e.watch([n,b],()=>{e.nextTick(()=>g())}),e.onMounted(()=>{window.addEventListener("resize",g)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",g),a()}),(d,h)=>b.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:s,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(c.value)},[e.createElementVNode("div",zc,[e.createElementVNode("div",Ic,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex flex-col"},[e.createElementVNode("span",jc,e.toDisplayString(x.label),1),e.createElementVNode("span",Pc,e.toDisplayString(x.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Rc(){const t=Ie.useRoute(),n=Ie.useRouter(),o=e.ref(null),r=e.ref(null),a=e.ref(null),i=e.ref(!1),s=e.ref([]),c=e.ref(0),p=e.computed(()=>s.value.length),f=e.computed(()=>i.value||!!o.value||!!a.value);let k=!1;function l(){o.value=null,r.value=null,a.value=null,i.value=!1,s.value=[],c.value=0}function y(w,E=0){if(!w.length){l(),$(null);return}s.value=w,u(E)}function u(w){const E=s.value[w];if(!E)return;c.value=w;const B=Me(E.source);g(E,B==null?void 0:B.card)}function m(){c.value>=s.value.length-1||u(c.value+1)}function b(){c.value<=0||u(c.value-1)}async function g(w,E){var Y,P,Q,Z,ae;if(!((Y=w==null?void 0:w.properties)!=null&&Y.id))return;const B=new URLSearchParams;B.set("layer",w.source),B.set("id",String((P=w.properties)==null?void 0:P.id));const F=Array.isArray(E)&&E.length>0;i.value=F,a.value=null,o.value=null,r.value=w||null;try{const X=await fetch(`/api/map-format?${B.toString()}`);if(!X.ok)throw new Error(`Failed (${X.status})`);const G=await X.json(),M=Array.isArray(G.columns)?G.columns:[],j=Array.isArray(E)?E:[];if(!M.length&&!j.length){console.error("Configure layer in admin"),d();return}const z=G.rows??G.data??{};o.value={rows:z,fields:j,columns:M,html:G.html||null},k||$(r.value);const v=((Q=G.rows)==null?void 0:Q.geom)??((Z=G.data)==null?void 0:Z.geom);if(v){const R=typeof v=="string"?JSON.parse(v):v;R&&(r.value={...r.value,geometry:R,properties:{...((ae=r.value)==null?void 0:ae.properties)||{},geom:R,geom_4326:R}})}}catch(X){console.error("Failed to load feature card:",X),d()}finally{i.value=!1}}function d(){l(),$(null)}function h(){l()}_(x()),e.onBeforeUnmount(()=>h());function x(){const w=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof w!="string")return null;const E=w.trim();return E.startsWith("external:")?null:E||null}function N(w){var Y,P;const E=(w==null?void 0:w.source)??((Y=w==null?void 0:w.layer)==null?void 0:Y.id),B=(P=w==null?void 0:w.properties)==null?void 0:P.id;return!E||B===void 0||B===null?null:`${E},${B}`.trim()||null}function $(w){const E=N(w),B=x();if(E===B)return;const F={...t.query};E?F.info=E:delete F.info,n.push({query:F}).catch(()=>{})}async function _(w){if(!w){l();return}if(w===N(r.value))return;const[E,B]=w.split(","),F=E==null?void 0:E.trim(),Y=B==null?void 0:B.trim();if(!F||!Y){l(),$(null);return}k=!0;try{y([{source:F,properties:{id:Y}}],0)}finally{k=!1}}return e.watch(()=>x(),w=>{w!==N(r.value)&&(k=!0,_(w).finally(()=>{k=!1}))}),{card:o,cardFeature:r,cardError:a,cardLoading:i,isOpen:f,close:d,openFeature:w=>y(w?[w]:[],0),openFeatures:y,next:m,prev:b,count:p,index:c}}function Oc(){const{map:t,ready:n}=et(),o=e.ref([]),r=e.ref(0),a=e.ref(0),i=e.ref(!1),s=e.ref(null),c=e.ref({}),p=e.ref(null),f=e.ref([]),k=e.computed(()=>o.value[a.value]||null),l=e.computed(()=>o.value.length>0);let y=null;const u=()=>{y==null||y.remove(),y=null},m=E=>E?E.type==="FeatureCollection"?E:E.type==="Feature"?{type:"FeatureCollection",features:[E]}:E.type&&Array.isArray(E.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:E,properties:{}}]}:Array.isArray(E.features)?{type:"FeatureCollection",features:E.features}:E.geometry?m(E.geometry):null:null,b=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),g=E=>Number(E.toFixed(5)),d=async E=>{if(await n(),!t.value)return;const B=m(E);B&&(u(),y=Me("feature-highlight",{source:{type:"geojson",data:B},style:b()},t))},h=async(E,B,F)=>{var Q,Z;const[Y,P]=[g(E),g(B)];p.value={x:Y,y:P},f.value=F,i.value=!0,s.value=null,o.value=[],c.value={},a.value=0;try{const ae=F.map(async z=>{const v=`/api/map-info-point?x=${Y}&y=${P}&layers=${z}`,R=await fetch(v);if(!R.ok)return null;const J=await R.json();if(!J.count)return null;const fe=await(await fetch(`${v}&index=0`)).json();return{layerId:z,data:fe,count:J.count}}),G=(await Promise.all(ae)).filter(Boolean);if(G.length===0){r.value=0;return}o.value=G.map(z=>z.data);const[M]=o.value;r.value=G.reduce((z,v)=>z+(v.count||0),0),c.value[0]=M;const j=((Q=M==null?void 0:M.data)==null?void 0:Q.geom_4326)??((Z=M==null?void 0:M.data)==null?void 0:Z.geom);await d(j)}catch(ae){s.value=ae.message}finally{i.value=!1}},x=async E=>{if(!p.value||!f.value.length)return;if(c.value[E]){o.value[E]=c.value[E];return}const{x:B,y:F}=p.value,Y=f.value.join(","),P=`/api/map-info-point?x=${B}&y=${F}&index=${E}&layers=${Y}`;try{i.value=!0;const Q=await fetch(P);if(!Q.ok)throw new Error("Failed to fetch feature by index");const Z=await Q.json();o.value[E]=Z,c.value[E]=Z}catch(Q){s.value=Q.message}finally{i.value=!1}},N=async()=>{a.value<r.value-1&&(a.value+=1,c.value[a.value]||await x(a.value))},$=async()=>{a.value>0&&(a.value-=1,c.value[a.value]||await x(a.value))},_=()=>{o.value=[],r.value=0,a.value=0,c.value={},p.value=null,f.value=[],u()};e.watch(a,async()=>{var B,F;const E=k.value;if(E){const Y=((B=E==null?void 0:E.data)==null?void 0:B.geom_4326)??((F=E==null?void 0:E.data)==null?void 0:F.geom);await d(Y)}});let w=null;return e.onMounted(async()=>{await n(),t.value&&(w=async E=>{const{lng:B,lat:F}=E.lngLat,Y=Me(),Q=Object.entries(Y).map(([Z,ae])=>{var X,G,M,j;return{id:Z,service:((X=ae==null?void 0:ae.opts)==null?void 0:X.service)??((M=(G=ae==null?void 0:ae.opts)==null?void 0:G.source)==null?void 0:M.service)??null,count:((j=ae==null?void 0:ae.opts)==null?void 0:j.count)??null,visible:(()=>{var z;try{return((z=t.value)==null?void 0:z.getLayer(Z))?t.value.getLayoutProperty(Z,"visibility")!=="none":!0}catch{return!0}})()}}).filter(Z=>Z.service==="ogc"&&Z.visible).map(Z=>Z.id);Q.length>0&&await h(B,F,Q)},t.value.on("dblclick",w))}),e.onBeforeUnmount(()=>{t.value&&w&&t.value.off("dblclick",w),u()}),{features:o,count:r,index:a,current:k,loading:i,error:s,active:l,next:N,prev:$,close:_}}const pr=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function a(f){const k=f.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(k)return k;const l=Array.from(f).map(y=>y.charCodeAt(0).toString(16)).join("").slice(0,8);return l?`layer-${l}`:"layer-temp"}const i=e.computed(()=>{var f;return((f=o.id)==null?void 0:f.trim())||a(o.title)}),s=e.computed(()=>o.buttonText||"Показати шар");function c(){return{id:i.value,title:o.title,url:o.url}}function p(){r("activate",c())}return(f,k)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:p},[e.renderSlot(f.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.value),1)])]))}}),wo="map-card:external-payload",zn="map-card:click-results",fr=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,Uc={key:0,class:"card pointer-events-auto absolute top-4 lg:left-auto right-[52px] md:left-4 z-[82] 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"},qc={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Hc={class:"min-w-0 flex-1"},Wc={class:"text-base font-semibold text-slate-900 truncate"},Yc={key:0,class:"flex gap-1 mt-1"},Gc=["disabled"],Zc=["disabled"],Kc={key:1,class:"flex gap-1 mt-1"},Xc=["disabled"],Jc=["disabled"],Qc={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},ed={key:0,class:"text-center text-xs text-slate-500"},td={key:1,class:"text-center text-xs text-red-500"},nd={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},od={class:"divide-y divide-gray-100 py-[5px]"},rd={class:"text-gray-900 sm:col-span-4 font-normal"},ld={key:0,class:"flex gap-1 flex-wrap"},ad={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},sd=["innerHTML"],id=["innerHTML"],cd={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},dd={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},ud={class:"text-xs tracking-[0.02em] leading-none"},md={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},pd={class:"space-y-1"},fd={class:"flex items-center cursor-pointer gap-2 flex-1"},gd=["checked","onChange"],yd={class:"text-[13px] text-gray-600"},hd={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},bd={key:5,class:"text-center text-xs text-slate-400"},xd="map:temporary-layer-request",gr="cardHideEmpty",kd=14,_o=Ve(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Rc(),r=Oc(),a=Ie.useRouter(),i=e.ref([]),s=e.ref(0),c=e.computed(()=>i.value[s.value]||null),p=e.computed(()=>{var C;return((C=c.value)==null?void 0:C.type)==="external"?c.value:null}),f=e.computed(()=>i.value.length>0),k=e.computed(()=>{var C,L;return!!((L=(C=p.value)==null?void 0:C.html)!=null&&L.trim())}),l=e.computed(()=>{var C;return((C=p.value)==null?void 0:C.geometry)??null});function y(){i.value=[],s.value=0}function u(C){if(!C)return null;if(typeof C=="string")try{return JSON.parse(C)}catch{return null}return C}function m(){const C=Array.isArray(ae.query.info)?ae.query.info[0]:ae.query.info;return typeof C!="string"?null:C.trim()||null}function b(C){if(!C||!C.startsWith("external:"))return null;const L=C.slice(9),[K,se]=L.split(","),he=K==null?void 0:K.trim(),Be=se==null?void 0:se.trim();return!he||!Be?null:{layer:he,id:Be,token:`external:${he},${Be}`}}function g(C){const L=m(),K=(C==null?void 0:C.trim())||null;if(L===K)return;const se={...ae.query};if(K)se.info=K;else if(L!=null&&L.startsWith("external:"))delete se.info;else return;a.push({query:se}).catch(()=>{})}function d(C){var K;const L=i.value[C];if(!L){y(),o.close(),Fe();return}if(s.value=C,L.type==="feature"){o.openFeature(L.feature);return}o.close(),g(L.infoToken??null),(K=L.html)!=null&&K.trim()?N():Fe()}function h(C,L=0){if(r.close(),i.value=C.map(K=>({type:"external",...K})),!i.value.length){o.close(),g(null),Fe();return}d(Math.min(Math.max(L,0),i.value.length-1))}function x(C){r.close();const L=Array.isArray(C==null?void 0:C.features)?C.features.filter(Boolean):[],K=Array.isArray(C==null?void 0:C.externalItems)?C.externalItems.filter(se=>typeof(se==null?void 0:se.html)=="string"&&se.html.trim()):[];if(i.value=[...L.map(se=>({type:"feature",feature:se})),...K.map(se=>({type:"external",...se}))],!i.value.length){o.close(),g(null),Fe();return}d(0)}function N(){return k.value?l.value?(Kl(l.value),!0):(Fe(),!0):(Fe(),!1)}const $=C=>{var se,he,Be,Le;const L=C,K=Array.isArray((se=L.detail)==null?void 0:se.items)?(he=L.detail)==null?void 0:he.items.filter(Re=>typeof(Re==null?void 0:Re.html)=="string"&&Re.html.trim()):[];K.length?h(K,Number(((Be=L.detail)==null?void 0:Be.index)??0)):typeof((Le=L.detail)==null?void 0:Le.html)=="string"&&L.detail.html.trim()?h([{html:L.detail.html,geometry:L.detail.geometry??null,infoToken:L.detail.infoToken??null}],0):(y(),o.close(),g(null),Fe())},_=C=>{x(C.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(zn,_),window.addEventListener(wo,$))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(zn,_),window.removeEventListener(wo,$))});const w=e.computed(()=>r.active.value),E=e.computed(()=>w.value||o.isOpen.value||k.value),B=e.computed(()=>w.value?r.loading.value:o.cardLoading.value),F=e.computed(()=>w.value?r.error.value:o.cardError.value),Y=e.computed(()=>{var C,L,K;return w.value?((C=r.current.value)==null?void 0:C.html)||null:k.value?((L=p.value)==null?void 0:L.html)||null:((K=o.card.value)==null?void 0:K.html)||null}),P=et(),Q=co(),Z=e.computed(()=>{var C,L;return((L=(C=Q.value)==null?void 0:C.map)==null?void 0:L.cardHideEmpty)??null}),ae=Ie.useRoute(),{activateTemporaryLayer:X,deactivateTemporaryLayer:G,clearTemporaryLayers:M,isTemporaryLayerActive:j}=cn(P.map);function z(C){window.dispatchEvent(new CustomEvent(xd,{detail:C}))}const v=e.computed(()=>{var C;return((C=o.cardFeature.value)==null?void 0:C.source)??null}),R=e.computed(()=>v.value?`map-card:${v.value}`:"map-card"),J=e.computed(()=>{var se,he;const C=o.cardFeature.value,L=(C==null?void 0:C.source)||((se=C==null?void 0:C.layer)==null?void 0:se.id),K=((he=C==null?void 0:C.properties)==null?void 0:he.id)??(C==null?void 0:C.id);return L&&K!=null?`${L}:${K}`:null}),ue=e.ref(null),fe=e.ref([]),ie=e.ref(0),le=new Map;function S(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const I=e.computed(()=>{const C=typeof n.mapId=="string"?n.mapId.trim():"";if(C.length)return C;const L=typeof ae.params.slug=="string"?ae.params.slug.trim():"";if(L.length)return L;const K=typeof ae.query.slug=="string"?ae.query.slug.trim():"";return K.length?K:S()}),A=e.ref(null),H=e.ref(null),ne=new Map;function pe(C){const L=C.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const K=Array.from(C).map(se=>se.charCodeAt(0).toString(16)).join("").slice(0,8);return K?`layer-${K}`:`layer-${Math.random().toString(36).slice(2,8)}`}function xe(C){if(typeof C!="string")return"";const L=C.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 K=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?K?`${K}${L}`:L:K?`${K}/${L}`:L}function ke(C){if(C==null)return[];if(Array.isArray(C))return C.flatMap(L=>ke(L));if(typeof C=="number")return Number.isFinite(C)?[C]:[];if(typeof C=="string"){const L=C.match(/-?\d+(?:\.\d+)?/g);return!L||!L.length?[]:L.map(K=>Number(K)).filter(K=>Number.isFinite(K))}return[]}function we(C){const L=ke(C);if(L.length<4)return null;const[K,se,he,Be]=L;return[K,se,he,Be].every(Le=>Number.isFinite(Le))?[K,se,he,Be]:null}function He(C){if(!C)return null;const L=C.trim();if(!L.length)return null;try{const he=JSON.parse(L),Be=we(he);if(Be)return Be}catch{}const K=L.match(/-?\d+(?:\.\d+)?/g);if(!K||K.length<4)return null;const se=K.slice(0,4).map(he=>Number(he));return se.every(he=>Number.isFinite(he))?[se[0],se[1],se[2],se[3]]:null}function Ze(C){const L={},K=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let se;for(;(se=K.exec(C))!==null;){const he=se[1],Be=se[2]??se[3]??se[4]??"";he&&(L[he]=Be)}return L}function Oe(C,L){for(const K of L)if(C[K]!=null&&String(C[K]).trim().length)return String(C[K]).trim();return""}function at(C){if(!(C!=null&&C.length))return;const L=Number(C);return Number.isFinite(L)?L:void 0}function te(C){if(typeof C!="string"||!C.length)return[];const L=[],K=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let se=0,he;const Be=new Set,Le=Re=>{let Qe=Re,it=2;for(;Be.has(Qe);)Qe=`${Re}-${it}`,it+=1;return Be.add(Qe),Qe};for(;(he=K.exec(C))!==null;){const[Re,Qe="",it=""]=he,Xe=he.index;if(Xe>se){const Ql=C.slice(se,Xe);Ql.trim().length&&L.push({type:"html",content:Ql})}const dt=Ze(Qe),bt=Oe(dt,["title"])||"Тимчасовий шар",Dt=xe(Oe(dt,["url"]));if(!Dt){L.push({type:"html",content:Re}),se=Xe+Re.length;continue}const vn=Oe(dt,["id"]),Yo=Oe(dt,["button-text","buttonText","show","show-label","showLabel"]),_C=at(Oe(dt,["tile-size","tileSize"])),EC=at(Oe(dt,["minzoom","minZoom"])),CC=at(Oe(dt,["maxzoom","maxZoom"])),NC=at(Oe(dt,["opacity"])),VC=He(Oe(dt,["bounds","data-bounds","bbox"])),BC=vn||pe(`${bt}-${Dt}`)||pe(bt),Xl=Le(BC||`layer-${L.length+1}`),Go=it.trim(),Jl=/<[^>]+>/.test(Go),$C=Jl?Go:null,Zo=Jl?null:Go,SC=Yo&&Yo.trim().length?Yo.trim():Zo&&Zo.trim().length?Zo.trim():void 0;L.push({type:"layer",spec:{id:Xl,title:bt,url:Dt,tileSize:_C,minzoom:EC,maxzoom:CC,opacity:NC,bounds:VC},componentProps:{title:bt,url:Dt,id:Xl,buttonText:SC},slotText:$C}),se=Xe+Re.length}if(se<C.length){const Re=C.slice(se);Re.trim().length&&L.push({type:"html",content:Re})}return!L.length&&C.trim().length&&L.push({type:"html",content:C}),L}function re(C){if(!C)return null;const L=typeof C.id=="string"?C.id.trim():"",K=typeof C.title=="string"?C.title.trim():"",se=xe(typeof C.url=="string"?C.url:"");return!L||!se?null:{id:L,title:K||L,url:se,tileSize:C.tileSize,minzoom:C.minzoom,maxzoom:C.maxzoom,opacity:C.opacity,bounds:C.bounds}}const Ce=e.computed(()=>{if(w.value&&r.current.value)return r.current.value.data??{};const C=o.card.value;return(C==null?void 0:C.rows)??{}}),Ue=e.computed(()=>{if(w.value&&r.current.value){const se=r.current.value,he=Array.isArray(se.columns)?se.columns:[];return he.length?he:se.fields??[]}const C=o.card.value;if(!C)return[];const L=Array.isArray(C.columns)?C.columns:[];return L.length?L:Array.isArray(C.fields)?C.fields:[]}),We=e.computed(()=>{const C=Ue.value;if(!C.length)return[];const L=Ce.value;return C.map(K=>({key:K.name,label:K.ua||K.label||K.title||K.name,value:nt(L[K.name],K.format||"text",K.type||"text"),format:K.format||"text"}))}),ve=new Set(["—","-","–","−"]);function Ge(C){const L=C.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return C;const[,K,se,he]=L;return`${he}.${se}.${K}`}function Ae(C){return Number.isFinite(C)?new Intl.NumberFormat("uk-UA").format(C):"—"}function nt(C,L,K){if(C==null)return"—";if(L==="tags")return C;if(Array.isArray(C))return C.length?C.map(se=>nt(se,"text","text")).join(", "):"—";if(typeof C=="boolean")return C?"так":"ні";if(K==="number"&&typeof C=="number")return Ae(C);if(typeof C=="string"){const se=C.trim();if(!se.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(se))return Ge(se);if(K==="number"&&/^-?\d+(?:\.\d+)?$/.test(se)){const he=Number(se);return Number.isFinite(he)?Ae(he):se}return se}return String(C)}function W(C){if(C==null)return!0;if(typeof C=="string"){const L=C.trim();return L.length?ve.has(L):!0}return!1}function V(C){if(!C)return[];if(Array.isArray(C))return C;if(typeof C=="string"){const L=C.trim();if(L.startsWith("{")&&L.endsWith("}")){const se=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return se?se.map(he=>he.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const D=e.ref(!1),ee=e.ref(!0),T=()=>{var C,L;return typeof window>"u"?null:((L=(C=window.localStorage)==null?void 0:C.getItem)==null?void 0:L.call(C,gr))??null},O=e.ref(T()),U=C=>{const L=typeof C=="string"&&C.toLowerCase()==="true";D.value=L,ee.value=!L},ce=C=>{O.value=C};if(typeof window<"u"){const C=L=>{L.key===gr&&ce(L.newValue)};window.addEventListener("storage",C),e.onBeforeUnmount(()=>{window.removeEventListener("storage",C)})}const de=e.computed(()=>typeof O.value=="string");e.watch(O,C=>{U(typeof C=="string"?C:Z.value)},{immediate:!0}),e.watch(Z,C=>{de.value||U(C)},{immediate:!0});const _e=e.computed(()=>We.value.filter(C=>W(C.value)).length),$e=e.computed(()=>D.value&&!ee.value?We.value.filter(C=>!W(C.value)):We.value);function Se(C){const L=typeof C=="string"?C:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const se=new DOMParser().parseFromString(L,"text/html");let he=0;return se.querySelectorAll("dd").forEach(Be=>{var Qe;const Le=((Qe=Be.textContent)==null?void 0:Qe.trim())??"",Re=Be.closest("div");if(W(Le)){he+=1,Re?Re.remove():Be.remove();return}}),{sanitized:se.body.innerHTML,hiddenCount:he}}const ot=e.computed(()=>Se(Y.value)),gt=e.computed(()=>Y.value?ot.value.hiddenCount:0),ut=e.computed(()=>_e.value+gt.value),Et=e.computed(()=>{var C;return D.value&&!ee.value&&!!((C=Y.value)!=null&&C.trim())}),en=e.computed(()=>D.value&&ut.value>0),no=e.computed(()=>ee.value?"Приховати пусті значення":"Показати пусті значення"),qo=e.computed(()=>ee.value?me.ChevronUp:me.ChevronDown);function Ho(){ee.value=!ee.value}const tn=e.computed(()=>{const C=Et.value?ot.value.sanitized:Y.value??"";return te(C)}),Vn=e.computed(()=>tn.value.filter(C=>C.type==="layer"));function Wo(C){return Array.isArray(C)?C.map((L,K)=>{const se=xe(typeof(L==null?void 0:L.url)=="string"?L.url:""),he=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",Be=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${K+1}`).toString(),Le=(L==null?void 0:L.id)!=null?String(L.id):pe(`${Be}-${K+1}`),Re=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,Qe=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,it=se||xe(he)||"";if(!it)return null;const Xe={id:Le,title:Be,url:it,subtitle:Qe,buttonText:Re||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Xe.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Xe.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Xe.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Xe.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Xe.opacity=L.opacity);const dt=we((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return dt&&(Xe.bounds=dt),Xe}).filter(Boolean):[]}const nn=e.computed(()=>{var se,he;const C=o.card.value,L=r.current.value,K=[(se=C==null?void 0:C.rows)==null?void 0:se.layers,C==null?void 0:C.layers,(he=L==null?void 0:L.data)==null?void 0:he.layers,L==null?void 0:L.layers];for(const Be of K){const Le=Wo(Be);if(Le.length)return Le}return[]}),Bn=e.computed(()=>tn.value.length>0||We.value.length>0||nn.value.length>0),$n=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function Pt(){const C={},L=A.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([K,se])=>{typeof se=="string"&&(C[K]=se)}),v.value&&(C.layer=v.value),!C.geohub){const K=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,se=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,he=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;C.geohub=K||se||he||C.layer||""}return C}async function on(){const C=v.value;if(!C)return A.value=null,H.value=null,null;if(H.value===C&&A.value)return A.value;if(ne.has(C)){const L=ne.get(C);return A.value=L,H.value=C,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(C)}`);if(!L.ok)return null;const K=await L.json();return ne.set(C,K),A.value=K,H.value=C,K}catch{return null}}async function rn(C){if(!(C!=null&&C.id))return;await on();const L=Pt(),K=Vn.value.find(Re=>Re.spec.id===C.id),se=nn.value.find(Re=>Re.id===C.id),he=(K==null?void 0:K.spec)||re(se)||re(C),Be=(K==null?void 0:K.spec.bounds)??(se==null?void 0:se.bounds);if(!he||j(he.id,R.value))return;const Le=R.value||void 0;ue.value=Le??null,X(he,L,Le),z({action:"activate",owner:Le,spec:he,context:L}),oo(Be)}async function oo(C){var Be;if(!(C!=null&&C.length))return;const[L,K,se,he]=C;[L,K,se,he].every(Le=>Number.isFinite(Le))&&typeof P.fitBounds=="function"&&(await((Be=P.ready)==null?void 0:Be.call(P)),P.fitBounds([[L,K],[se,he]],{padding:48,maxZoom:18}))}function ro(C){if(!C)return;const L=q()||void 0;G(C,L),z({action:"deactivate",owner:L,spec:{id:C}})}function lo(C){return j(C,q())}function ao(C,L){const K=L.target;!!(K!=null&&K.checked)?rn(C):ro(C.id)}function q(){return ue.value||R.value||null}e.watch(v,(C,L)=>{C!==L&&(A.value=null,H.value=null)});const{next:oe,prev:Ne,count:Te,index:ye}=r,je=e.computed(()=>o.count.value),De=e.computed(()=>o.index.value),be=e.computed(()=>w.value?!1:f.value?i.value.length>1:je.value>1),ze=e.computed(()=>w.value?Te.value:f.value?i.value.length:je.value),qe=e.computed(()=>w.value?ye.value:f.value?s.value:De.value),Pe=()=>{if(f.value){if(s.value>=i.value.length-1)return;d(s.value+1);return}o.next()},Je=()=>{if(f.value){if(s.value<=0)return;d(s.value-1);return}o.prev()};function tt(){const C=q();C&&(M(C),z({action:"clear",owner:C}),ue.value=null)}function Ye(){y(),o.close(),r.close(),tt(),g(null)}e.watch(E,(C,L)=>{!C&&L&&(tt(),Fe())});function pt(){!o.isOpen.value&&!r.active.value&&tt()}e.watch(()=>o.isOpen.value,()=>{pt()}),e.watch(()=>r.active.value,()=>{pt()}),e.watch(v,(C,L)=>{C&&L&&C!==L&&tt()}),e.watch(ye,(C,L)=>{C!==L&&tt()}),e.watch(J,(C,L)=>{C&&L&&C!==L&&tt()});function st(C){if(!C)return null;if(C.geometry)return C.geometry;const L=(C==null?void 0:C.data)??(C==null?void 0:C.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Fe(){fe.value.length&&(fe.value.forEach((C,L)=>{var K;(K=C==null?void 0:C.remove)==null||K.call(C,L===0)}),fe.value=[])}function wt(C){var K,se,he;const L=(C==null?void 0:C.type)||((he=(se=(K=C==null?void 0:C.features)==null?void 0:K[0])==null?void 0:se.geometry)==null?void 0:he.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 ln=null;function Zl(){return m()}function yC(C){var he,Be;if(!C)return null;const L=(C==null?void 0:C.source)??((he=C==null?void 0:C.layer)==null?void 0:he.id),K=((Be=C==null?void 0:C.properties)==null?void 0:Be.id)??(C==null?void 0:C.id);return!L||K===void 0||K===null?null:`${L},${K}`.trim()||null}function so(C,L){if(C){if(Array.isArray(C)){if(C.length>=2&&typeof C[0]=="number"&&typeof C[1]=="number"){L.push([C[0],C[1]]);return}C.forEach(K=>so(K,L));return}typeof C=="object"&&(Array.isArray(C.coordinates)&&so(C.coordinates,L),Array.isArray(C.features)&&C.features.forEach(K=>so(K==null?void 0:K.geometry,L)))}}function hC(C){var Re,Qe;if(!C)return null;const L=C.type==="FeatureCollection"?(Qe=(Re=C.features)==null?void 0:Re[0])==null?void 0:Qe.geometry:C.type==="Feature"?C.geometry:C,K=[];if(so(L,K),!K.length)return null;let se=K[0][0],he=K[0][0],Be=K[0][1],Le=K[0][1];return K.forEach(([it,Xe])=>{it<se&&(se=it),it>he&&(he=it),Xe<Be&&(Be=Xe),Xe>Le&&(Le=Xe)}),[(se+he)/2,(Be+Le)/2]}async function bC(C,L){var Be;const K=Zl();if(!K||K.startsWith("external:"))return;const se=yC(C);if(!se||se!==K||ln===K)return;const he=hC(L);he&&(await((Be=P.ready)==null?void 0:Be.call(P)),P.flyTo({center:he,zoom:kd}),ln=K)}function Kl(C){var he;if(!C){Fe();return}const L=(he=P.map)==null?void 0:he.value,K={type:"FeatureCollection",features:[{type:"Feature",geometry:C,properties:{}}]};Fe();const se=wt(C);if(fe.value=se.map((Be,Le)=>Me(`feature-card-highlight${Le||""}`,{...Le===0?{source:{type:"geojson",data:K}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Le||""}`,type:Be.type,source:"feature-card-highlight",paint:Be.paint}},P.map)),L!=null&&L.moveLayer){const Be=()=>{try{fe.value.forEach(it=>{var dt;const Xe=(dt=it==null?void 0:it.ids)==null?void 0:dt.layerId;Xe&&L.moveLayer(Xe)})}catch{}},Le=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Be)}):setTimeout(Be,0)};Le();const Re=()=>Le();L.once("styledata",Re);const Qe=()=>{Le(),L.off("styledata",Re),L.off("idle",Qe)};L.on("idle",Qe)}}function xC(C){var se,he;const L=(C==null?void 0:C.source)||((se=C==null?void 0:C.layer)==null?void 0:se.id)||"unknown",K=((he=C==null?void 0:C.properties)==null?void 0:he.id)??(C==null?void 0:C.id)??"unknown";return`${L}:${K}`}async function kC(C){var Be,Le,Re,Qe,it;if(!C)return null;const L=st(C);if(L)return L;const K=((Be=C==null?void 0:C.properties)==null?void 0:Be.id)??(C==null?void 0:C.id);if(!K)return null;const se=xC(C);if(le.has(se))return le.get(se);const he=[I.value,C==null?void 0:C.source,(Le=C==null?void 0:C.layer)==null?void 0:Le.id].map(Xe=>typeof Xe=="string"?Xe.trim():"").filter(Boolean);for(const Xe of he)try{const dt=await fetch(`/api/map-features/${encodeURIComponent(Xe)}/${encodeURIComponent(String(K))}`);if(!dt.ok)continue;const bt=await dt.json(),Dt=((Re=bt==null?void 0:bt.data)==null?void 0:Re.geom)||((Qe=bt==null?void 0:bt.data)==null?void 0:Qe.geometry)||((it=bt==null?void 0:bt.data)==null?void 0:it.geom_4326)||null,vn=typeof Dt=="string"?JSON.parse(Dt):Dt;if(vn)return le.set(se,vn),vn}catch{continue}return null}async function Sn(C){ie.value+=1;const L=ie.value;if(N())return;if(!C||w.value){Fe();return}if(!$n.value){Fe();return}const K=await kC(C);if(L===ie.value){if(!K){Fe();return}Kl(K),bC(C,K)}}async function wC(C){var K,se,he;const L=b(C);if(!L){(K=m())!=null&&K.startsWith("external:")&&(y(),Fe());return}if(((se=p.value)==null?void 0:se.infoToken)===L.token){N();return}try{const Be=await fetch(`/api/map-format?layer=${encodeURIComponent(L.layer)}&id=${encodeURIComponent(L.id)}`);if(!Be.ok)throw new Error(`Failed (${Be.status})`);const Le=await Be.json(),Re=typeof(Le==null?void 0:Le.html)=="string"?Le.html:null,Qe=u(((he=Le==null?void 0:Le.data)==null?void 0:he.geom)??(Le==null?void 0:Le.geom)??null);if(!Re&&!Qe){y(),Fe();return}h([{html:Re,geometry:Qe,infoToken:L.token}],0)}catch{y(),Fe()}}return e.watch(()=>o.cardFeature.value,C=>{Sn(C)},{immediate:!0}),e.watch(()=>o.index.value,()=>{w.value||Sn(o.cardFeature.value)}),e.watch(w,C=>{if(C){k.value||Fe();return}if(k.value){N();return}Sn(o.cardFeature.value)}),e.watch(I,()=>{if(k.value){N();return}!w.value&&o.cardFeature.value&&Sn(o.cardFeature.value)}),e.watch($n,C=>{N()||(C?Sn(o.cardFeature.value):Fe())}),e.watch(()=>Zl(),C=>{if(ln=null,C!=null&&C.startsWith("external:")){wC(C);return}p.value&&(y(),Fe())},{immediate:!0}),e.watch(p,C=>{var L;if(!((L=C==null?void 0:C.html)!=null&&L.trim())){Fe();return}N()}),e.onBeforeUnmount(()=>{tt(),Fe()}),(C,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[E.value?(e.openBlock(),e.createElementBlock("div",Uc,[e.createElementVNode("div",qc,[e.createElementVNode("div",Hc,[e.createElementVNode("p",Wc,[w.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(qe.value+1)+" / "+e.toDisplayString(ze.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[be.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(qe.value+1)+" / "+e.toDisplayString(ze.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),w.value&&e.unref(Te)>1?(e.openBlock(),e.createElementBlock("div",Yc,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...K)=>e.unref(Ne)&&e.unref(Ne)(...K)),disabled:e.unref(ye)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(me.ArrowLeft),{class:"h-4 w-4"})],8,Gc),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...K)=>e.unref(oe)&&e.unref(oe)(...K)),disabled:e.unref(ye)===e.unref(Te)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(me.ArrowRight),{class:"h-4 w-4"})],8,Zc)])):!w.value&&be.value?(e.openBlock(),e.createElementBlock("div",Kc,[e.createElementVNode("button",{onClick:Je,disabled:qe.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(me.ArrowLeft),{class:"h-4 w-4"})],8,Xc),e.createElementVNode("button",{onClick:Pe,disabled:qe.value>=ze.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(me.ArrowRight),{class:"h-4 w-4"})],8,Jc)])):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:Ye}," ✕ ")]),e.createElementVNode("div",Qc,[B.value?(e.openBlock(),e.createElementBlock("div",ed," Завантаження даних… ")):F.value?(e.openBlock(),e.createElementBlock("div",td,e.toDisplayString(F.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[We.value.length?(e.openBlock(),e.createElementBlock("div",nd,[e.createElementVNode("dl",od,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($e.value,K=>(e.openBlock(),e.createElementBlock("div",{key:K.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",rd,e.toDisplayString(K.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-6 font-normal whitespace-pre-wrap",K.format==="badge"?"font-semibold text-yellow-800":""])},[K.format==="tags"?(e.openBlock(),e.createElementBlock("div",ld,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V(K.value),(se,he)=>(e.openBlock(),e.createElementBlock("span",{key:he,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(se),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(K.value),1)],64))],2)]))),128))])])):tn.value.length?(e.openBlock(),e.createElementBlock("div",ad,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(tn.value,(K,se)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:se},[K.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:K.content},null,8,sd)):(e.openBlock(),e.createBlock(pr,{key:1,title:K.componentProps.title,url:K.componentProps.url,id:K.componentProps.id,"button-text":K.componentProps.buttonText,onActivate:rn},e.createSlots({_:2},[K.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:K.slotText},null,8,id)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),Vn.value.length?(e.openBlock(),e.createElementBlock("div",cd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Vn.value,K=>(e.openBlock(),e.createBlock(pr,{key:K.spec.id,title:K.componentProps.title,url:K.componentProps.url,id:K.spec.id,"button-text":K.componentProps.buttonText,onActivate:rn},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),en.value?(e.openBlock(),e.createElementBlock("div",dd,[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:Ho},[e.createElementVNode("span",ud,e.toDisplayString(no.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(qo.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),nn.value.length?(e.openBlock(),e.createElementBlock("div",md,[L[3]||(L[3]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",pd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(nn.value,K=>(e.openBlock(),e.createElementBlock("div",{key:K.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",fd,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:lo(K.id),onChange:se=>ao(K,se)},null,40,gd),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",yd,e.toDisplayString(K.title),1)]),K.subtitle?(e.openBlock(),e.createElementBlock("div",hd,e.toDisplayString(K.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Bn.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",bd," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-6e054ce5"]]),wd={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%"}},_d={class:"flex flex-col gap-1 p-5"},Ed={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},Eo=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=et(),a=e.ref([]);let i=null;function s(k){return k?k.map((l,y)=>{var b;const u=(l==null?void 0:l.name)||(l==null?void 0:l.label)||(l==null?void 0:l.title)||(l==null?void 0:l.id)||`Layer ${y+1}`,m=(l==null?void 0:l.color)||(l==null?void 0:l.fill)||((b=l==null?void 0:l.paint)==null?void 0:b.color)||"#3388ff";return{id:`${u}-${y}`,label:u,color:m}}):[]}function c(k){return k!=null&&k.layers?k.layers.filter(l=>{const y=l.paint||{};return y["fill-color"]||y["line-color"]||y["circle-color"]}).map((l,y)=>{var b;const u=l.paint||{},m=u["fill-color"]||u["line-color"]||u["circle-color"]||"#3388ff";return{id:l.id||`layer-${y}`,label:((b=l.metadata)==null?void 0:b.title)||l.id||`Layer ${y+1}`,color:m}}):[]}async function p(){var y;await r();const k=o.value;if(!k)return;const l=(y=k.getStyle)==null?void 0:y.call(k);a.value=c(l)}function f(){o.value&&(i==null||i())}return e.watch(()=>n.items,async k=>{k!=null?(a.value=s(k),i==null||i()):(await r(),f(),p())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),f(),p())}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(k,l)=>a.value.length?(e.openBlock(),e.createElementBlock("div",wd,[e.createElementVNode("div",_d,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:y.color})},null,4),e.createElementVNode("span",Ed,[e.createElementVNode("span",null,e.toDisplayString(y.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Cd={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"},Co=Ve(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",Cd,[e.createVNode(Fn,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),In=e.ref({}),jn=e.ref([]);function Nd(t){const n={};t.forEach(o=>{o!=null&&o.id&&(n[o.id]=o)}),In.value=n}function Vd(t){jn.value=[...t]}function Bd(){In.value={},jn.value=[]}function $d(t){return t.legend?(Array.isArray(t.legend)?t.legend:[t.legend]).filter(Boolean):[]}const yr=e.computed(()=>{const t=[];return jn.value.forEach(n=>{const o=In.value[n];o&&$d(o).forEach(r=>{t.push({...r,name:r.name??r.label??o.name,label:r.label??r.name??o.name})})}),t});function Sd(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?yr.value:[]}function hr(){return{layersById:In,selectedLayerIds:jn,catalogLegendItems:yr,registerCatalogLayers:Nd,setCatalogSelectedLayerIds:Vd,resetMapCatalogLegend:Bd,resolveMapLegendItems:Sd}}const vd={class:"catalog-tab__search relative mt-[10px]"},Ld={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%)"}},Td={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Ad={key:0,class:"text-sm text-gray-400 text-center mt-6"},Md=["onClick"],Dd={class:"flex items-center gap-x-3"},Fd={class:"max-w-[260px] text-[14px] text-[#4b5563]"},zd={class:"text-xs opacity-60 text-[#4b5563]"},Id={class:"flex items-center cursor-pointer gap-2 flex-1"},jd=["checked","onChange"],Pd={class:"text-[13px] text-gray-600 max-w-[260px]"},Rd={class:"flex items-center gap-2"},Od=Ve(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,a=e.reactive({}),i=e.ref(null),s=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),c=new Intl.Collator("uk",{sensitivity:"base"}),p=e.computed(()=>{const d=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const x=h.layers.filter(N=>{const $=b(N);return $?d?$.toLowerCase().includes(d):!0:!1}).sort((N,$)=>c.compare(b(N),b($)));return{...h,layers:x}}).filter(h=>h.layers.length>0).sort((h,x)=>c.compare(h.name,x.name))}),f=e.computed({get:()=>o.search,set:d=>r("update:search",d)});function k(d){a[d]=!a[d],ic()}function l(d){return!!a[d]}function y(d,h){if(o.selected.includes(h)){s.visible=!1,s.layerId=null;return}const x=d.currentTarget;if(!x)return;const N=x.getBoundingClientRect(),$=typeof window<"u"?window.scrollX:0,_=typeof window<"u"?window.scrollY:0;s.left=N.left+N.width/2+$,s.top=N.bottom+8+_,s.layerId=h,s.visible=!0}function u(){s.visible=!1,s.layerId=null}function m(d){return[{label:"Назва",value:g(d.name)},{label:"Сервіс",value:g(d.service)},{label:"Посилання",value:g(d.url),breakLine:!0}]}function b(d){return typeof(d==null?void 0:d.name)=="string"?d.name.trim():""}function g(d){return d==null||d===""?null:String(d)}return e.watch(()=>o.selected?o.selected.slice():[],d=>{!s.visible||!s.layerId||d.includes(s.layerId)&&(s.visible=!1,s.layerId=null)}),(d,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:i,class:"catalog-tab"},[e.createElementVNode("div",vd,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=x=>f.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,f.value]]),(e.openBlock(),e.createElementBlock("svg",Ld,[...h[1]||(h[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",Td,[p.value.length===0?(e.openBlock(),e.createElementBlock("div",Ad," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.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:N=>k(x.id)},[e.createElementVNode("div",Dd,[(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",l(x.id)?"rotate-90":""])},[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",Fd,e.toDisplayString(x.name),1)]),e.createElementVNode("div",zd,e.toDisplayString(x.layers.length),1)],8,Md),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,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Id,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(N.id),onChange:$=>d.$emit("toggle-layer",N.id,$.target.checked,N)},null,40,jd),h[3]||(h[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 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",Pd,e.toDisplayString(N.name),1)]),e.createElementVNode("div",Rd,[Array.isArray(N.filters)&&N.filters.length?(e.openBlock(),e.createBlock(Fn,{key:0,count:N.filters.length,layer:N,disabled:!t.selected.includes(N.id),onMouseenter:$=>y($,N.id),onMouseleave:u,onFocus:$=>y($,N.id),onBlur:u},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(yo,{items:m(N)},null,8,["items"])])]))),128))],512),[[e.vShow,l(x.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${s.top}px`,left:`${s.left}px`})},e.toDisplayString(s.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-36ed2aad"]]),Ud={class:"flex flex-col gap-0"},qd={class:"text-xs text-slate-600 font-semibold"},Hd=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%)"}),a=e.ref(null),i=e.ref(null);let s=null;const c=e.computed(()=>{if(!r.open)return{display:"none"};const b=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${b}px`,maxWidth:`${b}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function p(){if(r.open){y();return}if(!a.value){y();return}r.open=!0,e.nextTick(()=>{f(),u(),requestAnimationFrame(()=>{f()})})}function f(){if(!r.open||!a.value||!i.value)return;const b=a.value.getBoundingClientRect(),g=12,d=window.scrollX+g,h=window.scrollX+window.innerWidth-g,x=window.scrollY+g,N=window.scrollY+window.innerHeight-g,$=i.value.offsetWidth||Math.min(460,window.innerWidth-24),_=i.value.offsetHeight||0;let w=b.left+window.scrollX+(b.width-$)/2;w<d&&(w=d),w+$>h&&(w=Math.max(d,h-$)),r.left=w;let E=b.bottom+window.scrollY+g;E+_>N&&(E=b.top+window.scrollY-_-g,E<x&&(E=Math.max(x,N-_))),E<x&&(E=x),E+_>N&&(E=Math.max(x,N-_)),r.top=E,r.transform="none"}function k(b){var d,h;if(!r.open)return;const g=b.target;(d=a.value)!=null&&d.contains(g)||(h=i.value)!=null&&h.contains(g)||y()}function l(b){b.key==="Escape"&&y()}function y(){m(),r.open=!1,a.value=null,i.value=null}function u(){m(),i.value&&(s=new ResizeObserver(()=>{f()}),s.observe(i.value))}function m(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",l),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",l),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f),m()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>f())},{deep:!0}),n({close:y}),(b,g)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:a},[e.createElementVNode("div",{onClick:e.withModifiers(p,["prevent","stop"])},[e.renderSlot(b.$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:i,onClick:g[0]||(g[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ud,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",qd,e.toDisplayString(d.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":d.breakLine}])},e.toDisplayString(d.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Wd={class:"selected-tab"},Yd={class:"selected-tab__actions"},Gd={key:0,class:"selected-tab__scroll"},Zd=["onDragstart","onDragover","onDrop"],Kd={class:"selected-tab__item-header"},Xd={class:"selected-tab__item-info"},Jd=["checked","onChange"],Qd={class:"selected-tab__item-name"},eu={class:"selected-tab__item-controls"},tu=["onClick"],nu={class:"selected-tab__menu-inner"},ou=Ve(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{},clientLayers:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,a=e.reactive({}),i=e.ref(null),s=e.ref(null),c=new Map,p=e.reactive({top:0,left:0}),f=e.ref(null),k=e.reactive({top:0,left:0}),l=e.ref(null),y=new Map,u=e.reactive({});function m(M){var z,v;const j=(z=o.clientLayers)==null?void 0:z[M];if(j){const R=j.bounds?[j.bounds[0][0],j.bounds[0][1],j.bounds[1][0],j.bounds[1][1]]:null;return{id:j.id,name:j.name,service:"geojson",isClient:!0,extent:R}}for(const R of((v=o.catalog)==null?void 0:v.groups)??[]){const J=R.layers.find(ue=>ue.id===M);if(J)return J}return null}e.watch(()=>o.selected,M=>{M.forEach(j=>{a[j]==null&&(a[j]=100)})},{immediate:!0});function b(){if(!i.value)return;const M=c.get(i.value);if(!M)return;const j=M.getBoundingClientRect();p.top=j.bottom+8+window.scrollY,p.left=j.left+window.scrollX}e.watch(()=>o.selected,M=>{M.forEach(j=>{u[j]==null&&(u[j]=!0)})},{immediate:!0});function g(M,j){var v;if(u[M]=j,(v=o.clientLayers)!=null&&v[M]){r("toggle-layer",M,j);return}const z=Me(M);z&&z.setVisible(j)}function d(M,j){j?y.set(M,j):y.delete(M)}function h(M){f.value=f.value===M?null:M,f.value&&e.nextTick(()=>{x(M),requestAnimationFrame(()=>{x(M)})})}function x(M){const j=y.get(M);if(!j||!l.value)return;const z=j.getBoundingClientRect(),v=12,R=6,J=window.scrollX+v,ue=window.scrollX+window.innerWidth-v,fe=window.scrollY+v,ie=window.scrollY+window.innerHeight-v,le=l.value.offsetWidth||190,S=l.value.offsetHeight||0;let I=z.bottom+window.scrollY+R,A=z.left+window.scrollX;A+le>ue&&(A=z.right+window.scrollX-le,A<J&&(A=J)),A<J&&(A=J),I+S>ie&&(I=z.top+window.scrollY-S-R,I<fe&&(I=Math.max(fe,ie-S))),I<fe&&(I=fe),I+S>ie&&(I=Math.max(fe,ie-S)),k.top=I,k.left=A}function N(M){const j=Me(M);j&&j.remove(),r("remove",M),f.value=null}function $(M){const j=M.target,z=i.value,v=f.value;if(z){const R=s.value,J=c.get(z);if(R&&R.contains(j)||J&&J.contains(j))return;i.value=null}if(v){const R=l.value,J=y.get(v);if(R&&R.contains(j)||J&&J.contains(j))return;f.value=null}}function _(){i.value&&b(),f.value&&x(f.value)}e.onMounted(()=>{document.addEventListener("click",$),window.addEventListener("resize",_),window.addEventListener("scroll",_,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",$),window.removeEventListener("resize",_),window.removeEventListener("scroll",_,!0)});const{map:w}=et();function E(M){var J,ue,fe,ie,le,S;if(!M)return;const j=Me(M),z=m(M);if(!j&&!z)return;if(((J=z==null?void 0:z.extent)==null?void 0:J.length)===4&&((ue=w.value)!=null&&ue.fitBounds)){const I=z.extent.map(A=>Number(A));if(I.every(A=>Number.isFinite(A))){const[A,H,ne,pe]=I;w.value.fitBounds([[A,H],[ne,pe]],{padding:40}),f.value=null;return}}const v=(ie=(fe=o.clientLayers)==null?void 0:fe[M])==null?void 0:ie.bounds;if(v&&((le=w.value)!=null&&le.fitBounds)){w.value.fitBounds(v,{padding:40}),f.value=null;return}(S=j==null?void 0:j.getSource)!=null&&S.call(j)&&(f.value=null)}const B=e.ref(null),F=e.ref(null);function Y(M,j){B.value=j,F.value=j,M.dataTransfer&&(M.dataTransfer.effectAllowed="move",M.dataTransfer.setData("text/plain",String(j)))}function P(M){F.value=M}function Q(M,j){if(M.preventDefault(),B.value===null||B.value===j){B.value=null,F.value=null;return}const v=[...o.selected],[R]=v.splice(B.value,1);v.splice(j,0,R),r("reorder",v),B.value=null,F.value=null}function Z(){B.value=null,F.value=null}function ae(M){return M==null||M===""?null:String(M)}function X(M,j){return!Array.isArray(M)||M.length===0?null:`${M.length} ${j}`}function G(M){var I,A,H,ne,pe,xe;const j=Me(M),z=m(M);if(!j&&!z)return[];const v=(z==null?void 0:z.name)||((A=(I=j==null?void 0:j.opts)==null?void 0:I.layer)==null?void 0:A.name)||null,R=(z==null?void 0:z.service)||((H=j==null?void 0:j.opts)==null?void 0:H.service)||null,J=(ne=j==null?void 0:j.getSource)==null?void 0:ne.call(j),ue=J&&"tiles"in J?(pe=J.tiles)==null?void 0:pe[0]:(z==null?void 0:z.url)||null,fe=(z==null?void 0:z.source_path)||null,ie=(j==null?void 0:j.popup)||(z==null?void 0:z.popup),le=(j==null?void 0:j.card)||(z==null?void 0:z.card),S=(z==null?void 0:z.filters)||((xe=j==null?void 0:j.opts)==null?void 0:xe.filters);return[{label:"Назва",value:ae(v)},{label:"Сервіс",value:ae(z!=null&&z.isClient?"Завантажені дані":R)},{label:"Посилання",value:ae(ue),breakLine:!0},{label:"Джерело",value:ae(fe),breakLine:!0},{label:"Popup",value:X(ie,"полів")},{label:"Картка",value:X(le,"полів")},{label:"Фільтри",value:X(S,"фільтрів")}]}return(M,j)=>(e.openBlock(),e.createElementBlock("div",Wd,[e.createElementVNode("div",Yd,[e.createElementVNode("button",{class:"selected-tab__add",onClick:j[0]||(j[0]=z=>r("select-layer"))},[...j[3]||(j[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",Gd,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(z,v)=>{var R;return e.openBlock(),e.createElementBlock("div",{key:z,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":B.value===v,"selected-tab__item--over":F.value===v}]),draggable:"true",onDragstart:J=>Y(J,v),onDragover:e.withModifiers(J=>P(v),["prevent"]),onDrop:J=>Q(J,v),onDragend:Z},[e.createElementVNode("div",Kd,[e.createElementVNode("div",Xd,[j[4]||(j[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:u[z]??!0,onChange:J=>g(z,J.target.checked)},null,40,Jd),e.createElementVNode("span",Qd,e.toDisplayString(((R=m(z))==null?void 0:R.name)||"Шар"),1)]),e.createElementVNode("div",eu,[e.createVNode(cr,{"layer-id":z},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:J=>d(z,J),onClick:e.withModifiers(J=>h(z),["stop"])},[...j[5]||(j[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,tu)])])],42,Zd)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[f.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:l,class:"selected-tab__menu",style:e.normalizeStyle({top:k.top+"px",left:k.left+"px"})},[e.createElementVNode("div",nu,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:j[1]||(j[1]=z=>E(f.value))},[...j[6]||(j[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(Hd,{items:G(f.value)},{default:e.withCtx(()=>[...j[7]||(j[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"]),j[9]||(j[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:j[2]||(j[2]=z=>N(f.value))},[...j[8]||(j[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"]]),ru={class:"filter-tab"},lu={key:0,class:"filter-tab__header"},au={class:"filter-tab__title"},su={key:1,class:"filter-tab__content rounded-md"},iu={class:"filter-tab__scroll"},cu={key:2,class:"filter-tab__empty"},du=Ve(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,a=n,i=e.computed(()=>{var p;return((p=r.layer)==null?void 0:p.filters)??[]}),s=e.computed(()=>i.value.length>0);function c(p){a("change",p.data)}return(p,f)=>(e.openBlock(),e.createElementBlock("div",ru,[t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",lu,[e.createElementVNode("div",null,[e.createElementVNode("p",au,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",su,[e.createElementVNode("div",iu,[e.createVNode(e.unref(o),{view:"vertical",schema:i.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:f[0]||(f[0]=k=>c(k))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",cu,[...f[1]||(f[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),uu={class:"flex items-center justify-between mb-1"},mu={class:"flex items-center gap-2"},pu={class:"text-lg font-semibold text-gray-800"},fu={key:0},gu={key:1,class:"block text-sm font-normal text-gray-500"},yu={class:"flex items-center gap-2"},hu={class:"flex mb-4 border-b border-gray-200"},bu={class:"map-catalog-widget__body"},br=Ve(e.defineComponent({__name:"MapCatalogWidget",setup(t){const{registerCatalogLayers:n,setCatalogSelectedLayerIds:o,resetMapCatalogLegend:r}=hr(),a=Ie.useRoute(),i=Ie.useRouter();function s(){const A=a.query["catalog-tab"];return(Array.isArray(A)?A[0]:A)==="selected"?"selected":"catalog"}const c=e.ref(s()),p=e.ref({groups:[]}),f=e.ref([]),k=e.ref(""),{map:l}=et(),{clientLayers:y,isClientLayer:u,getClientLayer:m,unregisterClientLayer:b,clearClientLayers:g}=xo(),d=e.reactive({}),h=e.ref(null),x=e.ref(!0),N=e.ref(!1),{activateTemporaryLayer:$}=cn(l);function _(A){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"activate",owner:"add-data",spec:A}}))}function w(A,H){var ke,we;const ne=y.value[A]||m(A),pe=Me(A);if(!H){(ke=pe==null?void 0:pe.setVisible)==null||ke.call(pe,!1);return}if((we=pe==null?void 0:pe.isMounted)!=null&&we.call(pe)){pe.setVisible(!0);return}if(!(ne!=null&&ne.data))return;const xe={id:ne.id,title:ne.name,type:"geojson",data:ne.data};$(xe,{},"add-data"),_(xe)}function E(A){const H=y.value[A];if(H){const ne=H.bounds?[H.bounds[0][0],H.bounds[0][1],H.bounds[1][0],H.bounds[1][1]]:null;return{id:H.id,name:H.name,service:"geojson",isClient:!0,extent:ne}}return p.value.groups.map(ne=>ne.layers.find(pe=>pe.id===A)).find(Boolean)||null}function B(A){return typeof(A==null?void 0:A.name)=="string"&&A.name.trim().length>0}function F(){const A=h.value;if(!A)return;delete d[A];const H=Me(A);H!=null&&H.setFilter&&H.setFilter("")}function Y(A,H){const ne=Me(A);if(d[A]={...H},!(ne!=null&&ne.setFilter))return;const pe=Object.entries(H).filter(([,xe])=>xe!=null&&xe!=="").map(([xe,ke])=>`${xe}=${ke}`);ne.setFilter(pe.join("|"))}function P(A){const H=h.value;H&&Y(H,A)}function Q(A){const H=A.url;let ne=null;if(H&&(ne=H.startsWith("http")?H:`${window.location.origin}${H}`),!ne)return null;const pe=(A.service||"").toString().toLowerCase(),xe=A.count??null;return pe&&pe!=="vtile"?{service:pe,count:xe,source:{type:"raster",tiles:[ne],tileSize:256,minzoom:0,maxzoom:20}}:{service:pe,count:xe,source:{type:"vector",tiles:[ne],minzoom:0,maxzoom:14},layer:{style:A.style},card:A.card,popup:A.popup}}function Z(A,H,ne){var we;const pe=ne??E(A);if(!pe)return;if(pe.isClient){w(A,H),H&&!f.value.includes(A)&&f.value.push(A);return}const xe=Q(pe);if(!xe)return;const ke=Me(pe.id,xe,l);if(ke)if(ke.setVisible(H),H){if(!f.value.includes(A)&&(f.value.push(A),(we=l.value)!=null&&we.getLayer(A)))try{l.value.moveLayer(A)}catch(He){console.warn("Cannot move new layer",A,He)}}else f.value=f.value.filter(He=>He!==A),h.value===A&&(F(),h.value=null)}function ae(){f.value.forEach(A=>{var ne;const H=Me(A);H&&H.setVisible(!1),u(A)&&((ne=H==null?void 0:H.remove)==null||ne.call(H),b(A))}),f.value=[],g()}function X(A){var ne;const H=Me(A);(ne=H==null?void 0:H.remove)==null||ne.call(H),u(A)&&(b(A),window.dispatchEvent(new CustomEvent(Dn,{detail:{id:A}})),window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"deactivate",spec:{id:A},owner:"add-data"}}))),f.value=f.value.filter(pe=>pe!==A),h.value===A&&(F(),h.value=null)}function G(A){if(!(A instanceof CustomEvent))return;const{id:H}=A.detail||{};!H||typeof H!="string"||(f.value.includes(H)||f.value.push(H),c.value="selected")}function M(A){f.value=[...A],e.nextTick(()=>{var xe;if(!l.value)return;const H=((xe=l.value.getStyle())==null?void 0:xe.layers)??[];let ne;const pe=ke=>H.filter(we=>{var He,Ze;return(we==null?void 0:we.source)===ke||(we==null?void 0:we.id)===ke||((Ze=(He=we==null?void 0:we.id)==null?void 0:He.startsWith)==null?void 0:Ze.call(He,`${ke}`))}).map(we=>we.id);for(let ke=A.length-1;ke>=0;ke-=1){const we=A[ke],He=pe(we);He.length&&(He.forEach(Ze=>{var Oe;if((Oe=l.value)!=null&&Oe.getLayer(Ze))try{l.value.moveLayer(Ze,ne)}catch(at){console.warn("Cannot move layer",Ze,at)}}),ne=He[0])}})}function j(A){!A||!Array.isArray(A.filters)||A.filters.length===0||f.value.includes(A.id)&&(h.value=A.id,d[A.id]||(d[A.id]={}),c.value="filter")}function z(){c.value="catalog"}const v=e.computed(()=>h.value?E(h.value):null),R=e.computed(()=>{const A=h.value;return A?d[A]??{}:{}}),J=e.computed(()=>p.value.groups.reduce((A,H)=>A+H.layers.filter(B).length,0)),ue=e.computed(()=>c.value==="selected"?"Вибрані шари":c.value==="filter"?"Фільтр шарів":"Каталог"),fe=e.computed(()=>c.value==="selected"?f.value.length:c.value==="catalog"?J.value:null),ie=e.computed(()=>{var A;return c.value==="filter"?((A=v.value)==null?void 0:A.name)??"":""});async function le(){const H=await(await fetch("/api/gis-layer-list")).json(),ne=new Map;H.forEach(ke=>{const we=ke.group_id??"other";ne.has(we)||ne.set(we,{id:we,name:ke.group_name||"Інші шари",layers:[]}),ne.get(we).layers.push(ke)}),p.value={groups:Array.from(ne.values())},n(p.value.groups.flatMap(ke=>ke.layers)),o(f.value);const pe=a.query.layers;if(!pe)return;const xe=Array.isArray(pe)?pe[0]:pe;typeof xe=="string"&&xe.split(",").forEach(ke=>{const we=ke.trim();if(!we)return;const He=E(we);He&&Z(we,!0,He)})}e.watch(h,A=>{!A&&c.value==="filter"&&(c.value="catalog")}),e.watch(v,A=>{!A&&h.value&&(h.value=null)}),e.watch(f,A=>{const H=A.filter(pe=>!u(pe));o(H);const ne={...a.query};H.length?ne.layers=H.join(","):delete ne.layers,i.replace({query:ne}).catch(()=>{})},{deep:!0});function S(){x.value=!x.value}function I(){N.value=window.innerWidth<=768}return e.onMounted(()=>{le(),I(),N.value&&(x.value=!1),window.addEventListener("resize",I),window.addEventListener(dn,G)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",I),window.removeEventListener(dn,G),r()}),(A,H)=>(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"||fe.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",uu,[e.createElementVNode("div",mu,[H[4]||(H[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",pu,[e.createTextVNode(e.toDisplayString(ue.value)+" ",1),fe.value!==null?(e.openBlock(),e.createElementBlock("span",fu,"("+e.toDisplayString(fe.value)+")",1)):e.createCommentVNode("",!0),ie.value?(e.openBlock(),e.createElementBlock("span",gu,e.toDisplayString(ie.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",yu,[e.createElementVNode("button",{onClick:ae,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...H[5]||(H[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:S,"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})},[...H[6]||(H[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",hu,[e.createElementVNode("button",{onClick:H[0]||(H[0]=ne=>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:H[1]||(H[1]=ne=>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",bu,[c.value==="catalog"?(e.openBlock(),e.createBlock(Od,{key:0,class:"map-catalog-widget__scroll",catalog:p.value,selected:f.value,search:k.value,"onUpdate:search":H[2]||(H[2]=ne=>k.value=ne),onToggleLayer:Z,onOpenFilter:j},null,8,["catalog","selected","search"])):c.value==="selected"?(e.openBlock(),e.createBlock(ou,{key:1,catalog:p.value,selected:f.value,"client-layers":e.unref(y),onToggleLayer:Z,onSelectLayer:H[3]||(H[3]=ne=>c.value="catalog"),onReorder:M,onRemove:X},null,8,["catalog","selected","client-layers"])):(e.openBlock(),e.createBlock(du,{key:2,layer:v.value,value:R.value,onChange:P,onClose:z},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-b81b0112"]]),xu={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},ku={class:"flex items-start justify-between gap-3 p-5 pb-3"},wu={class:"inline-block text-xl font-semibold text-gray-800"},_u={key:0,class:"mt-1 text-sm text-gray-500"},Eu={class:"flex items-center gap-[6px]"},Cu={class:"px-5 pb-5 space-y-6"},Nu={key:0,class:"space-y-2"},Vu={class:"flex flex-wrap gap-4"},Bu=["value"],$u={key:1,class:"text-sm text-gray-500"},Su={key:2,class:"text-sm text-gray-500"},vu={class:"text-4xl font-medium text-gray-800"},Lu={class:"space-y-[14px]"},Tu={class:"flex items-center gap-[10px] text-gray-600"},Au={class:"font-medium text-gray-700"},Mu={class:"flex items-center justify-end text-end gap-3"},Du={class:"font-medium text-gray-800"},Fu={class:"min-w-[40px] font-medium text-[#3C3C4399]"},xr=Ve(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),a=e.ref(!1),i=e.ref([]),s=e.ref(null),c=e.ref(null),p=e.ref(null),f=e.ref(null),k=e.ref(null),l=e.ref({}),y=e.ref(null);function u(X){return X&&JSON.parse(JSON.stringify(X))}const m=e.computed(()=>{const X=o.config.layer;if(typeof X!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const G=X.trim();if(!G)throw new Error("MapAttributeWidget: `layer` must be non-empty");return G}),b=e.computed(()=>{const{list:X,attribute:G}=o.config;if(Array.isArray(X)&&X.length)return X.map(M=>({id:(M==null?void 0:M.id)!=null?String(M.id).trim():"",text:(M==null?void 0:M.text)!=null&&String(M.text).trim()||null})).filter(M=>M.id.length);if(Array.isArray(G))return G.map(M=>M!=null?String(M).trim():"").filter(M=>M.length).map(M=>({id:M,text:null}));if(typeof G=="string"){const M=G.trim();if(!M)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:M,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),g=e.computed(()=>b.value.map(X=>({id:X.id,label:X.text||l.value[X.id]||X.id})));e.watch(b,X=>{if(!X.length){y.value=null,i.value=[];return}(!y.value||!X.some(G=>G.id===y.value))&&(y.value=X[0].id)},{immediate:!0});const d=e.computed(()=>{var X;return y.value||((X=b.value[0])==null?void 0:X.id)||null});e.watch(m,()=>{var X,G;(G=(X=c.value)==null?void 0:X.remove)==null||G.call(X),c.value=null,p.value=null,f.value=null,k.value=null,l.value={}});const h=e.computed(()=>{var X;return(X=f.value)!=null&&X.length?{id:m.value,name:p.value,filters:f.value}:null}),x=e.computed(()=>{var X,G;return((G=(X=h.value)==null?void 0:X.filters)==null?void 0:G.length)||0});async function N(X){var j;const G=await fetch(`/api/gis-service/${encodeURIComponent(X)}`);if(!G.ok){let z="Не вдалося завантажити налаштування шару";try{const v=await G.json();z=((j=v==null?void 0:v.message)==null?void 0:j.error)||(v==null?void 0:v.message)||z}catch{}throw new Error(z)}const M=await G.json();return p.value=(M==null?void 0:M.name)||null,f.value=Array.isArray(M==null?void 0:M.filters)?M.filters:null,k.value=u((M==null?void 0:M.style)||{}),l.value=((M==null?void 0:M.attributes)||[]).reduce((z,v)=>{const R=typeof(v==null?void 0:v.name)=="string"?v.name.trim():"",J=typeof(v==null?void 0:v.ua)=="string"?v.ua.trim():"";return R&&(z[R]=J||R),z},{}),M}function $(X,G){let M=Me(X);if(!M){const j=`${location.origin}/api/vtile/${X}/ua/{z}/{x}/{y}.vmt`;M=Me(X,{source:{type:"vector",tiles:[j],minzoom:0,maxzoom:14},layer:{id:X,source:X,"source-layer":X,style:(G==null?void 0:G.style)||{}},card:G==null?void 0:G.card,popup:G==null?void 0:G.popup})}return c.value=M,M}async function _(X,G){var z;const M=`/api/gis-service/${encodeURIComponent(X)}/${encodeURIComponent(G)}`,j=await fetch(M);if(!j.ok){let v="Не вдалося отримати статистику";try{const R=await j.json();v=((z=R==null?void 0:R.message)==null?void 0:z.error)||(R==null?void 0:R.message)||v}catch{}throw new Error(v)}return j.json()}function w(X){const G=new Map;return X&&(X.rules||[]).forEach(j=>{const z=(j==null?void 0:j.value)??(j==null?void 0:j.id);z!=null&&G.set(String(z),j)}),G}function E(X,G,M,j,z){if(typeof(G==null?void 0:G.color)=="string"&&G.color.trim())return G.color.trim();const v=o.config.colors||{};if(v[X])return v[X];const J=w(M==null?void 0:M.style).get(X);return typeof(J==null?void 0:J.color)=="string"&&J.color.trim()?J.color.trim():n[z%n.length]}function B(X,G,M,j){var z;return(G==null?void 0:G.text)||(G==null?void 0:G.label)||(G==null?void 0:G.name)||(G==null?void 0:G[`${j}_text`])||((z=w(M==null?void 0:M.style).get(X))==null?void 0:z.label)||X}function F(X,G,M,j){if(!X)return;const z=u((G==null?void 0:G.style)||k.value)||{},v=j.trim();if(!v)return;const R={...z.colors||{},...o.config.colors||{}};v===j&&M.forEach(J=>{J.color.trim()&&(R[J.id]=J.color)}),X.setStyle({...z,type:z.type||"polygon",colorAttr:v,opacity:.8,colors:R})}async function Y(){var v,R;i.value=[],s.value=null;const X=m.value,G=d.value;if(!G)return;a.value=!0;const M=await N(X);$(X,M);const j=await _(X,G),z=Array.isArray(j==null?void 0:j.rows)?j.rows.map((J,ue)=>{const fe=(J==null?void 0:J.id)??(J==null?void 0:J.value),ie=fe!=null?String(fe):"";if(!ie)return null;const le=B(ie,J,M,G),S=Number((J==null?void 0:J.count)??0)||0,I=E(ie,J,M,G,ue);return{id:ie,label:le,count:S,color:I}}).filter(Boolean):[];i.value=z,s.value=((v=j==null?void 0:j.field)==null?void 0:v.label)||((R=j==null?void 0:j.field)==null?void 0:R.name)||null,F(c.value,M,z,G),a.value=!1}e.watch(()=>[m.value,d.value],()=>{Y()},{immediate:!0});const P=e.computed(()=>"Набори даних"),Q=e.computed(()=>i.value.reduce((X,G)=>X+G.count,0)),Z=e.computed(()=>{var M;const X=d.value;return((M=g.value.find(j=>j.id===X))==null?void 0:M.label)||null||s.value||X||null});function ae(X){return Q.value?`${(X/Q.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var X,G;(G=(X=c.value)==null?void 0:X.remove)==null||G.call(X)}),(X,G)=>r.value?(e.openBlock(),e.createElementBlock("div",xu,[e.createElementVNode("div",ku,[e.createElementVNode("div",null,[e.createElementVNode("h2",wu,e.toDisplayString(P.value),1),Z.value&&g.value.length===1?(e.openBlock(),e.createElementBlock("p",_u,e.toDisplayString(Z.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Eu,[h.value?(e.openBlock(),e.createBlock(Fn,{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:h.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:G[1]||(G[1]=M=>r.value=!1)},[...G[3]||(G[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",Cu,[g.value.length>1?(e.openBlock(),e.createElementBlock("div",Nu,[e.createElementVNode("div",Vu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,M=>(e.openBlock(),e.createElementBlock("label",{key:M.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:M.id,"onUpdate:modelValue":G[2]||(G[2]=j=>y.value=j)},null,8,Bu),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(M.label),1)]))),128))])])):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createElementBlock("div",$u,"Завантаження…")):i.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",vu,e.toDisplayString(Q.value),1),e.createElementVNode("ul",Lu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,M=>(e.openBlock(),e.createElementBlock("li",{key:M.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Tu,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:M.color})},null,4),e.createElementVNode("span",Au,e.toDisplayString(M.label),1)]),e.createElementVNode("div",Mu,[e.createElementVNode("span",Du,e.toDisplayString(M.count),1),e.createElementVNode("span",Fu,e.toDisplayString(ae(M.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Su,"Дані відсутні"))])])):(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:G[0]||(G[0]=M=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),zu=["title"],Iu={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"},ju=["onClick"],Pu=["placeholder"],Ru={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Ou={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},Uu={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},qu={class:"max-h-[60vh] overflow-auto"},Hu={key:0,class:"divide-y divide-gray-100"},Wu=["onClick"],Yu={key:1,class:"px-3 py-3 text-xs text-gray-500"},kr="mapSearchAddressHistory",mn="search-geom-source",pn="search-geom-layer-fill",Pn="search-geom-layer-line",Gu=12,Zu="https://data.softpro.ua/api-user/gis-url-proxy",Ku="https://data.softpro.ua/api/parcel",Xu="https://nominatim.openstreetmap.org/search",wr=Ve(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(T,O){if(typeof document>"u")return;let U=null;const ce=8,de=()=>{const $e=String((O==null?void 0:O.value)??"");if(!$e)return;U=document.createElement("div"),U.textContent=$e,Object.assign(U.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(U);const Se=T.getBoundingClientRect();U.style.left=`${Se.right+window.scrollX+ce}px`,U.style.top=`${Se.top+window.scrollY+(Se.height-U.offsetHeight)/2}px`},_e=()=>{U!=null&&U.parentNode&&U.parentNode.removeChild(U),U=null};T.addEventListener("mouseenter",de),T.addEventListener("mouseleave",_e),Object.assign(T,{tooltipRightHandlers:{show:de,hide:_e}})},unmounted(T){if(typeof document>"u")return;const O=T.tooltipRightHandlers;O&&(T.removeEventListener("mouseenter",O.show),T.removeEventListener("mouseleave",O.hide))}},o=t,r=et(),a=e.getCurrentInstance();function i(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function s(){var ce,de,_e;const T=(ce=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:ce.$settings,O=(de=T==null?void 0:T.map)==null?void 0:de.searchViewbox;if(O)return O;const U=i();return(_e=U==null?void 0:U.map)==null?void 0:_e.searchViewbox}function c(){var de,_e,$e;const T=(de=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:de.$settings,O=(_e=T==null?void 0:T.map)==null?void 0:_e.addressSuggest;if(typeof O=="string"&&O.trim())return O.trim();const U=i(),ce=($e=U==null?void 0:U.map)==null?void 0:$e.addressSuggest;if(typeof ce=="string"&&ce.trim())return ce.trim()}const p=!!c(),f=!!s(),k=e.computed(()=>{const T=["xy","parcel"];return p&&T.push("address"),f&&T.push("nominatim"),T}),l=e.computed(()=>{var U,ce;const T=k.value,O=(ce=(U=o.config)==null?void 0:U.tools)==null?void 0:ce.filter(de=>T.includes(de));return O&&O.length?O:T}),y=e.computed(()=>{var T,O;return((O=(T=o.config)==null?void 0:T.placeholder)==null?void 0:O.trim())||"Пошук…"}),u=e.ref(l.value[0]);e.watch(l,T=>{T.includes(u.value)||(u.value=T[0])});const m=e.ref(""),b=e.ref(!1),g=e.ref(null),d=e.ref(null),h=e.ref(null),x=e.ref(null),N=e.ref([]),$=e.ref(null),_=e.ref(!1),w=e.ref([]),E=e.computed(()=>(u.value==="address"||u.value==="nominatim")&&_.value),B=e.computed(()=>{var T;return((T=o.config)==null?void 0:T.addressDebounceMs)??1e3});let F=null;const Y=e.ref(!1),P=e.computed(()=>m.value.trim().length>0?N.value:w.value),Q=e.computed(()=>m.value.trim().length?`Знайдено ${N.value.length}`:"Історія пошуку"),Z=e.computed(()=>m.value.trim().length?"Нічого не знайдено":"Історія порожня");function ae(){var T,O;if(typeof window>"u")return[];try{const U=(O=(T=window.localStorage)==null?void 0:T.getItem)==null?void 0:O.call(T,kr);if(!U)return[];const ce=JSON.parse(U);return Array.isArray(ce)?ce:[]}catch{return[]}}function X(T){var O,U;typeof window>"u"||(U=(O=window.localStorage)==null?void 0:O.setItem)==null||U.call(O,kr,JSON.stringify(T))}function G(T){const U=[T,...w.value.filter(ce=>ce.id!==T.id)].slice(0,10);w.value=U,X(U)}let M=null;function j(){M&&(M.remove(),M=null)}function z(){var O;const T=(O=r.map)==null?void 0:O.value;T&&(T.getLayer(pn)&&T.removeLayer(pn),T.getLayer(Pn)&&T.removeLayer(Pn),T.getSource(mn)&&T.removeSource(mn))}function v(T){var de,_e,$e,Se;if(!((de=o.config)!=null&&de.showMarker)||!T)return;const O=(_e=r.map)==null?void 0:_e.value;if(!O)return;z(),J();const U={type:"Feature",geometry:T,properties:{}};O.addSource(mn,{type:"geojson",data:U});const ce=(($e=o.config)==null?void 0:$e.geometryColor)||((Se=o.config)==null?void 0:Se.markerColor)||"#3B82F6";O.addLayer({id:pn,type:"fill",source:mn,paint:{"fill-color":ce,"fill-opacity":.3}}),O.addLayer({id:Pn,type:"line",source:mn,paint:{"line-color":ce,"line-width":1,"line-opacity":1}}),ue(O)}let R=null;function J(){R&&(cancelAnimationFrame(R),R=null)}function ue(T){const U=performance.now();function ce(de){if(!T.getLayer(pn))return;const $e=(de-U)%1200/1200,Se=Math.sin($e*Math.PI),ot=.2+Se*.3,gt=1+Se*1;T.setPaintProperty(pn,"fill-opacity",ot),T.setPaintProperty(Pn,"line-width",gt),R=requestAnimationFrame(ce)}R=requestAnimationFrame(ce)}function fe(T,O){var de,_e,$e;if(!((de=o.config)!=null&&de.showMarker))return;j(),z();const U=(_e=r.map)==null?void 0:_e.value;if(!U)return;if(O){v(O);return}const ce=(($e=o.config)==null?void 0:$e.markerColor)||"#3B82F6";M=new maplibregl.Marker({color:ce}).setLngLat([T.lng,T.lat]).addTo(U)}const ie=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function le(){var _e;if(!x.value)return;const T=x.value.getBoundingClientRect(),O=(_e=h.value)==null?void 0:_e.getBoundingClientRect(),U=(O==null?void 0:O.width)??T.width,ce=((O==null?void 0:O.left)??T.left)+window.scrollX,de=T.bottom+window.scrollY+Gu;ie.left=`${ce}px`,ie.top=`${de}px`,ie.width=`${U}px`,ie.display="block"}const S=()=>{E.value&&le()};function I(){F&&(clearTimeout(F),F=null)}e.watch(u,()=>{m.value="",b.value=!1,N.value=[],_.value=!1,I(),Y.value=!1,j(),z()}),e.watch(E,T=>{T?e.nextTick(()=>{le()}):ie.display="none"}),e.watch(m,T=>{if(u.value!=="address"&&u.value!=="nominatim"){N.value=[],I();return}if(!T.trim()){N.value=[],_.value=w.value.length>0,I();return}I(),_.value=!0,F=window.setTimeout(()=>{Ae(T).catch(O=>{const U=(O==null?void 0:O.message)||"Помилка пошуку адреси";ge.notify({type:"error",title:"Пошук адреси",message:U})})},B.value)});function A(T){var ce;const O=[];d.value&&O.push(d.value),T instanceof HTMLElement&&O.push(T);const U=(ce=g.value)==null?void 0:ce.querySelectorAll("li");U==null||U.forEach(de=>{O.push(de)}),O.forEach(de=>{de.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function H(T){b.value&&A(T.target),b.value=!b.value}function ne(T,O){A(O==null?void 0:O.target),u.value=T}function pe(){m.value="",N.value=[],_.value=!1,Y.value=!1,j(),z()}function xe(T){const O=T.target;if(b.value){const U=g.value;U&&!U.contains(O)&&(A(O),b.value=!1)}if(E.value){const U=$.value,ce=x.value;U&&!U.contains(O)&&(!ce||!ce.contains(O))&&(_.value=!1)}}e.onMounted(()=>{w.value=ae(),window.addEventListener("click",xe,!0),window.addEventListener("scroll",S,!0),window.addEventListener("resize",S)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",xe,!0),window.removeEventListener("scroll",S,!0),window.removeEventListener("resize",S),I(),j(),z()});function ke(T){return T==="xy"?"Координати":T==="parcel"?"Кадастр":T==="nominatim"?"Nominatim":"Адресний"}function we(T){switch(T){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 He(T){const O=T.replace(/[,]+/g," ").trim();if(!O)return null;const U=O.split(/\s+/).filter(Boolean);if(U.length<2)return null;const ce=U.slice(0,2).map(Number);if(!ce.every(ut=>Number.isFinite(ut)))return null;let[de,_e]=ce,$e=de,Se=_e;const ot=ut=>Math.abs(ut)<=90,gt=ut=>Math.abs(ut)<=180;if(!ot($e)||!gt(Se))if(ot(Se)&&gt($e))$e=_e,Se=de;else return null;return{lat:$e,lng:Se}}function Ze(T){return((T==null?void 0:T.items)||[]).map((U,ce)=>{var de,_e,$e;return{id:String((U==null?void 0:U.id)??ce),title:(U==null?void 0:U.title)||((de=U==null?void 0:U.address)==null?void 0:de.label)||"Знайдений обʼєкт",lat:Number((_e=U==null?void 0:U.position)==null?void 0:_e.lat),lng:Number(($e=U==null?void 0:U.position)==null?void 0:$e.lng)}})}function Oe(T){const O=(T==null?void 0:T.result)||(T==null?void 0:T.data)||T;if(!O)return[];const U=O.geom_centroid;if(!U||!Array.isArray(U.coordinates))return[];const[ce,de]=U.coordinates;return!Number.isFinite(de)||!Number.isFinite(ce)?[]:[{id:"parcel",title:O.cadnum||O.cad_num||"Земельна ділянка",lat:de,lng:ce,geom:O.geom||null}]}function at(T){return(Array.isArray(T==null?void 0:T.features)?T.features:[]).map((U,ce)=>{var ut,Et,en;const de=(ut=U==null?void 0:U.geometry)==null?void 0:ut.coordinates,_e=Number(de==null?void 0:de[0]),$e=Number(de==null?void 0:de[1]);if(!Number.isFinite($e)||!Number.isFinite(_e))return null;const Se=(U==null?void 0:U.properties)||{},ot=((Et=Se==null?void 0:Se.geocoding)==null?void 0:Et.label)||(Se==null?void 0:Se.display_name)||(Se==null?void 0:Se.label)||"Адреса";return{id:String(((en=Se==null?void 0:Se.geocoding)==null?void 0:en.place_id)||(Se==null?void 0:Se.place_id)||ce),title:ot,lat:$e,lng:_e}}).filter(U=>!!U)}function te(T){return Number.isFinite(T.lat)&&Number.isFinite(T.lng)}function re(T){const O=Number(T);return Number.isFinite(O)?O:null}function Ce(T){var de,_e,$e,Se,ot,gt;const O=re(T.lng)??re(T.lon)??re(T.longitude)??re(T.x),U=re(T.lat)??re(T.latitude)??re(T.y);if(O!=null&&U!=null)return{lat:U,lng:O};const ce=((de=T==null?void 0:T.geometry)==null?void 0:de.coordinates)??((_e=T==null?void 0:T.geom_centroid)==null?void 0:_e.coordinates)??(($e=T==null?void 0:T.centroid)==null?void 0:$e.coordinates)??((ot=(Se=T==null?void 0:T.geojson)==null?void 0:Se.geometry)==null?void 0:ot.coordinates)??((gt=T==null?void 0:T.geom)==null?void 0:gt.coordinates);if(Array.isArray(ce)&&ce.length>=2){const ut=re(ce[0]),Et=re(ce[1]);if(ut!=null&&Et!=null)return{lat:Et,lng:ut}}return null}function Ue(T){return(Array.isArray(T==null?void 0:T.data)?T.data:[]).map((U,ce)=>{const de=Ce(U),_e=String(U.text??U.title??U.label??U.name??U.address??U.display_name??U.id??"Адреса"),$e=String(U.id??U.code??U.value??ce);return de?{id:$e,title:_e,...de}:{id:$e,title:_e}}).filter(U=>!!(U!=null&&U.title))}function We(T){const O=c();if(!O)return null;if(O.includes(":name"))return O.replace(":name",encodeURIComponent(T));try{const U=new URL(O,window.location.origin);return T.trim()&&U.searchParams.set("q",T),U.toString()}catch{return O}}async function ve(T){const O=We(T);if(!O)return[];const U=await fetch(O);if(!U.ok)throw new Error(`HTTP ${U.status}`);const ce=await U.json();return Ue(ce)}async function Ge(T){const O=new URL(Xu);O.searchParams.set("format","geojson"),O.searchParams.set("q",T),O.searchParams.set("addressdetails","1"),O.searchParams.set("bounded","1");const U=s();U&&O.searchParams.set("viewbox",U);const ce=await fetch(O.toString());if(!ce.ok)throw new Error(`HTTP ${ce.status}`);const de=await ce.json();return at(de)}async function Ae(T){if(N.value=[],I(),u.value==="address"){if(!c()){ge.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ce=await ve(T);if(!ce.length){ge.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=ce;return}const O=await Ge(T);if(!O.length){ge.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=O}async function nt(T){if(te(T)){D(T),G(T);return}ge.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function W(){u.value!=="address"&&u.value!=="nominatim"||m.value.trim().length||w.value.length&&(_.value=!0,e.nextTick(()=>{le()}))}function V(T){const U=T.replace(/\s+/g,"").split(":");if(console.log(U),U.length!==4)return!1;const ce=[10,2,3,4];return U.every((de,_e)=>de.length===ce[_e]&&/^\d+$/.test(de))}function D(T){var U,ce;const O=((U=o.config)==null?void 0:U.zoom)??17;(ce=r.flyTo)==null||ce.call(r,{center:[T.lng,T.lat],zoom:O}),fe(T,T.geom),Y.value=!0}async function ee(){const T=m.value.trim();if(T){if(u.value==="xy"){const O=He(T);if(!O){ge.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}D(O);return}if(u.value==="address"||u.value==="nominatim"){try{await Ae(T)}catch(O){const U=(O==null?void 0:O.message)||"Помилка пошуку адреси";ge.notify({type:"error",title:"Пошук адреси",message:U})}return}try{const O=new URL(u.value==="here"?Zu:Ku);if(u.value==="here")O.searchParams.set("searchtext",T);else{if(!V(T)){ge.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}O.searchParams.set("cadnum",T)}const U=await fetch(O.toString());if(!U.ok)throw new Error(`HTTP ${U.status}`);const ce=await U.json(),de=u.value==="here"?Ze(ce):Oe(ce);if(!de.length)ge.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const _e=de[0];D(_e)}}catch(O){const U=(O==null?void 0:O.message)||"Помилка пошуку";ge.notify({type:"error",title:"Пошук",message:U})}}}return(T,O)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:h,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(ee,["prevent"])},[l.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:g,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:H},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:d,class:"block w-full truncate",title:ke(u.value)},[e.createTextVNode(e.toDisplayString(ke(u.value)),1)],8,zu)),[[n,we(u.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":b.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...O[3]||(O[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),b.value?(e.openBlock(),e.createElementBlock("div",Iu,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,U=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:U,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ce=>ne(U,ce)},[e.createTextVNode(e.toDisplayString(ke(U)),1)],8,ju)),[[n,we(U)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:x,class:"relative flex-1 min-w-[140px]"},[u.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Ko.VsInputMask),{key:0,modelValue:m.value,"onUpdate:modelValue":O[0]||(O[0]=U=>m.value=U),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",Y.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":O[1]||(O[1]=U=>m.value=U),placeholder:y.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",Y.value?"!pr-14":"!pr-8"]),onFocus:W},null,42,Pu)),[[e.vModelText,m.value,void 0,{trim:!0}]]),e.createElementVNode("div",Ru,[Y.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:pe},[...O[4]||(O[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),O[5]||(O[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))]),E.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:$,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(ie)},[e.createElementVNode("div",Ou,[e.createElementVNode("span",Uu,e.toDisplayString(Q.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:O[2]||(O[2]=U=>_.value=!1)}," ✕ ")]),e.createElementVNode("div",qu,[P.value.length?(e.openBlock(),e.createElementBlock("ul",Hu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value,U=>(e.openBlock(),e.createElementBlock("li",{key:U.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ce=>nt(U)},e.toDisplayString(U.title),9,Wu))),128))])):(e.openBlock(),e.createElementBlock("div",Yu,e.toDisplayString(Z.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-8c4f8551"]]),Ju="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Qu="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",em=Ve(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:a}=et(),i=e.ref(null),s=e.ref(null),c=e.ref(null),p=e.ref(null);let f=null;function k(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function l(_){if(Array.from(document.styleSheets).some(B=>{var F;return(F=B==null?void 0:B.href)==null?void 0:F.includes(_)}))return;const E=document.createElement("link");E.rel="stylesheet",E.href=_,document.head.appendChild(E)}function y(_){return new Promise((w,E)=>{const B=Array.from(document.scripts).find(Y=>Y.src===_);if(B){if(B._loaded)return w();B.addEventListener("load",()=>w()),B.addEventListener("error",()=>E(new Error(`Failed ${_}`)));return}const F=document.createElement("script");F.src=_,F.async=!0,F.onload=()=>{F._loaded=!0,w()},F.onerror=()=>E(new Error(`Failed ${_}`)),document.head.appendChild(F)})}function u(){var w,E,B;const _=window;return _.MapboxExportControl||((w=_.mapboxgl)==null?void 0:w.MapboxExportControl)||((E=_.mapboxglExport)==null?void 0:E.MapboxExportControl)||((B=_.mapboxglExport)==null?void 0:B.default)||null}function m(){const _=document.createElementNS("http://www.w3.org/2000/svg","svg");return _.setAttribute("xmlns","http://www.w3.org/2000/svg"),_.setAttribute("viewBox","0 0 24 24"),_.setAttribute("width","18"),_.setAttribute("height","18"),_.setAttribute("fill","none"),_.setAttribute("stroke","currentColor"),_.setAttribute("stroke-width","2"),_.setAttribute("stroke-linecap","round"),_.setAttribute("stroke-linejoin","round"),_.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((E,B)=>{const F=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(E).forEach(([Y,P])=>{F.setAttribute(Y,P)}),_.appendChild(F)}),_}function b(){const _=document.createElement("button");_.id="print-btn",_.type="button",_.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),_.setAttribute("aria-label","Друк карти");const w=m(),E=document.createElement("span");return E.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(" "),E.textContent="Друк карти",E.setAttribute("aria-hidden","true"),_.appendChild(w),_.appendChild(E),_.addEventListener("click",B=>{B.stopPropagation(),g()}),p.value=_,_}function g(){if(!c.value)return;c.value.style.display==="block"?h():d()}function d(){var _,w,E;c.value&&(c.value.style.display="block",(_=p.value)==null||_.classList.add("scale-105","shadow-xl"),(w=s.value)==null||w.toggleCrosshair(!0),(E=s.value)==null||E.togglePrintableArea(!0),document.addEventListener("click",x))}function h(){var _,w,E;c.value&&(c.value.style.display="none",(_=p.value)==null||_.classList.remove("scale-105","shadow-xl"),(w=s.value)==null||w.toggleCrosshair(!1),(E=s.value)==null||E.togglePrintableArea(!1),document.removeEventListener("click",x))}function x(_){const w=i.value;w&&(_.target&&w.contains(_.target)||h())}function N(_){const w={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};_.querySelectorAll("label, option").forEach(B=>{var Y;const F=(Y=B.textContent)==null?void 0:Y.trim();F&&w[F]&&(B.textContent=w[F])});const E=_.querySelector("button");E&&(E.textContent="Друкувати")}function $(_){const w=_.querySelector(".mapboxgl-export-list");if(!w||!i.value)return;c.value=w;const E=_.querySelector("button");if(E&&(E.style.display="none"),_.style.display="none",!p.value){const F=b();i.value.appendChild(F)}w.style.display="none";const B="_printControlBound";if(!w[B]){const F=Y=>Y.stopPropagation();w.addEventListener("click",F),w.addEventListener("mousedown",F),w[B]=!0}i.value.appendChild(w),N(w)}return e.onMounted(async()=>{await(o==null?void 0:o());const _=n.value;if(!_)return;l(Ju),k();try{await y(Qu)}catch(B){console.warn("[MapPrintControl] load error",B);return}const w=u();if(!w)return;const E=new w({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(s.value=E,typeof E.onAdd=="function"){const B=E.onAdd.bind(E);E.onAdd=F=>{const Y=B(F);return setTimeout(()=>Y&&$(Y),50),Y}}r?r(E,"top-right"):_.addControl(E,"top-right"),f=B=>{B.key==="Escape"&&h()},document.addEventListener("keyup",f)}),e.onBeforeUnmount(()=>{h(),f&&(document.removeEventListener("keyup",f),f=null);const _=n.value;if(s.value)try{a?a(s.value):_==null||_.removeControl(s.value)}catch{}s.value=null}),(_,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),tm={class:"map-center-control"},nm=["aria-label"],om={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"},zt=Ve(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=et(),a=e.ref(null),i=e.ref(null),s=e.ref(null),c=e.ref(null),p=co(),f=e.computed(()=>{var h;return((h=p.value)==null?void 0:h.map)??null});function k(h){if(Array.isArray(h)&&h.length>=2){const[x,N]=h.slice(0,2).map($=>Number($));return Number.isNaN(x)||Number.isNaN(N)?null:[x,N]}if(h&&typeof h=="object"){const x=h,N=x.lng??x.lon??x.long??x.x,$=x.lat??x.y;if(N!=null&&$!=null){const _=Number(N),w=Number($);if(!Number.isNaN(_)&&!Number.isNaN(w))return[_,w]}}if(typeof h=="string"){const x=h.split(",").map(N=>Number(N.trim()));if(x.length>=2&&x.every(N=>!Number.isNaN(N)))return[x[0],x[1]]}return null}function l(h){const x=k(h);x&&(a.value=x)}function y(h){const x=Number(h);Number.isNaN(x)||(i.value=x)}e.watch(()=>n.center,h=>l(h),{immediate:!0}),e.watch(()=>n.zoom,h=>y(h),{immediate:!0}),e.watch(()=>n.targetCenter,h=>{s.value=k(h)},{immediate:!0}),e.watch(()=>n.targetZoom,h=>{const x=Number(h);c.value=Number.isNaN(x)?null:x},{immediate:!0}),e.watch(()=>{var h;return(h=f.value)==null?void 0:h.center},h=>{l(h)},{immediate:!0}),e.watch(()=>{var h;return(h=f.value)==null?void 0:h.zoom},h=>{y(h)},{immediate:!0});const u=e.computed(()=>{var h;return((h=n.targetLabel)==null?void 0:h.trim())||"Точка"}),m=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),b=e.computed(()=>!!s.value);e.onMounted(async()=>{await(r==null?void 0:r());const h=o.value;if(h){if(!a.value){const x=h.getCenter();a.value=[x.lng,x.lat]}i.value==null&&(i.value=h.getZoom())}});function g(){const h=o.value;if(!h)return;const x=a.value||(()=>{const $=h.getCenter();return[$.lng,$.lat]})(),N=i.value??h.getZoom();h.flyTo({center:x,zoom:N})}function d(){const h=o.value;if(!h||!s.value)return;const x=c.value??i.value??h.getZoom();h.flyTo({center:s.value,zoom:x})}return(h,x)=>(e.openBlock(),e.createElementBlock("div",tm,[b.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(g,["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(me.House),{class:"w-4 h-4"})])),b.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":m.value,onClick:e.withModifiers(d,["stop"])},[e.createElementVNode("span",om,e.toDisplayString(u.value),1),e.createVNode(e.unref(me.MapPin),{class:"w-4 h-4"})],8,nm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),rm={class:"cursor-coordinates"},lm={class:"cursor-coordinates__text"},am=Ve(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",rm,[e.createElementVNode("span",lm,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),sm={class:"minimap__wrapper"},Rn="minimap-viewport",im="minimap-viewport-layer",cm=Ve(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var x,N,$,_;const n=t,o=((N=(x=e.getCurrentInstance())==null?void 0:x.appContext.config.globalProperties)==null?void 0:N.$settings)||null,r=Ft(($=o==null?void 0:o.map)==null?void 0:$.center)||[30,50],a=e.ref(null),i=e.shallowRef(null),s=(_=n.options)==null?void 0:_.active,c=e.ref(s===void 0?!1:!!s);function p(w,E){return typeof w=="number"&&Number.isFinite(w)?w:E}const f=e.computed(()=>{var Y,P;const w=(Y=n.options)==null?void 0:Y.width,E=(P=n.options)==null?void 0:P.height,B=p(n.width??w,210),F=p(n.height??E,150);return{width:`${B}px`,height:`${F}px`}});function k(){var E,B;const w=(B=(E=n.mapContext)==null?void 0:E.map)==null?void 0:B.value;if(!w||typeof w.getStyle!="function")return null;try{const F=w.getStyle();return F?JSON.parse(JSON.stringify(F)):null}catch{return null}}let l=null;function y(){var Y;if(typeof window>"u"||i.value||!a.value)return;const w=k(),E=r,B={container:a.value,style:w??{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:E,zoom:((Y=n.options)==null?void 0:Y.zoom)??3,interactive:!1,attributionControl:!1},F={...B,...n.options??{}};F.container=B.container,i.value=new maplibregl.Map(F),i.value.on("load",()=>{m(),g()})}function u(){if(!i.value)return;const w=k();w&&(i.value.once("styledata",()=>{m(),g()}),i.value.setStyle(w))}function m(){if(i.value){if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{m(),g()});return}i.value.getSource(Rn)||(i.value.addSource(Rn,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),i.value.addLayer({id:im,type:"fill",source:Rn,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function b(){c.value=!c.value,c.value&&e.nextTick(()=>{var w;return(w=i.value)==null?void 0:w.resize()})}function g(){var Q,Z;const w=(Z=(Q=n.mapContext)==null?void 0:Q.map)==null?void 0:Z.value;if(!i.value||!w||!w.getBounds)return;if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{g()});return}const E=w.getBounds();if(!E)return;const B=E.getNorthEast(),F=E.getSouthWest();if(!B||!F)return;const Y=[[F.lng,B.lat],[B.lng,B.lat],[B.lng,F.lat],[F.lng,F.lat],[F.lng,B.lat]],P=i.value.getSource(Rn);if(!P){m();return}P.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[Y]},properties:{}})}function d(){var B;const w=n.mapContext,E=(B=w==null?void 0:w.map)==null?void 0:B.value;!(w!=null&&w.on)||!E||(l==null||l(),l=w.on("move",g),g())}async function h(){const w=n.mapContext;if(w){if(typeof w.ready=="function")try{await w.ready()}catch{return}d()}}return e.onMounted(()=>{y(),h()}),e.watch(()=>n.mapContext,()=>{h(),g()}),e.watch(()=>{var w,E;return(E=(w=n.mapContext)==null?void 0:w.map)==null?void 0:E.value},()=>{i.value&&(u(),h())}),e.watch(f,()=>{i.value&&e.nextTick(()=>{var w;return(w=i.value)==null?void 0:w.resize()})}),e.watch(()=>n.options,()=>{var E;l==null||l(),l=null,i.value&&(i.value.remove(),i.value=null);const w=(E=n.options)==null?void 0:E.active;typeof w=="boolean"&&(c.value=w),e.nextTick(()=>{y(),h()})},{deep:!0}),e.onBeforeUnmount(()=>{l==null||l(),l=null,i.value&&(i.value.remove(),i.value=null)}),(w,E)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":c.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:b},[e.createVNode(e.unref(me.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",sm,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:a,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(f.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,c.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),dm={class:"pt-1 border-t border-gray-100"},um={class:"space-y-1"},mm=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),a=e.ref(null),i=(p,f,k)=>Math.min(Math.max(p,f),k),s=()=>{if(r.value===null||a.value===null||!Number.isFinite(r.value)||!Number.isFinite(a.value))return;const p=i(r.value,-90,90),f=i(a.value,-180,180);o("submit",{lat:p,lng:f}),r.value=null,a.value=null},c=()=>{r.value=null,a.value=null,o("cancel")};return(p,f)=>(e.openBlock(),e.createElementBlock("div",dm,[f[2]||(f[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",um,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=k=>r.value=k),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":f[1]||(f[1]=k=>a.value=k),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,a.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:s}," Додати "),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}," Скасувати ")])])]))}}),pm=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(me.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),fm=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(me.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),gm=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(me.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),ym=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function It(t){return ym.format(t)}function _r(t){return t>=1e3?`${It(t/1e3)} км`:`${It(t)} м`}const hm={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},bm={key:0,class:"flex-1 flex gap-1"},xm={key:1,class:"flex-1 font-mono text-gray-700"},km=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,a=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),i=e.ref(!1),s=e.ref(o.coords.lat),c=e.ref(o.coords.lng);e.watch(()=>o.coords,y=>{s.value=y.lat,c.value=y.lng},{deep:!0,immediate:!0});const p=(y,u,m)=>Math.min(Math.max(y,u),m),f=()=>{i.value=!0},k=()=>{if(!Number.isFinite(s.value)||!Number.isFinite(c.value))return;const y=p(s.value,-90,90),u=p(c.value,-180,180);r("update",{id:o.id,coords:{lat:y,lng:u}}),i.value=!1},l=()=>{r("delete",o.id)};return(y,u)=>(e.openBlock(),e.createElementBlock("div",hm,[e.createVNode(e.unref(me.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),i.value?(e.openBlock(),e.createElementBlock("div",bm,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=m=>s.value=m),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,s.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[1]||(u[1]=m=>c.value=m),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:k}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",xm,e.toDisplayString(a.value),1)),i.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:f}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:l}," ✕ ")]))}}),wm={class:"ruler-control px-3 py-2.5 space-y-2"},_m={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},Em={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"},Cm={class:"text-sm font-semibold text-slate-700"},Nm={class:"ruler-row"},Vm={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},Bm={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"},$m={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},Sm=["onClick"],vm={class:"flex items-center gap-2 mt-0.5 pl-7"},Lm={key:0,class:"text-base font-semibold text-green-600"},Tm={key:1,class:"text-xs text-gray-400"},Am={class:"ruler-row flex items-center gap-2 cursor-pointer"},Mm={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"},Dm={class:"text-xs font-medium text-gray-600 flex-1"},Fm={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},zm=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"),a=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],i=()=>{o.value=!o.value},s=(m,b)=>{const g=B=>B*Math.PI/180,d=g(b.lat-m.lat),h=g(b.lng-m.lng),x=g(m.lat),N=g(b.lat),$=Math.sin(d/2),_=Math.sin(h/2);return 6371e3*(2*Math.asin(Math.sqrt($*$+Math.cos(x)*Math.cos(N)*_*_)))},c=e.computed(()=>{if(n.points.length<2)return 0;let m=0;for(let b=1;b<n.points.length;b+=1)m+=s(n.points[b-1].coords,n.points[b].coords);return n.isShapeClosed&&n.points.length>=2&&(m+=s(n.points[n.points.length-1].coords,n.points[0].coords)),m}),p=e.computed(()=>c.value>=1e3?`${It(c.value/1e3)} км`:`${It(c.value)} м`);function f(m){if(m.length<3)return 0;const b=m[0].lat,g=m[0].lng,d=(x,N)=>{const $=(x-b)*110574;return{x:(N-g)*111320*Math.cos(b*Math.PI/180),y:$}};let h=0;for(let x=0;x<m.length;x++){const N=(x+1)%m.length,$=d(m[x].lat,m[x].lng),_=d(m[N].lat,m[N].lng);h+=$.x*_.y-$.y*_.x}return Math.abs(h)*.5}const k=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const m=n.points.map(b=>b.coords);return f(m)}),l=e.computed(()=>k.value>0),y=e.computed(()=>{const m=k.value;if(m===0)return"—";if(r.value==="km2"){const g=m/1e6;return`${It(g)} км²`}if(r.value==="ha"){const g=m/1e4;return`${It(g)} га`}const b=m>=1?Math.round(m):m;return`${It(b)} м²`}),u=e.computed(()=>{const m=n.points.length;return m===1?"1 точка":m>=2&&m<=4?`${m} точки`:`${m} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(m,b)=>(e.openBlock(),e.createElementBlock("div",wm,[e.createElementVNode("button",_m,[e.createElementVNode("span",Em,[e.createVNode(e.unref(me.Info),{size:12,"stroke-width":2.5})]),b[1]||(b[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",Cm,e.toDisplayString(p.value),1)]),e.createElementVNode("div",Nm,[e.createElementVNode("button",Vm,[e.createElementVNode("span",Bm,[e.createVNode(e.unref(me.Info),{size:12,"stroke-width":2.5})]),b[2]||(b[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",$m,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,(g,d)=>e.createElementVNode("button",{key:g.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",d===0&&"rounded-l-md",d===a.length-1&&"rounded-r-md",r.value===g.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(h=>r.value=g.id,["stop"])},e.toDisplayString(g.label),11,Sm)),64))])]),e.createElementVNode("div",vm,[l.value?(e.openBlock(),e.createElementBlock("span",Lm,e.toDisplayString(y.value),1)):(e.openBlock(),e.createElementBlock("span",Tm,"—"))])]),e.createElementVNode("div",Am,[e.createElementVNode("span",Mm,[e.createVNode(e.unref(me.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",Dm,e.toDisplayString(u.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(i,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",Fm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(g,d)=>(e.openBlock(),e.createBlock(km,{key:g.id,id:g.id,index:d+1,coords:g.coords,onUpdate:b[0]||(b[0]=h=>m.$emit("update-point",h)),onDelete:h=>m.$emit("delete-point",g.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),Im={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},jm={class:"flex items-start gap-2"},Pm=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Im,[e.createElementVNode("div",jm,[e.createVNode(e.unref(me.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))])]))}}),Rm={class:"space-y-1.5"},Om={class:"space-y-1 max-h-40 overflow-y-auto"},Um={class:"text-gray-700"},qm={class:"font-semibold text-slate-800"},Hm=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(i,s){const c=u=>u*Math.PI/180,p=c(s.lat-i.lat),f=c(s.lng-i.lng),k=c(i.lat),l=c(s.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(p/2)**2+Math.cos(k)*Math.cos(l)*Math.sin(f/2)**2)))}function r(i){return _r(i)}const a=e.computed(()=>{const i=[],s=n.points;if(s.length<2)return i;for(let c=0;c<s.length;c++){const p=c===s.length-1&&n.isShapeClosed?0:c+1;if(p>=s.length)break;const f=o(s[c].coords,s[p].coords);i.push({from:c+1,to:p+1,label:r(f)})}return i});return(i,s)=>(e.openBlock(),e.createElementBlock("div",Rm,[s[0]||(s[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",Om,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(c,p)=>(e.openBlock(),e.createElementBlock("div",{key:p,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",Um,"Точка "+e.toDisplayString(c.from)+" → Точка "+e.toDisplayString(c.to),1),e.createElementVNode("span",qm,e.toDisplayString(c.label),1)]))),128))])]))}}),Wm={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Ym={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Gm={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Zm={class:"flex items-center gap-2"},Km={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Xm={class:"flex border-b border-gray-200"},Jm={key:1,class:"px-3 py-2.5"},Qm={key:1,class:"text-xs text-gray-500"},ep={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},tp={class:"flex gap-1.5"},np=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,a=e.ref([]),i=e.computed(()=>a.value.length>0),s=e.ref(!1),c=e.ref(!1),p=e.ref("general");function f(Y){p.value=Y,r("tab-change",Y)}e.onMounted(()=>{r("tab-change",p.value)});const k=e.computed(()=>a.value.length>=3&&!c.value);let l=1;const y=()=>a.value.map(Y=>({id:Y.id,coords:{...Y.coords}})),u=()=>{a.value.length<3&&c.value&&(c.value=!1,r("shape-closed-change",!1)),r("points-change",y())},m=()=>{const Y=l;return l+=1,Y},b=Y=>{a.value=[...a.value,{id:m(),coords:{lat:Y.lat,lng:Y.lng}}],u()},g=({id:Y,coords:P})=>{const Q=a.value.findIndex(ae=>ae.id===Y);if(Q===-1)return;const Z=[...a.value];Z[Q]={id:Y,coords:{...P}},a.value=Z,u()},d=Y=>{a.value=a.value.filter(P=>P.id!==Y),u()},h=()=>{a.value=[],c.value&&(c.value=!1,r("shape-closed-change",!1)),u()},x=Y=>{g(Y)},N=Y=>{d(Y)},$=()=>{s.value=!0,r("add-request")},_=Y=>{b(Y),s.value=!1},w=()=>{s.value=!1},E=()=>{k.value&&(c.value=!0,r("complete"),r("shape-closed-change",!0))},B=Y=>{const P=(Y??[]).map(Q=>({id:Q.id??m(),coords:{...Q.coords}}));a.value=P,P.length===0?l=1:l=Math.max(...P.map(Q=>Q.id))+1,u()},F=()=>{h(),s.value=!1,r("close")};return n({addPoint:b,setPoints:B,clearPoints:h}),(Y,P)=>(e.openBlock(),e.createElementBlock("div",Wm,[e.createElementVNode("div",Ym,[e.createElementVNode("div",Gm,[e.createElementVNode("div",Zm,[e.createElementVNode("div",Km,[e.createVNode(e.unref(me.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),P[2]||(P[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:F},[e.createVNode(e.unref(me.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Xm,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",p.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:P[0]||(P[0]=Q=>f("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",p.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:P[1]||(P[1]=Q=>f("topoint"))}," До точки ",2)]),p.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[i.value?(e.openBlock(),e.createBlock(zm,{key:1,points:a.value,"is-shape-closed":c.value,onUpdatePoint:x,onDeletePoint:N},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(Pm,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",Jm,[i.value?(e.openBlock(),e.createBlock(Hm,{key:0,points:a.value,"is-shape-closed":c.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",Qm,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",ep,[e.createElementVNode("div",tp,[s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(pm,{key:0,onClick:$})),k.value?(e.openBlock(),e.createBlock(gm,{key:1,onClick:E})):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createBlock(mm,{key:0,onSubmit:_,onCancel:w})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(fm,{key:1,onClick:h})):e.createCommentVNode("",!0)])])]))}}),kt="ruler-points",Nt="ruler-line",Vt="ruler-polygon",Bt="ruler-segments",op=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(g,d){const h=E=>E*Math.PI/180,x=h(d.lat-g.lat),N=h(d.lng-g.lng),$=h(g.lat),_=h(d.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(x/2)**2+Math.cos($)*Math.cos(_)*Math.sin(N/2)**2)))}function o(g){return _r(g)}const r=t,{map:a,ready:i}=et();function s(){return{type:"FeatureCollection",features:[]}}function c(g,d,h){const x=h??"general",N=[];let $=0;N.push(0);for(let _=1;_<g.length;_++)$+=n(g[_-1].coords,g[_].coords),N.push($);return d&&g.length>=2&&($+=n(g[g.length-1].coords,g[0].coords)),{type:"FeatureCollection",features:g.map((_,w)=>{const E=x==="general"?w===0?"0":o(N[w]):w===0?"0":o(n(g[w-1].coords,g[w].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[_.coords.lng,_.coords.lat]},properties:{id:_.id,index:w+1,label:E}}})}}function p(g,d){if(g.length<2)return s();const h=[];for(let x=0;x<g.length;x++){const N=x===g.length-1&&d?0:x+1;if(N>=g.length)break;const $=g[x].coords,_=g[N].coords,w=n($,_);h.push({type:"Feature",geometry:{type:"LineString",coordinates:[[$.lng,$.lat],[_.lng,_.lat]]},properties:{distance:o(w)}})}return{type:"FeatureCollection",features:h}}function f(g,d){if(g.length<2)return s();const h=g.map(x=>[x.coords.lng,x.coords.lat]);return d&&h.push(h[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:h},properties:{}}]}}function k(g){if(g.length<3)return s();const d=g.map(h=>[h.coords.lng,h.coords.lat]);return d.push(d[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[d]},properties:{}}]}}let l=!1;function y(g){g.getSource(kt)||(g.addSource(kt,{type:"geojson",data:s()}),g.addLayer({id:`${kt}-circle`,type:"circle",source:kt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),g.addLayer({id:`${kt}-labels`,type:"symbol",source:kt,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}})),g.getSource(Bt)||(g.addSource(Bt,{type:"geojson",data:s()}),g.addLayer({id:`${Bt}-labels`,type:"symbol",source:Bt,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}})),g.getSource(Nt)||(g.addSource(Nt,{type:"geojson",data:s()}),g.addLayer({id:`${Nt}-layer`,type:"line",source:Nt,paint:{"line-color":"#3b82f6","line-width":2}})),g.getSource(Vt)||(g.addSource(Vt,{type:"geojson",data:s()}),g.addLayer({id:`${Vt}-layer`,type:"fill",source:Vt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),l=!0}function u(g){if(g){try{g.getLayer(`${Vt}-layer`)&&g.removeLayer(`${Vt}-layer`),g.getSource(Vt)&&g.removeSource(Vt),g.getLayer(`${Nt}-layer`)&&g.removeLayer(`${Nt}-layer`),g.getSource(Nt)&&g.removeSource(Nt),g.getLayer(`${Bt}-labels`)&&g.removeLayer(`${Bt}-labels`),g.getSource(Bt)&&g.removeSource(Bt),g.getLayer(`${kt}-labels`)&&g.removeLayer(`${kt}-labels`),g.getLayer(`${kt}-circle`)&&g.removeLayer(`${kt}-circle`),g.getSource(kt)&&g.removeSource(kt)}catch{}l=!1}}function m(g){if(!g)return;const d=g.getSource(kt),h=g.getSource(Nt),x=g.getSource(Vt),N=g.getSource(Bt),$=r.points,_=r.labelMode??"general";d&&d.setData(c($,r.isShapeClosed,_)),h&&h.setData(f($,r.isShapeClosed)),x&&x.setData(k($)),N&&N.setData(_==="topoint"?p($,r.isShapeClosed):s())}function b(){i().then(()=>{const g=a.value;g&&(l||y(g),m(g))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>b(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{i().then(()=>u(a.value))}),(g,d)=>null}}),rp={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},lp={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ap={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},sp={class:"flex items-center gap-2"},ip=["disabled"],cp={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},dp={class:"text-sm font-mono text-slate-700"},up={class:"flex items-center gap-2 shrink-0"},mp={key:0,class:"text-xs font-[100] text-gray-500"},pp=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,a=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),i=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),s=e.ref(!1);let c=null;function p(){if(o.position==null)return;const l=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(l).then(()=>{s.value=!0,c&&clearTimeout(c),c=setTimeout(()=>{s.value=!1,c=null},600)})}function f(){r("close")}function k(){o.position!=null&&r("recenter")}return(l,y)=>(e.openBlock(),e.createElementBlock("div",rp,[e.createElementVNode("div",lp,[e.createElementVNode("div",ap,[e.createElementVNode("div",sp,[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:k},[e.createVNode(e.unref(me.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,ip),y[0]||(y[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:f},[e.createVNode(e.unref(me.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",cp,[e.createElementVNode("div",null,[y[4]||(y[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",dp,[y[1]||(y[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(a.value)+" ",1),y[2]||(y[2]=e.createElementVNode("br",null,null,-1)),y[3]||(y[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(i.value),1)])]),e.createElementVNode("div",up,[s.value?(e.openBlock(),e.createElementBlock("span",mp," Скопійовано! ")):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:p},[e.createVNode(e.unref(me.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),$t="geolocation-marker",fp=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=et();let a=!1;function i(){return{type:"FeatureCollection",features:[]}}function s(l){return{type:"Feature",geometry:{type:"Point",coordinates:[l.lng,l.lat]},properties:{}}}function c(l){l.getSource($t)||(l.addSource($t,{type:"geojson",data:i()}),l.addLayer({id:`${$t}-circle`,type:"circle",source:$t,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),a=!0)}function p(l){try{l.getLayer(`${$t}-circle`)&&l.removeLayer(`${$t}-circle`),l.getSource($t)&&l.removeSource($t)}catch{}a=!1}function f(l){const y=l.getSource($t);if(y){if(n.position==null){y.setData(i());return}y.setData({type:"FeatureCollection",features:[s(n.position)]})}}function k(){r().then(()=>{const l=o.value;if(l){if(n.position==null){a&&p(l);return}a||c(l),f(l)}})}return e.watch(()=>n.position,()=>k(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>p(o.value))}),(l,y)=>null}}),gp={class:"animate-slide-up"},yp={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},hp={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},bp={class:"flex items-center gap-2"},xp={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},kp={class:"px-3 py-2.5 border-b border-gray-200"},wp={class:"flex gap-1 flex-nowrap"},_p=["title","onClick"],Ep={class:"px-3 py-2.5 border-b border-gray-200"},Cp={class:"flex items-center gap-4"},Np={class:"flex items-center gap-2 cursor-pointer shrink-0"},Vp={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},Bp={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},$p={class:"flex items-center gap-1.5"},Sp=Ve(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,a=[{id:"pen",icon:me.Pen,title:"Олівець"},{id:"line",icon:me.Minus,title:"Лінія"},{id:"rect",icon:me.Square,title:"Прямокутник"},{id:"circle",icon:me.Circle,title:"Коло"},{id:"polygon",icon:me.Pentagon,title:"Полігон"},{id:"paint",icon:me.PaintBucket,title:"Балончик"},{id:"eraser",icon:me.Eraser,title:"Стирачка"}],i=e.ref("pen"),s=e.ref("#2563eb"),c=e.ref(3),p=()=>r("update:stroke-color",s.value),f=()=>r("update:stroke-width",c.value);e.watch(i,b=>r("update:tool",b)),e.watch(s,b=>r("update:stroke-color",b)),e.watch(c,b=>r("update:stroke-width",b));function k(){r("close")}function l(){r("undo")}function y(){r("finish-polygon")}function u(){r("clear")}function m(){r("download")}return n({tool:i,strokeColor:s,strokeWidth:c}),(b,g)=>(e.openBlock(),e.createElementBlock("div",gp,[e.createElementVNode("div",yp,[e.createElementVNode("div",hp,[e.createElementVNode("div",bp,[e.createElementVNode("div",xp,[e.createVNode(e.unref(me.Pen),{size:14,"stroke-width":2,class:"text-white"})]),g[2]||(g[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:k},[e.createVNode(e.unref(me.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",kp,[g[3]||(g[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",wp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,d=>e.createElementVNode("button",{key:d.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",i.value===d.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:d.title,onClick:h=>i.value=d.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.icon),{size:16,"stroke-width":2}))],10,_p)),64))])]),e.createElementVNode("section",Ep,[g[6]||(g[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",Cp,[e.createElementVNode("label",Np,[g[4]||(g[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=d=>s.value=d),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:p},null,544),[[e.vModelText,s.value]])]),e.createElementVNode("label",Vp,[g[5]||(g[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[1]||(g[1]=d=>c.value=d),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:f},null,544),[[e.vModelText,c.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",Bp,[e.createElementVNode("div",$p,[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:l},[e.createVNode(e.unref(me.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:u},[e.createVNode(e.unref(me.Trash2),{size:14,"stroke-width":2}),g[7]||(g[7]=e.createTextVNode(" Очистити ",-1))])]),i.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:y},[e.createVNode(e.unref(me.Pentagon),{size:14,"stroke-width":2}),g[8]||(g[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:m},[e.createVNode(e.unref(me.Download),{size:14,"stroke-width":2}),g[9]||(g[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),vp=Ve(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),a=e.ref(null),i=e.ref({x:0,y:0}),s=e.ref(!1),c=t,p=e.computed(()=>Math.max(c.strokeWidth*3,12)),f=e.computed(()=>{const v=p.value*2;return{width:`${v}px`,height:`${v}px`,left:`${i.value.x}px`,top:`${i.value.y}px`,marginLeft:`-${p.value}px`,marginTop:`-${p.value}px`}}),{ready:k}=et(),l=e.ref(!1),y=e.ref([]),u=e.ref([]);let m=0,b=0,g=0,d=0,h=null;function x(){const v=r.value,R=a.value,J=o.value;if(!v||!J)return;const ue=J.parentElement;if(!ue)return;const fe=ue.clientWidth,ie=ue.clientHeight;if(fe<=0||ie<=0)return;const le=window.devicePixelRatio||1;v.width=fe*le,v.height=ie*le,v.style.width=`${fe}px`,v.style.height=`${ie}px`;const S=v.getContext("2d");if(S&&S.scale(le,le),R){R.width=fe*le,R.height=ie*le,R.style.width=`${fe}px`,R.style.height=`${ie}px`;const I=R.getContext("2d");I&&I.scale(le,le)}}function N(v){const R=r.value;if(!R)return{x:0,y:0};const J=R.getBoundingClientRect();return{x:v.clientX-J.left,y:v.clientY-J.top}}function $(){const v=r.value;return v?v.getContext("2d"):null}function _(){const v=a.value;return v?v.getContext("2d"):null}function w(){const v=a.value;if(!v)return;const R=window.devicePixelRatio||1,J=v.getContext("2d");J&&J.clearRect(0,0,v.width/R,v.height/R)}function E(){const v=_();if(v){if(w(),v.globalCompositeOperation="source-over",v.strokeStyle=c.strokeColor,v.lineWidth=c.strokeWidth,v.lineCap="round",v.lineJoin="round",c.tool==="line")v.beginPath(),v.moveTo(m,b),v.lineTo(g,d),v.stroke();else if(c.tool==="rect"){const R=Math.min(m,g),J=Math.min(b,d),ue=Math.abs(g-m),fe=Math.abs(d-b);v.strokeRect(R,J,ue,fe)}else if(c.tool==="circle"){const R=Math.sqrt((g-m)**2+(d-b)**2);v.beginPath(),v.arc(m,b,Math.max(R,1),0,2*Math.PI),v.stroke()}else if(c.tool==="polygon"&&y.value.length>0){const R=y.value;v.beginPath(),v.moveTo(R[0].x,R[0].y);for(let J=1;J<R.length;J++)v.lineTo(R[J].x,R[J].y);v.lineTo(g,d),v.stroke()}}}function B(v){v.strokeStyle=c.strokeColor,v.lineWidth=c.strokeWidth,v.lineCap="round",v.lineJoin="round"}function F(){const v=r.value;if(!v)return;const R=v.getContext("2d");if(!R)return;const J=R.getImageData(0,0,v.width,v.height);u.value=[...u.value.slice(-19),J]}function Y(v){if(!r.value)return;const{x:R,y:J}=N(v);m=R,b=J,g=R,d=J;const ue=$();if(ue){if(c.tool==="pen"||c.tool==="eraser"){F(),l.value=!0,c.tool==="eraser"?(ue.globalCompositeOperation="destination-out",ue.lineWidth=Math.max(c.strokeWidth*3,12)):(ue.globalCompositeOperation="source-over",B(ue)),ue.beginPath(),ue.moveTo(R,J);return}if(c.tool==="paint"){F(),l.value=!0,ue.globalCompositeOperation="source-over",ue.fillStyle=c.strokeColor,ae(ue,R,J);return}if(c.tool==="line"||c.tool==="rect"||c.tool==="circle"){F(),l.value=!0;return}if(c.tool==="polygon"){y.value=[...y.value,{x:R,y:J}],g=R,d=J,E();return}}}function P(v){const{x:R,y:J}=N(v);g=R,d=J,c.tool==="eraser"&&(i.value={x:v.clientX,y:v.clientY},s.value=!0);const ue=$();if(ue){if(c.tool==="pen"&&l.value){ue.globalCompositeOperation="source-over",B(ue),ue.lineTo(R,J),ue.stroke();return}if(c.tool==="eraser"&&l.value){ue.globalCompositeOperation="destination-out",ue.lineWidth=Math.max(c.strokeWidth*3,12),ue.lineTo(R,J),ue.stroke();return}if(c.tool==="paint"&&l.value){ue.globalCompositeOperation="source-over",ue.fillStyle=c.strokeColor,ae(ue,R,J);return}l.value&&(c.tool==="line"||c.tool==="rect"||c.tool==="circle")&&E(),c.tool==="polygon"&&y.value.length>0&&E()}}function Q(){s.value=!1}function Z(){c.tool==="polygon"&&G()}function ae(v,R,J){const ue=Math.max(c.strokeWidth*2.5,8),fe=12+Math.floor(c.strokeWidth);for(let ie=0;ie<fe;ie++){const le=Math.random()*2*Math.PI,S=ue*Math.random(),I=R+Math.cos(le)*S,A=J+Math.sin(le)*S,H=1+Math.random()*2;v.beginPath(),v.arc(I,A,H,0,2*Math.PI),v.fill()}}function X(){if(!l.value)return;const v=$();if(!v){l.value=!1;return}if(c.tool==="paint"){w(),l.value=!1,v.globalCompositeOperation="source-over";return}if(c.tool==="line")v.globalCompositeOperation="source-over",B(v),v.beginPath(),v.moveTo(m,b),v.lineTo(g,d),v.stroke();else if(c.tool==="rect"){v.globalCompositeOperation="source-over",B(v);const R=Math.min(m,g),J=Math.min(b,d),ue=Math.abs(g-m),fe=Math.abs(d-b);v.strokeRect(R,J,ue,fe)}else if(c.tool==="circle"){v.globalCompositeOperation="source-over",B(v);const R=Math.sqrt((g-m)**2+(d-b)**2);v.beginPath(),v.arc(m,b,Math.max(R,1),0,2*Math.PI),v.stroke()}w(),l.value=!1,v.globalCompositeOperation="source-over"}function G(){const v=$(),R=y.value;if(!v||R.length<2){y.value=[],w();return}F(),v.globalCompositeOperation="source-over",B(v),v.beginPath(),v.moveTo(R[0].x,R[0].y);for(let J=1;J<R.length;J++)v.lineTo(R[J].x,R[J].y);v.closePath(),v.stroke(),y.value=[],w(),v.globalCompositeOperation="source-over"}function M(){const v=r.value;if(!v||u.value.length===0)return;const R=v.getContext("2d");if(!R)return;const J=u.value[u.value.length-1];u.value=u.value.slice(0,-1),R.putImageData(J,0,0)}function j(){const v=r.value;if(!v)return;const R=v.getContext("2d");if(!R)return;const J=window.devicePixelRatio||1;R.clearRect(0,0,v.width/J,v.height/J),y.value=[],u.value=[],w()}function z(){return r.value}return e.watch(()=>c.tool,(v,R)=>{R==="polygon"&&v!=="polygon"&&(y.value=[],w())}),e.onMounted(()=>{k().then(()=>{var R;x();const v=(R=o.value)==null?void 0:R.parentElement;v&&typeof ResizeObserver<"u"&&(h=new ResizeObserver(x),h.observe(v))})}),e.onBeforeUnmount(()=>{h==null||h.disconnect(),h=null}),n({clear:j,getCanvas:z,finishPolygon:G,undo:M,canUndo:()=>u.value.length>0}),(v,R)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:Y,onMousemove:P,onMouseup:X,onDblclick:Z,onMouseleave:R[0]||(R[0]=()=>{Q(),X()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:a,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(f.value)},null,4),[[e.vShow,t.tool==="eraser"&&s.value]])],34))}}),[["__scopeId","data-v-ed2688bc"]]),Lp={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"},Tp={class:"flex items-center justify-between px-6 py-4 border-b border-slate-200"},Ap={class:"grid grid-cols-1 lg:grid-cols-2 min-h-0 flex-1"},Mp={class:"px-6 py-5 border-b lg:border-b-0 lg:border-r border-slate-200 overflow-y-auto"},Dp={class:"block mb-4"},Fp={class:"block mb-4"},zp={key:0,class:"mb-4"},Ip={key:1,class:"mb-4"},jp={class:"block mb-4"},Pp={class:"relative"},Rp={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"},Op=["onMousedown"],Up={key:0,class:"px-3 py-2 text-sm text-slate-500"},qp={key:1,class:"px-3 py-2 text-sm text-slate-500"},Hp={class:"flex flex-col items-center text-center gap-3 px-4 py-8"},Wp={class:"w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center"},Yp={class:"text-sm text-slate-600 leading-relaxed"},Gp={key:0,class:"text-sm font-medium text-slate-700"},Zp=["accept"],Kp={key:2,class:"mb-4 text-sm text-red-600"},Xp={class:"flex items-center gap-3"},Jp=["disabled"],Qp=["disabled"],ef={class:"px-6 py-5 bg-slate-50 overflow-y-auto flex flex-col justify-center"},tf={class:"rounded-xl border border-slate-200 bg-white p-4 space-y-2"},nf={class:"text-sm text-slate-700"},of={class:"text-sm text-slate-700"},rf={key:0,class:"text-sm text-slate-700"},lf={class:"text-sm text-slate-500 leading-relaxed"},No="client-layer-preview",On="add-data-preview",Er="add-data",Un="4326",af=Ve(e.defineComponent({name:"MapAddDataPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=et(),{registerClientLayer:a}=xo(),{activateTemporaryLayer:i,deactivateTemporaryLayer:s,clearTemporaryLayers:c}=cn(r.map),p=e.ref("file"),f=tc,k=ir(),l=e.ref(""),y=e.ref(""),u=e.ref(null),m=e.ref(Un),b=e.ref("EPSG:4326"),g=e.ref([{id:Un,text:"EPSG:4326"}]),d=e.ref(null),h=e.ref(""),x=e.ref(!1),N=e.ref(!1),$=e.ref(!1),_=e.ref(!1),w=e.ref(null);let E=null;const B=e.computed(()=>l.value.trim()?p.value==="geometry"?!!y.value.trim():!!(u.value&&m.value):!1),F=e.computed(()=>B.value),Y=e.computed(()=>{if(!d.value)return null;const le=Array.isArray(d.value.features)?d.value.features:[],S=[...new Set(le.map(H=>{var ne;return(ne=H==null?void 0:H.geometry)==null?void 0:ne.type}).filter(Boolean))].join(", ")||"—",I=ho(d.value),A=I?`${I[0][1].toFixed(5)}, ${I[0][0].toFixed(5)} — ${I[1][1].toFixed(5)}, ${I[1][0].toFixed(5)}`:null;return{featureCount:le.length,geometryTypes:S,boundsText:A}});function P(le){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:le}))}function Q(){s(No,On),P({action:"deactivate",owner:On,spec:{id:No}})}function Z(le){const S={id:No,title:l.value.trim()||"Попередній перегляд",type:"geojson",data:le};i(S,{},On),P({action:"activate",owner:On,spec:S});const I=ho(le);I&&r.fitBounds&&r.fitBounds(I,{padding:48,duration:600})}function ae(le){if(!le||typeof le!="object")return null;const S=le,I=S.id??S.srid??S.code??S.value;if(I==null||I==="")return null;const A=String(I),H=S.text??S.name??S.title??S.label,ne=H?String(H):`EPSG:${A}`;return{id:A,text:ne.includes(A)?ne:`${ne} (${A})`}}async function X(le="",S=!1){try{$.value=!0;const I=le.trim(),A=I?`/api/suggest/srid?key=${encodeURIComponent(I)}`:"/api/suggest/srid",H=await fetch(A);if(!H.ok){g.value=[];return}const ne=await H.json(),xe=(Array.isArray(ne==null?void 0:ne.data)?ne.data:Array.isArray(ne)?ne:[]).map(ae).filter(Boolean);if(xe.length){if(g.value=xe,S){const ke=xe.find(we=>we.id===Un)||xe[0];G(ke,!1)}return}g.value=[]}catch(I){console.error("Failed to load SRID classifier:",I)}finally{$.value=!1}}function G(le,S=!0){m.value=le.id,b.value=le.text,S&&(N.value=!1)}function M(){const le=b.value.trim(),S=g.value.find(I=>I.id===m.value);(!S||le!==S.id&&le!==S.text)&&(m.value=""),N.value=!0,E&&clearTimeout(E),E=setTimeout(()=>{X(le)},300)}function j(){setTimeout(()=>{N.value=!1},150)}function z(le){var I;const S=[le,le==null?void 0:le.data,le==null?void 0:le.result,le==null?void 0:le.geojson];for(const A of S){const H=lr(A);if((I=H==null?void 0:H.features)!=null&&I.length)return H}return null}async function v(){var I,A;if(h.value="",p.value==="geometry"){let H;try{H=JSON.parse(y.value.trim())}catch{throw new Error("Некоректний JSON у полі геометрії")}const ne=lr(H);if(!((I=ne==null?void 0:ne.features)!=null&&I.length))throw new Error("Не вдалося розпізнати геометрію GeoJSON");return ne}if(!u.value)throw new Error(`Оберіть файл (${k})`);const le=await rc(u.value,m.value),S=z(le);if(!((A=S==null?void 0:S.features)!=null&&A.length))throw new Error("Не вдалося розпізнати геометрію у файлі");return S}async function R(){x.value=!0,h.value="";try{const le=await v();d.value=le,Q(),Z(le)}catch(le){d.value=null,Q(),h.value=(le==null?void 0:le.message)||"Не вдалося підготувати попередній перегляд"}finally{x.value=!1}}async function J(){if(!d.value&&(await R(),!d.value))return;const le=`client-layer-${Date.now()}`,S={id:le,title:l.value.trim(),type:"geojson",data:d.value};Q(),i(S,{},Er),P({action:"activate",owner:Er,spec:S});const I=ho(d.value),A=l.value.trim();a({id:le,name:A,bounds:I,data:d.value}),window.dispatchEvent(new CustomEvent(dn,{detail:{id:le,name:A,bounds:I}})),I&&r.fitBounds&&r.fitBounds(I,{padding:48,duration:600}),o("close")}function ue(le){if(!le){u.value=null;return}if(!sr(le)){h.value=`Підтримуються формати: ${k}`,u.value=null,d.value=null,Q();return}u.value=le,d.value=null,Q(),h.value=""}function fe(le){var I;const S=le.target;ue(((I=S.files)==null?void 0:I[0])||null)}function ie(le){var S,I;_.value=!1,ue(((I=(S=le.dataTransfer)==null?void 0:S.files)==null?void 0:I[0])||null)}return e.watch(p,()=>{d.value=null,h.value="",Q()}),e.onMounted(()=>{X(Un,!0)}),e.onBeforeUnmount(()=>{E&&clearTimeout(E),Q()}),(le,S)=>(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:S[9]||(S[9]=e.withModifiers(I=>o("close"),["self"]))},[e.createElementVNode("div",Lp,[e.createElementVNode("div",Tp,[S[10]||(S[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:S[0]||(S[0]=I=>o("close"))},[e.createVNode(e.unref(me.X),{size:18})])]),e.createElementVNode("div",Ap,[e.createElementVNode("div",Mp,[e.createElementVNode("label",Dp,[S[12]||(S[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":S[1]||(S[1]=I=>p.value=I),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"},[...S[11]||(S[11]=[e.createElementVNode("option",{value:"file"},"Файл",-1),e.createElementVNode("option",{value:"geometry"},"Геометрія",-1)])],512),[[e.vModelSelect,p.value]])]),e.createElementVNode("label",Fp,[S[13]||(S[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":S[2]||(S[2]=I=>l.value=I),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,l.value]])]),p.value==="geometry"?(e.openBlock(),e.createElementBlock("div",zp,[S[14]||(S[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":S[3]||(S[3]=I=>y.value=I),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,y.value]]),S[15]||(S[15]=e.createElementVNode("p",{class:"mt-1.5 text-xs text-slate-500"}," Вставте GeoJSON-геометрію, Feature або FeatureCollection. ",-1))])):(e.openBlock(),e.createElementBlock("div",Ip,[e.createElementVNode("label",jp,[S[16]||(S[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",Pp,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":S[4]||(S[4]=I=>b.value=I),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:S[5]||(S[5]=I=>N.value=!0),onInput:M,onBlur:j},null,544),[[e.vModelText,b.value]]),N.value?(e.openBlock(),e.createElementBlock("div",Rp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,I=>(e.openBlock(),e.createElementBlock("button",{key:I.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(A=>G(I),["prevent"])},e.toDisplayString(I.text),41,Op))),128)),!g.value.length&&!$.value?(e.openBlock(),e.createElementBlock("p",Up," Нічого не знайдено ")):e.createCommentVNode("",!0),$.value?(e.openBlock(),e.createElementBlock("p",qp," Пошук... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["add-data-modal__dropzone",{"add-data-modal__dropzone--active":_.value}]),onDragover:S[6]||(S[6]=e.withModifiers(I=>_.value=!0,["prevent"])),onDragleave:S[7]||(S[7]=e.withModifiers(I=>_.value=!1,["prevent"])),onDrop:e.withModifiers(ie,["prevent"]),onClick:S[8]||(S[8]=I=>{var A;return(A=w.value)==null?void 0:A.click()})},[e.createElementVNode("div",Hp,[e.createElementVNode("div",Wp,[e.createVNode(e.unref(me.Upload),{size:22})]),e.createElementVNode("p",Yp," Ви можете підключити власний файл у форматах "+e.toDisplayString(e.unref(k))+". Для цього перетягніть файл зі свого сховища у цю область або завантажте з комп'ютера ",1),S[17]||(S[17]=e.createElementVNode("p",{class:"text-xs text-slate-400"},"Максимальний розмір: 50MB",-1)),u.value?(e.openBlock(),e.createElementBlock("p",Gp,e.toDisplayString(u.value.name),1)):e.createCommentVNode("",!0)]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:w,type:"file",accept:e.unref(f),class:"hidden",onChange:fe},null,40,Zp)],34)])),h.value?(e.openBlock(),e.createElementBlock("p",Kp,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Xp,[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:!F.value||x.value,onClick:J}," Додати ",8,Jp),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:!B.value||x.value,onClick:R}," Попередній перегляд ",8,Qp)])]),e.createElementVNode("div",ef,[Y.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[S[21]||(S[21]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Попередній перегляд ",-1)),e.createElementVNode("div",tf,[e.createElementVNode("p",nf,[S[18]||(S[18]=e.createElementVNode("span",{class:"font-medium"},"Об'єктів:",-1)),e.createTextVNode(" "+e.toDisplayString(Y.value.featureCount),1)]),e.createElementVNode("p",of,[S[19]||(S[19]=e.createElementVNode("span",{class:"font-medium"},"Тип:",-1)),e.createTextVNode(" "+e.toDisplayString(Y.value.geometryTypes),1)]),Y.value.boundsText?(e.openBlock(),e.createElementBlock("p",rf,[S[20]||(S[20]=e.createElementVNode("span",{class:"font-medium"},"Межі:",-1)),e.createTextVNode(" "+e.toDisplayString(Y.value.boundsText),1)])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[S[22]||(S[22]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Немає даних для попереднього перегляду ",-1)),e.createElementVNode("p",lf,[p.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"]]),Cr=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var y,u;const n=t,o=((u=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:u.$settings)||null,{map:r,ready:a}=et();let i=null;function s(){i==null||i.remove(),i=null}function c(m){if(!m)return null;if(typeof m=="string")try{m=JSON.parse(m)}catch{return null}return m.type==="FeatureCollection"?m:m.type==="Feature"?{type:"FeatureCollection",features:[m]}:m.type&&Array.isArray(m.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:m,properties:{}}]}:Array.isArray(m.features)?{type:"FeatureCollection",features:m.features}:m.geometry?c(m.geometry):null}function p(m){var d,h,x;return{type:"line",color:"#8e4484",width:2,opacity:((((x=(h=(d=m==null?void 0:m.features)==null?void 0:d[0])==null?void 0:h.geometry)==null?void 0:x.type)||"").includes("Polygon"),.95)}}async function f(m){const b=await fetch(m);if(!b.ok)throw new Error(String(b.status));return b.json()}async function k(m,b){if(m){const g=/^https?:\/\//.test(m)?m:new URL(m,location.origin).toString(),d=await f(g).catch(()=>null),h=c(d);if(h)return h}if(b){const g=await f(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(b)}`).catch(()=>null),d=c(g);if(d)return d}return null}async function l(){var d,h,x,N;if(!n.layerId||!r.value){s();return}typeof a=="function"&&await a().catch(()=>{});const m=n.boundary??((d=n.settingsMap)==null?void 0:d.boundary)??((h=o==null?void 0:o.map)==null?void 0:h.boundary)??null,b=n.katottg??((x=n.settingsMap)==null?void 0:x.katottg)??((N=o==null?void 0:o.map)==null?void 0:N.katottg)??null;if(!m&&!b){s();return}const g=await k(m,b);if(!g){s();return}s(),i=Me(`${n.layerId}-boundary`,{source:{type:"geojson",data:g},style:p(g)},r)}return e.watch(()=>{var m,b;return[n.layerId,n.boundary,n.katottg,(m=n.settingsMap)==null?void 0:m.boundary,(b=n.settingsMap)==null?void 0:b.katottg,r.value]},()=>{l()},{immediate:!0}),e.onBeforeUnmount(s),(m,b)=>null}}),sf={key:2,class:"absolute bottom-16 right-4 z-[100] pointer-events-auto"},cf={key:3,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2 pointer-events-auto"},df={class:"absolute top-[103px] right-[6.5px] z-[100] flex flex-col items-end gap-1 pointer-events-auto"},uf=["aria-label","disabled"],mf={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"},pf=["aria-label"],ff={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"},gf=["aria-label"],yf={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"},hf=["aria-label"],bf={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"},xf={class:"map-widget__overlay-grid"},kf={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},wf={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},_f={class:"map-widget__stack"},Ef={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Cf={class:"map-widget__stack map-widget__stack--bottom"},Nf={key:0,class:"map-widget__state"},Vf={key:1,class:"map-widget__state map-widget__state--error"},qn=Ve(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var oo,ro,lo,ao;const n=t;console.log("props.data",n.data);const o=Ie.useRoute(),r=Ie.useRouter(),a=e.ref(null),i=e.ref({}),s=e.ref(null),c=e.ref(!1),p=e.ref(null),f=e.ref(!1),k=e.ref([]),{resolveMapLegendItems:l}=hr(),y=e.ref(null),u=e.computed(()=>y.value==="ruler"),m=e.computed(()=>y.value==="draw"),b=e.computed(()=>y.value==="geolocation"),g=e.computed(()=>y.value==="add-data"),d=e.ref("general"),h=e.ref(null),x=e.ref(null),N=e.ref(null),$=e.ref("pen"),_=e.ref("#2563eb"),w=e.ref(3),E=e.ref([]),B=e.ref(!1),F=e.ref(null),Y=e.ref(!1),P=e.ref(null),Q=e.computed(()=>n.id||"main"),Z=e.computed(()=>{var q,oe;return{height:((q=n.height)==null?void 0:q.trim())||((oe=i.value)==null?void 0:oe.height)||"calc(100vh - 65px)"}}),ae=e.computed(()=>{var q;return((q=i.value)==null?void 0:q.name)??null}),X=e.computed(()=>{var q;return((q=i.value)==null?void 0:q.description)??null}),G=e.computed(()=>{var q;return H((q=i.value)==null?void 0:q.maps)}),M=e.computed(()=>{var oe,Ne;const q=((oe=i.value)==null?void 0:oe.minZoom)??((Ne=i.value)==null?void 0:Ne.minzoom)??null;return typeof q=="number"?q:null}),j=e.computed(()=>{var oe,Ne;const q=((oe=i.value)==null?void 0:oe.maxZoom)??((Ne=i.value)==null?void 0:Ne.maxzoom)??null;return typeof q=="number"?q:typeof n.maxZoom=="number"?n.maxZoom:20}),z=e.ref(null),v=e.computed(()=>{if(!z.value)return null;const{lng:q,lat:oe}=z.value;return`${oe.toFixed(6)}, ${q.toFixed(6)}`}),R=e.computed(()=>{var q;return((q=a.value)==null?void 0:q.ctx)??null}),J=e.computed(()=>{var q;return((q=i.value)==null?void 0:q.minimap)??null});function ue(q){if(!q||typeof q!="object")return q;const oe=Ft(q.center);return oe?{...q,center:oe}:q}const fe=((ro=(oo=e.getCurrentInstance())==null?void 0:oo.appContext.config.globalProperties)==null?void 0:ro.$settings)||null;function ie(q){if(q==null)return null;const oe=Number(typeof q=="string"?q.trim():q);return Number.isFinite(oe)?oe:null}const le=Ft((lo=fe==null?void 0:fe.map)==null?void 0:lo.center),S=ie((ao=fe==null?void 0:fe.map)==null?void 0:ao.zoom),I=e.computed(()=>{const q=(fe==null?void 0:fe.map)||null,oe=(q==null?void 0:q.boundary)??null,Ne=(q==null?void 0:q.katottg)??null;return!oe&&!Ne?null:{boundary:oe,katottg:Ne}});function A(q){return typeof q=="string"&&q.trim()?q.trim().toLowerCase():"top-left"}function H(q){return Array.isArray(q)?q:q&&typeof q=="object"?Object.values(q).filter(Boolean):[]}const ne=e.computed(()=>{var q;return H((q=i.value)==null?void 0:q.widgets)}),pe=e.computed(()=>ne.value.some(q=>(q==null?void 0:q.type)==="catalog"));function xe(q){return l(q,{hasCatalogWidget:pe.value})}const ke=e.computed(()=>ne.value.some(q=>(q==null?void 0:q.type)==="basemaps")),we=["left","right"],He=e.computed(()=>{const q={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},oe={"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 ne.value.forEach(Ne=>{const Te=A(Ne.position),ye=oe[Te]??{side:"left",align:"top"};q[ye.side][ye.align].push(Ne)}),q});function Ze(q){return Array.isArray(q)?q[0]??null:typeof q=="string"?q:null}async function Oe(){var oe;await e.nextTick();const q=(oe=a.value)==null?void 0:oe.ctx;return q?(q.ready&&await q.ready(),q):null}function at(){var q,oe,Ne;return((Ne=(oe=(q=a.value)==null?void 0:q.ctx)==null?void 0:oe.map)==null?void 0:Ne.value)??null}function te(){const q=at();if(!q)return null;const oe=q.getCenter();return{z:q.getZoom().toFixed(2),x:oe.lng.toFixed(5),y:oe.lat.toFixed(5)}}async function re(){var Ne;const q=await Oe(),oe=(Ne=q==null?void 0:q.map)==null?void 0:Ne.value;oe&&(typeof M.value=="number"&&oe.setMinZoom(M.value),typeof j.value=="number"&&oe.setMaxZoom(j.value))}async function Ce(){var ye;if(s.value)return;const q=await Oe(),oe=(ye=q==null?void 0:q.map)==null?void 0:ye.value;if(!oe)return;const Ne=oe.getCenter(),Te=oe.getZoom();s.value={center:[Ne.lng,Ne.lat],zoom:Te}}function Ue(){if(nt.value)return;const q=te();if(!q)return;const oe=Ze(o.query.x),Ne=Ze(o.query.y),Te=Ze(o.query.z);oe===q.x&&Ne===q.y&&Te===q.z||(W.value=q,r.replace({query:{...o.query,...q}}).catch(()=>{}))}function We(q,oe,Ne=1e-6){return Math.abs(q-oe)<=Ne}async function ve(){var qe;if(V())return;const q=await Oe(),oe=(qe=q==null?void 0:q.map)==null?void 0:qe.value;if(!q||!oe)return;const Ne=parseFloat(Ze(o.query.x)??""),Te=parseFloat(Ze(o.query.y)??""),ye=parseFloat(Ze(o.query.z)??""),je=!Number.isNaN(Ne),De=!Number.isNaN(Te),be=!Number.isNaN(ye);let ze=!1;nt.value=!0;try{if(je&&De){const Pe=oe.getCenter();(!We(Pe.lng,Ne)||!We(Pe.lat,Te))&&(oe.setCenter([Ne,Te]),ze=!0)}if(be){const Pe=oe.getZoom();We(Pe,ye,.001)||(oe.setZoom(ye),ze=!0)}(!je||!De||!be||ze)&&Ue()}finally{nt.value=!1}}let Ge=null,Ae=null;const nt=e.ref(!1),W=e.ref(null);function V(){const q=W.value;if(!q)return!1;const oe=Ze(o.query.x),Ne=Ze(o.query.y),Te=Ze(o.query.z);return oe===q.x&&Ne===q.y&&Te===q.z?(W.value=null,!0):!1}function D(q){const oe=q==null?void 0:q.lngLat;oe&&(z.value={lng:oe.lng,lat:oe.lat})}let ee=null;function T(q){typeof window>"u"||window.dispatchEvent(new CustomEvent(zn,{detail:q}))}function O(q){if(!q)return null;if(typeof q=="string")try{return JSON.parse(q)}catch{return null}return q}async function U(q){const oe=await fetch(`/api/map-format?${q.toString()}`);if(!oe.ok)throw new Error(`API returned ${oe.status}`);return oe.json()}function ce(){const q=at();return q?Object.entries(Me()).filter(([,oe])=>{var Pe,Je,tt,Ye,pt,st,Fe;const Ne=(Je=(Pe=oe==null?void 0:oe.opts)==null?void 0:Pe.source)==null?void 0:Je.type,Te=(Ye=(tt=oe==null?void 0:oe.opts)==null?void 0:tt.layer)==null?void 0:Ye.type,ye=(((pt=oe==null?void 0:oe.opts)==null?void 0:pt.service)||"").toString().toLowerCase(),je=Array.isArray(oe==null?void 0:oe.card)?oe.card.length>0:!!(oe!=null&&oe.card),De=Array.isArray(oe==null?void 0:oe.popup)?oe.popup.length>0:!!(oe!=null&&oe.popup),be=(st=oe==null?void 0:oe.ids)==null?void 0:st.sourceId;if(Ne!=="raster"&&Te!=="raster"||ye!=="cartocss"&&!je&&!De||!be||!q.getSource(be))return!1;const qe=(((Fe=q.getStyle())==null?void 0:Fe.layers)||[]).filter(wt=>wt.source===be);return qe.length?qe.some(wt=>{try{return q.getLayoutProperty(wt.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([oe])=>oe):[]}function de(q){const oe=at();return oe?(oe.queryRenderedFeatures(q==null?void 0:q.point)||[]).filter(Te=>{var be,ze,qe,Pe,Je;if(!((be=Te==null?void 0:Te.properties)!=null&&be.id))return!1;const ye=Me(Te.source);if(!ye)return!1;const je=(qe=(ze=ye==null?void 0:ye.opts)==null?void 0:ze.source)==null?void 0:qe.type,De=(Je=(Pe=ye==null?void 0:ye.opts)==null?void 0:Pe.layer)==null?void 0:Je.type;return je!=="raster"&&De!=="raster"}):[]}async function _e(q){var je,De,be,ze,qe;const oe=(je=q==null?void 0:q.lngLat)==null?void 0:je.lng,Ne=(De=q==null?void 0:q.lngLat)==null?void 0:De.lat;if(typeof oe!="number"||typeof Ne!="number")return[];const Te=ce();if(!Te.length)return[];const ye=[];for(let Pe=0;Pe<Te.length;Pe+=1){const Je=Te[Pe],tt=new URLSearchParams({layer:Je,lat:Ne.toFixed(6),lng:oe.toFixed(6)});try{const Ye=await U(tt),pt=O(((be=Ye==null?void 0:Ye.data)==null?void 0:be.geom)??(Ye==null?void 0:Ye.geom)??null),st=((ze=Ye==null?void 0:Ye.data)==null?void 0:ze.id)??(Ye==null?void 0:Ye.id);if(st!=null){const Fe=await U(new URLSearchParams({layer:Je,id:String(st)})),wt=typeof(Fe==null?void 0:Fe.html)=="string"?Fe.html:null,ln=O(((qe=Fe==null?void 0:Fe.data)==null?void 0:qe.geom)??(Fe==null?void 0:Fe.geom)??null);if(wt||ln){ye.push({html:wt,geometry:ln??pt,infoToken:`external:${Je},${String(st)}`});continue}}fr({html:Ye==null?void 0:Ye.html})&&ye.push({html:Ye.html,geometry:pt,infoToken:null})}catch{}}return ye}async function $e(q){var ye;const oe=q==null?void 0:q.lngLat;k.value.includes("ruler")&&u.value&&oe&&((ye=h.value)==null||ye.addPoint({lat:oe.lat,lng:oe.lng}));const Ne=de(q),Te=await _e(q).catch(()=>[]);T({features:Ne,externalItems:Te})}function Se(){var q;y.value==="ruler"?(E.value=[],B.value=!1,(q=h.value)==null||q.clearPoints(),y.value=null):(F.value=null,P.value=null,y.value="ruler")}function ot(){y.value=null,E.value=[],B.value=!1}function gt(){y.value==="draw"?y.value=null:(F.value=null,P.value=null,y.value="draw")}function ut(){y.value==="add-data"?y.value=null:(F.value=null,P.value=null,y.value="add-data")}function Et(){if(y.value==="geolocation"&&F.value!=null){no();return}if(P.value=null,Y.value=!0,!navigator.geolocation){P.value="Геолокація не підтримується браузером",Y.value=!1;return}navigator.geolocation.getCurrentPosition(q=>{const oe=q.coords.latitude,Ne=q.coords.longitude;F.value={lat:oe,lng:Ne},P.value=null,Y.value=!1,y.value="geolocation",Oe().then(Te=>{Te!=null&&Te.flyTo&&Te.flyTo({center:[Ne,oe],zoom:15})})},()=>{P.value="Не вдалося визначити місце розташування",Y.value=!1},{enableHighAccuracy:!0})}function en(){y.value=null,F.value=null,P.value=null}function no(){const q=F.value;q!=null&&Oe().then(oe=>{oe!=null&&oe.flyTo&&oe.flyTo({center:[q.lng,q.lat],zoom:15})})}function qo(q){E.value=q}function Ho(){var q;(q=N.value)==null||q.clear()}function tn(){var q;(q=N.value)==null||q.finishPolygon()}function Vn(){var q;(q=N.value)==null||q.undo()}function Wo(){var ye,je,De,be;const q=(De=(je=(ye=a.value)==null?void 0:ye.ctx)==null?void 0:je.map)==null?void 0:De.value,oe=(be=N.value)==null?void 0:be.getCanvas();if(!q||!oe)return;const Ne=(ze,qe)=>{const Pe=document.createElement("a");Pe.download=qe,Pe.rel="noopener",typeof ze=="string"?Pe.href=ze:(Pe.href=URL.createObjectURL(ze),setTimeout(()=>URL.revokeObjectURL(Pe.href),100)),document.body.appendChild(Pe),Pe.click(),document.body.removeChild(Pe)},Te=()=>{const ze=q.getCanvas();if(!ze)return;const qe=ze.width,Pe=ze.height;if(qe<=0||Pe<=0)return;const Je=document.createElement("canvas");Je.width=qe,Je.height=Pe;const tt=Je.getContext("2d");if(!tt)return;tt.drawImage(ze,0,0),tt.drawImage(oe,0,0,oe.width,oe.height,0,0,qe,Pe);const Ye=`map-drawing-${Date.now()}.png`;Je.toBlob(pt=>{if(pt){Ne(pt,Ye);return}try{const st=Je.toDataURL("image/png");Ne(st,Ye)}catch{const st=document.createElement("canvas");st.width=oe.width,st.height=oe.height;const Fe=st.getContext("2d");Fe&&(Fe.drawImage(oe,0,0),st.toBlob(wt=>wt&&Ne(wt,Ye),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Te))}async function nn(){const q=await Oe();q!=null&&q.on&&(Ge==null||Ge(),Ge=q.on("moveend",Ue),Ae==null||Ae(),Ae=q.on("mousemove",D),ee==null||ee(),ee=q.on("click",$e))}e.onUnmounted(()=>{Ge==null||Ge(),Ge=null,Ae==null||Ae(),Ae=null,ee==null||ee(),ee=null});async function Bn(q=!1){var Ne,Te;f.value=!1,p.value=null,z.value=null;const oe=q||!n.data;c.value=oe;try{const ye=oe?await(async()=>{const qe=await fetch(`/api/gis-map/${encodeURIComponent(Q.value)}`);if(!qe.ok)throw new Error(`Помилка завантаження (${qe.status})`);return qe.json()})():n.data;oe||(f.value=!0);const je=Ft(ye.center)??le,De=H(ye.layers).map(qe=>ue(qe)),be=ie(ye.zoom)??S;i.value={...ye,center:je??null,zoom:be??ye.zoom??null,layers:De,widgets:ye.widgets},k.value=ye.tools||["home","print","ruler","draw","add-data"];const ze=await Oe();ze&&(je&&((Ne=ze.setCenter)==null||Ne.call(ze,je)),be!=null&&((Te=ze.setZoom)==null||Te.call(ze,be)),s.value||await Ce()),await re(),await ve(),await nn(),f.value=!0}catch(ye){p.value=(ye==null?void 0:ye.message)||"Не вдалося завантажити карту"}finally{oe&&(c.value=!1)}}const $n=e.computed(()=>{var Te;const q=new Map;return H((Te=i.value)==null?void 0:Te.layers).forEach(ye=>{if(!(ye!=null&&ye.id))return;const je=ue(ye)||ye;q.set(ye.id,{...je})}),ne.value.filter(ye=>(ye==null?void 0:ye.type)==="layers").flatMap(ye=>{var je;return H((je=ye==null?void 0:ye.config)==null?void 0:je.layers)}).forEach(ye=>{if(!(ye!=null&&ye.id))return;const je=q.get(ye.id)||{},De=ue(ye)||ye;q.set(ye.id,{...je,...De,actions:ye.actions||je.actions||null,name:je.name||ye.name||ye.title||je.title||ye.id,title:je.title||ye.title||je.name||null,visible:je.visible??ye.visible??!0})}),Array.from(q.values())}),Pt=e.ref([]);function on(q){Pt.value.includes(q)?Pt.value=Pt.value.filter(oe=>oe!==q):Pt.value.push(q)}const rn=e.computed(()=>q=>Pt.value.includes(q.id));return e.watch([M,j],()=>{re()},{immediate:!0}),e.watch(Q,()=>{Bn(!0)}),e.watch(()=>n.data,q=>{q&&Bn()}),e.onMounted(()=>{Bn()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{ve()}),(q,oe)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(Z.value)},[oe[9]||(oe[9]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(An,{ref_key:"mapViewRef",ref:a,class:"map-widget__view"},{default:e.withCtx(()=>{var Ne,Te,ye,je;return[ke.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(qt,{key:0,class:"hidden"})),I.value?(e.openBlock(),e.createBlock(Cr,{key:1,"layer-id":"app-boundary",boundary:I.value.boundary,katottg:I.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),R.value&&k.value.includes("draw")&&m.value?(e.openBlock(),e.createElementBlock("div",sf,[e.createVNode(Sp,{ref_key:"drawingPanelRef",ref:x,onClose:oe[0]||(oe[0]=De=>y.value=null),onClear:Ho,onDownload:Wo,onFinishPolygon:tn,onUndo:Vn,"onUpdate:tool":oe[1]||(oe[1]=De=>$.value=De),"onUpdate:strokeColor":oe[2]||(oe[2]=De=>_.value=De),"onUpdate:strokeWidth":oe[3]||(oe[3]=De=>w.value=De)},null,512)])):e.createCommentVNode("",!0),R.value?(e.openBlock(),e.createElementBlock("div",cf,[v.value?(e.openBlock(),e.createBlock(am,{key:0,coordinates:v.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(cm,{"map-context":R.value,options:J.value},null,8,["map-context","options"]),k.value.includes("ruler")&&u.value?(e.openBlock(),e.createBlock(np,{key:1,ref_key:"rulerPanelRef",ref:h,onClose:ot,onTabChange:oe[4]||(oe[4]=De=>d.value=De),onPointsChange:qo,onShapeClosedChange:oe[5]||(oe[5]=De=>B.value=De)},null,512)):e.createCommentVNode("",!0),k.value.includes("geolocation")&&b.value?(e.openBlock(),e.createBlock(pp,{key:2,position:F.value,onClose:en,onRecenter:no},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",df,[k.value.includes("home")?(e.openBlock(),e.createBlock(zt,{key:0,center:((Ne=i.value)==null?void 0:Ne.center)||((Te=s.value)==null?void 0:Te.center)||null,zoom:((ye=i.value)==null?void 0:ye.zoom)??((je=s.value)==null?void 0:je.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),k.value.includes("print")?(e.openBlock(),e.createBlock(em,{key:1})):e.createCommentVNode("",!0),k.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:2,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?"Вимкнути геолокацію":"Ваше розташування",disabled:Y.value,onClick:e.withModifiers(Et,["stop"])},[e.createElementVNode("span",mf,e.toDisplayString(b.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(me.MapPin),{class:"w-4 h-4"})],10,uf)):e.createCommentVNode("",!0),k.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:3,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",u.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":u.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(Se,["stop"])},[e.createElementVNode("span",ff,e.toDisplayString(u.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(me.Ruler),{class:"w-4 h-4"})],10,pf)):e.createCommentVNode("",!0),k.value.includes("draw")?(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",m.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":m.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(gt,["stop"])},[e.createElementVNode("span",yf,e.toDisplayString(m.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(me.Pen),{class:"w-4 h-4"})],10,gf)):e.createCommentVNode("",!0),k.value.includes("add-data")?(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",g.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":g.value?"Закрити додавання даних":"Додавання даних",onClick:e.withModifiers(ut,["stop"])},[e.createElementVNode("span",bf,e.toDisplayString(g.value?"Закрити додавання даних":"Додавання даних"),1),e.createVNode(e.unref(me.Upload),{class:"w-4 h-4"})],10,hf)):e.createCommentVNode("",!0)]),f.value&&u.value&&E.value.length>0?(e.openBlock(),e.createBlock(op,{key:4,points:E.value,"is-shape-closed":B.value,"label-mode":d.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),f.value&&F.value!=null?(e.openBlock(),e.createBlock(fp,{key:5,position:F.value},null,8,["position"])):e.createCommentVNode("",!0),f.value&&m.value?(e.openBlock(),e.createBlock(vp,{key:6,ref_key:"drawingCanvasRef",ref:N,tool:$.value,"stroke-color":_.value,"stroke-width":w.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[g.value?(e.openBlock(),e.createBlock(af,{key:0,onClose:oe[6]||(oe[6]=De=>y.value=null)})):e.createCommentVNode("",!0)])),f.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",xf,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(we,De=>e.createElementVNode("div",{key:De,class:e.normalizeClass(["map-widget__side",`map-widget__side--${De}`])},[De==="left"?(e.openBlock(),e.createElementBlock("div",kf)):e.createCommentVNode("",!0),He.value[De].top.length?(e.openBlock(),e.createElementBlock("div",wf,[e.createElementVNode("div",_f,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(He.value[De].top,be=>{var ze,qe,Pe,Je,tt,Ye,pt;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:be.id||be.type,class:"map-overlay__item"},[be.type==="info"?(e.openBlock(),e.createBlock(rr,{key:0,title:((ze=be.config)==null?void 0:ze.title)||be.title||null,content:((qe=be.config)==null?void 0:qe.content)||"",links:G.value,"map-name":ae.value,"map-description":X.value},null,8,["title","content","links","map-name","map-description"])):be.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Pe=be.config)==null?void 0:Pe.api)||null},null,8,["api"])):be.type==="layers"?(e.openBlock(),e.createBlock(ur,{key:2,layers:$n.value,onAction:oe[7]||(oe[7]=st=>on(st.layerId)),config:be.config},null,8,["layers","config"])):be.type==="basemaps"?(e.openBlock(),e.createBlock(qt,{key:3,layers:((Je=be.config)==null?void 0:Je.layers)||null,"default-layer":((tt=be.config)==null?void 0:tt.default)||null,title:be.title||((Ye=be.config)==null?void 0:Ye.title)||null},null,8,["layers","default-layer","title"])):be.type==="legend"?(e.openBlock(),e.createBlock(Eo,{key:4,items:xe(be)},null,8,["items"])):be.type==="filters"&&rn.value(be)?(e.openBlock(),e.createBlock(Co,{key:5,"layer-id":(pt=be.config)==null?void 0:pt.layer,onClose:on},null,8,["layer-id"])):be.type==="dataset"||be.type==="attribute"?(e.openBlock(),e.createBlock(xr,{key:6,config:be.config},null,8,["config"])):be.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:be.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,be.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),He.value[De].bottom.length?(e.openBlock(),e.createElementBlock("div",Ef,[e.createElementVNode("div",Cf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(He.value[De].bottom,be=>{var ze,qe,Pe,Je,tt,Ye,pt;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:be.id||be.type,class:"map-overlay__item"},[be.type==="info"?(e.openBlock(),e.createBlock(rr,{key:0,title:((ze=be.config)==null?void 0:ze.title)||be.title||null,content:((qe=be.config)==null?void 0:qe.content)||"",links:G.value,"map-name":ae.value,"map-description":X.value},null,8,["title","content","links","map-name","map-description"])):be.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Pe=be.config)==null?void 0:Pe.api)||null},null,8,["api"])):be.type==="layers"?(e.openBlock(),e.createBlock(ur,{key:2,layers:$n.value,onAction:oe[8]||(oe[8]=st=>on(st.layerId)),config:be.config},null,8,["layers","config"])):be.type==="basemaps"?(e.openBlock(),e.createBlock(qt,{key:3,layers:((Je=be.config)==null?void 0:Je.layers)||null,"default-layer":((tt=be.config)==null?void 0:tt.default)||null,title:be.title||((Ye=be.config)==null?void 0:Ye.title)||null},null,8,["layers","default-layer","title"])):be.type==="legend"?(e.openBlock(),e.createBlock(Eo,{key:4,items:xe(be)},null,8,["items"])):be.type==="filters"&&rn.value(be)?(e.openBlock(),e.createBlock(Co,{key:5,"layer-id":(pt=be.config)==null?void 0:pt.layer,onClose:on},null,8,["layer-id"])):be.type==="dataset"||be.type==="attribute"?(e.openBlock(),e.createBlock(xr,{key:6,config:be.config},null,8,["config"])):be.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:be.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,be.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(mr),e.createVNode(_o,{"map-id":Q.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),c.value?(e.openBlock(),e.createElementBlock("div",Nf,"Завантаження карти…")):p.value?(e.openBlock(),e.createElementBlock("div",Vf,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-f70ea2c6"]]),Bf=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function fn(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,a,i]=n.split("-");if(!r||!a||!i)return t;const s=parseInt(a,10),c=Bf[s]||a;let p=`${parseInt(i,10)} ${c} ${r}`;if(o){const f=o.split(".")[0],[k,l,y]=f.split(":");k&&l&&y?p+=`, ${k}:${l}:${y}`:k&&l?p+=`, ${k}:${l}`:k&&(p+=`, ${k}`)}return p}function gn(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 $f={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"},Sf={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"},vf={class:"flex flex-col gap-2 md:flex-row md:items-center"},Lf={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},Tf={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},Af={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"},Mf={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Df={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"},Ff={class:"p-3 md:p-3.5 lg:p-4 pt-2"},zf={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},If={class:"text-gray-500 shrink-0 md:max-w-[50%]"},jf={class:"font-medium flex flex-wrap gap-1"},Pf={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},Rf=["href"],Of=["href"],Nr=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=l=>(l==null?void 0:l.service_id)&&(l==null?void 0:l.is_map)&&l[n.id_key]&&(l==null?void 0:l.geom),a=e.computed(()=>n.columns.find(l=>l.meta==="title")),i=e.computed(()=>n.columns.filter(l=>l.meta==="category")),s=e.computed(()=>n.columns.filter(l=>l.meta==="tags")),c=e.computed(()=>n.columns.filter(l=>l.meta!=="title")),p=(l,y)=>{if(y)return l[y]},f=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},k=(l,y)=>{const u=p(l,n.id_key);return`/map?layers=${y}&info=${y},${u}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var m,b,g;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",$f,[e.createElementVNode("div",Sf,[e.createElementVNode("div",vf,[e.createElementVNode("h2",Lf,e.toDisplayString(u[`${(m=a.value)==null?void 0:m.name}_text`]||u[(b=a.value)==null?void 0:b.name]||u[(g=a.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Tf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("div",Af,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Mf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("span",Df,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ff,[e.createElementVNode("div",zf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,d=>{var h;return e.openBlock(),e.createElementBlock("div",{key:d.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",If,e.toDisplayString((d==null?void 0:d.ua)||d.label||d.name)+": ",1),e.createElementVNode("span",jf,[Array.isArray(u[d==null?void 0:d.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,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},[d.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):d.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=u[(d==null?void 0:d.name)+"_data"])==null?void 0:h.text)||u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Pf,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:k(u,u==null?void 0:u.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"},[...y[0]||(y[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,Rf)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:f(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 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...y[1]||(y[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,Of))])])}),128))}}),Uf={class:"p-0"},qf={class:"border-l-4 border-l-slate-400"},Hf={class:"p-4"},Wf={class:"flex flex-wrap items-center gap-2 mb-3"},Yf={class:"text-lg font-bold"},Gf={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"},Zf={key:1,class:"flex"},Kf={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"},Xf={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"},Jf={class:"text-xs text-gray-500 mb-1"},Qf={class:"font-medium"},eg={class:"flex justify-end gap-2 mt-3 border-t pt-3"},tg=["href"],ng=["href"],Vr=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=l=>(l==null?void 0:l.service_id)&&(l==null?void 0:l.is_map)&&l[n.id_key]&&(l==null?void 0:l.geom),a=e.computed(()=>n.columns.find(l=>l.meta==="title")),i=e.computed(()=>n.columns.filter(l=>l.meta==="category")),s=e.computed(()=>n.columns.filter(l=>l.meta==="tags")),c=e.computed(()=>n.columns.filter(l=>l.meta!=="title")),p=(l,y)=>{if(y)return l[y]},f=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},k=(l,y)=>{const u=p(l,n.id_key);return`/map?layers=${y}&info=${y},${u}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var m,b,g;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("div",Hf,[e.createElementVNode("div",Wf,[e.createElementVNode("h2",Yf,e.toDisplayString(u[`${(m=a.value)==null?void 0:m.name}_text`]||u[(b=a.value)==null?void 0:b.name]||u[(g=a.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("div",Gf,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Zf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.name,class:"flex flex-wrap gap-1 ml-2"},[u[d.name]?(e.openBlock(),e.createElementBlock("span",Kf,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Xf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,d=>{var h;return e.openBlock(),e.createElementBlock("div",{key:d.name},[e.createElementVNode("p",Jf,e.toDisplayString(d.ua),1),e.createElementVNode("p",Qf,[Array.isArray(u[d==null?void 0:d.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[d==null?void 0:d.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,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},[d.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):d.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=u[(d==null?void 0:d.name)+"_data"])==null?void 0:h.text)||u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",eg,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:k(u,u==null?void 0:u.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"},[...y[0]||(y[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,tg)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:f(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 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...y[1]||(y[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,ng))])])])])])}),128))}}),og={class:"space-y-4"},rg={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},lg={class:"flex-1"},ag={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},sg={class:"col-span-1 lg:col-span-4"},ig={class:"flex items-start"},cg={class:"flex flex-col"},dg={class:"font-bold text-xs lg:text-sm"},ug={key:0,class:"flex flex-wrap gap-1 mt-1"},mg={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},pg={key:1,class:"flex flex-wrap gap-1 mt-1"},fg={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"},gg={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},yg={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},hg={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},bg={class:"truncate font-medium text-xs lg:text-sm"},xg={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},kg=["href"],wg=["href"],Br=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=y=>(y==null?void 0:y.service_id)&&(y==null?void 0:y.is_map)&&y[n.id_key]&&(y==null?void 0:y.geom),a=e.computed(()=>n.columns.find(y=>y.meta==="title")),i=e.computed(()=>n.columns.filter(y=>y.meta==="category")),s=e.computed(()=>n.columns.filter(y=>y.meta==="tags")),c=e.computed(()=>n.columns.filter(y=>y.meta!=="title")),p=e.computed(()=>"bg-blue-500"),f=(y,u)=>{if(u)return y[u]},k=y=>{const u=f(y,n.id_key);return`${n.path}?id=${u}`},l=(y,u)=>{const m=f(y,n.id_key);return`/map?layers=${u}&info=${u},${m}`};return(y,u)=>(e.openBlock(),e.createElementBlock("div",og,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var b,g,d;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",rg,[e.createElementVNode("div",lg,[e.createElementVNode("div",ag,[e.createElementVNode("div",sg,[e.createElementVNode("div",ig,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",p.value])},null,2),e.createElementVNode("div",cg,[e.createElementVNode("p",dg,e.toDisplayString(m[`${(b=a.value)==null?void 0:b.name}_text`]||m[(g=a.value)==null?void 0:g.name]||m[(d=a.value)==null?void 0:d.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",ug,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.name},[m[h.name]?(e.openBlock(),e.createElementBlock("span",mg,e.toDisplayString(m[`${h.name}_text`]||m[h.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",pg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.name},[m[h.name]?(e.openBlock(),e.createElementBlock("span",fg,e.toDisplayString(m[`${h.name}_text`]||m[h.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",gg,[e.createElementVNode("div",yg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,h=>{var x;return e.openBlock(),e.createElementBlock("div",{key:h.name},[e.createElementVNode("p",hg,e.toDisplayString(h.ua),1),e.createElementVNode("p",bg,[Array.isArray(m[h.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[h.name],(N,$)=>(e.openBlock(),e.createElementBlock("span",{key:$,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(N),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[h.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(m[h.name])||"Немає даних"),1)],64)):h.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(m[h.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((x=m[h.name+"_data"])==null?void 0:x.text)||m[h.name+"_text"]||m[h.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",xg,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:l(m,m.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"},[...u[0]||(u[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,kg)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:k(m),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"},[...u[1]||(u[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,wg))])])])}),128))]))}}),_g={class:"flex flex-col space-y-1.5 p-6 pb-2"},Eg={class:"flex items-center gap-2 flex-wrap"},Cg={class:"tracking-tight text-lg font-medium"},Ng={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"},Vg={key:1,class:"flex"},Bg={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"},$g={class:"p-6 pt-0 pb-4"},Sg={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},vg={class:"text-sm text-gray-500"},Lg={class:"font-medium"},Tg={class:"flex items-center p-6 pt-0 gap-2"},Ag=["href"],Mg=["href"],$r=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=l=>(l==null?void 0:l.service_id)&&(l==null?void 0:l.is_map)&&l[n.id_key]&&(l==null?void 0:l.geom),a=e.computed(()=>n.columns.find(l=>l.meta==="title")),i=e.computed(()=>n.columns.filter(l=>l.meta==="category")),s=e.computed(()=>n.columns.filter(l=>l.meta==="tags")),c=e.computed(()=>n.columns.filter(l=>l.meta!=="title")),p=(l,y)=>{if(y)return l[y]},f=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},k=(l,y)=>{const u=p(l,n.id_key);return`/map?layers=${y}&info=${y},${u}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var m,b,g;return e.openBlock(),e.createElementBlock("div",{key:u.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",_g,[e.createElementVNode("div",Eg,[e.createElementVNode("h3",Cg,e.toDisplayString(u[`${(m=a.value)==null?void 0:m.name}_text`]||u[(b=a.value)==null?void 0:b.name]||u[(g=a.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,d=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.name},[u[d.name]?(e.openBlock(),e.createElementBlock("div",Ng,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Vg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.name,class:"flex flex-wrap gap-1 ml-2"},[u[d.name]?(e.openBlock(),e.createElementBlock("span",Bg,e.toDisplayString(u[`${d.name}_text`]||u[d.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",$g,[e.createElementVNode("div",Sg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,d=>{var h;return e.openBlock(),e.createElementBlock("div",{key:d.name},[e.createElementVNode("p",vg,e.toDisplayString(d.ua),1),e.createElementVNode("p",Lg,[Array.isArray(u[d==null?void 0:d.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[d==null?void 0:d.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,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},[d.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(gn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):d.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(u[d==null?void 0:d.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=u[(d==null?void 0:d.name)+"_data"])==null?void 0:h.text)||u[(d==null?void 0:d.name)+"_text"]||u[d==null?void 0:d.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Tg,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:k(u,u==null?void 0:u.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,Ag)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:f(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 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," Детальніше ",8,Mg))])])}),128))}}),Dg={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},Fg={key:0,class:"w-full lg:w-auto lg:col-span-1"},zg=["src"],Ig={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},jg={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},Pg={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},Rg={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},Og={class:"flex flex-wrap gap-2 lg:gap-0"},Ug={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"},qg={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},Hg={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},Wg={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},Yg=["innerHTML"],Gg={class:"text-gray-500 font-medium md:font-normal"},Zg={class:"text-gray-600 break-words line-clamp-2"},Kg={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"},Xg={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},Jg={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},Qg={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"},ey={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"},ty={class:"w-full space-y-2"},ny=["href"],oy=["href"],Sr=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=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),a=e.computed(()=>n.columns.find(u=>u.meta==="title")),i=e.computed(()=>n.columns.filter(u=>u.meta==="category")),s=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),c=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),p=e.computed(()=>n.columns.find(u=>u.meta==="image")),f=e.computed(()=>n.columns.find(u=>u.meta==="desc")||n.columns.find(u=>u.name==="description")),k=(u,m)=>{if(m)return u[m]},l=u=>{const m=k(u,n.id_key);return`${n.path}?id=${m}`},y=(u,m)=>{const b=k(u,n.id_key);return`/map?layers=${m}&info=${m},${b}`};return(u,m)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,b=>{var g,d,h,x,N,$,_,w,E;return e.openBlock(),e.createElementBlock("div",{key:b.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",Dg,[p.value?(e.openBlock(),e.createElementBlock("div",Fg,[b[(g=p.value)==null?void 0:g.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:b[(d=p.value)==null?void 0:d.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,zg)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Ig,[...m[0]||(m[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",jg,[e.createElementVNode("div",Pg,[e.createElementVNode("h3",Rg,e.toDisplayString(b[`${(h=a.value)==null?void 0:h.name}_text`]||b[(x=a.value)==null?void 0:x.name]||b[(N=a.value)==null?void 0:N.label]||"Не вказано"),1),e.createElementVNode("div",Og,[Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,B=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:B.name},[b[B.name]?(e.openBlock(),e.createElementBlock("div",Ug,e.toDisplayString(b[`${B.name}_text`]||b[B.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",qg,e.toDisplayString(((_=b[(($=f.value)==null?void 0:$.name)+"_data"])==null?void 0:_.text)||b[((w=f.value)==null?void 0:w.name)+"_text"]||b[(E=f.value)==null?void 0:E.name]),1),e.createElementVNode("div",Hg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,B=>{var F;return e.openBlock(),e.createElementBlock("div",{key:B.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",Wg,[B.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:B.icon},null,8,Yg)):e.createCommentVNode("",!0),e.createElementVNode("span",Gg,e.toDisplayString((B==null?void 0:B.ua)||B.label||B.name)+":",1)]),e.createElementVNode("span",Zg,[Array.isArray(b[B==null?void 0:B.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(b[B==null?void 0:B.name],(Y,P)=>(e.openBlock(),e.createElementBlock("span",{key:P,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(Y),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(gn)(b[B==null?void 0:B.name])||"Немає даних"),1)],64)):B.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(fn)(b[B==null?void 0:B.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((F=b[(B==null?void 0:B.name)+"_data"])==null?void 0:F.text)||b[(B==null?void 0:B.name)+"_text"]||b[B==null?void 0:B.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Kg,[e.createElementVNode("p",Xg," Теги: "+e.toDisplayString(s.value.length&&b[s.value[0].name]?"":"відсутні"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Jg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,B=>(e.openBlock(),e.createElementBlock("div",{key:B.name,class:"flex flex-wrap gap-1"},[b[B.name]?(e.openBlock(),e.createElementBlock("span",Qg,e.toDisplayString(b[`${B.name}_text`]||b[B.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ey,[e.createElementVNode("div",ty,[!t.hideDetailsButton&&r(b)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(b,b==null?void 0:b.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,ny)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:l(b),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,oy))])])])])}),128))}});function ry(t){t.component("MapCustom",qn)}const ly={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},ay={key:0,class:"flex items-center gap-2 flex-shrink-0"},sy={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},Ht=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(a,i)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[a.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",ly,[e.renderSlot(a.$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(a.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])],2),a.$slots.actions?(e.openBlock(),e.createElementBlock("div",ay,[e.renderSlot(a.$slots,"actions")])):e.createCommentVNode("",!0)],2),a.$slots.description?(e.openBlock(),e.createElementBlock("p",sy,[e.renderSlot(a.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),iy={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},cy={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"},dy={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},uy={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},my={class:"p-3 border-b border-gray-200"},py={class:"flex flex-col sm:flex-row gap-2"},fy={class:"entity-table-root"},gy={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},yy={key:0,class:"gap-2 inline-flex"},hy=["onClick"],by={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"},xy={class:"text-sm text-gray-500"},ky={class:"font-medium text-gray-700"},wy={class:"font-medium text-gray-700"},_y={class:"font-medium text-gray-700"},Ey={class:"flex items-center justify-end gap-3"},Hn=Object.freeze(Object.defineProperty({__proto__:null,default:Ve(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Ie.useRoute(),r=Ie.useRouter(),a=t,i=e.computed(()=>a.entityKey||String(o.name??"").split("-")[0]),s=e.computed(()=>{var R;let v=(((R=o.matched[o.matched.length-1])==null?void 0:R.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return v.startsWith("/")||(v=`/${v}`),v}),c=e.computed(()=>a.entityBasePath||s.value),p=e.computed(()=>{var v;const z=((v=o.matched[o.matched.length-1])==null?void 0:v.path)||"";return/:id\??/.test(z)&&/:action\??/.test(z)}),f=e.computed(()=>{var v,R;return(v=o.meta)!=null&&v.title?o.meta.title:o.name?o.name:((R=o.path)==null?void 0:R.replace(/^\//,""))||""||"GIS"}),k=e.computed(()=>{var z;return((z=o.meta)==null?void 0:z.description)||""}),l=e.computed(()=>{const z=String(f.value||"").trim();return z?`Пошук ${z}...`:"Пошук..."}),y=e.ref([]),u=e.ref(!0),m=e.ref([]),b=e.ref([]),g=e.ref({}),d=e.ref([]),h=e.ref(String(o.query.search??"")),x=e.ref(Math.max(1,Number(o.query.page)||1)),N=e.ref(15),$=e.ref(0),_=e.computed(()=>$.value>0),w=e.computed(()=>$.value?(x.value-1)*N.value+1:0),E=e.computed(()=>$.value?Math.min(x.value*N.value,$.value):0);function B(z){const v=new URLSearchParams;return Object.entries(z).forEach(([R,J])=>{if(!(J==null||J==="")){if(Array.isArray(J)){J.forEach(ue=>{ue!=null&&ue!==""&&v.append(R,String(ue))});return}v.append(R,String(J))}}),v.toString()}function F(){return p.value?`${c.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function Y(z){if(p.value)return`${c.value}/${z}/edit`;const v=String(o.name??"").split("_")[0];return v==="services"?`/gis.datasets/${z}/edit`:`/gis.${v}/edit/${z}`}const P=async()=>{const z=`/api/data/gis.${i.value}.table`;if(!z){y.value=[],u.value=!1;return}try{u.value=!0;const v=B({...g.value,page:x.value,limit:N.value}),R=await fetch(v?`${z}?${v}`:z);if(!R.ok)throw new Error(`Rows fetch failed: ${R.status}`);const J=await R.json();y.value=J.rows||[],$.value=Number(J.filtered??J.total??J.count??y.value.length)||0,m.value=a.columnsConfig.length?a.columnsConfig:J.columns||[],b.value=J.filters||[],u.value=!1,d.value=J.actions,J.card!==!1&&m.value.length&&(p.value?m.value[0].link=`${c.value}/{id}`:m.value[0].link||(m.value[0].link=`/${o.name}/{id}`))}catch{y.value=[],u.value=!1}};function Q(z){g.value=z,x.value=1,j(),P()}e.onMounted(()=>{P(),document.title=f.value}),e.watch(()=>o.name,()=>{x.value=1,h.value="",P(),document.title=f.value}),e.watch(()=>o.query,z=>{const v=Math.max(1,Number(z.page)||1),R=String(z.search??""),J=v!==x.value,ue=R!==h.value;!J&&!ue||(x.value=v,h.value=R,g.value={...g.value,search:R||void 0},P())});async function Z(z,v,R){const J=await fetch(`/api/form/gis.${i.value}.table/${z.id}`);if(!J.ok)throw new Error(`Form fetch failed: ${J.status}`);const fe=(await J.json()).token,ie={[v]:R},le=await fetch(`/api/table/${fe}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(ie)});if(!le.ok)throw ge.notify({type:"error",title:"Помилка збереження",message:`Поле "${v}" не оновлено`}),new Error(`Save failed: ${le.status}`);ge.notify({title:"Збережено",message:`Поле "${v}" оновлено`})}function ae(z,v){g.value={...g.value,[z]:v},x.value=1,j(),P()}function X(z){ae((z==null?void 0:z.name)||"search",(z==null?void 0:z.value)??h.value)}function G(z){h.value="",ae(z||"search",void 0)}function M(z){!z||z===x.value||(x.value=z,j(),P())}function j(){const z={...o.query,page:String(x.value),...h.value?{search:h.value}:{}};h.value||delete z.search,r.replace({query:z})}return(z,v)=>(e.openBlock(),e.createElementBlock("div",iy,[e.createVNode(Ht,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(f.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",cy,[e.createVNode(e.unref(me.RefreshCw),{size:16}),v[2]||(v[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:v[0]||(v[0]=R=>e.unref(r).push(F())),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(me.Plus),{size:16}),v[3]||(v[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[k.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",dy,[e.createElementVNode("div",uy,[e.createElementVNode("div",my,[e.createElementVNode("div",py,[e.createVNode(e.unref(Ln.FilterField),{modelValue:h.value,"onUpdate:modelValue":v[1]||(v[1]=R=>h.value=R),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:X,onClear:G,placeholder:l.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Ln.Filter),{schema:b.value,value:g.value,onChange:Q,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",fy,[e.createVNode(e.unref(n),{rows:y.value,columns:m.value,loading:u.value,router:e.unref(r),selectable:!1,onCellUpdate:Z,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:R,value:J,column:ue})=>[e.renderSlot(z.$slots,"badge",{row:R,value:J,column:ue},()=>[e.createElementVNode("span",gy,e.toDisplayString((J==null?void 0:J.text)||J||"-"),1)],!0)]),action:e.withCtx(({row:R})=>[e.renderSlot(z.$slots,"action",{row:R},()=>[d.value.includes("add")?(e.openBlock(),e.createElementBlock("div",yy,[e.createElementVNode("button",{onClick:J=>e.unref(r).push(Y(R.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(Tn)],8,hy)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),_.value?(e.openBlock(),e.createElementBlock("div",by,[e.createElementVNode("div",xy,[v[4]||(v[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",ky,e.toDisplayString(w.value),1),v[5]||(v[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",wy,e.toDisplayString(E.value),1),v[6]||(v[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",_y,e.toDisplayString($.value),1)]),e.createElementVNode("div",Ey,[e.createVNode(e.unref(ge.VsPagination),{total:$.value,page:x.value,"page-size":N.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":M,onPageChange:M},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),Cy={class:"mx-1"},Ny={class:"flex items-center gap-2 mt-[0.4rem]"},Vy={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},By={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},$y={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"},Sy={class:"vs-form w-full"},yn=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),a=e.ref(null),i=Ie.useRouter(),s=Ie.useRoute(),c=t,p=e.ref({}),f=e.ref(""),k=e.computed(()=>s.path.replace(/\/(add|new)$/,"")),l=e.computed(()=>{var g;return((g=i.resolve(k.value).meta)==null?void 0:g.title)??""}),y=e.computed(()=>l.value?`Додати в ${l.value.toLowerCase()}`:"Додати"),u=e.computed(()=>{var g;return((g=s.meta)==null?void 0:g.description)??""});function m(){i.push(k.value||"/")}async function b(){if(!a.value){ge.notify({type:"error",title:"Error",message:"Create token is missing."});return}const g=p.value.validate();if(g){ge.notify({type:"warning",title:"Validation",message:Object.entries(g).map(([h,x])=>`${h}: ${x}`).join(`
3
+ `)});return}const d=await fetch("/api/table/"+a.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!d.ok){ge.notify({type:"error",title:"Error",message:`Error code: ${d.status}`});return}await d.json(),ge.notify({title:"Success!",message:"Object created."}),i.back()}return e.onMounted(async()=>{const g=c.entityKey||String(s.name??"").split("-")[0],d=await fetch(`/api/form/gis.${g}.table`).then(h=>h.json());a.value=d.token,f.value=d.id,r.value=d.schema,document.title=y.value}),(g,d)=>{const h=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Ht,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[k.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(h,{to:k.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Cy,[e.createVNode(e.unref(me.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),d[2]||(d[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Ny,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:m,"aria-label":"Назад"},[e.createVNode(e.unref(me.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(l.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:m}," Назад "),e.createElementVNode("button",{onClick:b,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},[u.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Vy,[e.createElementVNode("div",By,[e.createElementVNode("div",$y,[e.createElementVNode("div",Sy,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":d[0]||(d[0]=x=>o.value=x),form:p.value,"onUpdate:form":d[1]||(d[1]=x=>p.value=x),schema:r.value,style:{primaryColor:"blue"},formId:f.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),vy={class:"mx-1"},Ly={class:"mx-1"},Ty={class:"flex items-center gap-2 mt-[0.4rem]"},Ay={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},My={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Dy={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"},Fy={class:"vs-form w-full"},hn=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),a=e.ref(null),i=e.ref({}),s=e.ref(""),c=Ie.useRoute(),p=Ie.useRouter(),k=t.entityKey||String(c.name??"").split("-")[0],{id:l}=c.params,y=e.computed(()=>c.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),u=e.computed(()=>l?`${y.value}/${l}`:y.value||"/"),m=e.computed(()=>{var h;return((h=p.resolve(y.value).meta)==null?void 0:h.title)??""}),b=e.computed(()=>{var h;return((h=c.meta)==null?void 0:h.description)??""});function g(){p.push(y.value||"/")}async function d(){const h=i.value.validate();if(h){ge.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([N,$])=>`${N}: ${$}`).join(`
4
+ `)});return}if(!a.value){ge.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const x=await fetch(`/api/table/${a.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!x.ok){ge.notify({type:"error",title:"Error",message:`Error code: ${x.status}`});return}await x.json(),ge.notify({title:"Success!",message:"Your changes have been saved."}),p.back()}return e.onMounted(async()=>{const h=await fetch(`/api/form/gis.${k}.table/${l}`).then(N=>N.json());o.value=h.data,a.value=h.token,r.value=h.schema;const x=h.data;s.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)||""}),(h,x)=>{const N=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Ht,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[y.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(N,{to:y.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.value),1)]),_:1},8,["to"]),e.createElementVNode("span",vy,[e.createVNode(e.unref(me.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(N,{to:u.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Ly,[e.createVNode(e.unref(me.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",Ty,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:g,"aria-label":"Назад"},[e.createVNode(e.unref(me.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(s.value||m.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:g}," Назад "),e.createElementVNode("button",{onClick:d,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},[b.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(b.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Ay,[e.createElementVNode("div",My,[e.createElementVNode("div",Dy,[e.createElementVNode("div",Fy,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":x[0]||(x[0]=$=>o.value=$),form:i.value,"onUpdate:form":x[1]||(x[1]=$=>i.value=$),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),zy={class:"flex items-center justify-center col-span-3 gap-2"},Iy={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},jy=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(k=>k.VsModal)),r=t,a=e.useModel(t,"columns"),i=e.ref(!1),s=e.ref({}),c=e.ref({...r.data||{}});e.watch(()=>r.data,k=>{c.value={...k||{}}},{deep:!0});const p=()=>a.value=a.value.filter((k,l)=>l!==r.index),f=async()=>{const k=s.value.validate();if(k){ge.notify({type:"warning",title:"Validation",message:Object.entries(k).map(([l,y])=>`${l}: ${y}`).join(`
5
+ `)});return}a.value[r.index]=c.value,i.value=!1};return(k,l)=>(e.openBlock(),e.createElementBlock("div",zy,[e.createElementVNode("button",{onClick:l[0]||(l[0]=y=>{i.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(me.Edit),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:p,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(me.Trash),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:i.value,"onUpdate:visible":l[4]||(l[4]=y=>i.value=y),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",Iy,[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:l[3]||(l[3]=y=>i.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:f}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:c.value,"onUpdate:values":l[1]||(l[1]=y=>c.value=y),schema:t.scheme,form:s.value,"onUpdate:form":l[2]||(l[2]=y=>s.value=y)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),Py={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")})}},Ry={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"},vr=t=>Ry[t==null?void 0:t.toLowerCase()]||"gray",Oy=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],Lr=t=>{var n;return Oy.includes((n=t||"")==null?void 0:n.toLowerCase())},Uy={},qy={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 Hy(t,n){return e.openBlock(),e.createElementBlock("svg",qy,[...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 Wy=Ve(Uy,[["render",Hy]]),Yy={},Gy={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 Zy(t,n){return e.openBlock(),e.createElementBlock("svg",Gy,[...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 Ky=Ve(Yy,[["render",Zy]]),Xy={},Jy={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 Qy(t,n){return e.openBlock(),e.createElementBlock("svg",Jy,[...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 e0=Ve(Xy,[["render",Qy]]),t0={},n0={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 o0(t,n){return e.openBlock(),e.createElementBlock("svg",n0,[...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 r0=Ve(t0,[["render",o0]]),l0={},a0={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 s0(t,n){return e.openBlock(),e.createElementBlock("svg",a0,[...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 i0=Ve(l0,[["render",s0]]),c0={},d0={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 u0(t,n){return e.openBlock(),e.createElementBlock("svg",d0,[...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 m0=Ve(c0,[["render",u0]]),p0={},f0={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-file-text",__v0_r:"0,5361,5384"};function g0(t,n){return e.openBlock(),e.createElementBlock("svg",f0,[...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 y0=Ve(p0,[["render",g0]]),h0={},b0={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 x0(t,n){return e.openBlock(),e.createElementBlock("svg",b0,[...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 k0=Ve(h0,[["render",x0]]),w0={},_0={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 E0(t,n){return e.openBlock(),e.createElementBlock("svg",_0,[...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 C0=Ve(w0,[["render",E0]]),N0={},V0={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 B0(t,n){return e.openBlock(),e.createElementBlock("svg",V0,[...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 $0=Ve(N0,[["render",B0]]),S0={},v0={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 L0(t,n){return e.openBlock(),e.createElementBlock("svg",v0,[...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 T0=Ve(S0,[["render",L0]]),A0={},M0={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 D0(t,n){return e.openBlock(),e.createElementBlock("svg",M0,[...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 F0=Ve(A0,[["render",D0]]),z0={},I0={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 j0(t,n){return e.openBlock(),e.createElementBlock("svg",I0,[...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 P0=Ve(z0,[["render",j0]]),R0={},O0={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 U0(t,n){return e.openBlock(),e.createElementBlock("svg",O0,[...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 q0=Ve(R0,[["render",U0]]),H0={},W0={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 Y0(t,n){return e.openBlock(),e.createElementBlock("svg",W0,[...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 G0=Ve(H0,[["render",Y0]]),Z0={},K0={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function X0(t,n){return e.openBlock(),e.createElementBlock("svg",K0,[...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 Tr={IconText:Wy,IconNumber:Ky,IconDate:e0,IconDatetime:r0,IconRichtext:i0,IconBoolean:m0,IconFile:y0,IconImage:k0,IconArray:C0,IconSelect:$0,IconSlug:T0,IconDatalist:F0,IconReference:P0,IconReferenceList:q0,IconBadge:G0,IconCheck:Ve(Z0,[["render",X0]])},J0={key:0,class:"flex items-center justify-between mb-6"},Q0={class:"flex justify-end w-full"},eh={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},th={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},nh={class:"table-fixed w-full text-[13px]"},oh={class:"bg-gray-50 border-b border-gray-200"},rh={key:0},lh=["onDragstart","onDragover","onDrop"],ah={key:0,class:"flex w-fit items-center gap-2 text-left"},sh={class:"flex-1 min-w-0"},ih={class:"font-medium text-gray-900 truncate"},ch={class:"text-xs text-gray-500"},dh={key:1,class:"flex items-center justify-center"},uh={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"},mh={key:1,class:"text-gray-500 text-sm"},ph={key:3},fh={class:"px-6 py-4"},gh={key:1},yh=["colspan"],Lt=Ve(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(_){return _.charAt(0).toUpperCase()+_.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(_=>_.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=t,c=e.ref({}),p=e.ref(!1),f=e.ref({}),k=e.ref(null),l=e.useSlots(),y=_=>!!(_&&l[_]);n({openCreateDialog:()=>{p.value=!0}});const u=e.computed({get(){return Array.isArray(i.value)?i.value:i.value&&Array.isArray(i.value.columns)?i.value.columns:[]},set(_){Array.isArray(i.value)?i.value=_:i.value&&Array.isArray(i.value.columns)&&(i.value.columns=_)}}),m=e.computed(()=>{const _=s.columnsScheme.map(w=>w.key);return _.includes("name")&&_.includes("label")||_.includes("id")&&_.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...s.columnsScheme.filter(w=>!["name","id","label"].includes(w.key))]:s.columnsScheme});function b(){p.value=!1,f.value={},k.value=null}async function g(){const _=c.value.validate();if(_){ge.notify({type:"warning",title:"Validation",message:Object.entries(_).map(([w,E])=>`${w}: ${E}`).join(`
6
+ `)});return}if(k.value===null)u.value=[...u.value,{...f.value}];else{const w=[...u.value];w[k.value]={...f.value},u.value=w}b()}const d=e.ref(null),h=e.ref(null),x=_=>{d.value=_},N=_=>{h.value=_},$=_=>{if(d.value===null||d.value===_){d.value=null,h.value=null;return}const w=[...u.value],[E]=w.splice(d.value,1);w.splice(_,0,E),u.value=w,d.value=null,h.value=null};return(_,w)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",J0,[e.createElementVNode("div",Q0,[e.createElementVNode("button",{onClick:w[0]||(w[0]=E=>p.value=!0),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 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...w[4]||(w[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Додати поле ",-1)])])])])):e.createCommentVNode("",!0),e.createElementVNode("div",eh,[e.createElementVNode("div",th,[e.createElementVNode("table",nh,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,E=>(e.openBlock(),e.createElementBlock("col",{key:E.key,style:e.normalizeStyle(E.type==="main"?`width: ${t.mainColWidth}`:E.width?`width: ${E.width}`:"auto")},null,4))),128)),w[5]||(w[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",oh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,E=>(e.openBlock(),e.createElementBlock("th",{key:E.key,class:"px-6 py-4"},e.toDisplayString(E.label),1))),128)),w[6]||(w[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),u.value.length?(e.openBlock(),e.createElementBlock("tbody",rh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(E,B)=>(e.openBlock(),e.createElementBlock("tr",{key:E.id||E.name||B,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":d.value===B,"border-t-2 border-b-2 border-blue-500 bg-blue-50":h.value===B}]),draggable:"true",onDragstart:F=>x(B),onDragover:e.withModifiers(F=>N(B),["prevent"]),onDrop:F=>$(B)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,F=>(e.openBlock(),e.createElementBlock("td",{key:F.key,class:"px-6 py-4 align-middle text-center"},[F.type==="main"?(e.openBlock(),e.createElementBlock("div",ah,[w[7]||(w[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(Lr)(E.format==="yes/no"?"check":E.format||E.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(vr)(E.format==="yes/no"?"check":E.format||E.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(E.format==="yes/no"?"icon-check":e.unref(Tr)["Icon"+o(E.format||E.type)]||e.unref(Tr).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",sh,[e.withDirectives((e.openBlock(),e.createElementBlock("p",ih,[e.createTextVNode(e.toDisplayString(E.name||E.id),1)])),[[e.unref(Py)]]),e.createElementVNode("p",ch,e.toDisplayString(E.ua||E.label||E.name||E.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[F.slot&&y(F.slot)?e.renderSlot(_.$slots,F.slot,{key:0,row:E,column:F,value:E[F.key],rowIndex:B},void 0,!0):F.type==="color"?(e.openBlock(),e.createElementBlock("div",dh,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${E[F.key]}]`])},null,2)])):["format","type","meta"].includes(F.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[E[F.key]?(e.openBlock(),e.createElementBlock("span",uh,e.toDisplayString(E[F.key]),1)):(e.openBlock(),e.createElementBlock("span",mh,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",ph,e.toDisplayString(E[F.key]),1))],64))]))),128)),e.createElementVNode("td",fh,[e.createVNode(jy,{columns:u.value,"onUpdate:columns":w[1]||(w[1]=F=>u.value=F),data:E,index:B,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,lh))),128))])):(e.openBlock(),e.createElementBlock("tr",gh,[e.createElementVNode("td",{colspan:m.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,yh)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:p.value,"onUpdate:visible":w[3]||(w[3]=E=>p.value=E)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:b,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"}," Скасувати "),e.createElementVNode("button",{type:"button",onClick:g,class:"px-4 py-2 rounded bg-blue-600 text-white"}," Зберегти1 ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{ref_key:"form",ref:c,modelValue:f.value,"onUpdate:modelValue":w[2]||(w[2]=E=>f.value=E),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),hh={class:"p-4 text-[13px]"},bh={class:"grid grid-cols-2 gap-x-6 gap-y-2"},xh=["id","checked","onChange"],kh={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},wh={class:"font-medium text-gray-900 truncate"},_h={class:"text-xs text-gray-500"},Eh={key:0,class:"text-xs text-[#B2C9D6]"},Ch={class:"flex justify-end gap-2 p-4 border-t w-full"},Wt=e.defineComponent({__name:"import-fields-dialog",props:e.mergeModels({fields:{default:()=>[]},title:{},idPrefix:{default:"import"},confirmText:{default:"Імпортувати"},cancelText:{default:"Скасувати"}},{visible:{type:Boolean,default:!1},visibleModifiers:{},selection:{default:[]},selectionModifiers:{}}),emits:e.mergeModels(["confirm","cancel"],["update:visible","update:selection"]),setup(t,{emit:n}){const o=e.useModel(t,"visible"),r=e.useModel(t,"selection"),a=t,i=n,s=e.defineAsyncComponent(()=>import("@opengis/core").then(x=>x.VsModal)),c=e.computed(()=>Array.isArray(a.fields)?a.fields.filter(Boolean):[]),p=x=>(x==null?void 0:x.name)??(x==null?void 0:x.id)??(x==null?void 0:x.key)??(x==null?void 0:x.code)??(x==null?void 0:x.field)??(x==null?void 0:x.value)??"",f=x=>String(p(x)??"").trim(),k=x=>(x==null?void 0:x.title)??(x==null?void 0:x.label)??f(x),l=x=>String((x==null?void 0:x.type)??"").trim(),y=e.computed(()=>new Set(r.value.map(x=>String(x??"").trim()))),u=x=>y.value.has(f(x)),m=x=>{const N=f(x);if(!N)return;const $=new Set(y.value);$.has(N)?$.delete(N):$.add(N),r.value=Array.from($)},b=e.computed(()=>a.confirmText||"Імпортувати"),g=e.computed(()=>a.cancelText||"Скасувати"),d=()=>{o.value=!1,i("cancel")},h=()=>{i("confirm"),o.value=!1};return(x,N)=>(e.openBlock(),e.createBlock(e.unref(s),{visible:o.value,"onUpdate:visible":N[0]||(N[0]=$=>o.value=$),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Ch,[e.createElementVNode("button",{onClick:d,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(g.value),1),e.createElementVNode("button",{onClick:h,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(b.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",hh,[e.createElementVNode("div",bh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,$=>(e.openBlock(),e.createElementBlock("label",{key:f($),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${f($)}`,checked:u($),onChange:_=>m($)},null,40,xh),e.createElementVNode("div",kh,[e.unref(Lr)($.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(vr)($.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${$.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",wh,e.toDisplayString(f($)),1),e.createElementVNode("p",_h,e.toDisplayString(k($)),1),l($)?(e.openBlock(),e.createElementBlock("p",Eh,e.toDisplayString(l($)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function Yt(t){return t==null?"":String(t).trim()}function Tt(t){return Yt((t==null?void 0:t.name)??(t==null?void 0:t.id)??(t==null?void 0:t.key)??(t==null?void 0:t.code)??(t==null?void 0:t.field)??(t==null?void 0:t.value)??"")}function Gt(t,n,o){const r=Array.isArray(t)?[...t]:[],a=Array.isArray(n)?n:[],{selectedKeys:i,resolveKey:s}=o,c=new Set;for(const l of i){const y=Yt(l);y&&c.add(y)}if(c.size===0)return[];const p=l=>Yt(s(l)),f=[],k=new Set;for(const l of r){const y=p(l);!y||!c.has(y)||(f.push(l),k.add(y))}for(const l of a){const y=p(l);!y||k.has(y)||!c.has(y)||(f.push(l),k.add(y))}return f}const Nh={class:"vs-form"},Vh={class:"vs-form__body auto-rows-max container"},Bh={class:"flex flex-wrap"},$h={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},Sh={class:"h-fit w-full flex flex-wrap"},vh={class:"w-full"},Lh=e.defineComponent({__name:"list-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,a=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=h=>Tt(h||{}),s=e.defineAsyncComponent(()=>import("@opengis/form")),c=e.ref(),p=e.ref(!1),f=e.ref([]),k=()=>{const h=y.value.map(x=>i(x)).filter(x=>x.length>0);f.value=[...h],p.value=!0},l=e.computed(()=>{var h,x;return((h=n.value)==null?void 0:h.token)||((x=n.value)==null?void 0:x.id)||"register-form"}),y=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.columns)||(n.value.columns=[]),n.value.columns),set:h=>{n.value||(n.value={}),n.value.columns=Array.isArray(h)?h:[]}}),u=e.computed({get:()=>n.value||{},set:h=>{var N;const x=Array.isArray((N=n.value)==null?void 0:N.columns)?n.value.columns:[];n.value={...n.value,...h,columns:x}}});e.watch(()=>c.value,h=>{o.value=h||null},{immediate:!0}),e.watch(p,h=>{h||(f.value=[])});const m=()=>{const h=new Set(f.value.map($=>Yt($)).filter($=>$.length>0)),x=Array.isArray(y.value)?[...y.value]:[],N=a.value.filter($=>h.has(i($))).map($=>{const _=i($),w=$.title??$.label??_;return{...$,name:_,label:w,type:$.type||"text",meta:$.meta??"features"}});y.value=Gt(x,N,{selectedKeys:f.value,resolveKey:i}),p.value=!1,f.value=[]},b={table_name:{type:"select",label:"Таблиця",required:!0,data:"pg.table_name",placeholder:"Таблиця в БД",validators:["required"],col:6},name:{type:"text",label:"Назва",required:!0,placeholder:"Назва",validators:["required"],col:6},query:{type:"text",label:"Умова",placeholder:"Умова",col:6},order:{type:"text",label:"Сортування",placeholder:"Сортування",col:6},description:{type:"textarea",label:"Опис",placeholder:"Опис",col:12}},g=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],d={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},is_export:{type:"switcher",label:"Експорт",info:"Чи експортувати дані колонки?",view:"switcher"},meta:{type:"combobox",label:"Мета",mode:"combo",options:[{text:"Title",id:"title"},{text:"Features",id:"features"},{text:"Status",id:"status"},{text:"Tags",id:"tags"},{text:"Category",id:"category"},{text:"Image",id:"image"}]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(h,x)=>(e.openBlock(),e.createElementBlock("div",Nh,[e.createElementVNode("div",Vh,[e.createElementVNode("div",Bh,[e.createElementVNode("div",$h,[(e.openBlock(),e.createBlock(e.unref(s),{ref_key:"formEl",ref:c,key:l.value,schema:b,modelValue:u.value,"onUpdate:modelValue":x[0]||(x[0]=N=>u.value=N)},null,8,["modelValue"]))]),e.createElementVNode("div",Sh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:k,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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...x[4]||(x[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",vh,[e.createVNode(Lt,{modelValue:y.value,"onUpdate:modelValue":x[1]||(x[1]=N=>y.value=N),"columns-scheme":g,"form-scheme":d,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:p.value,"onUpdate:visible":x[2]||(x[2]=N=>p.value=N),selection:f.value,"onUpdate:selection":x[3]||(x[3]=N=>f.value=N),fields:a.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:m},null,8,["visible","selection","fields"])]))}}),Th={class:"vs-form"},Ah={class:"vs-form__body auto-rows-max container"},Mh={class:"flex flex-wrap"},Dh={class:"h-fit w-full flex flex-wrap"},Fh={class:"w-full"},zh=e.defineComponent({__name:"filter-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,a=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=u=>Tt(u||{}),s=e.ref(!1),c=e.ref([]),p=()=>{const u=f.value.map(m=>i(m)).filter(m=>m.length>0);c.value=[...u],s.value=!0},f=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:u=>{n.value||(n.value={}),n.value.filters=Array.isArray(u)?u:[]}});e.watch(s,u=>{u||(c.value=[])});const k=()=>{const u=new Set(c.value.map(g=>Yt(g)).filter(g=>g.length>0)),m=Array.isArray(f.value)?[...f.value]:[],b=a.value.filter(g=>u.has(i(g))).map(g=>({name:i(g),label:g.title??g.label??i(g),type:g.type||"text"}));f.value=Gt(m,b,{selectedKeys:c.value,resolveKey:i}),s.value=!1,c.value=[]},l=[{key:"id",label:"Name"},{key:"label",label:"Назва"},{key:"type",label:"Тип"}],y={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},type:{type:"radio",label:"Тип",validators:["required"],position:"horizontal",options:[{text:"Check",id:"Check"},{text:"Range",id:"Range"},{text:"Date",id:"Date"},{text:"Text",id:"Text"},{text:"Select",id:"Select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["Select","Autocomplete","Check"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(u,m)=>(e.openBlock(),e.createElementBlock("div",Th,[e.createElementVNode("div",Ah,[e.createElementVNode("div",Mh,[m[4]||(m[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте фільтри реєстру. Оберіть поля для імпорту або відредагуйте властивості вручну. ")],-1)),e.createElementVNode("div",Dh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:p,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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...m[3]||(m[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",Fh,[e.createVNode(Lt,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=b=>f.value=b),"columns-scheme":l,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":m[1]||(m[1]=b=>s.value=b),selection:c.value,"onUpdate:selection":m[2]||(m[2]=b=>c.value=b),fields:a.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:k},null,8,["visible","selection","fields"])]))}}),Ih={class:"vs-form"},jh={class:"vs-form__body auto-rows-max container"},Ph={class:"flex flex-wrap"},Rh={class:"h-fit w-full flex flex-wrap"},Oh={class:"w-full"},Uh=e.defineComponent({__name:"card-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,a=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=u=>Tt(u||{}),s=e.ref(!1),c=e.ref([]),p=()=>{const u=f.value.map(m=>i(m)).filter(m=>m.length>0);c.value=[...u],s.value=!0},f=e.computed({get:()=>n.value.card,set:u=>{n.value||(n.value={}),n.value.card=Array.isArray(u)?u:[]}});e.watch(s,u=>{var m;if(u){const b=((m=f.value)==null?void 0:m.map(g=>g.name))||[];c.value=[...b]}});const k=()=>{const u=new Set(c.value.map(g=>Yt(g)).filter(g=>g.length>0)),m=Array.isArray(f.value)?[...f.value]:[],b=a.value.filter(g=>u.has(i(g))).map(g=>{const d=i(g),h=g.title??g.label??d;return{...g,name:d,label:h,format:g.format||g.type||"text",meta:g.meta||"title"}});f.value=Gt(m,b,{selectedKeys:c.value,resolveKey:i}),s.value=!1,c.value=[]},l=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"format",label:"Формат",type:"text"}],y={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(u,m)=>(e.openBlock(),e.createElementBlock("div",Ih,[e.createElementVNode("div",jh,[e.createElementVNode("div",Ph,[m[4]||(m[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте відображення картки. Оберіть потрібні поля та відредагуйте їхні властивості. ")],-1)),e.createElementVNode("div",Rh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:p,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 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...m[3]||(m[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",Oh,[e.createVNode(Lt,{modelValue:f.value,"onUpdate:modelValue":m[0]||(m[0]=b=>f.value=b),"columns-scheme":l,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":m[1]||(m[1]=b=>s.value=b),selection:c.value,"onUpdate:selection":m[2]||(m[2]=b=>c.value=b),fields:a.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:k},null,8,["visible","selection","fields"])]))}}),Ar={template1:Nr,template2:Vr,template3:Br,template4:$r,template5:Sr},qh={class:"space-y-4"},Hh={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},Wh={class:"text-lg font-semibold mb-4"},Yh={class:"bg-white"},Gh={key:1,class:"text-gray-400 text-center py-12"},Zh={key:2,class:"text-gray-400 text-center py-12"},Kh=e.defineComponent({__name:"preview-tab",props:e.mergeModels({hideDetailsButton:{type:Boolean,default:!1}},{data:{default:{}},dataModifiers:{}}),emits:["update:data"],setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.useModel(t,"data"),r=[{text:"template1",id:"template1"},{text:"template2",id:"template2"},{text:"template3",id:"template3"},{text:"template4",id:"template4"},{text:"template5",id:"template5"}],a={view:{type:"radio",label:"Вигляд",position:"horizontal",required:!0,options:r,col:12}},i=e.computed(()=>{var k;return Array.isArray((k=o.value)==null?void 0:k.columns)?o.value.columns:[]}),s=e.computed(()=>{var k;return((k=o.value)==null?void 0:k.view)||"template1"}),c=e.computed(()=>Ar[s.value]||Ar.template1),p=e.computed(()=>{var y;const k=(y=o.value)==null?void 0:y.view;if(!k)return"template1";const l=r.find(u=>u.id===k);return(l==null?void 0:l.text)||k}),f=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(l=>{var y,u;return{...l,service_id:(y=o.value)==null?void 0:y.service_id,is_map:(u=o.value)==null?void 0:u.is_map}}));return(k,l)=>(e.openBlock(),e.createElementBlock("div",qh,[e.createElementVNode("div",Hh,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:a,modelValue:o.value,"onUpdate:modelValue":l[0]||(l[0]=y=>o.value=y)},null,8,["modelValue"]))]),e.createElementVNode("h2",Wh," Превʼю таблиці ("+e.toDisplayString(p.value)+") ",1),e.createElementVNode("div",Yh,[c.value&&f.value.length&&i.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value),{items:f.value,columns:i.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:s.value},null,8,["items","columns","hide-details-button"])):f.value.length?(e.openBlock(),e.createElementBlock("div",Zh," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",Gh," Немає даних для превʼю "))])]))}}),Xh={class:"w-full mb-6"},Jh={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},Qh=["onClick"],Mr=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,r=a=>{o("update:activeTab",a)};return(a,i)=>(e.openBlock(),e.createElementBlock("div",Xh,[e.createElementVNode("div",Jh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,s=>(e.openBlock(),e.createElementBlock("button",{key:s.id,onClick:c=>r(s.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",s.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(s.name),11,Qh))),128))])]))}}),eb={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},tb={class:"mx-1"},nb={class:"text-gray-900 font-semibold"},ob={key:0,class:"text-center py-12 mt-6 px-[24px]"},rb={key:1,class:"px-[24px] overflow-y-auto"},lb={class:"space-y-6"},ab=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=Ie.useRoute(),o=Ie.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),a=e.computed(()=>{var d;return((d=o.resolve(r.value).meta)==null?void 0:d.title)??""}),i=e.computed(()=>{var d;return((d=y.value)==null?void 0:d.name)||"Налаштування реєстру"}),s=e.ref("list"),c=e.ref(""),p=e.ref(!0),f=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],k={list:Lh,filters:zh,card:Uh,preview:Kh},l=f.map(d=>d.id),y=e.ref({columns:[],filters:[],card:[],tableData:[]}),u=e.ref([]),m=async()=>{var h;if(!((h=y.value)==null?void 0:h.token)){ge.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const x=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y.value)});if(!x.ok)throw new Error(`Failed to save content: ${x.status}`);ge.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(x){ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(x)}},b=async d=>{try{const x=await(await fetch(`/api/gis-registry/${d}`)).json(),N=Array.isArray(x==null?void 0:x.rows)?x.rows:[];y.value.tableData=N.slice(0,3)}catch(h){console.error("Помилка завантаження превʼю:",h)}},g=async()=>{var d,h;try{p.value=!0;const N=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),$=((d=N==null?void 0:N.rows)==null?void 0:d[0])||{};c.value=$.register_key||"",y.value={...$,columns:Array.isArray($.columns)?$.columns:[],filters:Array.isArray($.filters)?$.filters:[],card:Array.isArray($.card)?$.card:[],tableData:Array.isArray($.tableData)?$.tableData:[]},(h=N==null?void 0:N.tokens)!=null&&h.edit&&(y.value.token=N.tokens.edit),u.value=Array.isArray(N==null?void 0:N.fields)?N.fields:[]}catch(x){console.error("Помилка завантаження даних:",x)}finally{p.value=!1}};return e.onMounted(async()=>{const d=n.query.tab;typeof d=="string"&&l.includes(d)&&(s.value=d),await g(),c.value&&await b(c.value)}),e.watch(s,d=>{n.query.tab!==d&&o.replace({query:{...n.query,tab:d}})}),e.watch(()=>n.query.tab,d=>{typeof d=="string"&&l.includes(d)&&s.value!==d&&(s.value=d)}),e.watch(()=>n.params.id,async(d,h)=>{!d||d===h||(await g(),c.value&&await b(c.value))}),(d,h)=>{const x=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",eb,[e.createVNode(Ht,{variant:"form",title:i.value},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(x,{to:r.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",tb,[e.createVNode(e.unref(me.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",nb,e.toDisplayString(i.value),1)]),description:e.withCtx(()=>[...h[3]||(h[3]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:h[0]||(h[0]=N=>e.unref(o).back()),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium border h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700"}," Зберегти ")]),_:1},8,["title"]),p.value?(e.openBlock(),e.createElementBlock("div",ob,[...h[4]||(h[4]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",rb,[e.createVNode(Mr,{tabs:f,activeTab:s.value,"onUpdate:activeTab":h[1]||(h[1]=N=>s.value=N)},null,8,["activeTab"]),e.createElementVNode("div",lb,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(k[s.value]),{data:y.value,"onUpdate:data":h[2]||(h[2]=N=>y.value=N),fields:u.value,"hide-details-button":t.hideDetailsButton,key:s.value},null,40,["data","fields","hide-details-button"]))])]))])}}})},Symbol.toStringTag,{value:"Module"}));/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */function Dr(t){return typeof t>"u"||t===null}function sb(t){return typeof t=="object"&&t!==null}function ib(t){return Array.isArray(t)?t:Dr(t)?[]:[t]}function cb(t,n){var o,r,a,i;if(n)for(i=Object.keys(n),o=0,r=i.length;o<r;o+=1)a=i[o],t[a]=n[a];return t}function db(t,n){var o="",r;for(r=0;r<n;r+=1)o+=t;return o}function ub(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var mb=Dr,pb=sb,fb=ib,gb=db,yb=ub,hb=cb,ct={isNothing:mb,isObject:pb,toArray:fb,repeat:gb,isNegativeZero:yb,extend:hb};function Fr(t,n){var o="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(o+='in "'+t.mark.name+'" '),o+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!n&&t.mark.snippet&&(o+=`
7
7
 
8
8
  `+t.mark.snippet),r+" "+o):r}function bn(t,n){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=n,this.message=Fr(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}bn.prototype=Object.create(Error.prototype),bn.prototype.constructor=bn,bn.prototype.toString=function(n){return this.name+": "+Fr(this,n)};var yt=bn;function Vo(t,n,o,r,a){var i="",s="",c=Math.floor(a/2)-1;return r-n>c&&(i=" ... ",n=r-c+i.length),o-r>c&&(s=" ...",o=r+c-s.length),{str:i+t.slice(n,o).replace(/\t/g,"→")+s,pos:r-n+i.length}}function Bo(t,n){return ct.repeat(" ",n-t.length)+t}function bb(t,n){if(n=Object.create(n||null),!t.buffer)return null;n.maxLength||(n.maxLength=79),typeof n.indent!="number"&&(n.indent=1),typeof n.linesBefore!="number"&&(n.linesBefore=3),typeof n.linesAfter!="number"&&(n.linesAfter=2);for(var o=/\r?\n|\r|\0/g,r=[0],a=[],i,s=-1;i=o.exec(t.buffer);)a.push(i.index),r.push(i.index+i[0].length),t.position<=i.index&&s<0&&(s=r.length-2);s<0&&(s=r.length-1);var c="",p,f,k=Math.min(t.line+n.linesAfter,a.length).toString().length,l=n.maxLength-(n.indent+k+3);for(p=1;p<=n.linesBefore&&!(s-p<0);p++)f=Vo(t.buffer,r[s-p],a[s-p],t.position-(r[s]-r[s-p]),l),c=ct.repeat(" ",n.indent)+Bo((t.line-p+1).toString(),k)+" | "+f.str+`
9
9
  `+c;for(f=Vo(t.buffer,r[s],a[s],t.position,l),c+=ct.repeat(" ",n.indent)+Bo((t.line+1).toString(),k)+" | "+f.str+`
@@ -11,15 +11,15 @@
11
11
  `,p=1;p<=n.linesAfter&&!(s+p>=a.length);p++)f=Vo(t.buffer,r[s+p],a[s+p],t.position-(r[s]-r[s+p]),l),c+=ct.repeat(" ",n.indent)+Bo((t.line+p+1).toString(),k)+" | "+f.str+`
12
12
  `;return c.replace(/\n$/,"")}var xb=bb,kb=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],wb=["scalar","sequence","mapping"];function _b(t){var n={};return t!==null&&Object.keys(t).forEach(function(o){t[o].forEach(function(r){n[String(r)]=o})}),n}function Eb(t,n){if(n=n||{},Object.keys(n).forEach(function(o){if(kb.indexOf(o)===-1)throw new yt('Unknown option "'+o+'" is met in definition of "'+t+'" YAML type.')}),this.options=n,this.tag=t,this.kind=n.kind||null,this.resolve=n.resolve||function(){return!0},this.construct=n.construct||function(o){return o},this.instanceOf=n.instanceOf||null,this.predicate=n.predicate||null,this.represent=n.represent||null,this.representName=n.representName||null,this.defaultStyle=n.defaultStyle||null,this.multi=n.multi||!1,this.styleAliases=_b(n.styleAliases||null),wb.indexOf(this.kind)===-1)throw new yt('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var mt=Eb;function zr(t,n){var o=[];return t[n].forEach(function(r){var a=o.length;o.forEach(function(i,s){i.tag===r.tag&&i.kind===r.kind&&i.multi===r.multi&&(a=s)}),o[a]=r}),o}function Cb(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,o;function r(a){a.multi?(t.multi[a.kind].push(a),t.multi.fallback.push(a)):t[a.kind][a.tag]=t.fallback[a.tag]=a}for(n=0,o=arguments.length;n<o;n+=1)arguments[n].forEach(r);return t}function $o(t){return this.extend(t)}$o.prototype.extend=function(n){var o=[],r=[];if(n instanceof mt)r.push(n);else if(Array.isArray(n))r=r.concat(n);else if(n&&(Array.isArray(n.implicit)||Array.isArray(n.explicit)))n.implicit&&(o=o.concat(n.implicit)),n.explicit&&(r=r.concat(n.explicit));else throw new yt("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");o.forEach(function(i){if(!(i instanceof mt))throw new yt("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(i.loadKind&&i.loadKind!=="scalar")throw new yt("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(i.multi)throw new yt("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),r.forEach(function(i){if(!(i instanceof mt))throw new yt("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var a=Object.create($o.prototype);return a.implicit=(this.implicit||[]).concat(o),a.explicit=(this.explicit||[]).concat(r),a.compiledImplicit=zr(a,"implicit"),a.compiledExplicit=zr(a,"explicit"),a.compiledTypeMap=Cb(a.compiledImplicit,a.compiledExplicit),a};var Ir=$o,jr=new mt("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}}),Pr=new mt("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}}),Rr=new mt("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}}),Or=new Ir({explicit:[jr,Pr,Rr]});function Nb(t){if(t===null)return!0;var n=t.length;return n===1&&t==="~"||n===4&&(t==="null"||t==="Null"||t==="NULL")}function Vb(){return null}function Bb(t){return t===null}var Ur=new mt("tag:yaml.org,2002:null",{kind:"scalar",resolve:Nb,construct:Vb,predicate:Bb,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function $b(t){if(t===null)return!1;var n=t.length;return n===4&&(t==="true"||t==="True"||t==="TRUE")||n===5&&(t==="false"||t==="False"||t==="FALSE")}function Sb(t){return t==="true"||t==="True"||t==="TRUE"}function vb(t){return Object.prototype.toString.call(t)==="[object Boolean]"}var qr=new mt("tag:yaml.org,2002:bool",{kind:"scalar",resolve:$b,construct:Sb,predicate:vb,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function Lb(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function Tb(t){return 48<=t&&t<=55}function Ab(t){return 48<=t&&t<=57}function Mb(t){if(t===null)return!1;var n=t.length,o=0,r=!1,a;if(!n)return!1;if(a=t[o],(a==="-"||a==="+")&&(a=t[++o]),a==="0"){if(o+1===n)return!0;if(a=t[++o],a==="b"){for(o++;o<n;o++)if(a=t[o],a!=="_"){if(a!=="0"&&a!=="1")return!1;r=!0}return r&&a!=="_"}if(a==="x"){for(o++;o<n;o++)if(a=t[o],a!=="_"){if(!Lb(t.charCodeAt(o)))return!1;r=!0}return r&&a!=="_"}if(a==="o"){for(o++;o<n;o++)if(a=t[o],a!=="_"){if(!Tb(t.charCodeAt(o)))return!1;r=!0}return r&&a!=="_"}}if(a==="_")return!1;for(;o<n;o++)if(a=t[o],a!=="_"){if(!Ab(t.charCodeAt(o)))return!1;r=!0}return!(!r||a==="_")}function Db(t){var n=t,o=1,r;if(n.indexOf("_")!==-1&&(n=n.replace(/_/g,"")),r=n[0],(r==="-"||r==="+")&&(r==="-"&&(o=-1),n=n.slice(1),r=n[0]),n==="0")return 0;if(r==="0"){if(n[1]==="b")return o*parseInt(n.slice(2),2);if(n[1]==="x")return o*parseInt(n.slice(2),16);if(n[1]==="o")return o*parseInt(n.slice(2),8)}return o*parseInt(n,10)}function Fb(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!ct.isNegativeZero(t)}var Hr=new mt("tag:yaml.org,2002:int",{kind:"scalar",resolve:Mb,construct:Db,predicate:Fb,represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),zb=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Ib(t){return!(t===null||!zb.test(t)||t[t.length-1]==="_")}function jb(t){var n,o;return n=t.replace(/_/g,"").toLowerCase(),o=n[0]==="-"?-1:1,"+-".indexOf(n[0])>=0&&(n=n.slice(1)),n===".inf"?o===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:n===".nan"?NaN:o*parseFloat(n,10)}var Pb=/^[-+]?[0-9]+e/;function Rb(t,n){var o;if(isNaN(t))switch(n){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(n){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(n){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ct.isNegativeZero(t))return"-0.0";return o=t.toString(10),Pb.test(o)?o.replace("e",".e"):o}function Ob(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||ct.isNegativeZero(t))}var Wr=new mt("tag:yaml.org,2002:float",{kind:"scalar",resolve:Ib,construct:jb,predicate:Ob,represent:Rb,defaultStyle:"lowercase"}),Yr=Or.extend({implicit:[Ur,qr,Hr,Wr]}),Gr=Yr,Zr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Kr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function Ub(t){return t===null?!1:Zr.exec(t)!==null||Kr.exec(t)!==null}function qb(t){var n,o,r,a,i,s,c,p=0,f=null,k,l,y;if(n=Zr.exec(t),n===null&&(n=Kr.exec(t)),n===null)throw new Error("Date resolve error");if(o=+n[1],r=+n[2]-1,a=+n[3],!n[4])return new Date(Date.UTC(o,r,a));if(i=+n[4],s=+n[5],c=+n[6],n[7]){for(p=n[7].slice(0,3);p.length<3;)p+="0";p=+p}return n[9]&&(k=+n[10],l=+(n[11]||0),f=(k*60+l)*6e4,n[9]==="-"&&(f=-f)),y=new Date(Date.UTC(o,r,a,i,s,c,p)),f&&y.setTime(y.getTime()-f),y}function Hb(t){return t.toISOString()}var Xr=new mt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:Ub,construct:qb,instanceOf:Date,represent:Hb});function Wb(t){return t==="<<"||t===null}var Jr=new mt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Wb}),So=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
13
13
  \r`;function Yb(t){if(t===null)return!1;var n,o,r=0,a=t.length,i=So;for(o=0;o<a;o++)if(n=i.indexOf(t.charAt(o)),!(n>64)){if(n<0)return!1;r+=6}return r%8===0}function Gb(t){var n,o,r=t.replace(/[\r\n=]/g,""),a=r.length,i=So,s=0,c=[];for(n=0;n<a;n++)n%4===0&&n&&(c.push(s>>16&255),c.push(s>>8&255),c.push(s&255)),s=s<<6|i.indexOf(r.charAt(n));return o=a%4*6,o===0?(c.push(s>>16&255),c.push(s>>8&255),c.push(s&255)):o===18?(c.push(s>>10&255),c.push(s>>2&255)):o===12&&c.push(s>>4&255),new Uint8Array(c)}function Zb(t){var n="",o=0,r,a,i=t.length,s=So;for(r=0;r<i;r++)r%3===0&&r&&(n+=s[o>>18&63],n+=s[o>>12&63],n+=s[o>>6&63],n+=s[o&63]),o=(o<<8)+t[r];return a=i%3,a===0?(n+=s[o>>18&63],n+=s[o>>12&63],n+=s[o>>6&63],n+=s[o&63]):a===2?(n+=s[o>>10&63],n+=s[o>>4&63],n+=s[o<<2&63],n+=s[64]):a===1&&(n+=s[o>>2&63],n+=s[o<<4&63],n+=s[64],n+=s[64]),n}function Kb(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var Qr=new mt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Yb,construct:Gb,predicate:Kb,represent:Zb}),Xb=Object.prototype.hasOwnProperty,Jb=Object.prototype.toString;function Qb(t){if(t===null)return!0;var n=[],o,r,a,i,s,c=t;for(o=0,r=c.length;o<r;o+=1){if(a=c[o],s=!1,Jb.call(a)!=="[object Object]")return!1;for(i in a)if(Xb.call(a,i))if(!s)s=!0;else return!1;if(!s)return!1;if(n.indexOf(i)===-1)n.push(i);else return!1}return!0}function ex(t){return t!==null?t:[]}var el=new mt("tag:yaml.org,2002:omap",{kind:"sequence",resolve:Qb,construct:ex}),tx=Object.prototype.toString;function nx(t){if(t===null)return!0;var n,o,r,a,i,s=t;for(i=new Array(s.length),n=0,o=s.length;n<o;n+=1){if(r=s[n],tx.call(r)!=="[object Object]"||(a=Object.keys(r),a.length!==1))return!1;i[n]=[a[0],r[a[0]]]}return!0}function ox(t){if(t===null)return[];var n,o,r,a,i,s=t;for(i=new Array(s.length),n=0,o=s.length;n<o;n+=1)r=s[n],a=Object.keys(r),i[n]=[a[0],r[a[0]]];return i}var tl=new mt("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:nx,construct:ox}),rx=Object.prototype.hasOwnProperty;function lx(t){if(t===null)return!0;var n,o=t;for(n in o)if(rx.call(o,n)&&o[n]!==null)return!1;return!0}function ax(t){return t!==null?t:{}}var nl=new mt("tag:yaml.org,2002:set",{kind:"mapping",resolve:lx,construct:ax}),vo=Gr.extend({implicit:[Xr,Jr],explicit:[Qr,el,tl,nl]}),At=Object.prototype.hasOwnProperty,Wn=1,ol=2,rl=3,Yn=4,Lo=1,sx=2,ll=3,ix=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,cx=/[\x85\u2028\u2029]/,dx=/[,\[\]\{\}]/,al=/^(?:!|!!|![a-z\-]+!)$/i,sl=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function il(t){return Object.prototype.toString.call(t)}function _t(t){return t===10||t===13}function jt(t){return t===9||t===32}function ht(t){return t===9||t===32||t===10||t===13}function Zt(t){return t===44||t===91||t===93||t===123||t===125}function ux(t){var n;return 48<=t&&t<=57?t-48:(n=t|32,97<=n&&n<=102?n-97+10:-1)}function mx(t){return t===120?2:t===117?4:t===85?8:0}function px(t){return 48<=t&&t<=57?t-48:-1}function cl(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?`
14
- `:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"…":t===95?" ":t===76?"\u2028":t===80?"\u2029":""}function fx(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function dl(t,n,o){n==="__proto__"?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):t[n]=o}for(var ul=new Array(256),ml=new Array(256),Kt=0;Kt<256;Kt++)ul[Kt]=cl(Kt)?1:0,ml[Kt]=cl(Kt);function gx(t,n){this.input=t,this.filename=n.filename||null,this.schema=n.schema||vo,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function pl(t,n){var o={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return o.snippet=xb(o),new yt(n,o)}function _e(t,n){throw pl(t,n)}function Gn(t,n){t.onWarning&&t.onWarning.call(null,pl(t,n))}var fl={YAML:function(n,o,r){var a,i,s;n.version!==null&&_e(n,"duplication of %YAML directive"),r.length!==1&&_e(n,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),a===null&&_e(n,"ill-formed argument of the YAML directive"),i=parseInt(a[1],10),s=parseInt(a[2],10),i!==1&&_e(n,"unacceptable YAML version of the document"),n.version=r[0],n.checkLineBreaks=s<2,s!==1&&s!==2&&Gn(n,"unsupported YAML version of the document")},TAG:function(n,o,r){var a,i;r.length!==2&&_e(n,"TAG directive accepts exactly two arguments"),a=r[0],i=r[1],al.test(a)||_e(n,"ill-formed tag handle (first argument) of the TAG directive"),At.call(n.tagMap,a)&&_e(n,'there is a previously declared suffix for "'+a+'" tag handle'),sl.test(i)||_e(n,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch{_e(n,"tag prefix is malformed: "+i)}n.tagMap[a]=i}};function Mt(t,n,o,r){var a,i,s,c;if(n<o){if(c=t.input.slice(n,o),r)for(a=0,i=c.length;a<i;a+=1)s=c.charCodeAt(a),s===9||32<=s&&s<=1114111||_e(t,"expected valid JSON character");else ix.test(c)&&_e(t,"the stream contains non-printable characters");t.result+=c}}function gl(t,n,o,r){var a,i,s,c;for(ct.isObject(o)||_e(t,"cannot merge mappings; the provided source object is unacceptable"),a=Object.keys(o),s=0,c=a.length;s<c;s+=1)i=a[s],At.call(n,i)||(dl(n,i,o[i]),r[i]=!0)}function Xt(t,n,o,r,a,i,s,c,p){var f,k;if(Array.isArray(a))for(a=Array.prototype.slice.call(a),f=0,k=a.length;f<k;f+=1)Array.isArray(a[f])&&_e(t,"nested arrays are not supported inside keys"),typeof a=="object"&&il(a[f])==="[object Object]"&&(a[f]="[object Object]");if(typeof a=="object"&&il(a)==="[object Object]"&&(a="[object Object]"),a=String(a),n===null&&(n={}),r==="tag:yaml.org,2002:merge")if(Array.isArray(i))for(f=0,k=i.length;f<k;f+=1)gl(t,n,i[f],o);else gl(t,n,i,o);else!t.json&&!At.call(o,a)&&At.call(n,a)&&(t.line=s||t.line,t.lineStart=c||t.lineStart,t.position=p||t.position,_e(t,"duplicated mapping key")),dl(n,a,i),delete o[a];return n}function To(t){var n;n=t.input.charCodeAt(t.position),n===10?t.position++:n===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):_e(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function lt(t,n,o){for(var r=0,a=t.input.charCodeAt(t.position);a!==0;){for(;jt(a);)a===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),a=t.input.charCodeAt(++t.position);if(n&&a===35)do a=t.input.charCodeAt(++t.position);while(a!==10&&a!==13&&a!==0);if(_t(a))for(To(t),a=t.input.charCodeAt(t.position),r++,t.lineIndent=0;a===32;)t.lineIndent++,a=t.input.charCodeAt(++t.position);else break}return o!==-1&&r!==0&&t.lineIndent<o&&Gn(t,"deficient indentation"),r}function Zn(t){var n=t.position,o;return o=t.input.charCodeAt(n),!!((o===45||o===46)&&o===t.input.charCodeAt(n+1)&&o===t.input.charCodeAt(n+2)&&(n+=3,o=t.input.charCodeAt(n),o===0||ht(o)))}function Ao(t,n){n===1?t.result+=" ":n>1&&(t.result+=ct.repeat(`
15
- `,n-1))}function yx(t,n,o){var r,a,i,s,c,p,f,k,l=t.kind,y=t.result,u;if(u=t.input.charCodeAt(t.position),ht(u)||Zt(u)||u===35||u===38||u===42||u===33||u===124||u===62||u===39||u===34||u===37||u===64||u===96||(u===63||u===45)&&(a=t.input.charCodeAt(t.position+1),ht(a)||o&&Zt(a)))return!1;for(t.kind="scalar",t.result="",i=s=t.position,c=!1;u!==0;){if(u===58){if(a=t.input.charCodeAt(t.position+1),ht(a)||o&&Zt(a))break}else if(u===35){if(r=t.input.charCodeAt(t.position-1),ht(r))break}else{if(t.position===t.lineStart&&Zn(t)||o&&Zt(u))break;if(_t(u))if(p=t.line,f=t.lineStart,k=t.lineIndent,lt(t,!1,-1),t.lineIndent>=n){c=!0,u=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=p,t.lineStart=f,t.lineIndent=k;break}}c&&(Mt(t,i,s,!1),Ao(t,t.line-p),i=s=t.position,c=!1),jt(u)||(s=t.position+1),u=t.input.charCodeAt(++t.position)}return Mt(t,i,s,!1),t.result?!0:(t.kind=l,t.result=y,!1)}function hx(t,n){var o,r,a;if(o=t.input.charCodeAt(t.position),o!==39)return!1;for(t.kind="scalar",t.result="",t.position++,r=a=t.position;(o=t.input.charCodeAt(t.position))!==0;)if(o===39)if(Mt(t,r,t.position,!0),o=t.input.charCodeAt(++t.position),o===39)r=t.position,t.position++,a=t.position;else return!0;else _t(o)?(Mt(t,r,a,!0),Ao(t,lt(t,!1,n)),r=a=t.position):t.position===t.lineStart&&Zn(t)?_e(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);_e(t,"unexpected end of the stream within a single quoted scalar")}function bx(t,n){var o,r,a,i,s,c;if(c=t.input.charCodeAt(t.position),c!==34)return!1;for(t.kind="scalar",t.result="",t.position++,o=r=t.position;(c=t.input.charCodeAt(t.position))!==0;){if(c===34)return Mt(t,o,t.position,!0),t.position++,!0;if(c===92){if(Mt(t,o,t.position,!0),c=t.input.charCodeAt(++t.position),_t(c))lt(t,!1,n);else if(c<256&&ul[c])t.result+=ml[c],t.position++;else if((s=mx(c))>0){for(a=s,i=0;a>0;a--)c=t.input.charCodeAt(++t.position),(s=ux(c))>=0?i=(i<<4)+s:_e(t,"expected hexadecimal character");t.result+=fx(i),t.position++}else _e(t,"unknown escape sequence");o=r=t.position}else _t(c)?(Mt(t,o,r,!0),Ao(t,lt(t,!1,n)),o=r=t.position):t.position===t.lineStart&&Zn(t)?_e(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}_e(t,"unexpected end of the stream within a double quoted scalar")}function xx(t,n){var o=!0,r,a,i,s=t.tag,c,p=t.anchor,f,k,l,y,u,m=Object.create(null),b,g,d,h;if(h=t.input.charCodeAt(t.position),h===91)k=93,u=!1,c=[];else if(h===123)k=125,u=!0,c={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=c),h=t.input.charCodeAt(++t.position);h!==0;){if(lt(t,!0,n),h=t.input.charCodeAt(t.position),h===k)return t.position++,t.tag=s,t.anchor=p,t.kind=u?"mapping":"sequence",t.result=c,!0;o?h===44&&_e(t,"expected the node content, but found ','"):_e(t,"missed comma between flow collection entries"),g=b=d=null,l=y=!1,h===63&&(f=t.input.charCodeAt(t.position+1),ht(f)&&(l=y=!0,t.position++,lt(t,!0,n))),r=t.line,a=t.lineStart,i=t.position,Jt(t,n,Wn,!1,!0),g=t.tag,b=t.result,lt(t,!0,n),h=t.input.charCodeAt(t.position),(y||t.line===r)&&h===58&&(l=!0,h=t.input.charCodeAt(++t.position),lt(t,!0,n),Jt(t,n,Wn,!1,!0),d=t.result),u?Xt(t,c,m,g,b,d,r,a,i):l?c.push(Xt(t,null,m,g,b,d,r,a,i)):c.push(b),lt(t,!0,n),h=t.input.charCodeAt(t.position),h===44?(o=!0,h=t.input.charCodeAt(++t.position)):o=!1}_e(t,"unexpected end of the stream within a flow collection")}function kx(t,n){var o,r,a=Lo,i=!1,s=!1,c=n,p=0,f=!1,k,l;if(l=t.input.charCodeAt(t.position),l===124)r=!1;else if(l===62)r=!0;else return!1;for(t.kind="scalar",t.result="";l!==0;)if(l=t.input.charCodeAt(++t.position),l===43||l===45)Lo===a?a=l===43?ll:sx:_e(t,"repeat of a chomping mode identifier");else if((k=px(l))>=0)k===0?_e(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?_e(t,"repeat of an indentation width identifier"):(c=n+k-1,s=!0);else break;if(jt(l)){do l=t.input.charCodeAt(++t.position);while(jt(l));if(l===35)do l=t.input.charCodeAt(++t.position);while(!_t(l)&&l!==0)}for(;l!==0;){for(To(t),t.lineIndent=0,l=t.input.charCodeAt(t.position);(!s||t.lineIndent<c)&&l===32;)t.lineIndent++,l=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>c&&(c=t.lineIndent),_t(l)){p++;continue}if(t.lineIndent<c){a===ll?t.result+=ct.repeat(`
14
+ `:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"…":t===95?" ":t===76?"\u2028":t===80?"\u2029":""}function fx(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function dl(t,n,o){n==="__proto__"?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):t[n]=o}for(var ul=new Array(256),ml=new Array(256),Kt=0;Kt<256;Kt++)ul[Kt]=cl(Kt)?1:0,ml[Kt]=cl(Kt);function gx(t,n){this.input=t,this.filename=n.filename||null,this.schema=n.schema||vo,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function pl(t,n){var o={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return o.snippet=xb(o),new yt(n,o)}function Ee(t,n){throw pl(t,n)}function Gn(t,n){t.onWarning&&t.onWarning.call(null,pl(t,n))}var fl={YAML:function(n,o,r){var a,i,s;n.version!==null&&Ee(n,"duplication of %YAML directive"),r.length!==1&&Ee(n,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),a===null&&Ee(n,"ill-formed argument of the YAML directive"),i=parseInt(a[1],10),s=parseInt(a[2],10),i!==1&&Ee(n,"unacceptable YAML version of the document"),n.version=r[0],n.checkLineBreaks=s<2,s!==1&&s!==2&&Gn(n,"unsupported YAML version of the document")},TAG:function(n,o,r){var a,i;r.length!==2&&Ee(n,"TAG directive accepts exactly two arguments"),a=r[0],i=r[1],al.test(a)||Ee(n,"ill-formed tag handle (first argument) of the TAG directive"),At.call(n.tagMap,a)&&Ee(n,'there is a previously declared suffix for "'+a+'" tag handle'),sl.test(i)||Ee(n,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch{Ee(n,"tag prefix is malformed: "+i)}n.tagMap[a]=i}};function Mt(t,n,o,r){var a,i,s,c;if(n<o){if(c=t.input.slice(n,o),r)for(a=0,i=c.length;a<i;a+=1)s=c.charCodeAt(a),s===9||32<=s&&s<=1114111||Ee(t,"expected valid JSON character");else ix.test(c)&&Ee(t,"the stream contains non-printable characters");t.result+=c}}function gl(t,n,o,r){var a,i,s,c;for(ct.isObject(o)||Ee(t,"cannot merge mappings; the provided source object is unacceptable"),a=Object.keys(o),s=0,c=a.length;s<c;s+=1)i=a[s],At.call(n,i)||(dl(n,i,o[i]),r[i]=!0)}function Xt(t,n,o,r,a,i,s,c,p){var f,k;if(Array.isArray(a))for(a=Array.prototype.slice.call(a),f=0,k=a.length;f<k;f+=1)Array.isArray(a[f])&&Ee(t,"nested arrays are not supported inside keys"),typeof a=="object"&&il(a[f])==="[object Object]"&&(a[f]="[object Object]");if(typeof a=="object"&&il(a)==="[object Object]"&&(a="[object Object]"),a=String(a),n===null&&(n={}),r==="tag:yaml.org,2002:merge")if(Array.isArray(i))for(f=0,k=i.length;f<k;f+=1)gl(t,n,i[f],o);else gl(t,n,i,o);else!t.json&&!At.call(o,a)&&At.call(n,a)&&(t.line=s||t.line,t.lineStart=c||t.lineStart,t.position=p||t.position,Ee(t,"duplicated mapping key")),dl(n,a,i),delete o[a];return n}function To(t){var n;n=t.input.charCodeAt(t.position),n===10?t.position++:n===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):Ee(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function lt(t,n,o){for(var r=0,a=t.input.charCodeAt(t.position);a!==0;){for(;jt(a);)a===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),a=t.input.charCodeAt(++t.position);if(n&&a===35)do a=t.input.charCodeAt(++t.position);while(a!==10&&a!==13&&a!==0);if(_t(a))for(To(t),a=t.input.charCodeAt(t.position),r++,t.lineIndent=0;a===32;)t.lineIndent++,a=t.input.charCodeAt(++t.position);else break}return o!==-1&&r!==0&&t.lineIndent<o&&Gn(t,"deficient indentation"),r}function Zn(t){var n=t.position,o;return o=t.input.charCodeAt(n),!!((o===45||o===46)&&o===t.input.charCodeAt(n+1)&&o===t.input.charCodeAt(n+2)&&(n+=3,o=t.input.charCodeAt(n),o===0||ht(o)))}function Ao(t,n){n===1?t.result+=" ":n>1&&(t.result+=ct.repeat(`
15
+ `,n-1))}function yx(t,n,o){var r,a,i,s,c,p,f,k,l=t.kind,y=t.result,u;if(u=t.input.charCodeAt(t.position),ht(u)||Zt(u)||u===35||u===38||u===42||u===33||u===124||u===62||u===39||u===34||u===37||u===64||u===96||(u===63||u===45)&&(a=t.input.charCodeAt(t.position+1),ht(a)||o&&Zt(a)))return!1;for(t.kind="scalar",t.result="",i=s=t.position,c=!1;u!==0;){if(u===58){if(a=t.input.charCodeAt(t.position+1),ht(a)||o&&Zt(a))break}else if(u===35){if(r=t.input.charCodeAt(t.position-1),ht(r))break}else{if(t.position===t.lineStart&&Zn(t)||o&&Zt(u))break;if(_t(u))if(p=t.line,f=t.lineStart,k=t.lineIndent,lt(t,!1,-1),t.lineIndent>=n){c=!0,u=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=p,t.lineStart=f,t.lineIndent=k;break}}c&&(Mt(t,i,s,!1),Ao(t,t.line-p),i=s=t.position,c=!1),jt(u)||(s=t.position+1),u=t.input.charCodeAt(++t.position)}return Mt(t,i,s,!1),t.result?!0:(t.kind=l,t.result=y,!1)}function hx(t,n){var o,r,a;if(o=t.input.charCodeAt(t.position),o!==39)return!1;for(t.kind="scalar",t.result="",t.position++,r=a=t.position;(o=t.input.charCodeAt(t.position))!==0;)if(o===39)if(Mt(t,r,t.position,!0),o=t.input.charCodeAt(++t.position),o===39)r=t.position,t.position++,a=t.position;else return!0;else _t(o)?(Mt(t,r,a,!0),Ao(t,lt(t,!1,n)),r=a=t.position):t.position===t.lineStart&&Zn(t)?Ee(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);Ee(t,"unexpected end of the stream within a single quoted scalar")}function bx(t,n){var o,r,a,i,s,c;if(c=t.input.charCodeAt(t.position),c!==34)return!1;for(t.kind="scalar",t.result="",t.position++,o=r=t.position;(c=t.input.charCodeAt(t.position))!==0;){if(c===34)return Mt(t,o,t.position,!0),t.position++,!0;if(c===92){if(Mt(t,o,t.position,!0),c=t.input.charCodeAt(++t.position),_t(c))lt(t,!1,n);else if(c<256&&ul[c])t.result+=ml[c],t.position++;else if((s=mx(c))>0){for(a=s,i=0;a>0;a--)c=t.input.charCodeAt(++t.position),(s=ux(c))>=0?i=(i<<4)+s:Ee(t,"expected hexadecimal character");t.result+=fx(i),t.position++}else Ee(t,"unknown escape sequence");o=r=t.position}else _t(c)?(Mt(t,o,r,!0),Ao(t,lt(t,!1,n)),o=r=t.position):t.position===t.lineStart&&Zn(t)?Ee(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}Ee(t,"unexpected end of the stream within a double quoted scalar")}function xx(t,n){var o=!0,r,a,i,s=t.tag,c,p=t.anchor,f,k,l,y,u,m=Object.create(null),b,g,d,h;if(h=t.input.charCodeAt(t.position),h===91)k=93,u=!1,c=[];else if(h===123)k=125,u=!0,c={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=c),h=t.input.charCodeAt(++t.position);h!==0;){if(lt(t,!0,n),h=t.input.charCodeAt(t.position),h===k)return t.position++,t.tag=s,t.anchor=p,t.kind=u?"mapping":"sequence",t.result=c,!0;o?h===44&&Ee(t,"expected the node content, but found ','"):Ee(t,"missed comma between flow collection entries"),g=b=d=null,l=y=!1,h===63&&(f=t.input.charCodeAt(t.position+1),ht(f)&&(l=y=!0,t.position++,lt(t,!0,n))),r=t.line,a=t.lineStart,i=t.position,Jt(t,n,Wn,!1,!0),g=t.tag,b=t.result,lt(t,!0,n),h=t.input.charCodeAt(t.position),(y||t.line===r)&&h===58&&(l=!0,h=t.input.charCodeAt(++t.position),lt(t,!0,n),Jt(t,n,Wn,!1,!0),d=t.result),u?Xt(t,c,m,g,b,d,r,a,i):l?c.push(Xt(t,null,m,g,b,d,r,a,i)):c.push(b),lt(t,!0,n),h=t.input.charCodeAt(t.position),h===44?(o=!0,h=t.input.charCodeAt(++t.position)):o=!1}Ee(t,"unexpected end of the stream within a flow collection")}function kx(t,n){var o,r,a=Lo,i=!1,s=!1,c=n,p=0,f=!1,k,l;if(l=t.input.charCodeAt(t.position),l===124)r=!1;else if(l===62)r=!0;else return!1;for(t.kind="scalar",t.result="";l!==0;)if(l=t.input.charCodeAt(++t.position),l===43||l===45)Lo===a?a=l===43?ll:sx:Ee(t,"repeat of a chomping mode identifier");else if((k=px(l))>=0)k===0?Ee(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?Ee(t,"repeat of an indentation width identifier"):(c=n+k-1,s=!0);else break;if(jt(l)){do l=t.input.charCodeAt(++t.position);while(jt(l));if(l===35)do l=t.input.charCodeAt(++t.position);while(!_t(l)&&l!==0)}for(;l!==0;){for(To(t),t.lineIndent=0,l=t.input.charCodeAt(t.position);(!s||t.lineIndent<c)&&l===32;)t.lineIndent++,l=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>c&&(c=t.lineIndent),_t(l)){p++;continue}if(t.lineIndent<c){a===ll?t.result+=ct.repeat(`
16
16
  `,i?1+p:p):a===Lo&&i&&(t.result+=`
17
17
  `);break}for(r?jt(l)?(f=!0,t.result+=ct.repeat(`
18
18
  `,i?1+p:p)):f?(f=!1,t.result+=ct.repeat(`
19
19
  `,p+1)):p===0?i&&(t.result+=" "):t.result+=ct.repeat(`
20
20
  `,p):t.result+=ct.repeat(`
21
- `,i?1+p:p),i=!0,s=!0,p=0,o=t.position;!_t(l)&&l!==0;)l=t.input.charCodeAt(++t.position);Mt(t,o,t.position,!1)}return!0}function yl(t,n){var o,r=t.tag,a=t.anchor,i=[],s,c=!1,p;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=i),p=t.input.charCodeAt(t.position);p!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,_e(t,"tab characters must not be used in indentation")),!(p!==45||(s=t.input.charCodeAt(t.position+1),!ht(s))));){if(c=!0,t.position++,lt(t,!0,-1)&&t.lineIndent<=n){i.push(null),p=t.input.charCodeAt(t.position);continue}if(o=t.line,Jt(t,n,rl,!1,!0),i.push(t.result),lt(t,!0,-1),p=t.input.charCodeAt(t.position),(t.line===o||t.lineIndent>n)&&p!==0)_e(t,"bad indentation of a sequence entry");else if(t.lineIndent<n)break}return c?(t.tag=r,t.anchor=a,t.kind="sequence",t.result=i,!0):!1}function wx(t,n,o){var r,a,i,s,c,p,f=t.tag,k=t.anchor,l={},y=Object.create(null),u=null,m=null,b=null,g=!1,d=!1,h;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),h=t.input.charCodeAt(t.position);h!==0;){if(!g&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,_e(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),i=t.line,(h===63||h===58)&&ht(r))h===63?(g&&(Xt(t,l,y,u,m,null,s,c,p),u=m=b=null),d=!0,g=!0,a=!0):g?(g=!1,a=!0):_e(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,h=r;else{if(s=t.line,c=t.lineStart,p=t.position,!Jt(t,o,ol,!1,!0))break;if(t.line===i){for(h=t.input.charCodeAt(t.position);jt(h);)h=t.input.charCodeAt(++t.position);if(h===58)h=t.input.charCodeAt(++t.position),ht(h)||_e(t,"a whitespace character is expected after the key-value separator within a block mapping"),g&&(Xt(t,l,y,u,m,null,s,c,p),u=m=b=null),d=!0,g=!1,a=!1,u=t.tag,m=t.result;else if(d)_e(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=f,t.anchor=k,!0}else if(d)_e(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=f,t.anchor=k,!0}if((t.line===i||t.lineIndent>n)&&(g&&(s=t.line,c=t.lineStart,p=t.position),Jt(t,n,Yn,!0,a)&&(g?m=t.result:b=t.result),g||(Xt(t,l,y,u,m,b,s,c,p),u=m=b=null),lt(t,!0,-1),h=t.input.charCodeAt(t.position)),(t.line===i||t.lineIndent>n)&&h!==0)_e(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return g&&Xt(t,l,y,u,m,null,s,c,p),d&&(t.tag=f,t.anchor=k,t.kind="mapping",t.result=l),d}function _x(t){var n,o=!1,r=!1,a,i,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&_e(t,"duplication of a tag property"),s=t.input.charCodeAt(++t.position),s===60?(o=!0,s=t.input.charCodeAt(++t.position)):s===33?(r=!0,a="!!",s=t.input.charCodeAt(++t.position)):a="!",n=t.position,o){do s=t.input.charCodeAt(++t.position);while(s!==0&&s!==62);t.position<t.length?(i=t.input.slice(n,t.position),s=t.input.charCodeAt(++t.position)):_e(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!ht(s);)s===33&&(r?_e(t,"tag suffix cannot contain exclamation marks"):(a=t.input.slice(n-1,t.position+1),al.test(a)||_e(t,"named tag handle cannot contain such characters"),r=!0,n=t.position+1)),s=t.input.charCodeAt(++t.position);i=t.input.slice(n,t.position),dx.test(i)&&_e(t,"tag suffix cannot contain flow indicator characters")}i&&!sl.test(i)&&_e(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch{_e(t,"tag name is malformed: "+i)}return o?t.tag=i:At.call(t.tagMap,a)?t.tag=t.tagMap[a]+i:a==="!"?t.tag="!"+i:a==="!!"?t.tag="tag:yaml.org,2002:"+i:_e(t,'undeclared tag handle "'+a+'"'),!0}function Ex(t){var n,o;if(o=t.input.charCodeAt(t.position),o!==38)return!1;for(t.anchor!==null&&_e(t,"duplication of an anchor property"),o=t.input.charCodeAt(++t.position),n=t.position;o!==0&&!ht(o)&&!Zt(o);)o=t.input.charCodeAt(++t.position);return t.position===n&&_e(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(n,t.position),!0}function Cx(t){var n,o,r;if(r=t.input.charCodeAt(t.position),r!==42)return!1;for(r=t.input.charCodeAt(++t.position),n=t.position;r!==0&&!ht(r)&&!Zt(r);)r=t.input.charCodeAt(++t.position);return t.position===n&&_e(t,"name of an alias node must contain at least one character"),o=t.input.slice(n,t.position),At.call(t.anchorMap,o)||_e(t,'unidentified alias "'+o+'"'),t.result=t.anchorMap[o],lt(t,!0,-1),!0}function Jt(t,n,o,r,a){var i,s,c,p=1,f=!1,k=!1,l,y,u,m,b,g;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,i=s=c=Yn===o||rl===o,r&&lt(t,!0,-1)&&(f=!0,t.lineIndent>n?p=1:t.lineIndent===n?p=0:t.lineIndent<n&&(p=-1)),p===1)for(;_x(t)||Ex(t);)lt(t,!0,-1)?(f=!0,c=i,t.lineIndent>n?p=1:t.lineIndent===n?p=0:t.lineIndent<n&&(p=-1)):c=!1;if(c&&(c=f||a),(p===1||Yn===o)&&(Wn===o||ol===o?b=n:b=n+1,g=t.position-t.lineStart,p===1?c&&(yl(t,g)||wx(t,g,b))||xx(t,b)?k=!0:(s&&kx(t,b)||hx(t,b)||bx(t,b)?k=!0:Cx(t)?(k=!0,(t.tag!==null||t.anchor!==null)&&_e(t,"alias node should not have any properties")):yx(t,b,Wn===o)&&(k=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):p===0&&(k=c&&yl(t,g))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&_e(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,y=t.implicitTypes.length;l<y;l+=1)if(m=t.implicitTypes[l],m.resolve(t.result)){t.result=m.construct(t.result),t.tag=m.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(At.call(t.typeMap[t.kind||"fallback"],t.tag))m=t.typeMap[t.kind||"fallback"][t.tag];else for(m=null,u=t.typeMap.multi[t.kind||"fallback"],l=0,y=u.length;l<y;l+=1)if(t.tag.slice(0,u[l].tag.length)===u[l].tag){m=u[l];break}m||_e(t,"unknown tag !<"+t.tag+">"),t.result!==null&&m.kind!==t.kind&&_e(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+m.kind+'", not "'+t.kind+'"'),m.resolve(t.result,t.tag)?(t.result=m.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):_e(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||k}function Nx(t){var n=t.position,o,r,a,i=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(lt(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(i=!0,s=t.input.charCodeAt(++t.position),o=t.position;s!==0&&!ht(s);)s=t.input.charCodeAt(++t.position);for(r=t.input.slice(o,t.position),a=[],r.length<1&&_e(t,"directive name must not be less than one character in length");s!==0;){for(;jt(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!_t(s));break}if(_t(s))break;for(o=t.position;s!==0&&!ht(s);)s=t.input.charCodeAt(++t.position);a.push(t.input.slice(o,t.position))}s!==0&&To(t),At.call(fl,r)?fl[r](t,r,a):Gn(t,'unknown document directive "'+r+'"')}if(lt(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,lt(t,!0,-1)):i&&_e(t,"directives end mark is expected"),Jt(t,t.lineIndent-1,Yn,!1,!0),lt(t,!0,-1),t.checkLineBreaks&&cx.test(t.input.slice(n,t.position))&&Gn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Zn(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,lt(t,!0,-1));return}if(t.position<t.length-1)_e(t,"end of the stream or a document separator is expected");else return}function hl(t,n){t=String(t),n=n||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
22
- `),t.charCodeAt(0)===65279&&(t=t.slice(1)));var o=new gx(t,n),r=t.indexOf("\0");for(r!==-1&&(o.position=r,_e(o,"null byte is not allowed in input")),o.input+="\0";o.input.charCodeAt(o.position)===32;)o.lineIndent+=1,o.position+=1;for(;o.position<o.length-1;)Nx(o);return o.documents}function Vx(t,n,o){n!==null&&typeof n=="object"&&typeof o>"u"&&(o=n,n=null);var r=hl(t,o);if(typeof n!="function")return r;for(var a=0,i=r.length;a<i;a+=1)n(r[a])}function Bx(t,n){var o=hl(t,n);if(o.length!==0){if(o.length===1)return o[0];throw new yt("expected a single document in the stream, but found more")}}var $x=Vx,Sx=Bx,bl={loadAll:$x,load:Sx},xl=Object.prototype.toString,kl=Object.prototype.hasOwnProperty,Mo=65279,vx=9,xn=10,Lx=13,Tx=32,Ax=33,Mx=34,Do=35,Dx=37,Fx=38,zx=39,Ix=42,wl=44,jx=45,Kn=58,Px=61,Rx=62,Ox=63,Ux=64,_l=91,El=93,qx=96,Cl=123,Hx=124,Nl=125,ft={};ft[0]="\\0",ft[7]="\\a",ft[8]="\\b",ft[9]="\\t",ft[10]="\\n",ft[11]="\\v",ft[12]="\\f",ft[13]="\\r",ft[27]="\\e",ft[34]='\\"',ft[92]="\\\\",ft[133]="\\N",ft[160]="\\_",ft[8232]="\\L",ft[8233]="\\P";var Wx=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],Yx=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function Gx(t,n){var o,r,a,i,s,c,p;if(n===null)return{};for(o={},r=Object.keys(n),a=0,i=r.length;a<i;a+=1)s=r[a],c=String(n[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),p=t.compiledTypeMap.fallback[s],p&&kl.call(p.styleAliases,c)&&(c=p.styleAliases[c]),o[s]=c;return o}function Zx(t){var n,o,r;if(n=t.toString(16).toUpperCase(),t<=255)o="x",r=2;else if(t<=65535)o="u",r=4;else if(t<=4294967295)o="U",r=8;else throw new yt("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+o+ct.repeat("0",r-n.length)+n}var Kx=1,kn=2;function Xx(t){this.schema=t.schema||vo,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=ct.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=Gx(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?kn:Kx,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function Vl(t,n){for(var o=ct.repeat(" ",n),r=0,a=-1,i="",s,c=t.length;r<c;)a=t.indexOf(`
21
+ `,i?1+p:p),i=!0,s=!0,p=0,o=t.position;!_t(l)&&l!==0;)l=t.input.charCodeAt(++t.position);Mt(t,o,t.position,!1)}return!0}function yl(t,n){var o,r=t.tag,a=t.anchor,i=[],s,c=!1,p;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=i),p=t.input.charCodeAt(t.position);p!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Ee(t,"tab characters must not be used in indentation")),!(p!==45||(s=t.input.charCodeAt(t.position+1),!ht(s))));){if(c=!0,t.position++,lt(t,!0,-1)&&t.lineIndent<=n){i.push(null),p=t.input.charCodeAt(t.position);continue}if(o=t.line,Jt(t,n,rl,!1,!0),i.push(t.result),lt(t,!0,-1),p=t.input.charCodeAt(t.position),(t.line===o||t.lineIndent>n)&&p!==0)Ee(t,"bad indentation of a sequence entry");else if(t.lineIndent<n)break}return c?(t.tag=r,t.anchor=a,t.kind="sequence",t.result=i,!0):!1}function wx(t,n,o){var r,a,i,s,c,p,f=t.tag,k=t.anchor,l={},y=Object.create(null),u=null,m=null,b=null,g=!1,d=!1,h;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=l),h=t.input.charCodeAt(t.position);h!==0;){if(!g&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Ee(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),i=t.line,(h===63||h===58)&&ht(r))h===63?(g&&(Xt(t,l,y,u,m,null,s,c,p),u=m=b=null),d=!0,g=!0,a=!0):g?(g=!1,a=!0):Ee(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,h=r;else{if(s=t.line,c=t.lineStart,p=t.position,!Jt(t,o,ol,!1,!0))break;if(t.line===i){for(h=t.input.charCodeAt(t.position);jt(h);)h=t.input.charCodeAt(++t.position);if(h===58)h=t.input.charCodeAt(++t.position),ht(h)||Ee(t,"a whitespace character is expected after the key-value separator within a block mapping"),g&&(Xt(t,l,y,u,m,null,s,c,p),u=m=b=null),d=!0,g=!1,a=!1,u=t.tag,m=t.result;else if(d)Ee(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=f,t.anchor=k,!0}else if(d)Ee(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=f,t.anchor=k,!0}if((t.line===i||t.lineIndent>n)&&(g&&(s=t.line,c=t.lineStart,p=t.position),Jt(t,n,Yn,!0,a)&&(g?m=t.result:b=t.result),g||(Xt(t,l,y,u,m,b,s,c,p),u=m=b=null),lt(t,!0,-1),h=t.input.charCodeAt(t.position)),(t.line===i||t.lineIndent>n)&&h!==0)Ee(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return g&&Xt(t,l,y,u,m,null,s,c,p),d&&(t.tag=f,t.anchor=k,t.kind="mapping",t.result=l),d}function _x(t){var n,o=!1,r=!1,a,i,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&Ee(t,"duplication of a tag property"),s=t.input.charCodeAt(++t.position),s===60?(o=!0,s=t.input.charCodeAt(++t.position)):s===33?(r=!0,a="!!",s=t.input.charCodeAt(++t.position)):a="!",n=t.position,o){do s=t.input.charCodeAt(++t.position);while(s!==0&&s!==62);t.position<t.length?(i=t.input.slice(n,t.position),s=t.input.charCodeAt(++t.position)):Ee(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!ht(s);)s===33&&(r?Ee(t,"tag suffix cannot contain exclamation marks"):(a=t.input.slice(n-1,t.position+1),al.test(a)||Ee(t,"named tag handle cannot contain such characters"),r=!0,n=t.position+1)),s=t.input.charCodeAt(++t.position);i=t.input.slice(n,t.position),dx.test(i)&&Ee(t,"tag suffix cannot contain flow indicator characters")}i&&!sl.test(i)&&Ee(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch{Ee(t,"tag name is malformed: "+i)}return o?t.tag=i:At.call(t.tagMap,a)?t.tag=t.tagMap[a]+i:a==="!"?t.tag="!"+i:a==="!!"?t.tag="tag:yaml.org,2002:"+i:Ee(t,'undeclared tag handle "'+a+'"'),!0}function Ex(t){var n,o;if(o=t.input.charCodeAt(t.position),o!==38)return!1;for(t.anchor!==null&&Ee(t,"duplication of an anchor property"),o=t.input.charCodeAt(++t.position),n=t.position;o!==0&&!ht(o)&&!Zt(o);)o=t.input.charCodeAt(++t.position);return t.position===n&&Ee(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(n,t.position),!0}function Cx(t){var n,o,r;if(r=t.input.charCodeAt(t.position),r!==42)return!1;for(r=t.input.charCodeAt(++t.position),n=t.position;r!==0&&!ht(r)&&!Zt(r);)r=t.input.charCodeAt(++t.position);return t.position===n&&Ee(t,"name of an alias node must contain at least one character"),o=t.input.slice(n,t.position),At.call(t.anchorMap,o)||Ee(t,'unidentified alias "'+o+'"'),t.result=t.anchorMap[o],lt(t,!0,-1),!0}function Jt(t,n,o,r,a){var i,s,c,p=1,f=!1,k=!1,l,y,u,m,b,g;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,i=s=c=Yn===o||rl===o,r&&lt(t,!0,-1)&&(f=!0,t.lineIndent>n?p=1:t.lineIndent===n?p=0:t.lineIndent<n&&(p=-1)),p===1)for(;_x(t)||Ex(t);)lt(t,!0,-1)?(f=!0,c=i,t.lineIndent>n?p=1:t.lineIndent===n?p=0:t.lineIndent<n&&(p=-1)):c=!1;if(c&&(c=f||a),(p===1||Yn===o)&&(Wn===o||ol===o?b=n:b=n+1,g=t.position-t.lineStart,p===1?c&&(yl(t,g)||wx(t,g,b))||xx(t,b)?k=!0:(s&&kx(t,b)||hx(t,b)||bx(t,b)?k=!0:Cx(t)?(k=!0,(t.tag!==null||t.anchor!==null)&&Ee(t,"alias node should not have any properties")):yx(t,b,Wn===o)&&(k=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):p===0&&(k=c&&yl(t,g))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&Ee(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,y=t.implicitTypes.length;l<y;l+=1)if(m=t.implicitTypes[l],m.resolve(t.result)){t.result=m.construct(t.result),t.tag=m.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(At.call(t.typeMap[t.kind||"fallback"],t.tag))m=t.typeMap[t.kind||"fallback"][t.tag];else for(m=null,u=t.typeMap.multi[t.kind||"fallback"],l=0,y=u.length;l<y;l+=1)if(t.tag.slice(0,u[l].tag.length)===u[l].tag){m=u[l];break}m||Ee(t,"unknown tag !<"+t.tag+">"),t.result!==null&&m.kind!==t.kind&&Ee(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+m.kind+'", not "'+t.kind+'"'),m.resolve(t.result,t.tag)?(t.result=m.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):Ee(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||k}function Nx(t){var n=t.position,o,r,a,i=!1,s;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(s=t.input.charCodeAt(t.position))!==0&&(lt(t,!0,-1),s=t.input.charCodeAt(t.position),!(t.lineIndent>0||s!==37));){for(i=!0,s=t.input.charCodeAt(++t.position),o=t.position;s!==0&&!ht(s);)s=t.input.charCodeAt(++t.position);for(r=t.input.slice(o,t.position),a=[],r.length<1&&Ee(t,"directive name must not be less than one character in length");s!==0;){for(;jt(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!_t(s));break}if(_t(s))break;for(o=t.position;s!==0&&!ht(s);)s=t.input.charCodeAt(++t.position);a.push(t.input.slice(o,t.position))}s!==0&&To(t),At.call(fl,r)?fl[r](t,r,a):Gn(t,'unknown document directive "'+r+'"')}if(lt(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,lt(t,!0,-1)):i&&Ee(t,"directives end mark is expected"),Jt(t,t.lineIndent-1,Yn,!1,!0),lt(t,!0,-1),t.checkLineBreaks&&cx.test(t.input.slice(n,t.position))&&Gn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Zn(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,lt(t,!0,-1));return}if(t.position<t.length-1)Ee(t,"end of the stream or a document separator is expected");else return}function hl(t,n){t=String(t),n=n||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
22
+ `),t.charCodeAt(0)===65279&&(t=t.slice(1)));var o=new gx(t,n),r=t.indexOf("\0");for(r!==-1&&(o.position=r,Ee(o,"null byte is not allowed in input")),o.input+="\0";o.input.charCodeAt(o.position)===32;)o.lineIndent+=1,o.position+=1;for(;o.position<o.length-1;)Nx(o);return o.documents}function Vx(t,n,o){n!==null&&typeof n=="object"&&typeof o>"u"&&(o=n,n=null);var r=hl(t,o);if(typeof n!="function")return r;for(var a=0,i=r.length;a<i;a+=1)n(r[a])}function Bx(t,n){var o=hl(t,n);if(o.length!==0){if(o.length===1)return o[0];throw new yt("expected a single document in the stream, but found more")}}var $x=Vx,Sx=Bx,bl={loadAll:$x,load:Sx},xl=Object.prototype.toString,kl=Object.prototype.hasOwnProperty,Mo=65279,vx=9,xn=10,Lx=13,Tx=32,Ax=33,Mx=34,Do=35,Dx=37,Fx=38,zx=39,Ix=42,wl=44,jx=45,Kn=58,Px=61,Rx=62,Ox=63,Ux=64,_l=91,El=93,qx=96,Cl=123,Hx=124,Nl=125,ft={};ft[0]="\\0",ft[7]="\\a",ft[8]="\\b",ft[9]="\\t",ft[10]="\\n",ft[11]="\\v",ft[12]="\\f",ft[13]="\\r",ft[27]="\\e",ft[34]='\\"',ft[92]="\\\\",ft[133]="\\N",ft[160]="\\_",ft[8232]="\\L",ft[8233]="\\P";var Wx=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],Yx=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function Gx(t,n){var o,r,a,i,s,c,p;if(n===null)return{};for(o={},r=Object.keys(n),a=0,i=r.length;a<i;a+=1)s=r[a],c=String(n[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),p=t.compiledTypeMap.fallback[s],p&&kl.call(p.styleAliases,c)&&(c=p.styleAliases[c]),o[s]=c;return o}function Zx(t){var n,o,r;if(n=t.toString(16).toUpperCase(),t<=255)o="x",r=2;else if(t<=65535)o="u",r=4;else if(t<=4294967295)o="U",r=8;else throw new yt("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+o+ct.repeat("0",r-n.length)+n}var Kx=1,kn=2;function Xx(t){this.schema=t.schema||vo,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=ct.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=Gx(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?kn:Kx,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function Vl(t,n){for(var o=ct.repeat(" ",n),r=0,a=-1,i="",s,c=t.length;r<c;)a=t.indexOf(`
23
23
  `,r),a===-1?(s=t.slice(r),r=c):(s=t.slice(r,a+1),r=a+1),s.length&&s!==`
24
24
  `&&(i+=o),i+=s;return i}function Fo(t,n){return`
25
25
  `+ct.repeat(" ",t.indent*n)}function Jx(t,n){var o,r,a;for(o=0,r=t.implicitTypes.length;o<r;o+=1)if(a=t.implicitTypes[o],a.resolve(n))return!0;return!1}function Xn(t){return t===Tx||t===vx}function wn(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==Mo||65536<=t&&t<=1114111}function Bl(t){return wn(t)&&t!==Mo&&t!==Lx&&t!==xn}function $l(t,n,o){var r=Bl(t),a=r&&!Xn(t);return(o?r:r&&t!==wl&&t!==_l&&t!==El&&t!==Cl&&t!==Nl)&&t!==Do&&!(n===Kn&&!a)||Bl(n)&&!Xn(n)&&t===Do||n===Kn&&a}function Qx(t){return wn(t)&&t!==Mo&&!Xn(t)&&t!==jx&&t!==Ox&&t!==Kn&&t!==wl&&t!==_l&&t!==El&&t!==Cl&&t!==Nl&&t!==Do&&t!==Fx&&t!==Ix&&t!==Ax&&t!==Hx&&t!==Px&&t!==Rx&&t!==zx&&t!==Mx&&t!==Dx&&t!==Ux&&t!==qx}function e1(t){return!Xn(t)&&t!==Kn}function _n(t,n){var o=t.charCodeAt(n),r;return o>=55296&&o<=56319&&n+1<t.length&&(r=t.charCodeAt(n+1),r>=56320&&r<=57343)?(o-55296)*1024+r-56320+65536:o}function Sl(t){var n=/^\n* /;return n.test(t)}var vl=1,zo=2,Ll=3,Tl=4,Qt=5;function t1(t,n,o,r,a,i,s,c){var p,f=0,k=null,l=!1,y=!1,u=r!==-1,m=-1,b=Qx(_n(t,0))&&e1(_n(t,t.length-1));if(n||s)for(p=0;p<t.length;f>=65536?p+=2:p++){if(f=_n(t,p),!wn(f))return Qt;b=b&&$l(f,k,c),k=f}else{for(p=0;p<t.length;f>=65536?p+=2:p++){if(f=_n(t,p),f===xn)l=!0,u&&(y=y||p-m-1>r&&t[m+1]!==" ",m=p);else if(!wn(f))return Qt;b=b&&$l(f,k,c),k=f}y=y||u&&p-m-1>r&&t[m+1]!==" "}return!l&&!y?b&&!s&&!a(t)?vl:i===kn?Qt:zo:o>9&&Sl(t)?Qt:s?i===kn?Qt:zo:y?Tl:Ll}function n1(t,n,o,r,a){t.dump=(function(){if(n.length===0)return t.quotingType===kn?'""':"''";if(!t.noCompatMode&&(Wx.indexOf(n)!==-1||Yx.test(n)))return t.quotingType===kn?'"'+n+'"':"'"+n+"'";var i=t.indent*Math.max(1,o),s=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-i),c=r||t.flowLevel>-1&&o>=t.flowLevel;function p(f){return Jx(t,f)}switch(t1(n,c,t.indent,s,p,t.quotingType,t.forceQuotes&&!r,a)){case vl:return n;case zo:return"'"+n.replace(/'/g,"''")+"'";case Ll:return"|"+Al(n,t.indent)+Ml(Vl(n,i));case Tl:return">"+Al(n,t.indent)+Ml(Vl(o1(n,s),i));case Qt:return'"'+r1(n)+'"';default:throw new yt("impossible error: invalid scalar style")}})()}function Al(t,n){var o=Sl(t)?String(n):"",r=t[t.length-1]===`
@@ -34,12 +34,12 @@
34
34
  `+t.slice(a,i),a=i+1),s=c;return p+=`
35
35
  `,t.length-a>n&&s>a?p+=t.slice(a,s)+`
36
36
  `+t.slice(s+1):p+=t.slice(a),p.slice(1)}function r1(t){for(var n="",o=0,r,a=0;a<t.length;o>=65536?a+=2:a++)o=_n(t,a),r=ft[o],!r&&wn(o)?(n+=t[a],o>=65536&&(n+=t[a+1])):n+=r||Zx(o);return n}function l1(t,n,o){var r="",a=t.tag,i,s,c;for(i=0,s=o.length;i<s;i+=1)c=o[i],t.replacer&&(c=t.replacer.call(o,String(i),c)),(St(t,n,c,!1,!1)||typeof c>"u"&&St(t,n,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=a,t.dump="["+r+"]"}function Fl(t,n,o,r){var a="",i=t.tag,s,c,p;for(s=0,c=o.length;s<c;s+=1)p=o[s],t.replacer&&(p=t.replacer.call(o,String(s),p)),(St(t,n+1,p,!0,!0,!1,!0)||typeof p>"u"&&St(t,n+1,null,!0,!0,!1,!0))&&((!r||a!=="")&&(a+=Fo(t,n)),t.dump&&xn===t.dump.charCodeAt(0)?a+="-":a+="- ",a+=t.dump);t.tag=i,t.dump=a||"[]"}function a1(t,n,o){var r="",a=t.tag,i=Object.keys(o),s,c,p,f,k;for(s=0,c=i.length;s<c;s+=1)k="",r!==""&&(k+=", "),t.condenseFlow&&(k+='"'),p=i[s],f=o[p],t.replacer&&(f=t.replacer.call(o,p,f)),St(t,n,p,!1,!1)&&(t.dump.length>1024&&(k+="? "),k+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),St(t,n,f,!1,!1)&&(k+=t.dump,r+=k));t.tag=a,t.dump="{"+r+"}"}function s1(t,n,o,r){var a="",i=t.tag,s=Object.keys(o),c,p,f,k,l,y;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new yt("sortKeys must be a boolean or a function");for(c=0,p=s.length;c<p;c+=1)y="",(!r||a!=="")&&(y+=Fo(t,n)),f=s[c],k=o[f],t.replacer&&(k=t.replacer.call(o,f,k)),St(t,n+1,f,!0,!0,!0)&&(l=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,l&&(t.dump&&xn===t.dump.charCodeAt(0)?y+="?":y+="? "),y+=t.dump,l&&(y+=Fo(t,n)),St(t,n+1,k,!0,l)&&(t.dump&&xn===t.dump.charCodeAt(0)?y+=":":y+=": ",y+=t.dump,a+=y));t.tag=i,t.dump=a||"{}"}function zl(t,n,o){var r,a,i,s,c,p;for(a=o?t.explicitTypes:t.implicitTypes,i=0,s=a.length;i<s;i+=1)if(c=a[i],(c.instanceOf||c.predicate)&&(!c.instanceOf||typeof n=="object"&&n instanceof c.instanceOf)&&(!c.predicate||c.predicate(n))){if(o?c.multi&&c.representName?t.tag=c.representName(n):t.tag=c.tag:t.tag="?",c.represent){if(p=t.styleMap[c.tag]||c.defaultStyle,xl.call(c.represent)==="[object Function]")r=c.represent(n,p);else if(kl.call(c.represent,p))r=c.represent[p](n,p);else throw new yt("!<"+c.tag+'> tag resolver accepts not "'+p+'" style');t.dump=r}return!0}return!1}function St(t,n,o,r,a,i,s){t.tag=null,t.dump=o,zl(t,o,!1)||zl(t,o,!0);var c=xl.call(t.dump),p=r,f;r&&(r=t.flowLevel<0||t.flowLevel>n);var k=c==="[object Object]"||c==="[object Array]",l,y;if(k&&(l=t.duplicates.indexOf(o),y=l!==-1),(t.tag!==null&&t.tag!=="?"||y||t.indent!==2&&n>0)&&(a=!1),y&&t.usedDuplicates[l])t.dump="*ref_"+l;else{if(k&&y&&!t.usedDuplicates[l]&&(t.usedDuplicates[l]=!0),c==="[object Object]")r&&Object.keys(t.dump).length!==0?(s1(t,n,t.dump,a),y&&(t.dump="&ref_"+l+t.dump)):(a1(t,n,t.dump),y&&(t.dump="&ref_"+l+" "+t.dump));else if(c==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!s&&n>0?Fl(t,n-1,t.dump,a):Fl(t,n,t.dump,a),y&&(t.dump="&ref_"+l+t.dump)):(l1(t,n,t.dump),y&&(t.dump="&ref_"+l+" "+t.dump));else if(c==="[object String]")t.tag!=="?"&&n1(t,t.dump,n,i,p);else{if(c==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new yt("unacceptable kind of an object to dump "+c)}t.tag!==null&&t.tag!=="?"&&(f=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?f="!"+f:f.slice(0,18)==="tag:yaml.org,2002:"?f="!!"+f.slice(18):f="!<"+f+">",t.dump=f+" "+t.dump)}return!0}function i1(t,n){var o=[],r=[],a,i;for(Io(t,o,r),a=0,i=r.length;a<i;a+=1)n.duplicates.push(o[r[a]]);n.usedDuplicates=new Array(i)}function Io(t,n,o){var r,a,i;if(t!==null&&typeof t=="object")if(a=n.indexOf(t),a!==-1)o.indexOf(a)===-1&&o.push(a);else if(n.push(t),Array.isArray(t))for(a=0,i=t.length;a<i;a+=1)Io(t[a],n,o);else for(r=Object.keys(t),a=0,i=r.length;a<i;a+=1)Io(t[r[a]],n,o)}function c1(t,n){n=n||{};var o=new Xx(n);o.noRefs||i1(t,o);var r=t;return o.replacer&&(r=o.replacer.call({"":r},"",r)),St(o,0,r,!0,!0)?o.dump+`
37
- `:""}var d1=c1,u1={dump:d1};function jo(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var m1=mt,p1=Ir,f1=Or,g1=Yr,y1=Gr,h1=vo,Il=bl.load,b1=bl.loadAll,jl=u1.dump,x1=yt,k1={binary:Qr,float:Wr,map:Rr,null:Ur,pairs:tl,set:nl,timestamp:Xr,bool:qr,int:Hr,merge:Jr,omap:el,seq:Pr,str:jr},w1=jo("safeLoad","load"),_1=jo("safeLoadAll","loadAll"),E1=jo("safeDump","dump"),Pl={Type:m1,Schema:p1,FAILSAFE_SCHEMA:f1,JSON_SCHEMA:g1,CORE_SCHEMA:y1,DEFAULT_SCHEMA:h1,load:Il,loadAll:b1,dump:jl,YAMLException:x1,types:k1,safeLoad:w1,safeLoadAll:_1,safeDump:E1};const C1={},N1={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:"inline-block shrink-0"};function V1(t,n){return e.openBlock(),e.createElementBlock("svg",N1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 3 4 7l4 4"},null,-1),e.createElementVNode("path",{d:"M4 7h16"},null,-1),e.createElementVNode("path",{d:"m16 21 4-4-4-4"},null,-1),e.createElementVNode("path",{d:"M20 17H4"},null,-1)])])}const B1=Ne(C1,[["render",V1]]),$1=["aria-label"],Po=e.defineComponent({__name:"PanelToggleButton",props:{open:{type:Boolean},topClass:{default:"top-5"}},emits:["toggle"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{type:"button",onClick:o[0]||(o[0]=r=>n.$emit("toggle")),class:e.normalizeClass(["absolute right-0 w-5 h-9 shrink-0 rounded-l-lg inline-flex items-center justify-center","text-gray-600 hover:bg-gray-100 hover:text-gray-800 transition border border-gray-100 shadow-md bg-white z-[21]",t.topClass]),"aria-label":t.open?"Закрити панель":"Відкрити панель"},[e.createVNode(B1,{class:"h-3 w-3"})],10,$1))}}),S1={},v1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-settings"};function L1(t,n){return e.openBlock(),e.createElementBlock("svg",v1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Rl=Ne(S1,[["render",L1]]),T1={},A1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers"};function M1(t,n){return e.openBlock(),e.createElementBlock("svg",A1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"},null,-1),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"},null,-1),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"},null,-1)])])}const D1=Ne(T1,[["render",M1]]),F1={},z1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-eye"};function I1(t,n){return e.openBlock(),e.createElementBlock("svg",z1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Ol=Ne(F1,[["render",I1]]),j1={},P1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map"};function R1(t,n){return e.openBlock(),e.createElementBlock("svg",P1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"},null,-1),e.createElementVNode("path",{d:"M15 5.764v15"},null,-1),e.createElementVNode("path",{d:"M9 3.236v15"},null,-1)])])}const O1=Ne(j1,[["render",R1]]),U1={},q1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-filter"};function H1(t,n){return e.openBlock(),e.createElementBlock("svg",q1,[...n[0]||(n[0]=[e.createElementVNode("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"},null,-1)])])}const W1=Ne(U1,[["render",H1]]),Ro=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(pe.Settings),{size:16,class:"lucide lucide-settings"}))}}),Y1={class:"flex flex-col gap-2"},G1={class:"relative flex items-center"},Z1={key:0,class:"flex flex-col gap-1.5"},K1={key:1,class:"flex flex-col items-center gap-1.5 py-5 text-gray-400"},X1={class:"text-xs"},J1={key:2,class:"flex flex-col gap-1 p-0"},Q1={class:"flex size-[30px] shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-500 text-xs font-semibold text-white"},ek={class:"flex min-w-0 flex-1 flex-col gap-0.5"},tk={class:"truncate text-xs font-medium text-gray-900"},nk={class:"flex flex-wrap gap-1"},ok={key:3,class:"flex items-center justify-end gap-1.5 pt-1"},rk=["disabled"],lk={class:"min-w-[36px] text-center text-[11px] text-gray-500"},ak=["disabled"],sk={class:"ml-1 text-[11px] text-gray-400"},ik=e.defineComponent({__name:"ServiceUsers",props:{serviceId:{},limit:{}},setup(t){const n=t,o=n.limit??10,r=e.ref([]),a=e.ref(0),i=e.ref(!1),s=e.ref(1),c=e.ref("");let p=null;const f=e.computed(()=>Math.max(1,Math.ceil(a.value/o))),k=e.computed(()=>{const $=a.value%100,_=a.value%10;return $>=11&&$<=19?"ів":_===1?"":_>=2&&_<=4?"и":"ів"});function l($){return($||"?").trim().charAt(0).toUpperCase()}function y($){if(!$)return[];if(Array.isArray($))return $;if(typeof $=="string"){try{const _=JSON.parse($);if(Array.isArray(_))return _}catch{}return $.replace(/[{}"]/g,"").split(",").filter(Boolean)}return[]}const u={view:"Перегляд",edit:"Редагування",del:"Видалення",add:"Додавання"};function m($){return u[$]??$}const b={view:"bg-blue-50 text-blue-700 border-blue-200",edit:"bg-green-50 text-green-700 border-green-200",del:"bg-red-50 text-red-600 border-red-200",add:"bg-emerald-50 text-emerald-700 border-emerald-200",admin:"bg-purple-50 text-purple-700 border-purple-200",export:"bg-amber-50 text-amber-700 border-amber-200",import:"bg-teal-50 text-teal-700 border-teal-200"};function g($){return b[$]??"bg-gray-50 text-gray-600 border-gray-200"}async function d(){if(!n.serviceId){r.value=[],a.value=0;return}i.value=!0;try{const $=(s.value-1)*o,_=new URLSearchParams({limit:String(o),offset:String($)});c.value.trim()&&_.set("search",c.value.trim());const w=await fetch(`/api/gis-service-users/${encodeURIComponent(String(n.serviceId))}?${_}`);if(!w.ok)throw new Error(`HTTP ${w.status}`);const E=await w.json();r.value=(E==null?void 0:E.rows)??[],a.value=(E==null?void 0:E.count)??0}catch($){console.error("[ServiceUsers] fetch error",$),r.value=[],a.value=0}finally{i.value=!1}}function h($){s.value=$,d()}function x(){p&&clearTimeout(p),p=setTimeout(()=>{s.value=1,d()},350)}function N(){c.value="",s.value=1,d()}return e.watch(()=>n.serviceId,()=>{s.value=1,c.value="",d()},{immediate:!0}),($,_)=>(e.openBlock(),e.createElementBlock("div",Y1,[e.createElementVNode("div",G1,[_[4]||(_[4]=e.createElementVNode("div",{class:"pointer-events-none absolute left-2.5 flex text-gray-400"},[e.createElementVNode("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"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})])],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[0]||(_[0]=w=>c.value=w),type:"text",class:"w-full rounded-md border border-gray-200 bg-gray-50 py-1.5 pl-8 pr-7 text-xs text-gray-900 outline-none transition focus:border-blue-400 focus:bg-white focus:ring-2 focus:ring-blue-400/20",placeholder:"Пошук за іменем або логіном…",onInput:x},null,544),[[e.vModelText,c.value]]),c.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"absolute right-2 flex items-center justify-center rounded p-0.5 text-gray-400 transition hover:text-gray-700",onClick:N},[..._[3]||(_[3]=[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.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])):e.createCommentVNode("",!0)]),i.value?(e.openBlock(),e.createElementBlock("div",Z1,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(3,w=>e.createElementVNode("div",{key:w,class:"flex animate-pulse items-center gap-2 rounded-lg bg-gray-50 px-2 py-1.5"},[..._[5]||(_[5]=[e.createElementVNode("div",{class:"size-[30px] shrink-0 rounded-full bg-gray-200"},null,-1),e.createElementVNode("div",{class:"flex flex-1 flex-col gap-1.5"},[e.createElementVNode("div",{class:"h-2 w-2/3 rounded bg-gray-200"}),e.createElementVNode("div",{class:"h-2 w-1/3 rounded bg-gray-200"})],-1)])])),64))])):r.value.length?(e.openBlock(),e.createElementBlock("ul",J1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,w=>(e.openBlock(),e.createElementBlock("li",{key:w.user_id,class:"flex items-center gap-2 rounded-lg border border-gray-100 bg-gray-50 px-2 py-1.5 transition hover:border-sky-200 hover:bg-sky-50"},[e.createElementVNode("div",Q1,e.toDisplayString(l(w.user_full_name)),1),e.createElementVNode("div",ek,[e.createElementVNode("span",tk,e.toDisplayString(w.user_full_name),1),e.createElementVNode("div",nk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y(w.actions),E=>(e.openBlock(),e.createElementBlock("span",{key:E,class:e.normalizeClass(["rounded-full border px-1.5 py-px text-[10px] font-medium",g(E)])},e.toDisplayString(m(E)),3))),128))])])]))),128))])):(e.openBlock(),e.createElementBlock("div",K1,[_[6]||(_[6]=e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="opacity-50"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>',1)),e.createElementVNode("span",X1,e.toDisplayString(c.value?"Нічого не знайдено":"Немає користувачів з доступом"),1)])),f.value>1?(e.openBlock(),e.createElementBlock("div",ok,[e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:s.value===1,onClick:_[1]||(_[1]=w=>h(s.value-1))},[..._[7]||(_[7]=[e.createElementVNode("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"},[e.createElementVNode("polyline",{points:"15 18 9 12 15 6"})],-1)])],8,rk),e.createElementVNode("span",lk,e.toDisplayString(s.value)+" / "+e.toDisplayString(f.value),1),e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:s.value===f.value,onClick:_[2]||(_[2]=w=>h(s.value+1))},[..._[8]||(_[8]=[e.createElementVNode("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"},[e.createElementVNode("polyline",{points:"9 18 15 12 9 6"})],-1)])],8,ak),e.createElementVNode("span",sk,e.toDisplayString(a.value)+" запис"+e.toDisplayString(k.value),1)])):e.createCommentVNode("",!0)]))}});function ck(t){const o=l=>typeof l!="number"||Number.isNaN(l)?"":Number(l.toFixed(5)).toFixed(5),r=[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:12},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Активність",col:6,data:"yes_no"}],a=(l,y)=>{const u=Array.isArray(l==null?void 0:l.config)?l.config[0]:null;return t.normalizeValue(u==null?void 0:u[y])},i=l=>!Array.isArray(l==null?void 0:l.bounds)||l.bounds.length<4?"":l.bounds.map(y=>o(y)).filter(Boolean).join(", "),s=l=>!Array.isArray(l==null?void 0:l.extent)||l.extent.length<4?"":l.extent.map(y=>o(y)).filter(Boolean).join(", "),c=l=>!Array.isArray(l==null?void 0:l.bands)||!l.bands.length?"":l.bands.join(", "),p=l=>typeof l!="boolean"?"":l?"Так":"Ні",f=[{label:"Група",value:l=>t.normalizeValue((l==null?void 0:l.group_name)??t.resolvedGroupName??(l==null?void 0:l.group_id))},{label:"Статус",value:l=>t.normalizeValue(t.statusLabel(l))},{label:"Видимість",value:l=>t.normalizeValue(t.visibilityLabel(l))},{label:"Тип сервісу",value:l=>t.normalizeValue(l==null?void 0:l.service_type)},{label:"Тип джерела",value:l=>t.normalizeValue(l==null?void 0:l.source_type)},{label:"Шлях до джерела",value:l=>t.normalizeValue(l==null?void 0:l.source_path)},{label:"Тип геометрії",value:l=>t.normalizeValue(l==null?void 0:l.geom_type)},{label:"Геометрична колонка",value:l=>t.normalizeValue(l==null?void 0:l.geometry_column)},{label:"SRID",value:l=>t.normalizeValue(l==null?void 0:l.srid)},{label:"Кількість обʼєктів",value:l=>t.normalizeValue(l==null?void 0:l.count)},{label:"Створено",value:l=>l!=null&&l.created_at?t.formatDate(l.created_at):""},{label:"Оновлено",value:l=>l!=null&&l.updated_at?t.formatDate(l.updated_at):""}],k=[{label:"Ключ сервісу",value:l=>t.normalizeValue(l==null?void 0:l.service_key)},{label:"Виробник",value:l=>t.normalizeValue((l==null?void 0:l.holder)??(l==null?void 0:l.producer))},{label:"Категорія",value:l=>t.normalizeValue(l==null?void 0:l.category)},{label:"Ліцензія",value:l=>t.normalizeValue(l==null?void 0:l.license)},{label:"Рік",value:l=>t.normalizeValue(l==null?void 0:l.year)},{label:"Ключові слова",value:l=>t.normalizeValue(l==null?void 0:l.keywords)},{label:"URL сервісу",value:l=>t.normalizeValue(l==null?void 0:l.service_url)},{label:"Metadata URL",value:l=>t.normalizeValue(l==null?void 0:l.metadata_url)},{label:"Thumbnail URL",value:l=>t.normalizeValue(l==null?void 0:l.thumbnail_url)},{label:"SQL / Query",value:l=>t.normalizeValue(l==null?void 0:l.query)}];return{service:{general:f,meta:k,edit:[...r,{name:"service_key",type:"text",label:"Ключ сервісу",col:6},{name:"producer",type:"text",label:"Виробник",col:6},{name:"category",type:"text",label:"Категорія",col:6},{name:"license",type:"text",label:"Ліцензія",col:6},{name:"year",type:"number",label:"Рік",col:6},{name:"service_url",type:"text",label:"URL сервісу",col:12},{name:"metadata_url",type:"text",label:"Metadata URL",col:12},{name:"thumbnail_url",type:"text",label:"Thumbnail URL",col:12},{name:"query",type:"textarea",label:"SQL / Query",col:12}]},dataset:{general:f,meta:k,edit:[...r,{name:"service_key",type:"text",label:"Ключ сервісу",col:6},{name:"producer",type:"text",label:"Виробник",col:6},{name:"category",type:"text",label:"Категорія",col:6},{name:"license",type:"text",label:"Ліцензія",col:6},{name:"year",type:"number",label:"Рік",col:6},{name:"service_url",type:"text",label:"URL сервісу",col:12},{name:"metadata_url",type:"text",label:"Metadata URL",col:12},{name:"thumbnail_url",type:"text",label:"Thumbnail URL",col:12},{name:"query",type:"textarea",label:"SQL / Query",col:12}]},raster:{general:[{label:"Статус",value:l=>t.normalizeValue(t.statusLabel(l))},{label:"Видимість",value:l=>t.normalizeValue(t.visibilityLabel(l))},{label:"Формат",value:l=>t.normalizeValue(l==null?void 0:l.extension)},{label:"SRID",value:l=>t.normalizeValue(l==null?void 0:l.srid)},{label:"Файл джерела",value:l=>t.normalizeValue(l==null?void 0:l.source_path)},{label:"Кеш",value:l=>p(l==null?void 0:l.cache)},{label:"XML",value:l=>p(l==null?void 0:l.xml)}],meta:[{label:"Bounds",value:l=>s(l)},{label:"Розмір",value:l=>t.normalizeValue(l==null?void 0:l.total_size)},{label:"Ширина",value:l=>t.normalizeValue(l==null?void 0:l.width)},{label:"Висота",value:l=>t.normalizeValue(l==null?void 0:l.height)},{label:"Кількість каналів",value:l=>t.normalizeValue(l==null?void 0:l.bands_count)},{label:"Канали",value:l=>c(l)},{label:"Роздільна здатність",value:l=>t.normalizeValue(l==null?void 0:l.resolution)},{label:"Глибина кольору",value:l=>t.normalizeValue(l==null?void 0:l.color_depth)},{label:"Стиснення",value:l=>t.normalizeValue(l==null?void 0:l.compression)},{label:"Proj4",value:l=>t.normalizeValue(l==null?void 0:l.proj4)}],edit:[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Активність",col:6,data:"yes_no"}]},css:{general:[{label:"Група",value:l=>t.normalizeValue((l==null?void 0:l.group_name)??t.resolvedGroupName??(l==null?void 0:l.group_id))},{label:"Статус",value:l=>t.normalizeValue(t.statusLabel(l))},{label:"Видимість",value:l=>t.normalizeValue(t.visibilityLabel(l))},{label:"Ключ CartoCSS",value:l=>t.normalizeValue(l==null?void 0:l.cartocss_key)},{label:"Таблиця джерела",value:l=>a(l,"table")||t.normalizeValue(l==null?void 0:l.source_path)},{label:"Ключ набору",value:l=>a(l,"key")},{label:"Авто-картка",value:l=>p(l==null?void 0:l.card_auto)},{label:"Інфо по кліку",value:l=>p(l==null?void 0:l.info)},{label:"Статичний",value:l=>p(l==null?void 0:l.is_static)}],meta:[{label:"Bounds",value:l=>i(l)}],edit:[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"enabled",type:"switcher",label:"Активність",col:6,data:"yes_no"},{name:"is_static",type:"switcher",label:"Статичний",col:6,data:"yes_no"}]}}}const dk={class:"flex-1 overflow-y-auto p-4"},uk={class:"space-y-4"},mk={class:"border border-gray-200 rounded-lg p-4"},pk={key:0,class:"grid grid-cols-2 gap-2"},fk={class:"text-xs text-gray-500 mb-1"},gk={class:"text-sm font-semibold text-gray-900"},yk={key:1,class:"text-sm text-gray-700 leading-relaxed"},hk={class:"border border-gray-200 rounded-lg p-4"},bk={class:"text-sm text-gray-700 leading-relaxed"},xk={class:"border border-gray-200 rounded-lg p-4"},kk={class:"flex items-center justify-between mb-3"},wk={class:"text-xs text-gray-500 mb-1"},_k={class:"text-sm font-semibold text-gray-900"},Ek={key:1,class:"text-sm text-gray-700 leading-relaxed"},Ck={class:"border border-gray-200 rounded-lg p-4"},Nk={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Vk=["disabled"],Bk=["disabled"],vt="-",Oo=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved","editCssBounds"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(P=>P.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),a=t,i=n,s=e.ref(null);async function c(P){var ee;try{const K=await fetch("/api/suggest/gis.group_list");if(!K.ok)return null;const J=(ee=(await K.json()).data)==null?void 0:ee.find(G=>String(G.id)===String(P));return(J==null?void 0:J.text)??null}catch{return null}}e.watch(()=>a.data,async P=>{if(s.value=null,(P==null?void 0:P.group_id)!=null){const ee=await c(String(P.group_id));s.value=ee}},{immediate:!0});function p(P){if(!P||typeof P!="string")return vt;try{const ee=new Date(P);return Number.isNaN(ee.getTime())?vt:ee.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return vt}}function f(P){return typeof(P==null?void 0:P.is_active)=="boolean"?P.is_active?"Активний":"Неактивний":typeof(P==null?void 0:P.enabled)=="boolean"?P.enabled?"Активний":"Неактивний":vt}function k(P){return typeof(P==null?void 0:P.is_public)!="boolean"?vt:P.is_public?"Публічний":"Приватний"}function l(P){if(P==null)return"";if(Array.isArray(P))return P.filter(Boolean).join(", ");if(typeof P=="boolean")return P?"Так":"Ні";if(typeof P=="object")return"";const ee=String(P).trim();return ee===""?"":ee}function y(P,ee){return ee.map(K=>({label:K.label,value:K.value(P)})).filter(K=>K.value&&K.value!==vt)}const u=e.computed(()=>y(a.data,_().general)),m=e.computed(()=>{var ee;const P=(ee=a.data)==null?void 0:ee.description;return P!=null&&P!==""?P:vt}),b=e.computed(()=>y(a.data,_().meta)),g=e.computed(()=>b.value.length===1?"grid-cols-1":"grid-cols-2"),d=e.computed(()=>a.entityType==="css"||a.entityType==="raster"),h=e.ref(!1),x=e.ref({}),N=e.ref(null),$=e.ref(!1);function _(){const P=ck({resolvedGroupName:s.value,normalizeValue:l,statusLabel:f,visibilityLabel:k,formatDate:p});return P[a.entityType||"service"]||P.service}const w=e.computed(()=>_().edit);function E(){const P=a.data,ee={};_().edit.forEach(K=>{switch(K.name){case"group_id":ee.group_id=(P==null?void 0:P.group_id)!=null?String(P.group_id):"";break;case"producer":ee.producer=(P==null?void 0:P.holder)??(P==null?void 0:P.producer)??"";break;case"keywords":ee.keywords=Array.isArray(P==null?void 0:P.keywords)?[...P.keywords]:[];break;case"is_public":ee.is_public=(P==null?void 0:P.is_public)??!1;break;case"is_active":ee.is_active=typeof(P==null?void 0:P.is_active)=="boolean"?P.is_active:(P==null?void 0:P.enabled)??!1;break;case"enabled":ee.enabled=(P==null?void 0:P.enabled)??(P==null?void 0:P.is_active)??!1;break;case"info":ee.info=(P==null?void 0:P.info)??!1;break;case"is_static":ee.is_static=(P==null?void 0:P.is_static)??!1;break;case"card_auto":ee.card_auto=(P==null?void 0:P.card_auto)??!1;break;default:ee[K.name]=(P==null?void 0:P[K.name])??"";break}}),x.value=ee,N.value=null,h.value=!0}function B(){i("editCssBounds")}function z(P){return a.entityType==="raster"&&P==="Bounds"}async function Z(){var P,ee;if(!(!a.entityId||!a.entityType)){if(N.value){const K=(ee=(P=N.value).validate)==null?void 0:ee.call(P);if(K){ye.notify({type:"warning",title:"Валідація",message:Object.entries(K).map(([le,J])=>`${le}: ${J}`).join(`
38
- `)});return}}$.value=!0;try{const K=new Set(w.value.map(M=>M.name)),le=Object.fromEntries(Object.entries(x.value).filter(([M])=>K.has(M))),J=a.entityType==="css"?{url:`/api/gis-css/${encodeURIComponent(a.entityId)}`,method:"POST"}:{url:`/api/gis-metadata/${encodeURIComponent(a.entityType)}/${encodeURIComponent(a.entityId)}`,method:"POST"},G=await fetch(J.url,{method:J.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(le)});if(!G.ok)throw new Error(`Failed to save metadata: ${G.status}`);ye.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),h.value=!1,i("saved")}catch(K){console.error("Failed to save metadata",K),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{$.value=!1}}}return(P,ee)=>(e.openBlock(),e.createElementBlock("div",dk,[e.createElementVNode("div",uk,[e.createElementVNode("div",mk,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[ee[5]||(ee[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:E,class:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium transition-colors bg-sky-50 text-sky-600 hover:bg-sky-100"},[...ee[4]||(ee[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})],-1),e.createTextVNode(" Редагувати ",-1)])])]),u.value.length?(e.openBlock(),e.createElementBlock("div",pk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,K=>(e.openBlock(),e.createElementBlock("div",{key:K.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",fk,e.toDisplayString(K.label),1),e.createElementVNode("p",gk,e.toDisplayString(K.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",yk,e.toDisplayString(vt)))]),e.createElementVNode("div",hk,[ee[6]||(ee[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",bk,e.toDisplayString(m.value),1)]),e.createElementVNode("div",xk,[e.createElementVNode("div",kk,[ee[8]||(ee[8]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Метадані ",-1)),d.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium transition-colors bg-sky-50 text-sky-600 hover:bg-sky-100",onClick:B},[...ee[7]||(ee[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})],-1),e.createTextVNode(" Редагувати ",-1)])])):e.createCommentVNode("",!0)]),b.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass([g.value,"grid gap-2"])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,K=>(e.openBlock(),e.createElementBlock("div",{key:K.label,class:e.normalizeClass(["bg-gray-50 rounded-md p-2 border border-gray-100",{"col-span-2":z(K.label)}])},[e.createElementVNode("p",wk,e.toDisplayString(K.label),1),e.createElementVNode("p",_k,e.toDisplayString(K.value),1)],2))),128))],2)):(e.openBlock(),e.createElementBlock("p",Ek,e.toDisplayString(vt)))]),e.createElementVNode("div",Ck,[ee[9]||(ee[9]=e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Доступи ")],-1)),e.createVNode(ik,{"service-id":t.entityId,limit:8},null,8,["service-id"])])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:h.value,"onUpdate:visible":ee[3]||(ee[3]=K=>h.value=K),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Nk,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:$.value,onClick:ee[2]||(ee[2]=K=>h.value=!1)}," Скасувати ",8,Vk),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:$.value,onClick:Z},e.toDisplayString($.value?"Збереження…":"Зберегти"),9,Bk)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:x.value,"onUpdate:values":ee[0]||(ee[0]=K=>x.value=K),form:N.value,"onUpdate:form":ee[1]||(ee[1]=K=>N.value=K),schema:w.value},null,8,["values","form","schema"])]),_:1},8,["visible"])]))}}),$k=["href"],Sk=["href"],vk=["href"],Lk={key:0,class:"py-6 px-4 text-sm text-gray-500"},Tk={key:1,class:"py-6 px-4 text-sm text-red-600"},Ak={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Mk=["disabled"],Dk=["disabled"],Fk=192,Ul=8,En=8,Uo=e.defineComponent({__name:"HeaderActions",props:{entityId:{},entityInfo:{},table:{},formEndpoint:{},saveEndpoint:{},entityLabel:{},editButtonText:{},saveMethod:{},showXmlItem:{type:Boolean,default:!0},clearTilesHandler:{}},emits:["saved"],setup(t,{emit:n}){const o=t,r=n,a=e.defineAsyncComponent(()=>import("@opengis/core").then(se=>se.VsModal)),i=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.ref(!1),c=e.ref(null),p=e.ref(null),f=e.ref(null),k=e.ref(null),l=e.computed(()=>k.value?{position:"fixed",top:`${k.value.top}px`,left:`${k.value.left}px`}:{});e.watch(s,se=>{se&&e.nextTick(I)});const y=e.ref(!1),u=e.ref(null),m=e.ref({}),b=e.ref(null),g=e.ref(""),d=e.ref(!1),h=e.ref(!1),x=e.ref(null),N=e.computed(()=>o.entityId||""),$=(se,v)=>se?typeof se=="function"?se(v):typeof se!="string"?"":se.includes(":id")?v?se.replace(":id",encodeURIComponent(v)):"":se:"",_=e.computed(()=>{var se;return(se=o.table)==null?void 0:se.trim()}),w=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(_.value)return se=>`/api/form/${_.value}/${se}`}),E=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(_.value)return se=>`/api/table/${se}`}),B=e.computed(()=>$(w.value,N.value)),z=e.computed(()=>o.saveEndpoint?$(o.saveEndpoint,N.value):x.value?`/api/table/${encodeURIComponent(x.value)}`:$(E.value,N.value)),Z=e.computed(()=>$("/api/gis-clear-rtile/:id",N.value)),P=e.computed(()=>$("/api/gis-xml/:id",N.value)),ee=e.computed(()=>$("/api/gis-pretile/:id?zoom=10&max=12",N.value)),K=e.computed(()=>{var A,O,F;const se=(O=(A=o.entityInfo)==null?void 0:A.name)==null?void 0:O.trim();if(se)return`Редагування ${se}`;const v=(F=o.entityLabel)==null?void 0:F.trim();return v?`Редагування ${v}`:"Редагування"}),le=e.computed(()=>o.editButtonText||"Редагувати"),J=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function G(){s.value||I(),s.value=!s.value}function M(){s.value=!1}async function j(){const se=o.clearTilesHandler;!se||!N.value||(M(),await se(N.value))}function I(){var we;if(typeof window>"u"||!p.value)return;const se=p.value.getBoundingClientRect(),v=window.innerWidth,A=window.innerHeight,O=se.left,F=Math.max(v-Fk-En,En),Y=Math.min(Math.max(O,En),F),ce=((we=f.value)==null?void 0:we.offsetHeight)??0,me=se.bottom+Ul;let ge=me;if(ce&&me+ce>A-En){const Se=se.top-Ul-ce;ge=Math.max(Se,En)}k.value={top:ge,left:Y}}function S(se){var A,O;if(!c.value&&!f.value)return;const v=se.target;v&&((A=c.value)!=null&&A.contains(v)||(O=f.value)!=null&&O.contains(v))||(s.value=!1)}function R(){s.value&&I()}e.onMounted(()=>{window.addEventListener("click",S),window.addEventListener("resize",R),window.addEventListener("scroll",R,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",S),window.removeEventListener("resize",R),window.removeEventListener("scroll",R,!0)});async function Q(){var se,v,A;if(!(!N.value||!B.value)){M(),y.value=!0,d.value=!0,g.value="",u.value=null,m.value={},x.value=null;try{const O=await fetch(B.value);if(!O.ok)throw new Error(`Failed to load form: ${O.status}`);const F=await O.json();m.value=(F==null?void 0:F.data)||{},u.value=(F==null?void 0:F.schema)||null;const Y=typeof(F==null?void 0:F.token)=="string"&&F.token||typeof((se=F==null?void 0:F.tokens)==null?void 0:se.edit)=="string"&&F.tokens.edit||typeof((v=F==null?void 0:F.tokens)==null?void 0:v.edit_token)=="string"&&F.tokens.edit_token||typeof((A=F==null?void 0:F.data)==null?void 0:A.token)=="string"&&F.data.token||null;x.value=Y,b.value=null}catch(O){console.error("Failed to load edit form",O),g.value="Не вдалося завантажити форму редагування"}finally{d.value=!1}}}function ue(){y.value=!1,u.value=null,g.value="",x.value=null}async function fe(){var se,v;if(!(!N.value||!z.value)){if(b.value){const A=(v=(se=b.value).validate)==null?void 0:v.call(se);if(A){ye.notify({type:"warning",title:"Validation",message:Object.entries(A).map(([O,F])=>`${O}: ${F}`).join(`
39
- `)});return}}h.value=!0;try{const A=await fetch(z.value,{method:J.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(m.value)});if(!A.ok)throw new Error(`Failed to save: ${A.status}`);ye.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",m.value),ue()}catch(A){console.error("Failed to save edit form",A),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{h.value=!1}}}return(se,v)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:c,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:p,type:"button",onClick:e.withModifiers(G,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...v[3]||(v[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:f,style:e.normalizeStyle(l.value),class:"absolute top-0 left-0 mt-2 w-48 rounded-xl border border-gray-200 bg-white shadow-lg text-sm z-[1000]"},[Z.value||t.clearTilesHandler?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[t.clearTilesHandler?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:j},[e.createVNode(e.unref(pe.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),v[4]||(v[4]=e.createElementVNode("span",null,"Очистити тайли",-1))])):(e.openBlock(),e.createElementBlock("a",{key:1,href:Z.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:M},[e.createVNode(e.unref(pe.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),v[5]||(v[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,$k))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,href:P.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:M},[e.createVNode(e.unref(pe.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),v[6]||(v[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,Sk)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:2,href:ee.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:M},[e.createVNode(e.unref(pe.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),v[7]||(v[7]=e.createElementVNode("span",null,"Pretile",-1))],8,vk)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-b-xl",onClick:Q},[e.createVNode(e.unref(pe.Pencil),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(le.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(a),{teleport:"#modal",visible:y.value,"onUpdate:visible":v[2]||(v[2]=A=>y.value=A),title:K.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Ak,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:ue,disabled:h.value}," Скасувати ",8,Mk),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:fe,disabled:h.value},e.toDisplayString(h.value?"Зберігається…":"Зберегти"),9,Dk)])]),default:e.withCtx(()=>[d.value?(e.openBlock(),e.createElementBlock("div",Lk," Завантаження форми редагування… ")):g.value?(e.openBlock(),e.createElementBlock("div",Tk,e.toDisplayString(g.value),1)):(e.openBlock(),e.createBlock(e.unref(i),{key:2,values:m.value,"onUpdate:values":v[0]||(v[0]=A=>m.value=A),form:b.value,"onUpdate:form":v[1]||(v[1]=A=>b.value=A),schema:u.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),Cn="cartocss",zk={defaultToken:"",tokenPostfix:".cartocss",ignoreCase:!0,tokenizer:{root:[[/\s*\/\*/,"comment","@comment"],[/\s*"(?:[^"\\]|\\.)*"/,"string"],[/\s*'(?:[^'\\]|\\.)*'/,"string"],[/#[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\.[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\[[^\]]*\]/,"keyword"],[/::[a-zA-Z_][a-zA-Z0-9_-]*/,"tag"],[/[a-zA-Z_][a-zA-Z0-9_-]*(?=\s*:)/,"attribute.name"],[/[-]?\d+\.?\d*(px|em|%|pt)?/,"number"],[/#[0-9a-fA-F]{3,8}\b/,"string"],[/[,{};:()[\]]/,"delimiter"],[/\s+/,""]],comment:[[/\*\//,"comment","@pop"],[/[^*]+/,"comment"],[/./,"comment"]]}},Ik={comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},ql=["image-filters","image-filters-inflate","direct-image-filters","comp-op","opacity","polygon","polygon-fill","polygon-opacity","polygon-gamma","polygon-gamma-method","polygon-clip","polygon-simplify","polygon-simplify-algorithm","polygon-smooth","polygon-geometry-transform","polygon-comp-op","polygon-pattern-file","polygon-pattern-opacity","polygon-pattern-clip","polygon-pattern-alignment","polygon-pattern-gamma","polygon-pattern-simplify","polygon-pattern-simplify-algorithm","polygon-pattern-smooth","polygon-pattern-geometry-transform","polygon-pattern-transform","polygon-pattern-comp-op","line","line-color","line-width","line-opacity","line-join","line-cap","line-gamma","line-gamma-method","line-dasharray","line-dash-offset","line-miterlimit","line-clip","line-simplify","line-simplify-algorithm","line-smooth","line-offset","line-rasterizer","line-geometry-transform","line-comp-op","line-pattern-file","line-pattern-opacity","line-pattern-clip","line-pattern-simplify","line-pattern-simplify-algorithm","line-pattern-smooth","line-pattern-offset","line-pattern-geometry-transform","line-pattern-transform","line-pattern-comp-op","marker","marker-file","marker-opacity","marker-fill-opacity","marker-line-color","marker-line-width","marker-line-opacity","marker-placement","marker-multi-policy","marker-type","marker-width","marker-height","marker-fill","marker-allow-overlap","marker-avoid-edges","marker-ignore-placement","marker-spacing","marker-max-error","marker-transform","marker-clip","marker-simplify","marker-simplify-algorithm","marker-smooth","marker-geometry-transform","marker-offset","marker-comp-op","marker-direction","shield","shield-name","shield-file","shield-face-name","shield-unlock-image","shield-size","shield-fill","shield-placement","shield-avoid-edges","shield-allow-overlap","shield-margin","shield-repeat-distance","shield-min-distance","shield-spacing","shield-min-padding","shield-label-position-tolerance","shield-wrap-width","shield-wrap-before","shield-wrap-character","shield-halo-fill","shield-halo-radius","shield-halo-rasterizer","shield-halo-transform","shield-halo-comp-op","shield-halo-opacity","shield-character-spacing","shield-line-spacing","shield-text-dx","shield-text-dy","shield-dx","shield-dy","shield-opacity","shield-text-opacity","shield-horizontal-alignment","shield-vertical-alignment","shield-placement-type","shield-placements","shield-text-transform","shield-justify-alignment","shield-transform","shield-clip","shield-simplify","shield-simplify-algorithm","shield-smooth","shield-comp-op","shield-grid-cell-width","shield-grid-cell-height","raster","raster-opacity","raster-filter-factor","raster-scaling","raster-mesh-size","raster-comp-op","raster-colorizer-default-mode","raster-colorizer-default-color","raster-colorizer-epsilon","raster-colorizer-stops","point","point-file","point-allow-overlap","point-ignore-placement","point-opacity","point-placement","point-transform","point-comp-op","text","text-name","text-face-name","text-size","text-ratio","text-wrap-width","text-wrap-before","text-wrap-character","text-repeat-wrap-character","text-spacing","text-character-spacing","text-line-spacing","text-label-position-tolerance","text-max-char-angle-delta","text-fill","text-opacity","text-halo-opacity","text-halo-fill","text-halo-radius","text-halo-rasterizer","text-halo-transform","text-dx","text-dy","text-vertical-alignment","text-avoid-edges","text-margin","text-repeat-distance","text-min-distance","text-min-padding","text-min-path-length","text-allow-overlap","text-orientation","text-rotate-displacement","text-upright","text-placement","text-placement-type","text-placements","text-transform","text-horizontal-alignment","text-align","text-clip","text-simplify","text-simplify-algorithm","text-smooth","text-comp-op","text-halo-comp-op","text-font-feature-settings","text-largest-bbox-only","text-grid-cell-width","text-grid-cell-height","building","building-fill","building-fill-opacity","building-height","debug-mode","dot","dot-fill","dot-opacity","dot-width","dot-height","dot-comp-op"],jk={"polygon-fill":"Fill color to assign to a polygon. Type: color.","polygon-opacity":"The opacity of the polygon (0-1). Type: float.","line-color":"The color of a drawn line. Type: color.","line-width":"The width of a line in pixels. Type: float.","line-opacity":"The opacity of a line (0-1). Type: float.","line-dasharray":"Dash pattern: pair of length values [a,b] or more. Type: numbers.","marker-fill":"The color of the area of the marker. Type: color.","marker-width":"The width of the marker in pixels. Type: float.","marker-height":"The height of the marker in pixels. Type: float.","marker-file":"A file that this marker shows at each placement. Type: uri (e.g. url('marker.png')).","text-name":"Value to use for a text label. Data columns: [column_name]. Type: string.","text-face-name":"Font name and style to render a label in. Type: string.","text-size":"Text size in pixels. Type: float.","text-fill":"Specifies the color for the text. Type: color.","text-halo-fill":"Specifies the color of the halo around the text. Type: color.","text-halo-radius":"Specify the radius of the halo in pixels. Type: float.","comp-op":"Composite operation. Defines how this layer behaves relative to layers atop or below it. Type: keyword.",opacity:"An alpha value for the style (0-1). Type: float."};let Hl=!1;function Pk(t,n){if(n<1)return null;const r=t.substring(0,n-1).match(/[a-zA-Z_-]+$/);if(!r)return null;const a=r[0],i=n-a.length;return{prefix:a,startColumn:i,endColumn:n}}function Rk(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const a=r[0].replace(/\s*:$/,"").trim(),i=r.index+1,s=r.index+r[0].length,p=t.substring(s).indexOf(";"),f=p>=0?s+p+1:t.length+1;if(n>=i&&n<=f)return ql.includes(a)?a:null}return null}function Ok(t){Hl||(Hl=!0,t.languages.register({id:Cn}),t.languages.setMonarchTokensProvider(Cn,zk),t.languages.setLanguageConfiguration(Cn,Ik),t.languages.registerCompletionItemProvider(Cn,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),a=Pk(r,o.column),i=((a==null?void 0:a.prefix)??"").toLowerCase(),s=a&&a.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:a.startColumn,endLineNumber:o.lineNumber,endColumn:a.endColumn}:void 0;return{suggestions:ql.filter(p=>!i||p.toLowerCase().includes(i)||p.toLowerCase().startsWith(i)).map(p=>({label:p,kind:t.languages.CompletionItemKind.Property,insertText:p+": ",...s&&{range:s}}))}}}),t.languages.registerHoverProvider(Cn,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),a=Rk(r,o.column);if(!a)return;const i=jk[a];return{contents:[{value:`**${a}**
37
+ `:""}var d1=c1,u1={dump:d1};function jo(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var m1=mt,p1=Ir,f1=Or,g1=Yr,y1=Gr,h1=vo,Il=bl.load,b1=bl.loadAll,jl=u1.dump,x1=yt,k1={binary:Qr,float:Wr,map:Rr,null:Ur,pairs:tl,set:nl,timestamp:Xr,bool:qr,int:Hr,merge:Jr,omap:el,seq:Pr,str:jr},w1=jo("safeLoad","load"),_1=jo("safeLoadAll","loadAll"),E1=jo("safeDump","dump"),Pl={Type:m1,Schema:p1,FAILSAFE_SCHEMA:f1,JSON_SCHEMA:g1,CORE_SCHEMA:y1,DEFAULT_SCHEMA:h1,load:Il,loadAll:b1,dump:jl,YAMLException:x1,types:k1,safeLoad:w1,safeLoadAll:_1,safeDump:E1};const C1={},N1={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:"inline-block shrink-0"};function V1(t,n){return e.openBlock(),e.createElementBlock("svg",N1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 3 4 7l4 4"},null,-1),e.createElementVNode("path",{d:"M4 7h16"},null,-1),e.createElementVNode("path",{d:"m16 21 4-4-4-4"},null,-1),e.createElementVNode("path",{d:"M20 17H4"},null,-1)])])}const B1=Ve(C1,[["render",V1]]),$1=["aria-label"],Po=e.defineComponent({__name:"PanelToggleButton",props:{open:{type:Boolean},topClass:{default:"top-5"}},emits:["toggle"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{type:"button",onClick:o[0]||(o[0]=r=>n.$emit("toggle")),class:e.normalizeClass(["absolute right-0 w-5 h-9 shrink-0 rounded-l-lg inline-flex items-center justify-center","text-gray-600 hover:bg-gray-100 hover:text-gray-800 transition border border-gray-100 shadow-md bg-white z-[21]",t.topClass]),"aria-label":t.open?"Закрити панель":"Відкрити панель"},[e.createVNode(B1,{class:"h-3 w-3"})],10,$1))}}),S1={},v1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-settings"};function L1(t,n){return e.openBlock(),e.createElementBlock("svg",v1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Rl=Ve(S1,[["render",L1]]),T1={},A1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers"};function M1(t,n){return e.openBlock(),e.createElementBlock("svg",A1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"},null,-1),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"},null,-1),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"},null,-1)])])}const D1=Ve(T1,[["render",M1]]),F1={},z1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-eye"};function I1(t,n){return e.openBlock(),e.createElementBlock("svg",z1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Ol=Ve(F1,[["render",I1]]),j1={},P1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map"};function R1(t,n){return e.openBlock(),e.createElementBlock("svg",P1,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"},null,-1),e.createElementVNode("path",{d:"M15 5.764v15"},null,-1),e.createElementVNode("path",{d:"M9 3.236v15"},null,-1)])])}const O1=Ve(j1,[["render",R1]]),U1={},q1={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-filter"};function H1(t,n){return e.openBlock(),e.createElementBlock("svg",q1,[...n[0]||(n[0]=[e.createElementVNode("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"},null,-1)])])}const W1=Ve(U1,[["render",H1]]),Ro=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(me.Settings),{size:16,class:"lucide lucide-settings"}))}}),Y1={class:"flex flex-col gap-2"},G1={class:"relative flex items-center"},Z1={key:0,class:"flex flex-col gap-1.5"},K1={key:1,class:"flex flex-col items-center gap-1.5 py-5 text-gray-400"},X1={class:"text-xs"},J1={key:2,class:"flex flex-col gap-1 p-0"},Q1={class:"flex size-[30px] shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-500 text-xs font-semibold text-white"},ek={class:"flex min-w-0 flex-1 flex-col gap-0.5"},tk={class:"truncate text-xs font-medium text-gray-900"},nk={class:"flex flex-wrap gap-1"},ok={key:3,class:"flex items-center justify-end gap-1.5 pt-1"},rk=["disabled"],lk={class:"min-w-[36px] text-center text-[11px] text-gray-500"},ak=["disabled"],sk={class:"ml-1 text-[11px] text-gray-400"},ik=e.defineComponent({__name:"ServiceUsers",props:{serviceId:{},limit:{}},setup(t){const n=t,o=n.limit??10,r=e.ref([]),a=e.ref(0),i=e.ref(!1),s=e.ref(1),c=e.ref("");let p=null;const f=e.computed(()=>Math.max(1,Math.ceil(a.value/o))),k=e.computed(()=>{const $=a.value%100,_=a.value%10;return $>=11&&$<=19?"ів":_===1?"":_>=2&&_<=4?"и":"ів"});function l($){return($||"?").trim().charAt(0).toUpperCase()}function y($){if(!$)return[];if(Array.isArray($))return $;if(typeof $=="string"){try{const _=JSON.parse($);if(Array.isArray(_))return _}catch{}return $.replace(/[{}"]/g,"").split(",").filter(Boolean)}return[]}const u={view:"Перегляд",edit:"Редагування",del:"Видалення",add:"Додавання"};function m($){return u[$]??$}const b={view:"bg-blue-50 text-blue-700 border-blue-200",edit:"bg-green-50 text-green-700 border-green-200",del:"bg-red-50 text-red-600 border-red-200",add:"bg-emerald-50 text-emerald-700 border-emerald-200",admin:"bg-purple-50 text-purple-700 border-purple-200",export:"bg-amber-50 text-amber-700 border-amber-200",import:"bg-teal-50 text-teal-700 border-teal-200"};function g($){return b[$]??"bg-gray-50 text-gray-600 border-gray-200"}async function d(){if(!n.serviceId){r.value=[],a.value=0;return}i.value=!0;try{const $=(s.value-1)*o,_=new URLSearchParams({limit:String(o),offset:String($)});c.value.trim()&&_.set("search",c.value.trim());const w=await fetch(`/api/gis-service-users/${encodeURIComponent(String(n.serviceId))}?${_}`);if(!w.ok)throw new Error(`HTTP ${w.status}`);const E=await w.json();r.value=(E==null?void 0:E.rows)??[],a.value=(E==null?void 0:E.count)??0}catch($){console.error("[ServiceUsers] fetch error",$),r.value=[],a.value=0}finally{i.value=!1}}function h($){s.value=$,d()}function x(){p&&clearTimeout(p),p=setTimeout(()=>{s.value=1,d()},350)}function N(){c.value="",s.value=1,d()}return e.watch(()=>n.serviceId,()=>{s.value=1,c.value="",d()},{immediate:!0}),($,_)=>(e.openBlock(),e.createElementBlock("div",Y1,[e.createElementVNode("div",G1,[_[4]||(_[4]=e.createElementVNode("div",{class:"pointer-events-none absolute left-2.5 flex text-gray-400"},[e.createElementVNode("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"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})])],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[0]||(_[0]=w=>c.value=w),type:"text",class:"w-full rounded-md border border-gray-200 bg-gray-50 py-1.5 pl-8 pr-7 text-xs text-gray-900 outline-none transition focus:border-blue-400 focus:bg-white focus:ring-2 focus:ring-blue-400/20",placeholder:"Пошук за іменем або логіном…",onInput:x},null,544),[[e.vModelText,c.value]]),c.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"absolute right-2 flex items-center justify-center rounded p-0.5 text-gray-400 transition hover:text-gray-700",onClick:N},[..._[3]||(_[3]=[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.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])):e.createCommentVNode("",!0)]),i.value?(e.openBlock(),e.createElementBlock("div",Z1,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(3,w=>e.createElementVNode("div",{key:w,class:"flex animate-pulse items-center gap-2 rounded-lg bg-gray-50 px-2 py-1.5"},[..._[5]||(_[5]=[e.createElementVNode("div",{class:"size-[30px] shrink-0 rounded-full bg-gray-200"},null,-1),e.createElementVNode("div",{class:"flex flex-1 flex-col gap-1.5"},[e.createElementVNode("div",{class:"h-2 w-2/3 rounded bg-gray-200"}),e.createElementVNode("div",{class:"h-2 w-1/3 rounded bg-gray-200"})],-1)])])),64))])):r.value.length?(e.openBlock(),e.createElementBlock("ul",J1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,w=>(e.openBlock(),e.createElementBlock("li",{key:w.user_id,class:"flex items-center gap-2 rounded-lg border border-gray-100 bg-gray-50 px-2 py-1.5 transition hover:border-sky-200 hover:bg-sky-50"},[e.createElementVNode("div",Q1,e.toDisplayString(l(w.user_full_name)),1),e.createElementVNode("div",ek,[e.createElementVNode("span",tk,e.toDisplayString(w.user_full_name),1),e.createElementVNode("div",nk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y(w.actions),E=>(e.openBlock(),e.createElementBlock("span",{key:E,class:e.normalizeClass(["rounded-full border px-1.5 py-px text-[10px] font-medium",g(E)])},e.toDisplayString(m(E)),3))),128))])])]))),128))])):(e.openBlock(),e.createElementBlock("div",K1,[_[6]||(_[6]=e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="opacity-50"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>',1)),e.createElementVNode("span",X1,e.toDisplayString(c.value?"Нічого не знайдено":"Немає користувачів з доступом"),1)])),f.value>1?(e.openBlock(),e.createElementBlock("div",ok,[e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:s.value===1,onClick:_[1]||(_[1]=w=>h(s.value-1))},[..._[7]||(_[7]=[e.createElementVNode("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"},[e.createElementVNode("polyline",{points:"15 18 9 12 15 6"})],-1)])],8,rk),e.createElementVNode("span",lk,e.toDisplayString(s.value)+" / "+e.toDisplayString(f.value),1),e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:s.value===f.value,onClick:_[2]||(_[2]=w=>h(s.value+1))},[..._[8]||(_[8]=[e.createElementVNode("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"},[e.createElementVNode("polyline",{points:"9 18 15 12 9 6"})],-1)])],8,ak),e.createElementVNode("span",sk,e.toDisplayString(a.value)+" запис"+e.toDisplayString(k.value),1)])):e.createCommentVNode("",!0)]))}});function ck(t){const o=l=>typeof l!="number"||Number.isNaN(l)?"":Number(l.toFixed(5)).toFixed(5),r=[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:12},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Активність",col:6,data:"yes_no"}],a=(l,y)=>{const u=Array.isArray(l==null?void 0:l.config)?l.config[0]:null;return t.normalizeValue(u==null?void 0:u[y])},i=l=>!Array.isArray(l==null?void 0:l.bounds)||l.bounds.length<4?"":l.bounds.map(y=>o(y)).filter(Boolean).join(", "),s=l=>!Array.isArray(l==null?void 0:l.extent)||l.extent.length<4?"":l.extent.map(y=>o(y)).filter(Boolean).join(", "),c=l=>!Array.isArray(l==null?void 0:l.bands)||!l.bands.length?"":l.bands.join(", "),p=l=>typeof l!="boolean"?"":l?"Так":"Ні",f=[{label:"Група",value:l=>t.normalizeValue((l==null?void 0:l.group_name)??t.resolvedGroupName??(l==null?void 0:l.group_id))},{label:"Статус",value:l=>t.normalizeValue(t.statusLabel(l))},{label:"Видимість",value:l=>t.normalizeValue(t.visibilityLabel(l))},{label:"Тип сервісу",value:l=>t.normalizeValue(l==null?void 0:l.service_type)},{label:"Тип джерела",value:l=>t.normalizeValue(l==null?void 0:l.source_type)},{label:"Шлях до джерела",value:l=>t.normalizeValue(l==null?void 0:l.source_path)},{label:"Тип геометрії",value:l=>t.normalizeValue(l==null?void 0:l.geom_type)},{label:"Геометрична колонка",value:l=>t.normalizeValue(l==null?void 0:l.geometry_column)},{label:"SRID",value:l=>t.normalizeValue(l==null?void 0:l.srid)},{label:"Кількість обʼєктів",value:l=>t.normalizeValue(l==null?void 0:l.count)},{label:"Створено",value:l=>l!=null&&l.created_at?t.formatDate(l.created_at):""},{label:"Оновлено",value:l=>l!=null&&l.updated_at?t.formatDate(l.updated_at):""}],k=[{label:"Ключ сервісу",value:l=>t.normalizeValue(l==null?void 0:l.service_key)},{label:"Виробник",value:l=>t.normalizeValue((l==null?void 0:l.holder)??(l==null?void 0:l.producer))},{label:"Категорія",value:l=>t.normalizeValue(l==null?void 0:l.category)},{label:"Ліцензія",value:l=>t.normalizeValue(l==null?void 0:l.license)},{label:"Рік",value:l=>t.normalizeValue(l==null?void 0:l.year)},{label:"Ключові слова",value:l=>t.normalizeValue(l==null?void 0:l.keywords)},{label:"URL сервісу",value:l=>t.normalizeValue(l==null?void 0:l.service_url)},{label:"Metadata URL",value:l=>t.normalizeValue(l==null?void 0:l.metadata_url)},{label:"Thumbnail URL",value:l=>t.normalizeValue(l==null?void 0:l.thumbnail_url)},{label:"SQL / Query",value:l=>t.normalizeValue(l==null?void 0:l.query)}];return{service:{general:f,meta:k,edit:[...r,{name:"service_key",type:"text",label:"Ключ сервісу",col:6},{name:"producer",type:"text",label:"Виробник",col:6},{name:"category",type:"text",label:"Категорія",col:6},{name:"license",type:"text",label:"Ліцензія",col:6},{name:"year",type:"number",label:"Рік",col:6},{name:"service_url",type:"text",label:"URL сервісу",col:12},{name:"metadata_url",type:"text",label:"Metadata URL",col:12},{name:"thumbnail_url",type:"text",label:"Thumbnail URL",col:12},{name:"query",type:"textarea",label:"SQL / Query",col:12}]},dataset:{general:f,meta:k,edit:[...r,{name:"service_key",type:"text",label:"Ключ сервісу",col:6},{name:"producer",type:"text",label:"Виробник",col:6},{name:"category",type:"text",label:"Категорія",col:6},{name:"license",type:"text",label:"Ліцензія",col:6},{name:"year",type:"number",label:"Рік",col:6},{name:"service_url",type:"text",label:"URL сервісу",col:12},{name:"metadata_url",type:"text",label:"Metadata URL",col:12},{name:"thumbnail_url",type:"text",label:"Thumbnail URL",col:12},{name:"query",type:"textarea",label:"SQL / Query",col:12}]},raster:{general:[{label:"Статус",value:l=>t.normalizeValue(t.statusLabel(l))},{label:"Видимість",value:l=>t.normalizeValue(t.visibilityLabel(l))},{label:"Формат",value:l=>t.normalizeValue(l==null?void 0:l.extension)},{label:"SRID",value:l=>t.normalizeValue(l==null?void 0:l.srid)},{label:"Файл джерела",value:l=>t.normalizeValue(l==null?void 0:l.source_path)},{label:"Кеш",value:l=>p(l==null?void 0:l.cache)},{label:"XML",value:l=>p(l==null?void 0:l.xml)}],meta:[{label:"Bounds",value:l=>s(l)},{label:"Розмір",value:l=>t.normalizeValue(l==null?void 0:l.total_size)},{label:"Ширина",value:l=>t.normalizeValue(l==null?void 0:l.width)},{label:"Висота",value:l=>t.normalizeValue(l==null?void 0:l.height)},{label:"Кількість каналів",value:l=>t.normalizeValue(l==null?void 0:l.bands_count)},{label:"Канали",value:l=>c(l)},{label:"Роздільна здатність",value:l=>t.normalizeValue(l==null?void 0:l.resolution)},{label:"Глибина кольору",value:l=>t.normalizeValue(l==null?void 0:l.color_depth)},{label:"Стиснення",value:l=>t.normalizeValue(l==null?void 0:l.compression)},{label:"Proj4",value:l=>t.normalizeValue(l==null?void 0:l.proj4)}],edit:[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Активність",col:6,data:"yes_no"}]},css:{general:[{label:"Група",value:l=>t.normalizeValue((l==null?void 0:l.group_name)??t.resolvedGroupName??(l==null?void 0:l.group_id))},{label:"Статус",value:l=>t.normalizeValue(t.statusLabel(l))},{label:"Видимість",value:l=>t.normalizeValue(t.visibilityLabel(l))},{label:"Ключ CartoCSS",value:l=>t.normalizeValue(l==null?void 0:l.cartocss_key)},{label:"Таблиця джерела",value:l=>a(l,"table")||t.normalizeValue(l==null?void 0:l.source_path)},{label:"Ключ набору",value:l=>a(l,"key")},{label:"Авто-картка",value:l=>p(l==null?void 0:l.card_auto)},{label:"Інфо по кліку",value:l=>p(l==null?void 0:l.info)},{label:"Статичний",value:l=>p(l==null?void 0:l.is_static)}],meta:[{label:"Bounds",value:l=>i(l)}],edit:[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"enabled",type:"switcher",label:"Активність",col:6,data:"yes_no"},{name:"is_static",type:"switcher",label:"Статичний",col:6,data:"yes_no"}]}}}const dk={class:"flex-1 overflow-y-auto p-4"},uk={class:"space-y-4"},mk={class:"border border-gray-200 rounded-lg p-4"},pk={key:0,class:"grid grid-cols-2 gap-2"},fk={class:"text-xs text-gray-500 mb-1"},gk={class:"text-sm font-semibold text-gray-900"},yk={key:1,class:"text-sm text-gray-700 leading-relaxed"},hk={class:"border border-gray-200 rounded-lg p-4"},bk={class:"text-sm text-gray-700 leading-relaxed"},xk={class:"border border-gray-200 rounded-lg p-4"},kk={class:"flex items-center justify-between mb-3"},wk={class:"text-xs text-gray-500 mb-1"},_k={class:"text-sm font-semibold text-gray-900"},Ek={key:1,class:"text-sm text-gray-700 leading-relaxed"},Ck={class:"border border-gray-200 rounded-lg p-4"},Nk={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Vk=["disabled"],Bk=["disabled"],vt="-",Oo=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved","editCssBounds"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(P=>P.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),a=t,i=n,s=e.ref(null);async function c(P){var Q;try{const Z=await fetch("/api/suggest/gis.group_list");if(!Z.ok)return null;const X=(Q=(await Z.json()).data)==null?void 0:Q.find(G=>String(G.id)===String(P));return(X==null?void 0:X.text)??null}catch{return null}}e.watch(()=>a.data,async P=>{if(s.value=null,(P==null?void 0:P.group_id)!=null){const Q=await c(String(P.group_id));s.value=Q}},{immediate:!0});function p(P){if(!P||typeof P!="string")return vt;try{const Q=new Date(P);return Number.isNaN(Q.getTime())?vt:Q.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return vt}}function f(P){return typeof(P==null?void 0:P.is_active)=="boolean"?P.is_active?"Активний":"Неактивний":typeof(P==null?void 0:P.enabled)=="boolean"?P.enabled?"Активний":"Неактивний":vt}function k(P){return typeof(P==null?void 0:P.is_public)!="boolean"?vt:P.is_public?"Публічний":"Приватний"}function l(P){if(P==null)return"";if(Array.isArray(P))return P.filter(Boolean).join(", ");if(typeof P=="boolean")return P?"Так":"Ні";if(typeof P=="object")return"";const Q=String(P).trim();return Q===""?"":Q}function y(P,Q){return Q.map(Z=>({label:Z.label,value:Z.value(P)})).filter(Z=>Z.value&&Z.value!==vt)}const u=e.computed(()=>y(a.data,_().general)),m=e.computed(()=>{var Q;const P=(Q=a.data)==null?void 0:Q.description;return P!=null&&P!==""?P:vt}),b=e.computed(()=>y(a.data,_().meta)),g=e.computed(()=>b.value.length===1?"grid-cols-1":"grid-cols-2"),d=e.computed(()=>a.entityType==="css"||a.entityType==="raster"),h=e.ref(!1),x=e.ref({}),N=e.ref(null),$=e.ref(!1);function _(){const P=ck({resolvedGroupName:s.value,normalizeValue:l,statusLabel:f,visibilityLabel:k,formatDate:p});return P[a.entityType||"service"]||P.service}const w=e.computed(()=>_().edit);function E(){const P=a.data,Q={};_().edit.forEach(Z=>{switch(Z.name){case"group_id":Q.group_id=(P==null?void 0:P.group_id)!=null?String(P.group_id):"";break;case"producer":Q.producer=(P==null?void 0:P.holder)??(P==null?void 0:P.producer)??"";break;case"keywords":Q.keywords=Array.isArray(P==null?void 0:P.keywords)?[...P.keywords]:[];break;case"is_public":Q.is_public=(P==null?void 0:P.is_public)??!1;break;case"is_active":Q.is_active=typeof(P==null?void 0:P.is_active)=="boolean"?P.is_active:(P==null?void 0:P.enabled)??!1;break;case"enabled":Q.enabled=(P==null?void 0:P.enabled)??(P==null?void 0:P.is_active)??!1;break;case"info":Q.info=(P==null?void 0:P.info)??!1;break;case"is_static":Q.is_static=(P==null?void 0:P.is_static)??!1;break;case"card_auto":Q.card_auto=(P==null?void 0:P.card_auto)??!1;break;default:Q[Z.name]=(P==null?void 0:P[Z.name])??"";break}}),x.value=Q,N.value=null,h.value=!0}function B(){i("editCssBounds")}function F(P){return a.entityType==="raster"&&P==="Bounds"}async function Y(){var P,Q;if(!(!a.entityId||!a.entityType)){if(N.value){const Z=(Q=(P=N.value).validate)==null?void 0:Q.call(P);if(Z){ge.notify({type:"warning",title:"Валідація",message:Object.entries(Z).map(([ae,X])=>`${ae}: ${X}`).join(`
38
+ `)});return}}$.value=!0;try{const Z=new Set(w.value.map(M=>M.name)),ae=Object.fromEntries(Object.entries(x.value).filter(([M])=>Z.has(M))),X=a.entityType==="css"?{url:`/api/gis-css/${encodeURIComponent(a.entityId)}`,method:"POST"}:{url:`/api/gis-metadata/${encodeURIComponent(a.entityType)}/${encodeURIComponent(a.entityId)}`,method:"POST"},G=await fetch(X.url,{method:X.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(ae)});if(!G.ok)throw new Error(`Failed to save metadata: ${G.status}`);ge.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),h.value=!1,i("saved")}catch(Z){console.error("Failed to save metadata",Z),ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{$.value=!1}}}return(P,Q)=>(e.openBlock(),e.createElementBlock("div",dk,[e.createElementVNode("div",uk,[e.createElementVNode("div",mk,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[Q[5]||(Q[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:E,class:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium transition-colors bg-sky-50 text-sky-600 hover:bg-sky-100"},[...Q[4]||(Q[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})],-1),e.createTextVNode(" Редагувати ",-1)])])]),u.value.length?(e.openBlock(),e.createElementBlock("div",pk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,Z=>(e.openBlock(),e.createElementBlock("div",{key:Z.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",fk,e.toDisplayString(Z.label),1),e.createElementVNode("p",gk,e.toDisplayString(Z.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",yk,e.toDisplayString(vt)))]),e.createElementVNode("div",hk,[Q[6]||(Q[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",bk,e.toDisplayString(m.value),1)]),e.createElementVNode("div",xk,[e.createElementVNode("div",kk,[Q[8]||(Q[8]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Метадані ",-1)),d.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium transition-colors bg-sky-50 text-sky-600 hover:bg-sky-100",onClick:B},[...Q[7]||(Q[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})],-1),e.createTextVNode(" Редагувати ",-1)])])):e.createCommentVNode("",!0)]),b.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass([g.value,"grid gap-2"])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,Z=>(e.openBlock(),e.createElementBlock("div",{key:Z.label,class:e.normalizeClass(["bg-gray-50 rounded-md p-2 border border-gray-100",{"col-span-2":F(Z.label)}])},[e.createElementVNode("p",wk,e.toDisplayString(Z.label),1),e.createElementVNode("p",_k,e.toDisplayString(Z.value),1)],2))),128))],2)):(e.openBlock(),e.createElementBlock("p",Ek,e.toDisplayString(vt)))]),e.createElementVNode("div",Ck,[Q[9]||(Q[9]=e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Доступи ")],-1)),e.createVNode(ik,{"service-id":t.entityId,limit:8},null,8,["service-id"])])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:h.value,"onUpdate:visible":Q[3]||(Q[3]=Z=>h.value=Z),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Nk,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:$.value,onClick:Q[2]||(Q[2]=Z=>h.value=!1)}," Скасувати ",8,Vk),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:$.value,onClick:Y},e.toDisplayString($.value?"Збереження…":"Зберегти"),9,Bk)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:x.value,"onUpdate:values":Q[0]||(Q[0]=Z=>x.value=Z),form:N.value,"onUpdate:form":Q[1]||(Q[1]=Z=>N.value=Z),schema:w.value},null,8,["values","form","schema"])]),_:1},8,["visible"])]))}}),$k=["href"],Sk=["href"],vk=["href"],Lk={key:0,class:"py-6 px-4 text-sm text-gray-500"},Tk={key:1,class:"py-6 px-4 text-sm text-red-600"},Ak={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Mk=["disabled"],Dk=["disabled"],Fk=192,Ul=8,En=8,Uo=e.defineComponent({__name:"HeaderActions",props:{entityId:{},entityInfo:{},table:{},formEndpoint:{},saveEndpoint:{},entityLabel:{},editButtonText:{},saveMethod:{},showXmlItem:{type:Boolean,default:!0},clearTilesHandler:{}},emits:["saved"],setup(t,{emit:n}){const o=t,r=n,a=e.defineAsyncComponent(()=>import("@opengis/core").then(ie=>ie.VsModal)),i=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.ref(!1),c=e.ref(null),p=e.ref(null),f=e.ref(null),k=e.ref(null),l=e.computed(()=>k.value?{position:"fixed",top:`${k.value.top}px`,left:`${k.value.left}px`}:{});e.watch(s,ie=>{ie&&e.nextTick(z)});const y=e.ref(!1),u=e.ref(null),m=e.ref({}),b=e.ref(null),g=e.ref(""),d=e.ref(!1),h=e.ref(!1),x=e.ref(null),N=e.computed(()=>o.entityId||""),$=(ie,le)=>ie?typeof ie=="function"?ie(le):typeof ie!="string"?"":ie.includes(":id")?le?ie.replace(":id",encodeURIComponent(le)):"":ie:"",_=e.computed(()=>{var ie;return(ie=o.table)==null?void 0:ie.trim()}),w=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(_.value)return ie=>`/api/form/${_.value}/${ie}`}),E=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(_.value)return ie=>`/api/table/${ie}`}),B=e.computed(()=>$(w.value,N.value)),F=e.computed(()=>o.saveEndpoint?$(o.saveEndpoint,N.value):x.value?`/api/table/${encodeURIComponent(x.value)}`:$(E.value,N.value)),Y=e.computed(()=>$("/api/gis-clear-rtile/:id",N.value)),P=e.computed(()=>$("/api/gis-xml/:id",N.value)),Q=e.computed(()=>$("/api/gis-pretile/:id?zoom=10&max=12",N.value)),Z=e.computed(()=>{var S,I,A;const ie=(I=(S=o.entityInfo)==null?void 0:S.name)==null?void 0:I.trim();if(ie)return`Редагування ${ie}`;const le=(A=o.entityLabel)==null?void 0:A.trim();return le?`Редагування ${le}`:"Редагування"}),ae=e.computed(()=>o.editButtonText||"Редагувати"),X=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function G(){s.value||z(),s.value=!s.value}function M(){s.value=!1}async function j(){const ie=o.clearTilesHandler;!ie||!N.value||(M(),await ie(N.value))}function z(){var ke;if(typeof window>"u"||!p.value)return;const ie=p.value.getBoundingClientRect(),le=window.innerWidth,S=window.innerHeight,I=ie.left,A=Math.max(le-Fk-En,En),H=Math.min(Math.max(I,En),A),ne=((ke=f.value)==null?void 0:ke.offsetHeight)??0,pe=ie.bottom+Ul;let xe=pe;if(ne&&pe+ne>S-En){const we=ie.top-Ul-ne;xe=Math.max(we,En)}k.value={top:xe,left:H}}function v(ie){var S,I;if(!c.value&&!f.value)return;const le=ie.target;le&&((S=c.value)!=null&&S.contains(le)||(I=f.value)!=null&&I.contains(le))||(s.value=!1)}function R(){s.value&&z()}e.onMounted(()=>{window.addEventListener("click",v),window.addEventListener("resize",R),window.addEventListener("scroll",R,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",v),window.removeEventListener("resize",R),window.removeEventListener("scroll",R,!0)});async function J(){var ie,le,S;if(!(!N.value||!B.value)){M(),y.value=!0,d.value=!0,g.value="",u.value=null,m.value={},x.value=null;try{const I=await fetch(B.value);if(!I.ok)throw new Error(`Failed to load form: ${I.status}`);const A=await I.json();m.value=(A==null?void 0:A.data)||{},u.value=(A==null?void 0:A.schema)||null;const H=typeof(A==null?void 0:A.token)=="string"&&A.token||typeof((ie=A==null?void 0:A.tokens)==null?void 0:ie.edit)=="string"&&A.tokens.edit||typeof((le=A==null?void 0:A.tokens)==null?void 0:le.edit_token)=="string"&&A.tokens.edit_token||typeof((S=A==null?void 0:A.data)==null?void 0:S.token)=="string"&&A.data.token||null;x.value=H,b.value=null}catch(I){console.error("Failed to load edit form",I),g.value="Не вдалося завантажити форму редагування"}finally{d.value=!1}}}function ue(){y.value=!1,u.value=null,g.value="",x.value=null}async function fe(){var ie,le;if(!(!N.value||!F.value)){if(b.value){const S=(le=(ie=b.value).validate)==null?void 0:le.call(ie);if(S){ge.notify({type:"warning",title:"Validation",message:Object.entries(S).map(([I,A])=>`${I}: ${A}`).join(`
39
+ `)});return}}h.value=!0;try{const S=await fetch(F.value,{method:X.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(m.value)});if(!S.ok)throw new Error(`Failed to save: ${S.status}`);ge.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",m.value),ue()}catch(S){console.error("Failed to save edit form",S),ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{h.value=!1}}}return(ie,le)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:c,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:p,type:"button",onClick:e.withModifiers(G,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...le[3]||(le[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:f,style:e.normalizeStyle(l.value),class:"absolute top-0 left-0 mt-2 w-48 rounded-xl border border-gray-200 bg-white shadow-lg text-sm z-[1000]"},[Y.value||t.clearTilesHandler?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[t.clearTilesHandler?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:j},[e.createVNode(e.unref(me.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),le[4]||(le[4]=e.createElementVNode("span",null,"Очистити тайли",-1))])):(e.openBlock(),e.createElementBlock("a",{key:1,href:Y.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:M},[e.createVNode(e.unref(me.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),le[5]||(le[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,$k))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,href:P.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:M},[e.createVNode(e.unref(me.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),le[6]||(le[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,Sk)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:2,href:Q.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:M},[e.createVNode(e.unref(me.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),le[7]||(le[7]=e.createElementVNode("span",null,"Pretile",-1))],8,vk)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-b-xl",onClick:J},[e.createVNode(e.unref(me.Pencil),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(ae.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(a),{teleport:"#modal",visible:y.value,"onUpdate:visible":le[2]||(le[2]=S=>y.value=S),title:Z.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Ak,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:ue,disabled:h.value}," Скасувати ",8,Mk),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:fe,disabled:h.value},e.toDisplayString(h.value?"Зберігається…":"Зберегти"),9,Dk)])]),default:e.withCtx(()=>[d.value?(e.openBlock(),e.createElementBlock("div",Lk," Завантаження форми редагування… ")):g.value?(e.openBlock(),e.createElementBlock("div",Tk,e.toDisplayString(g.value),1)):(e.openBlock(),e.createBlock(e.unref(i),{key:2,values:m.value,"onUpdate:values":le[0]||(le[0]=S=>m.value=S),form:b.value,"onUpdate:form":le[1]||(le[1]=S=>b.value=S),schema:u.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),Cn="cartocss",zk={defaultToken:"",tokenPostfix:".cartocss",ignoreCase:!0,tokenizer:{root:[[/\s*\/\*/,"comment","@comment"],[/\s*"(?:[^"\\]|\\.)*"/,"string"],[/\s*'(?:[^'\\]|\\.)*'/,"string"],[/#[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\.[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\[[^\]]*\]/,"keyword"],[/::[a-zA-Z_][a-zA-Z0-9_-]*/,"tag"],[/[a-zA-Z_][a-zA-Z0-9_-]*(?=\s*:)/,"attribute.name"],[/[-]?\d+\.?\d*(px|em|%|pt)?/,"number"],[/#[0-9a-fA-F]{3,8}\b/,"string"],[/[,{};:()[\]]/,"delimiter"],[/\s+/,""]],comment:[[/\*\//,"comment","@pop"],[/[^*]+/,"comment"],[/./,"comment"]]}},Ik={comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},ql=["image-filters","image-filters-inflate","direct-image-filters","comp-op","opacity","polygon","polygon-fill","polygon-opacity","polygon-gamma","polygon-gamma-method","polygon-clip","polygon-simplify","polygon-simplify-algorithm","polygon-smooth","polygon-geometry-transform","polygon-comp-op","polygon-pattern-file","polygon-pattern-opacity","polygon-pattern-clip","polygon-pattern-alignment","polygon-pattern-gamma","polygon-pattern-simplify","polygon-pattern-simplify-algorithm","polygon-pattern-smooth","polygon-pattern-geometry-transform","polygon-pattern-transform","polygon-pattern-comp-op","line","line-color","line-width","line-opacity","line-join","line-cap","line-gamma","line-gamma-method","line-dasharray","line-dash-offset","line-miterlimit","line-clip","line-simplify","line-simplify-algorithm","line-smooth","line-offset","line-rasterizer","line-geometry-transform","line-comp-op","line-pattern-file","line-pattern-opacity","line-pattern-clip","line-pattern-simplify","line-pattern-simplify-algorithm","line-pattern-smooth","line-pattern-offset","line-pattern-geometry-transform","line-pattern-transform","line-pattern-comp-op","marker","marker-file","marker-opacity","marker-fill-opacity","marker-line-color","marker-line-width","marker-line-opacity","marker-placement","marker-multi-policy","marker-type","marker-width","marker-height","marker-fill","marker-allow-overlap","marker-avoid-edges","marker-ignore-placement","marker-spacing","marker-max-error","marker-transform","marker-clip","marker-simplify","marker-simplify-algorithm","marker-smooth","marker-geometry-transform","marker-offset","marker-comp-op","marker-direction","shield","shield-name","shield-file","shield-face-name","shield-unlock-image","shield-size","shield-fill","shield-placement","shield-avoid-edges","shield-allow-overlap","shield-margin","shield-repeat-distance","shield-min-distance","shield-spacing","shield-min-padding","shield-label-position-tolerance","shield-wrap-width","shield-wrap-before","shield-wrap-character","shield-halo-fill","shield-halo-radius","shield-halo-rasterizer","shield-halo-transform","shield-halo-comp-op","shield-halo-opacity","shield-character-spacing","shield-line-spacing","shield-text-dx","shield-text-dy","shield-dx","shield-dy","shield-opacity","shield-text-opacity","shield-horizontal-alignment","shield-vertical-alignment","shield-placement-type","shield-placements","shield-text-transform","shield-justify-alignment","shield-transform","shield-clip","shield-simplify","shield-simplify-algorithm","shield-smooth","shield-comp-op","shield-grid-cell-width","shield-grid-cell-height","raster","raster-opacity","raster-filter-factor","raster-scaling","raster-mesh-size","raster-comp-op","raster-colorizer-default-mode","raster-colorizer-default-color","raster-colorizer-epsilon","raster-colorizer-stops","point","point-file","point-allow-overlap","point-ignore-placement","point-opacity","point-placement","point-transform","point-comp-op","text","text-name","text-face-name","text-size","text-ratio","text-wrap-width","text-wrap-before","text-wrap-character","text-repeat-wrap-character","text-spacing","text-character-spacing","text-line-spacing","text-label-position-tolerance","text-max-char-angle-delta","text-fill","text-opacity","text-halo-opacity","text-halo-fill","text-halo-radius","text-halo-rasterizer","text-halo-transform","text-dx","text-dy","text-vertical-alignment","text-avoid-edges","text-margin","text-repeat-distance","text-min-distance","text-min-padding","text-min-path-length","text-allow-overlap","text-orientation","text-rotate-displacement","text-upright","text-placement","text-placement-type","text-placements","text-transform","text-horizontal-alignment","text-align","text-clip","text-simplify","text-simplify-algorithm","text-smooth","text-comp-op","text-halo-comp-op","text-font-feature-settings","text-largest-bbox-only","text-grid-cell-width","text-grid-cell-height","building","building-fill","building-fill-opacity","building-height","debug-mode","dot","dot-fill","dot-opacity","dot-width","dot-height","dot-comp-op"],jk={"polygon-fill":"Fill color to assign to a polygon. Type: color.","polygon-opacity":"The opacity of the polygon (0-1). Type: float.","line-color":"The color of a drawn line. Type: color.","line-width":"The width of a line in pixels. Type: float.","line-opacity":"The opacity of a line (0-1). Type: float.","line-dasharray":"Dash pattern: pair of length values [a,b] or more. Type: numbers.","marker-fill":"The color of the area of the marker. Type: color.","marker-width":"The width of the marker in pixels. Type: float.","marker-height":"The height of the marker in pixels. Type: float.","marker-file":"A file that this marker shows at each placement. Type: uri (e.g. url('marker.png')).","text-name":"Value to use for a text label. Data columns: [column_name]. Type: string.","text-face-name":"Font name and style to render a label in. Type: string.","text-size":"Text size in pixels. Type: float.","text-fill":"Specifies the color for the text. Type: color.","text-halo-fill":"Specifies the color of the halo around the text. Type: color.","text-halo-radius":"Specify the radius of the halo in pixels. Type: float.","comp-op":"Composite operation. Defines how this layer behaves relative to layers atop or below it. Type: keyword.",opacity:"An alpha value for the style (0-1). Type: float."};let Hl=!1;function Pk(t,n){if(n<1)return null;const r=t.substring(0,n-1).match(/[a-zA-Z_-]+$/);if(!r)return null;const a=r[0],i=n-a.length;return{prefix:a,startColumn:i,endColumn:n}}function Rk(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const a=r[0].replace(/\s*:$/,"").trim(),i=r.index+1,s=r.index+r[0].length,p=t.substring(s).indexOf(";"),f=p>=0?s+p+1:t.length+1;if(n>=i&&n<=f)return ql.includes(a)?a:null}return null}function Ok(t){Hl||(Hl=!0,t.languages.register({id:Cn}),t.languages.setMonarchTokensProvider(Cn,zk),t.languages.setLanguageConfiguration(Cn,Ik),t.languages.registerCompletionItemProvider(Cn,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),a=Pk(r,o.column),i=((a==null?void 0:a.prefix)??"").toLowerCase(),s=a&&a.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:a.startColumn,endLineNumber:o.lineNumber,endColumn:a.endColumn}:void 0;return{suggestions:ql.filter(p=>!i||p.toLowerCase().includes(i)||p.toLowerCase().startsWith(i)).map(p=>({label:p,kind:t.languages.CompletionItemKind.Property,insertText:p+": ",...s&&{range:s}}))}}}),t.languages.registerHoverProvider(Cn,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),a=Rk(r,o.column);if(!a)return;const i=jk[a];return{contents:[{value:`**${a}**
40
40
 
41
- ${i??"CartoCSS property (Mapnik)."}`}]}}}))}const Nn=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(null);let i=null,s=null,c=!1;function p(){return new Promise((k,l)=>{if(s)return k(s);if(window.monaco)return s=window.monaco,k(s);const y=m=>{if([...document.styleSheets].some(g=>{var d;return(d=g==null?void 0:g.href)==null?void 0:d.includes(m)}))return;const b=document.createElement("link");b.rel="stylesheet",b.href=m,document.head.appendChild(b)},u=m=>new Promise((b,g)=>{const d=document.createElement("script");d.src=m,d.onload=()=>b(!0),d.onerror=g,document.body.appendChild(d)});y("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),u("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{s=window.monaco,k(s)})}).catch(l)})}function f(){var m,b;if(!a.value||!s)return;i&&i.dispose();const k=o.language||"yaml",l=s.editor.createModel(o.modelValue||"",k),y=k==="cartocss"?{acceptSuggestionOnCommitCharacter:!1,acceptSuggestionOnEnter:"off",snippetSuggestions:"none",tabCompletion:"off",wordBasedSuggestions:"off"}:{};i=s.editor.create(a.value,{model:l,theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1},...y});const u=k;s.editor.setModelLanguage(l,u),u==="css"&&((b=(m=s.languages)==null?void 0:m.css)!=null&&b.cssDefaults)&&s.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),i.onDidChangeModelContent(()=>{c||r("update:modelValue",i.getValue())})}return e.watch(()=>o.modelValue,k=>{if(!i)return;const l=i.getModel();if(!l)return;const y=l.getValue();if(k!==y){const u=i.getPosition(),m=i.getSelection(),b=i.getScrollTop(),g=i.getScrollLeft();c=!0,i.executeEdits("external-model-sync",[{range:l.getFullModelRange(),text:k||"",forceMoveMarkers:!0}]),m&&i.setSelection(m),u&&i.setPosition(u),i.setScrollTop(b),i.setScrollLeft(g),c=!1}}),e.watch(()=>o.language,k=>{i&&s&&s.editor.setModelLanguage(i.getModel(),k||"yaml")}),e.watch(()=>o.theme,k=>{i&&s&&s.editor.setTheme(k||"vs-light")}),e.onMounted(async()=>{await p(),Ok(s),f()}),e.onBeforeUnmount(()=>{i&&i.dispose()}),(k,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:a,class:"w-full h-full"},null,512))}}),Uk={class:"flex flex-col flex-1 overflow-hidden"},qk={class:"flex justify-end gap-2"},Hk=["href"],Wk={class:"flex flex-col flex-1 overflow-hidden"},Yk={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Gk={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Zk=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,r=n,a=e.ref("");e.watch(()=>o.styleText,p=>{const f=p??"";a.value!==f&&(a.value=f)},{immediate:!0}),e.watch(a,async p=>{var k,l;const f=p??"";o.styleText!==f&&r("update:style-text",f);try{const y=p?Il(p):null;if((k=y==null?void 0:y.colorAttr)!=null&&k.length&&((l=o.styleYaml)==null?void 0:l.colorAttr)!==y.colorAttr){const u=await i(y.colorAttr);y.colors=u.reduce((b,g,d)=>({...b,[g.id.toString()]:s[d]}),{});const m=jl(y);m!==a.value&&(a.value=m)}JSON.stringify(y)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",y&&typeof y=="object"?y:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function i(p){return(await fetch(`/api/gis-service/${o.token}/${p}`).then(k=>k.json())).rows}const s=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],c=async()=>{const p=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:p})}),r("update"),ye.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(f){ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(f)}};return(p,f)=>(e.openBlock(),e.createElementBlock("div",Uk,[e.createElementVNode("div",qk,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,Hk),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...f[1]||(f[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",Wk,[e.createElementVNode("div",Yk,[f[2]||(f[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",Gk,[e.createVNode(Nn,{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=k=>a.value=k),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),Kk={class:"flex flex-col flex-1 min-h-0"},Xk={class:"flex flex-col flex-1 min-h-0"},Jk=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>a.value=m||[],{immediate:!0}),e.watch(a,m=>{const b=Me(o.token);b&&(b.popup=m),r("update:columns",m)});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),p=[{key:"name",label:"Назва",type:"main"}],f={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"autocomplete",label:"Класифікатор",data:"admin.cls.name"}};function k(){c.value=a.value.map(m=>m.name||m.id),s.value=!0}function l(){var d;const m=[...a.value],b=((d=o.fields)==null?void 0:d.filter(h=>c.value.includes(h.name)))||[],g=Gt(m,b,{selectedKeys:c.value,resolveKey:h=>Tt(h)});a.value=g,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function u(){let m=[];i.value==="all"?m=o.fields||[]:i.value==="none"?m=[]:m=a.value,m.filter(b=>!b.label).forEach(b=>b.label=b.ua),r("save",m)}return(m,b)=>(e.openBlock(),e.createElementBlock("div",Kk,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:k,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Xk,[i.value==="list"?(e.openBlock(),e.createBlock(Lt,{key:0,modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=g=>a.value=g),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":b[1]||(b[1]=g=>s.value=g),selection:c.value,"onUpdate:selection":b[2]||(b[2]=g=>c.value=g),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:l,onCancel:y},null,8,["visible","selection","fields"])]))}}),Qk={class:"flex flex-col flex-1 min-h-0"},ew={class:"flex justify-between mb-3 gap-2"},tw={class:"p-4 space-y-4 text-sm"},nw={class:"space-y-1"},ow={class:"space-y-1"},rw={class:"flex items-center gap-3"},lw={class:"flex justify-end gap-2 p-4 border-t"},aw=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>{a.value=m||[]}),e.watch(a,m=>{r("update:columns",m)});const i=e.ref(!1),s=e.ref({name:"",color:"#2E86DE"}),c=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),p=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],f={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function k(m){m&&l(),i.value=m}function l(){s.value={name:"",color:"#2E86DE"}}function y(){var d,h;const m=(d=s.value.name)==null?void 0:d.trim();if(!m){ye.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const b=((h=s.value.color)==null?void 0:h.trim())||"#2E86DE";if(a.value.some(x=>Tt(x)===Tt({name:m}))){ye.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}a.value=[...a.value,{name:m,color:b}],l(),i.value=!1}function u(){r("save",a.value)}return(m,b)=>(e.openBlock(),e.createElementBlock("div",Qk,[e.createElementVNode("div",ew,[e.createElementVNode("button",{onClick:b[0]||(b[0]=g=>i.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Lt,{modelValue:a.value,"onUpdate:modelValue":b[1]||(b[1]=g=>a.value=g),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(c),{teleport:"#modal",visible:i.value,title:"Новий елемент легенди","onUpdate:visible":k},{footer:e.withCtx(()=>[e.createElementVNode("div",lw,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:b[5]||(b[5]=g=>k(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",tw,[e.createElementVNode("div",nw,[b[6]||(b[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[2]||(b[2]=g=>s.value.name=g),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,s.value.name]])]),e.createElementVNode("div",ow,[b[7]||(b[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",rw,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[3]||(b[3]=g=>s.value.color=g),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,s.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[4]||(b[4]=g=>s.value.color=g),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,s.value.color]])])])])]),_:1},8,["visible"])]))}}),sw={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},iw=["onClick"],cw=["aria-checked","value"],dw={key:0},uw=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,a=s=>r("update:modelValue",s),i=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(s,c)=>(e.openBlock(),e.createElementBlock("div",sw,[c[1]||(c[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(i).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i),p=>(e.openBlock(),e.createElementBlock("div",{key:p.value,onClick:f=>a(p.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===p.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===p.value,value:p.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===p.value?(e.openBlock(),e.createElementBlock("span",dw,[...c[0]||(c[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,cw),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===p.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(p.label),3)],10,iw))),128))],2)]))}}),mw={class:"flex flex-col flex-1 min-h-0"},pw={class:"flex flex-col flex-1 min-h-0"},fw=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.columns||[]);e.watch(()=>o.columns,g=>a.value=g||[],{immediate:!0}),e.watch(a,g=>r("update:columns",g));const i=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,g=>{g&&g!==i.value&&(i.value=g)});const s=e.ref(o.html??"");e.watch(()=>o.html,g=>{typeof g=="string"&&g!==s.value&&(s.value=g)},{immediate:!0});const c=e.ref(!1),p=e.ref([]),f=[{key:"name",label:"Name",type:"main"}],k={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name"}};function l(){p.value=i.value==="html"?[]:a.value.map(g=>g.name||g.id),c.value=!0}function y(){var x;const g=[...a.value],d=((x=o.fields)==null?void 0:x.filter(N=>p.value.includes(N.name)).map(N=>{const{type:$,format:_,...w}=N;return{...w,format:_??$??"text"}}))||[],h=Gt(g,d,{selectedKeys:p.value,resolveKey:N=>Tt(N)});if(a.value=h,i.value==="html"&&d.length){const N=d.map(w=>{const E=w.label??"",B=w.name??w.id??"";return`<dd>${E}</dd>
41
+ ${i??"CartoCSS property (Mapnik)."}`}]}}}))}const Nn=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(null);let i=null,s=null,c=!1;function p(){return new Promise((k,l)=>{if(s)return k(s);if(window.monaco)return s=window.monaco,k(s);const y=m=>{if([...document.styleSheets].some(g=>{var d;return(d=g==null?void 0:g.href)==null?void 0:d.includes(m)}))return;const b=document.createElement("link");b.rel="stylesheet",b.href=m,document.head.appendChild(b)},u=m=>new Promise((b,g)=>{const d=document.createElement("script");d.src=m,d.onload=()=>b(!0),d.onerror=g,document.body.appendChild(d)});y("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),u("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{s=window.monaco,k(s)})}).catch(l)})}function f(){var m,b;if(!a.value||!s)return;i&&i.dispose();const k=o.language||"yaml",l=s.editor.createModel(o.modelValue||"",k),y=k==="cartocss"?{acceptSuggestionOnCommitCharacter:!1,acceptSuggestionOnEnter:"off",snippetSuggestions:"none",tabCompletion:"off",wordBasedSuggestions:"off"}:{};i=s.editor.create(a.value,{model:l,theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1},...y});const u=k;s.editor.setModelLanguage(l,u),u==="css"&&((b=(m=s.languages)==null?void 0:m.css)!=null&&b.cssDefaults)&&s.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),i.onDidChangeModelContent(()=>{c||r("update:modelValue",i.getValue())})}return e.watch(()=>o.modelValue,k=>{if(!i)return;const l=i.getModel();if(!l)return;const y=l.getValue();if(k!==y){const u=i.getPosition(),m=i.getSelection(),b=i.getScrollTop(),g=i.getScrollLeft();c=!0,i.executeEdits("external-model-sync",[{range:l.getFullModelRange(),text:k||"",forceMoveMarkers:!0}]),m&&i.setSelection(m),u&&i.setPosition(u),i.setScrollTop(b),i.setScrollLeft(g),c=!1}}),e.watch(()=>o.language,k=>{i&&s&&s.editor.setModelLanguage(i.getModel(),k||"yaml")}),e.watch(()=>o.theme,k=>{i&&s&&s.editor.setTheme(k||"vs-light")}),e.onMounted(async()=>{await p(),Ok(s),f()}),e.onBeforeUnmount(()=>{i&&i.dispose()}),(k,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:a,class:"w-full h-full"},null,512))}}),Uk={class:"flex flex-col flex-1 overflow-hidden"},qk={class:"flex justify-end gap-2"},Hk=["href"],Wk={class:"flex flex-col flex-1 overflow-hidden"},Yk={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Gk={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Zk=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,r=n,a=e.ref("");e.watch(()=>o.styleText,p=>{const f=p??"";a.value!==f&&(a.value=f)},{immediate:!0}),e.watch(a,async p=>{var k,l;const f=p??"";o.styleText!==f&&r("update:style-text",f);try{const y=p?Il(p):null;if((k=y==null?void 0:y.colorAttr)!=null&&k.length&&((l=o.styleYaml)==null?void 0:l.colorAttr)!==y.colorAttr){const u=await i(y.colorAttr);y.colors=u.reduce((b,g,d)=>({...b,[g.id.toString()]:s[d]}),{});const m=jl(y);m!==a.value&&(a.value=m)}JSON.stringify(y)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",y&&typeof y=="object"?y:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function i(p){return(await fetch(`/api/gis-service/${o.token}/${p}`).then(k=>k.json())).rows}const s=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],c=async()=>{const p=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:p})}),r("update"),ge.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(f){ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(f)}};return(p,f)=>(e.openBlock(),e.createElementBlock("div",Uk,[e.createElementVNode("div",qk,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,Hk),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...f[1]||(f[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",Wk,[e.createElementVNode("div",Yk,[f[2]||(f[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",Gk,[e.createVNode(Nn,{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=k=>a.value=k),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),Kk={class:"flex flex-col flex-1 min-h-0"},Xk={class:"flex flex-col flex-1 min-h-0"},Jk=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>a.value=m||[],{immediate:!0}),e.watch(a,m=>{const b=Me(o.token);b&&(b.popup=m),r("update:columns",m)});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),p=[{key:"name",label:"Назва",type:"main"}],f={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"autocomplete",label:"Класифікатор",data:"admin.cls.name"}};function k(){c.value=a.value.map(m=>m.name||m.id),s.value=!0}function l(){var d;const m=[...a.value],b=((d=o.fields)==null?void 0:d.filter(h=>c.value.includes(h.name)))||[],g=Gt(m,b,{selectedKeys:c.value,resolveKey:h=>Tt(h)});a.value=g,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function u(){let m=[];i.value==="all"?m=o.fields||[]:i.value==="none"?m=[]:m=a.value,m.filter(b=>!b.label).forEach(b=>b.label=b.ua),r("save",m)}return(m,b)=>(e.openBlock(),e.createElementBlock("div",Kk,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:k,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Xk,[i.value==="list"?(e.openBlock(),e.createBlock(Lt,{key:0,modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=g=>a.value=g),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":b[1]||(b[1]=g=>s.value=g),selection:c.value,"onUpdate:selection":b[2]||(b[2]=g=>c.value=g),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:l,onCancel:y},null,8,["visible","selection","fields"])]))}}),Qk={class:"flex flex-col flex-1 min-h-0"},ew={class:"flex justify-between mb-3 gap-2"},tw={class:"p-4 space-y-4 text-sm"},nw={class:"space-y-1"},ow={class:"space-y-1"},rw={class:"flex items-center gap-3"},lw={class:"flex justify-end gap-2 p-4 border-t"},aw=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>{a.value=m||[]}),e.watch(a,m=>{r("update:columns",m)});const i=e.ref(!1),s=e.ref({name:"",color:"#2E86DE"}),c=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),p=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],f={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function k(m){m&&l(),i.value=m}function l(){s.value={name:"",color:"#2E86DE"}}function y(){var d,h;const m=(d=s.value.name)==null?void 0:d.trim();if(!m){ge.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const b=((h=s.value.color)==null?void 0:h.trim())||"#2E86DE";if(a.value.some(x=>Tt(x)===Tt({name:m}))){ge.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}a.value=[...a.value,{name:m,color:b}],l(),i.value=!1}function u(){r("save",a.value)}return(m,b)=>(e.openBlock(),e.createElementBlock("div",Qk,[e.createElementVNode("div",ew,[e.createElementVNode("button",{onClick:b[0]||(b[0]=g=>i.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Lt,{modelValue:a.value,"onUpdate:modelValue":b[1]||(b[1]=g=>a.value=g),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(c),{teleport:"#modal",visible:i.value,title:"Новий елемент легенди","onUpdate:visible":k},{footer:e.withCtx(()=>[e.createElementVNode("div",lw,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:b[5]||(b[5]=g=>k(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",tw,[e.createElementVNode("div",nw,[b[6]||(b[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[2]||(b[2]=g=>s.value.name=g),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,s.value.name]])]),e.createElementVNode("div",ow,[b[7]||(b[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",rw,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[3]||(b[3]=g=>s.value.color=g),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,s.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[4]||(b[4]=g=>s.value.color=g),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,s.value.color]])])])])]),_:1},8,["visible"])]))}}),sw={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},iw=["onClick"],cw=["aria-checked","value"],dw={key:0},uw=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,a=s=>r("update:modelValue",s),i=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(s,c)=>(e.openBlock(),e.createElementBlock("div",sw,[c[1]||(c[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(i).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i),p=>(e.openBlock(),e.createElementBlock("div",{key:p.value,onClick:f=>a(p.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===p.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===p.value,value:p.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===p.value?(e.openBlock(),e.createElementBlock("span",dw,[...c[0]||(c[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,cw),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===p.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(p.label),3)],10,iw))),128))],2)]))}}),mw={class:"flex flex-col flex-1 min-h-0"},pw={class:"flex flex-col flex-1 min-h-0"},fw=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.columns||[]);e.watch(()=>o.columns,g=>a.value=g||[],{immediate:!0}),e.watch(a,g=>r("update:columns",g));const i=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,g=>{g&&g!==i.value&&(i.value=g)});const s=e.ref(o.html??"");e.watch(()=>o.html,g=>{typeof g=="string"&&g!==s.value&&(s.value=g)},{immediate:!0});const c=e.ref(!1),p=e.ref([]),f=[{key:"name",label:"Name",type:"main"}],k={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name"}};function l(){p.value=i.value==="html"?[]:a.value.map(g=>g.name||g.id),c.value=!0}function y(){var x;const g=[...a.value],d=((x=o.fields)==null?void 0:x.filter(N=>p.value.includes(N.name)).map(N=>{const{type:$,format:_,...w}=N;return{...w,format:_??$??"text"}}))||[],h=Gt(g,d,{selectedKeys:p.value,resolveKey:N=>Tt(N)});if(a.value=h,i.value==="html"&&d.length){const N=d.map(w=>{const E=w.label??"",B=w.name??w.id??"";return`<dd>${E}</dd>
42
42
  <dt>{{ ${B} }}</dt>`}).join(`
43
43
  `),_=(s.value??"").trimEnd();s.value=_?`${_}
44
- ${N}`:N}c.value=!1,p.value=[]}function u(){c.value=!1,p.value=[]}function m(){const g=i.value==="html"?"html":"list",d={card_mode:g};g==="html"?d.html=s.value:g==="list"&&(d.list=a.value),r("save","card",d)}const b=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(g,d)=>(e.openBlock(),e.createElementBlock("div",mw,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:l,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(uw,{modelValue:i.value,"onUpdate:modelValue":d[0]||(d[0]=h=>i.value=h),options:b},null,8,["modelValue"]),e.createElementVNode("div",pw,[i.value==="list"?(e.openBlock(),e.createBlock(Lt,{key:0,modelValue:a.value,"onUpdate:modelValue":d[1]||(d[1]=h=>a.value=h),"columns-scheme":f,"form-scheme":k,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):i.value==="html"?(e.openBlock(),e.createBlock(Nn,{key:1,modelValue:s.value,"onUpdate:modelValue":d[2]||(d[2]=h=>s.value=h),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Wt,{visible:c.value,"onUpdate:visible":d[3]||(d[3]=h=>c.value=h),selection:p.value,"onUpdate:selection":d[4]||(d[4]=h=>p.value=h),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:y,onCancel:u},null,8,["visible","selection","fields"])]))}}),gw={class:"flex flex-col flex-1 min-h-0"},yw=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const a=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>a.value=m||[],{immediate:!0}),e.watch(a,m=>r("update:columns",m),{deep:!0,immediate:!0});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),p=[{key:"id",label:"Name"},{key:"label",label:"UA"}],f={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"autocomplete"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function k(){c.value=a.value.map(m=>m.name||m.id),s.value=!0}function l(){var d;const m=[...a.value],b=((d=o.fields)==null?void 0:d.filter(h=>c.value.includes(h.name)))||[],g=Gt(m,b,{selectedKeys:c.value,resolveKey:h=>Tt(h)});a.value=g,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function u(){let m=[];i.value==="all"?m=o.fields||[]:i.value==="none"?m=[]:m=a.value,r("save",m)}return(m,b)=>(e.openBlock(),e.createElementBlock("div",gw,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:k,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),i.value==="list"?(e.openBlock(),e.createBlock(Lt,{key:0,modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=g=>a.value=g),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":b[1]||(b[1]=g=>s.value=g),selection:c.value,"onUpdate:selection":b[2]||(b[2]=g=>c.value=g),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:l,onCancel:y},null,8,["visible","selection","fields"])]))}}),hw=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var m,b,g,d;const{map:o,flyTo:r,setZoom:a}=et(),i=((b=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:b.$settings)||null,s=t,c=s.id;String(s.id);const p=`${location.origin}/api/vtile/${s.id}/ua/{z}/{x}/{y}.vmt?all=1`,f=Me(c,{source:{type:"vector",tiles:[p],minzoom:0,maxzoom:14},popup:s.layer.popup,layer:{style:(g=s.layer)==null?void 0:g.style}});n({layerHandle:f}),(s.autoCenter??!0)&&r({center:s.layer.center||((d=i==null?void 0:i.map)==null?void 0:d.center)||[30,50],animate:!1});let k=null;function l(){if(!(f!=null&&f.setTiles))return;const h=p.includes("?")?"&":"?",x=`${p}${h}_=${Date.now()}`;f.setTiles([x])}function y(){k&&clearTimeout(k),k=setTimeout(()=>{k=null,u().catch(h=>console.error("Failed to update map layer",h))},300)}async function u(){o.value&&(l(),f.setStyle(s.styleSpec??null))}return e.watch(()=>s.styleSpec,y,{deep:!0}),e.onBeforeUnmount(()=>{f.remove()}),(h,x)=>null}}),bw={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},xw={class:"flex-1 relative overflow-hidden"},kw={class:"absolute top-0 left-0 w-full z-20"},ww={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},_w={class:"flex items-start justify-between gap-4"},Ew={class:"flex-1 min-w-0"},Cw={class:"flex items-center text-sm text-gray-500 mb-3"},Nw={class:"text-gray-900 font-medium truncate max-w-xs"},Vw={class:"flex items-center justify-between gap-4"},Bw={class:"flex-1 min-w-0"},$w={class:"flex items-center gap-3 mb-1"},Sw={class:"text-base font-semibold text-gray-900 truncate"},vw={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},Lw={class:"text-xs font-medium text-green-700"},Tw=["title"],Aw={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[115px]"},Mw={class:"relative w-full h-full"},Dw={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},Fw={class:"absolute top-4 left-4 z-20"},zw={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Iw={class:"absolute bottom-4 left-4 z-20"},jw={class:"flex-1 flex flex-col h-full"},Pw={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Rw={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Ow=["aria-selected","onClick"],Uw={class:"leading-none"},qw={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Hw="OpenGIS",Wl=2,Jn=5,Ww=1e3,Yw=Object.freeze(Object.defineProperty({__proto__:null,default:Ne(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var Oe,at;const n=t,o=e.toRef(n,"hideServiceKey"),r=Ie.useRoute(),a=Ie.useRouter(),{id:i}=r.params,s=e.ref(null),c=e.ref(null),p=e.ref({}),f=e.ref(null),k=((at=(Oe=e.getCurrentInstance())==null?void 0:Oe.appContext.config.globalProperties)==null?void 0:at.$settings)||null;function l(ne){typeof document>"u"||(document.title=ne?`${ne} — Сервіс`:Hw)}let y=null;const u=e.ref(!1);function m(){var ne;return(ne=s.value)==null?void 0:ne.ctx}function b(ne){typeof window>"u"||window.dispatchEvent(new CustomEvent(zn,{detail:ne}))}function g(ne){var He,ve,Ge;const re=(ve=(He=m())==null?void 0:He.map)==null?void 0:ve.value;if(!re||!ne)return[];const Ee=(Ge=f.value)!=null&&Ge.service_id?String(f.value.service_id):null;return(re.queryRenderedFeatures(ne)||[]).filter(Ae=>{var te,T,U,q,ie,de;const nt=((te=Ae==null?void 0:Ae.properties)==null?void 0:te.id)??(Ae==null?void 0:Ae.id);if(nt==null||!(Ae!=null&&Ae.source)||Ee&&String(Ae.source)!==Ee)return!1;const W=Me(Ae.source)||Me((T=Ae.layer)==null?void 0:T.id);if(!W)return!1;const V=(q=(U=W==null?void 0:W.opts)==null?void 0:U.source)==null?void 0:q.type,D=(de=(ie=W==null?void 0:W.opts)==null?void 0:ie.layer)==null?void 0:de.type;return V!=="raster"&&D!=="raster"})}function d(ne){const re=g(ne==null?void 0:ne.point);b({features:re,externalItems:[]})}function h(ne){if(Array.isArray(ne))return h(ne[0]);if(typeof ne!="string"&&typeof ne!="number")return null;const re=typeof ne=="number"?ne:Number(ne.trim());return Number.isFinite(re)?re:null}function x(ne,re){return ne.toFixed(re)}function N(ne,re,Ee){const Ue=.5*10**-Ee;return Math.abs(ne-re)>Ue}function $(){var Ae,nt,W,V;const ne=(nt=(Ae=m())==null?void 0:Ae.map)==null?void 0:nt.value;if(!ne)return;const re=h(r.query.z),Ee=h(r.query.x),Ue=h(r.query.y);if(re==null||Ee==null||Ue==null)return;const He=(W=ne.getCenter)==null?void 0:W.call(ne),ve=(V=ne.getZoom)==null?void 0:V.call(ne);(!He||N(He.lng,Ee,Jn)||N(He.lat,Ue,Jn)||N(ve??0,re,Wl))&&(u.value=!0,ne.jumpTo({center:[Ee,Ue],zoom:re}),u.value=!1)}function _(){var He,ve,Ge,Ae;if(u.value)return;const ne=(ve=(He=m())==null?void 0:He.map)==null?void 0:ve.value;if(!ne)return;const re=(Ge=ne.getCenter)==null?void 0:Ge.call(ne),Ee=(Ae=ne.getZoom)==null?void 0:Ae.call(ne);if(!re||Ee==null)return;const Ue={...r.query,z:x(Ee,Wl),x:x(re.lng,Jn),y:x(re.lat,Jn)};r.query.z===Ue.z&&r.query.x===Ue.x&&r.query.y===Ue.y||a.replace({query:Ue})}const w=e.ref(null),E=e.ref(""),B=e.ref([]),z=e.ref([]),Z=e.ref([]),P=e.ref("list"),ee=e.ref(""),K=e.ref([]),le=e.ref(!0);let J=null;const G=e.computed(()=>{var ne,re;return((ne=f.value)==null?void 0:ne.id)??((re=f.value)==null?void 0:re.service_id)??null}),M=e.computed(()=>{const ne=(k==null?void 0:k.map)||null,re=(ne==null?void 0:ne.boundary)??null,Ee=(ne==null?void 0:ne.katottg)??null;return!re&&!Ee?null:{boundary:re,katottg:Ee}}),j=e.computed(()=>{const ne=f.value;if(!ne)return"";const re=[];!o.value&&ne.service_key&&re.push(`Сервіс: ${ne.service_key}`),ne.description&&re.push(ne.description);const Ee=ne.group_name||ne.group_id;return Ee&&re.push(`Група: ${Ee}`),typeof ne.is_public<"u"&&re.push(ne.is_public?"Публічний":"Не публічний"),typeof ne.is_active<"u"&&re.push(ne.is_active?"Активний":"Неактивний"),re.join(", ")}),I=e.computed(()=>{const ne=f.value,re=(ne==null?void 0:ne.group_name)||(ne==null?void 0:ne.group_id);return re?String(re).toUpperCase():""}),S=e.computed(()=>{var Ee;const ne=(Ee=r.matched[r.matched.length-1])==null?void 0:Ee.path;return(typeof ne=="string"&&ne?ne:r.path).replace(/\/:id\??$/,"")||"/"}),R=e.computed(()=>{var re;const ne=(re=r.meta)==null?void 0:re.title;return typeof ne=="string"&&ne.trim()?ne:"Datasets"});function Q(){a.push(S.value)}const ue=[{key:"style",label:"Стиль",icon:Rl},{key:"popup",label:"Попап",icon:O1},{key:"filter",label:"Фільтр",icon:W1},{key:"legend",label:"Легенда",icon:D1},{key:"card",label:"Картка",icon:Ol},{key:"metadata",label:"Метадані",icon:Ro}],fe=ue.map(ne=>ne.key),se=e.ref("style");e.onMounted(async()=>{const ne=r.query.tab;ne&&fe.includes(ne)&&(se.value=ne),await me(),v()});async function v(){var Ue;const ne=m();if(!(ne!=null&&ne.ready))return;await ne.ready(),$();const re=(Ue=ne.map)==null?void 0:Ue.value;if(!re)return;const Ee=()=>_();re.on("moveend",Ee),re.on("zoomend",Ee),re.on("click",d),y=()=>{re.off("moveend",Ee),re.off("zoomend",Ee),re.off("click",d)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{$()}),e.watch(se,ne=>{r.query.tab!==ne&&a.replace({query:{...r.query,tab:ne}})}),e.watch(()=>r.query.tab,ne=>{ne&&fe.includes(ne)&&se.value!==ne&&(se.value=ne)}),e.watch(()=>{var ne;return(ne=f.value)==null?void 0:ne.name},ne=>l(ne),{immediate:!0});function A(ne){if(!ne)return null;try{return JSON.parse(JSON.stringify(ne))}catch(re){return console.warn("Failed to clone style",re),null}}function O(ne){if(!ne)return null;if(typeof ne=="string")try{return mo(Pl.load(ne)||null)}catch(re){return console.warn("Failed to parse style yaml",re),null}return mo(A(ne))}function F(ne,re){try{return JSON.stringify(ne)===JSON.stringify(re)}catch{return!1}}function Y(){var re;if(!f.value)return;const ne=O(w.value);F(ne,((re=f.value)==null?void 0:re.style)??null)||(f.value={...f.value,style:ne})}function ce(){J&&clearTimeout(J),J=setTimeout(()=>{J=null,Y()},Ww)}const me=async()=>{try{const ne=await fetch(`/api/gis-service/${i}`);if(!ne.ok)throw new Error(`${ne.status}`);const re=await ne.json();p.value=re||{},c.value=i;const Ee=O(re.style);f.value=re?{...re,style:A(Ee)}:null,w.value=Ee,E.value=typeof(re==null?void 0:re.style)=="string"?re.style:Ee?Pl.dump(Ee):"",z.value=(re==null?void 0:re.popup)||[],P.value=re.card_mode==="html"?"html":"list",Z.value=re.card,ee.value=re.html,B.value=(re==null?void 0:re.legend)||[],K.value=(re==null?void 0:re.filters)||[]}catch(ne){console.error("Failed to fetch map info",ne)}};e.watch(()=>{var ne;return(ne=f.value)==null?void 0:ne.style},ne=>{w.value=O(ne)},{deep:!0}),e.watch(()=>w.value,()=>{ce()},{deep:!0}),e.onBeforeUnmount(()=>{J&&(clearTimeout(J),J=null),y==null||y(),y=null});async function ge(ne){try{const re=await fetch(`/api/gis-clear-vtile/${ne}`),{message:Ee,error:Ue,code:He}=await re.json();if(He===200)return ye.notify({type:"success",title:"Успіх",message:Ee});ye.notify({type:"error",title:"Помилка",message:Ue})}catch(re){ye.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(re)}}async function we(ne,re){await We({[ne]:re},ne)}function Se(){const ne=A(w.value);f.value=f.value?{...f.value,style:ne}:f.value}async function We(ne,re){if(f.value={...f.value||{},...ne},typeof ne.html<"u"&&(p.value={...p.value||{},html:ne.html}),!!G.value)try{if(!(await fetch(`/api/gis-service/${G.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(ne)})).ok)throw new Error("Save failed");ye.notify({type:"success",title:"Успіх",message:`${re} saved`}),await me()}catch(Ee){ye.notify({type:"error",title:"Помилка",message:`Failed to save ${re}`}),console.error(Ee)}}async function Ze(ne,re){if(ne!=="card"){await we(ne,re);return}const Ee=(re==null?void 0:re.card_mode)==="html"?"html":"list",Ue=Ee==="html"&&typeof(re==null?void 0:re.html)=="string"?re.html:"",He=(Ee==="html"?[]:null)||(Array.isArray(re==null?void 0:re.list)?re.list:[]);Z.value=He,P.value=Ee,ee.value=Ue;const ve={card_mode:Ee};Ee==="html"&&(ve.html=Ue),Ee==="list"&&(ve.card=He),await We(ve,"card")}return(ne,re)=>{var Ee,Ue,He;return e.openBlock(),e.createElementBlock("div",bw,[e.createElementVNode("div",xw,[e.createElementVNode("div",kw,[e.createElementVNode("div",ww,[e.createElementVNode("div",_w,[e.createElementVNode("div",Ew,[e.createElementVNode("div",Cw,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:Q},e.toDisplayString(R.value),1),re[10]||(re[10]=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-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",Nw,e.toDisplayString(((Ee=f.value)==null?void 0:Ee.name)||"Dataset"),1)]),e.createElementVNode("div",Vw,[e.createElementVNode("div",Bw,[e.createElementVNode("div",$w,[e.createElementVNode("h1",Sw,e.toDisplayString(((Ue=f.value)==null?void 0:Ue.name)||"Dataset"),1),I.value?(e.openBlock(),e.createElementBlock("div",vw,[e.createElementVNode("span",Lw,e.toDisplayString(I.value),1)])):e.createCommentVNode("",!0)]),j.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:j.value},e.toDisplayString(j.value),9,Tw)):e.createCommentVNode("",!0)])])]),G.value?(e.openBlock(),e.createBlock(Uo,{key:0,class:"flex-shrink-0","entity-id":G.value,"entity-info":{name:(He=f.value)==null?void 0:He.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":ge,onSaved:me},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Aw,[e.createElementVNode("div",Mw,[e.createVNode(An,{ref_key:"mapViewRef",ref:s},{default:e.withCtx(()=>{var ve,Ge,Ae,nt,W,V,D;return[(ve=f.value)!=null&&ve.service_id?(e.openBlock(),e.createBlock(hw,{key:0,id:(Ge=f.value)==null?void 0:Ge.service_id,layer:f.value,"style-spec":((Ae=f.value)==null?void 0:Ae.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),G.value?(e.openBlock(),e.createBlock(Cr,{key:1,"layer-id":G.value,boundary:((nt=f.value)==null?void 0:nt.boundary)||((W=M.value)==null?void 0:W.boundary)||null,katottg:((V=f.value)==null?void 0:V.katottg)||((D=M.value)==null?void 0:D.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Dw,[G.value?(e.openBlock(),e.createBlock(Co,{key:0,"layer-id":G.value,filters:K.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),re[11]||(re[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",Fw,[e.createVNode(qt)]),e.createElementVNode("div",zw,[e.createVNode(zt),p.value.center?(e.openBlock(),e.createBlock(zt,{key:0,targetCenter:p.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Iw,[e.createVNode(Eo,{items:B.value||null},null,8,["items"])]),e.createVNode(mr),e.createVNode(_o,{html:p.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(Po,{open:le.value,onToggle:re[0]||(re[0]=ve=>le.value=!le.value),"top-class":"top-4"},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",le.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",jw,[e.createElementVNode("div",Pw,[e.createElementVNode("div",Rw,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(ue,ve=>e.createElementVNode("button",{key:ve.key,type:"button",role:"tab","aria-selected":se.value===ve.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",se.value===ve.key?"bg-white shadow-sm text-gray-700":""]),onClick:Ge=>se.value=ve.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ve.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Uw,e.toDisplayString(ve.label),1)],10,Ow)),64))])]),e.createElementVNode("div",qw,[se.value==="style"?(e.openBlock(),e.createBlock(Zk,{key:0,token:G.value,"style-text":E.value,"style-yaml":w.value,"onUpdate:styleYaml":re[1]||(re[1]=ve=>w.value=ve),"onUpdate:styleText":re[2]||(re[2]=ve=>E.value=ve),onUpdate:Se},null,8,["token","style-text","style-yaml"])):se.value==="legend"?(e.openBlock(),e.createBlock(aw,{key:1,token:G.value,columns:B.value,"onUpdate:columns":re[3]||(re[3]=ve=>B.value=ve),onSave:re[4]||(re[4]=ve=>we("legend",ve))},null,8,["token","columns"])):se.value==="popup"?(e.openBlock(),e.createBlock(Jk,{key:2,token:G.value,columns:z.value,fields:p.value.fields,"onUpdate:columns":re[5]||(re[5]=ve=>z.value=ve),onSave:re[6]||(re[6]=ve=>we("popup",ve))},null,8,["token","columns","fields"])):se.value==="card"?(e.openBlock(),e.createBlock(fw,{key:3,token:G.value,columns:Z.value,fields:p.value.fields,"view-mode":P.value,html:ee.value,"onUpdate:columns":re[7]||(re[7]=ve=>Z.value=ve),onSave:Ze},null,8,["token","columns","fields","view-mode","html"])):se.value==="filter"?(e.openBlock(),e.createBlock(yw,{key:4,token:G.value,fields:p.value.fields,columns:K.value,"onUpdate:columns":re[8]||(re[8]=ve=>K.value=ve),onSave:re[9]||(re[9]=ve=>we("filters",ve))},null,8,["token","fields","columns"])):se.value==="metadata"?(e.openBlock(),e.createBlock(Oo,{key:5,data:f.value,"entity-id":String(e.unref(i)),"entity-type":"service",onSaved:me},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-11408bee"]])},Symbol.toStringTag,{value:"Module"})),Gw={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},Zw={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"},Kw={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},Xw={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},Jw={class:"p-3 border-b border-gray-200"},Qw={class:"flex flex-col sm:flex-row gap-2"},e2={class:"entity-table-root"},t2={class:"gap-2 inline-flex"},n2=["onClick"],o2={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"},r2={class:"text-sm text-gray-500"},l2={class:"font-medium text-gray-700"},a2={class:"font-medium text-gray-700"},s2={class:"font-medium text-gray-700"},i2={class:"flex items-center justify-end gap-3"},c2=Object.freeze(Object.defineProperty({__proto__:null,default:Ne(e.defineComponent({__name:"RastersTablePage",props:{entityKey:{default:"rasters"},entityBasePath:{default:"/gis.rasters"},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Ie.useRoute(),r=Ie.useRouter(),a=t,i=e.computed(()=>{var M;return String(((M=o.meta)==null?void 0:M.title)||"Растри")}),s=e.computed(()=>{var M;return String(((M=o.meta)==null?void 0:M.description)||"")}),c=e.computed(()=>`Пошук ${String(i.value).trim()}...`),p=e.computed(()=>a.entityKey||"rasters"),f=e.computed(()=>a.entityBasePath||"/gis.rasters"),k=e.ref([]),l=e.ref(!0),y=e.ref([]),u=e.ref([]),m=e.ref({}),b=e.ref([]),g=e.ref(String(o.query.search??"")),d=e.ref(Math.max(1,Number(o.query.page)||1)),h=e.ref(15),x=e.ref(0),N=e.computed(()=>x.value>0),$=e.computed(()=>x.value?(d.value-1)*h.value+1:0),_=e.computed(()=>x.value?Math.min(d.value*h.value,x.value):0);function w(M){const j=new URLSearchParams;return Object.entries(M).forEach(([I,S])=>{if(!(S==null||S==="")){if(Array.isArray(S)){S.forEach(R=>{R!=null&&R!==""&&j.append(I,String(R))});return}j.append(I,String(S))}}),j.toString()}function E(){return`${f.value}/new`}function B(M){return`${f.value}/${M}/edit`}async function z(){try{l.value=!0;const M=`/api/data/gis.${p.value}.table`,j=w({...m.value,page:d.value,limit:h.value}),I=await fetch(j?`${M}?${j}`:M);if(!I.ok)throw new Error(`Rows fetch failed: ${I.status}`);const S=await I.json();k.value=S.rows||[],x.value=Number(S.filtered??S.total??S.count??k.value.length)||0,y.value=a.columnsConfig.length?a.columnsConfig:S.columns||[],u.value=S.filters||[],b.value=S.actions||[],y.value.length&&!y.value[0].link?y.value[0].link=`${f.value}/{id}`:y.value.length&&(y.value[0].link=`${f.value}/{id}`)}catch{k.value=[],x.value=0}finally{l.value=!1}}function Z(M){m.value=M,d.value=1,G(),z()}async function P(M,j,I){const S=await fetch(`/api/form/gis.${p.value}.table/${M.id}`);if(!S.ok)throw new Error(`Form fetch failed: ${S.status}`);const Q=(await S.json()).token,ue=await fetch(`/api/table/${Q}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({[j]:I})});if(!ue.ok)throw ye.notify({type:"error",title:"Помилка збереження",message:`Поле "${j}" не оновлено`}),new Error(`Save failed: ${ue.status}`);ye.notify({title:"Збережено",message:`Поле "${j}" оновлено`})}function ee(M,j){m.value={...m.value,[M]:j},d.value=1,G(),z()}function K(M){ee((M==null?void 0:M.name)||"search",(M==null?void 0:M.value)??g.value)}function le(M){g.value="",ee(M||"search",void 0)}function J(M){!M||M===d.value||(d.value=M,G(),z())}function G(){const M={...o.query,page:String(d.value),...g.value?{search:g.value}:{}};g.value||delete M.search,delete M.view,r.replace({query:M})}return e.onMounted(()=>{z(),document.title=i.value}),e.watch(()=>o.name,()=>{d.value=1,g.value="",z(),document.title=i.value}),e.watch(()=>o.query,M=>{const j=Math.max(1,Number(M.page)||1),I=String(M.search??""),S=j!==d.value,R=I!==g.value;!S&&!R||(d.value=j,g.value=I,m.value={...m.value,search:I||void 0},z())}),(M,j)=>(e.openBlock(),e.createElementBlock("div",Gw,[e.createVNode(Ht,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),actions:e.withCtx(()=>[e.createElementVNode("a",Zw,[e.createVNode(e.unref(pe.RefreshCw),{size:16}),j[2]||(j[2]=e.createTextVNode(" Оновити растри ",-1))]),e.createElementVNode("a",{onClick:j[0]||(j[0]=I=>e.unref(r).push(E())),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(pe.Plus),{size:16}),j[3]||(j[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[s.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Kw,[e.createElementVNode("div",Xw,[e.createElementVNode("div",Jw,[e.createElementVNode("div",Qw,[e.createVNode(e.unref(Ln.FilterField),{modelValue:g.value,"onUpdate:modelValue":j[1]||(j[1]=I=>g.value=I),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:K,onClear:le,placeholder:c.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Ln.Filter),{schema:u.value,value:m.value,onChange:Z,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",e2,[e.createVNode(e.unref(n),{rows:k.value,columns:y.value,loading:l.value,router:e.unref(r),selectable:!1,onCellUpdate:P,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"},{action:e.withCtx(({row:I})=>[e.createElementVNode("div",t2,[e.createElementVNode("button",{onClick:S=>e.unref(r).push(B(I.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(Tn)],8,n2)])]),_:1},8,["rows","columns","loading","router"])]),N.value?(e.openBlock(),e.createElementBlock("div",o2,[e.createElementVNode("div",r2,[j[4]||(j[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",l2,e.toDisplayString($.value),1),j[5]||(j[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",a2,e.toDisplayString(_.value),1),j[6]||(j[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",s2,e.toDisplayString(x.value),1)]),e.createElementVNode("div",i2,[e.createVNode(e.unref(ye.VsPagination),{total:x.value,page:d.value,"page-size":h.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":J,onPageChange:J},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-63309b89"]])},Symbol.toStringTag,{value:"Module"})),d2={class:"flex-1 overflow-y-auto p-4 sm:p-6"},u2={class:"space-y-3"},m2={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},p2={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},f2={class:"text-xs text-gray-500 mb-1"},g2={key:0,class:"text-base text-md font-semibold text-gray-900"},y2={key:1,class:"text-base text-md font-semibold text-gray-900"},h2={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},b2={class:"space-y-2"},x2={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},k2={class:"text-sm font-semibold text-gray-900"},w2={class:"text-xs text-gray-600 mt-1"},_2={class:"grid grid-cols-2 gap-3"},E2={class:"text-xs text-gray-500 mb-1"},C2={class:"text-sm font-semibold text-gray-900"},N2={class:"bg-gray-50 p-4 rounded-lg"},V2={class:"grid grid-cols-2 gap-4"},B2={class:"text-xs text-gray-500 mb-1"},$2={class:"text-sm font-semibold text-gray-900"},S2=e.defineComponent({directives:{tooltip:ye.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",d2,[e.createElementVNode("div",u2,[e.createElementVNode("div",m2,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",p2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,a=>(e.openBlock(),e.createElementBlock("div",{key:a.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",f2,e.toDisplayString(a.label),1),a.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",g2,[e.createTextVNode(e.toDisplayString(a.value),1)])),[[r,a.tooltip]]):(e.openBlock(),e.createElementBlock("p",y2,e.toDisplayString(a.value),1))]))),128))])]),e.createElementVNode("div",h2,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-2"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",b2,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",x2,[e.createElementVNode("p",k2,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",w2,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",_2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,a=>(e.openBlock(),e.createElementBlock("div",{key:a.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",E2,e.toDisplayString(a.label),1),e.createElementVNode("p",C2,e.toDisplayString(a.value),1)]))),128))])]),e.createElementVNode("div",N2,[e.createElementVNode("div",V2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,a=>(e.openBlock(),e.createElementBlock("div",{key:a.label},[e.createElementVNode("p",B2,e.toDisplayString(a.label),1),e.createElementVNode("p",$2,e.toDisplayString(a.value),1)]))),128))])])])])])])}}}),v2={class:"flex-1 overflow-y-auto space-y-3 pr-1"},L2={class:"font-medium text-sm text-gray-800"},T2={class:"text-xs text-gray-500"},A2=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",v2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,r=>(e.openBlock(),e.createElementBlock("div",{key:r.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",L2,e.toDisplayString(r.name),1),e.createElementVNode("p",T2,e.toDisplayString(r.resolution)+" • "+e.toDisplayString(r.size)+"MB",1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",r.statusClass])},e.toDisplayString(r.status),3)]))),128))]))}}),M2={},D2={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function F2(t,n){return e.openBlock(),e.createElementBlock("svg",D2,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const z2=Ne(M2,[["render",F2]]),I2={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},j2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},P2={class:"flex items-center gap-2"},R2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},O2={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},U2=["checked"],q2=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{},showRasterExtent:{type:Boolean}},emits:["toggle-extent"],setup(t){const n=t,o=n.layerId||"raster-preview-layer",r=`${o}-source`,a=n.extent&&n.extent.length===4?[...n.extent]:void 0,i=Me(o,{sourceId:r,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...a?{bounds:a}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":1}},beforeId:n.beforeId??null}),{fitBounds:s}=et(),c=e.ref(1);e.watch(()=>n.tileUrl,l=>{if(!l){i.setVisible(!1);return}i.setVisible(!0),i.setTiles([l])},{immediate:!0}),e.watch(()=>c.value,l=>{i.setOpacity(l)},{immediate:!0});let p=null,f=!1;e.watch(()=>n.extent,l=>{if(!l||l.length!==4)return;const y=l.join(",");if(y!==p){if(p=y,!f){f=!0;return}s==null||s([[l[0],l[1]],[l[2],l[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const k=e.computed(()=>`${Math.round(c.value*100)}%`);return(l,y)=>(e.openBlock(),e.createElementBlock("div",I2,[e.createElementVNode("div",j2,[e.createElementVNode("div",P2,[y[2]||(y[2]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":y[0]||(y[0]=u=>c.value=u),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(k.value),1)])]),e.createElementVNode("div",R2,[e.createElementVNode("label",O2,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:t.showRasterExtent,onChange:y[1]||(y[1]=u=>l.$emit("toggle-extent",u.target.checked))},null,40,U2),y[3]||(y[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),Qn=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{},lineColor:{},lineWidth:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,a=e.computed(()=>{const{extent:c}=n;if(!c||c.length!==4)return null;const[p,f,k,l]=c;return[p,f,k,l].some(y=>typeof y!="number"||Number.isNaN(y))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[p,f],[k,f],[k,l],[p,l],[p,f]]]}}]}}),i=et(),s=Me(o,{sourceId:r,source:{type:"geojson",data:a.value||{type:"FeatureCollection",features:[]}},layer:{id:o,type:"line",paint:{"line-color":n.lineColor??"#ef4444","line-width":n.lineWidth??2}},beforeId:n.beforeId??null});return e.watch(()=>a.value,c=>{var f;if(!c){s.setVisible(!1),s.setData({type:"FeatureCollection",features:[]});return}s.setVisible(!0),s.setData(c);const p=(f=i.map)==null?void 0:f.value;p!=null&&p.moveLayer&&p.getLayer(o)&&p.moveLayer(o)},{immediate:!0}),(c,p)=>e.createCommentVNode("",!0)}}),H2={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},W2={class:"flex-1 relative overflow-hidden"},Y2={class:"absolute top-0 left-0 w-full z-20"},G2={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},Z2={class:"flex items-start justify-between gap-4"},K2={class:"flex-1 min-w-0"},X2={class:"flex items-center text-sm text-gray-500 mb-3"},J2={class:"text-gray-900 font-medium truncate max-w-xs"},Q2={class:"flex items-center justify-between gap-4"},e_={class:"flex-1 min-w-0"},t_={class:"flex items-center gap-3 mb-1"},n_={class:"text-base font-semibold text-gray-900 truncate"},o_=["title"],r_={class:"flex items-center gap-4 min-w-0"},l_={class:"flex-1 min-w-0"},a_=["title"],s_={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[105px]"},i_={class:"relative w-full h-full"},c_={class:"absolute top-4 left-4 z-20"},d_={key:1,class:"absolute bottom-4 left-1/2 z-30 -translate-x-1/2 rounded-2xl border border-sky-200 bg-white/95 px-4 py-2 text-xs font-medium text-slate-700 shadow-lg backdrop-blur"},u_={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},m_={class:"flex-1 flex flex-col h-full"},p_={class:"px-3 pt-3 pb-2 border-b border-gray-100"},f_={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-3 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},g_=["aria-selected","onClick"],y_={class:"leading-none"},h_={class:"flex flex-col flex-1 overflow-y-hidden p-3"},b_={key:0,class:"mb-3 text-xs text-slate-500"},x_={key:1,class:"mb-3 text-xs text-rose-600"},k_="OpenGIS",Yl=2,eo=5,w_=5,__=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=Ie.useRouter(),r=Ie.useRoute(),a=e.ref(null),i=e.computed(()=>{var te;const V=(te=r.matched[r.matched.length-1])==null?void 0:te.path;return(typeof V=="string"&&V?V:r.path).replace(/\/:id\??$/,"")||"/"}),s=e.computed(()=>{var D;const V=(D=r.meta)==null?void 0:D.title;return typeof V=="string"&&V.trim()?V:"Растри"});function c(){o.push(i.value)}const p=e.computed(()=>{var D;const V=(D=r.params)==null?void 0:D.id;return typeof V=="string"?V:void 0}),f=e.ref(null),k=e.ref(!1),l=e.ref(!1),y=e.ref(null),u=e.ref(!0),m=e.ref(!1),b=e.ref(null);let g=null,d=null;const h=e.ref(!1);let x=null,N=!1;function $(V){if(Array.isArray(V))return $(V[0]);if(typeof V!="string"&&typeof V!="number")return null;const D=typeof V=="number"?V:Number(V.trim());return Number.isFinite(D)?D:null}function _(V,D){return V.toFixed(D)}function w(V,D,te){const T=.5*10**-te;return Math.abs(V-D)>T}function E(){var V;return(V=a.value)==null?void 0:V.ctx}function B(){var de,ke,Be,$e;const V=(ke=(de=E())==null?void 0:de.map)==null?void 0:ke.value;if(!V)return;const D=$(r.query.z),te=$(r.query.x),T=$(r.query.y);if(D==null||te==null||T==null)return;const U=(Be=V.getCenter)==null?void 0:Be.call(V),q=($e=V.getZoom)==null?void 0:$e.call(V);(!U||w(U.lng,te,eo)||w(U.lat,T,eo)||w(q??0,D,Yl))&&(h.value=!0,V.jumpTo({center:[te,T],zoom:D}),h.value=!1)}function z(){var U,q,ie,de;if(h.value)return;const V=(q=(U=E())==null?void 0:U.map)==null?void 0:q.value;if(!V)return;const D=(ie=V.getCenter)==null?void 0:ie.call(V),te=(de=V.getZoom)==null?void 0:de.call(V);if(!D||te==null)return;const T={...r.query,z:_(te,Yl),x:_(D.lng,eo),y:_(D.lat,eo)};r.query.z===T.z&&r.query.x===T.x&&r.query.y===T.y||o.replace({query:T})}function Z(){var D;if(typeof document>"u")return;const V=(D=O.value)==null?void 0:D.name;document.title=V?`${V} — Растер`:k_}function P(V){return Number(V.toFixed(w_))}function ee(V,D){const[te,T]=V,[U,q]=D;return[P(Math.min(te,U)),P(Math.min(T,q)),P(Math.max(te,U)),P(Math.max(T,q))]}function K(V){const[D,te,T,U]=V;return{type:"Polygon",coordinates:[[[D,te],[T,te],[T,U],[D,U],[D,te]]]}}function le(V){var T,U,q;const D=(U=(T=E())==null?void 0:T.map)==null?void 0:U.value,te=(q=D==null?void 0:D.getCanvas)==null?void 0:q.call(D);te!=null&&te.style&&(te.style.cursor=V)}async function J(V,D){if(!(!p.value||!f.value))try{const te=K(V),T=await fetch(`/api/gis-metadata/raster/${encodeURIComponent(p.value)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:te})});if(!T.ok)throw new Error(`Failed to save raster metadata geom: ${T.status}`);ye.notify({type:"success",title:"Extent збережено",message:"Нові межі успішно збережено."}),await Oe()}catch(te){console.error("Failed to save raster extent",te),f.value&&(f.value={...f.value,extent:D?[...D]:void 0}),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Extent"})}}function G(V){var te,T,U;const D=(T=(te=E())==null?void 0:te.map)==null?void 0:T.value;if((U=D==null?void 0:D.dragPan)!=null&&U.enable&&D.dragPan.enable(),(V==null?void 0:V.length)===4&&f.value){const q=Array.isArray(f.value.extent)?[...f.value.extent]:null;f.value={...f.value,extent:[...V]},J(V,q)}x=null,N=!1,b.value=null,m.value=!1,le("")}function M(){G(null)}function j(){var q,ie;const V=(ie=(q=E())==null?void 0:q.map)==null?void 0:ie.value;if(!V)return;const D=de=>{var Be,$e,ot;if(!m.value||((Be=de==null?void 0:de.originalEvent)==null?void 0:Be.button)!=null&&de.originalEvent.button!==0)return;const ke=de==null?void 0:de.lngLat;ke&&(x=[ke.lng,ke.lat],N=!0,b.value=[ke.lng,ke.lat,ke.lng,ke.lat],(ot=($e=V.dragPan)==null?void 0:$e.disable)==null||ot.call($e))},te=de=>{if(!m.value||!N||!x)return;const ke=de==null?void 0:de.lngLat;ke&&(b.value=ee(x,[ke.lng,ke.lat]))},T=de=>{if(!m.value||!N||!x)return;const ke=de==null?void 0:de.lngLat;if(!ke){M();return}const Be=ee(x,[ke.lng,ke.lat]),[$e,ot,gt,ut]=Be;if(!(Math.abs(gt-$e)>0&&Math.abs(ut-ot)>0)){ye.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),M();return}G(Be)},U=de=>{m.value&&de.key==="Escape"&&(de.preventDefault(),M())};V.on("mousedown",D),V.on("mousemove",te),V.on("mouseup",T),window.addEventListener("keydown",U),d=()=>{V.off("mousedown",D),V.off("mousemove",te),V.off("mouseup",T),window.removeEventListener("keydown",U)}}async function I(){var te;if(m.value)return;const V=E();!(V!=null&&V.ready)||(await V.ready(),!((te=V.map)==null?void 0:te.value))||(d||j(),m.value=!0,N=!1,x=null,b.value=null,le("crosshair"),ye.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}const S=e.computed(()=>{var D;const V=(D=f.value)==null?void 0:D.url;return V?/^https?:\/\//i.test(V)||typeof window>"u"||typeof location>"u"?V:`${location.origin}${V}`:""}),R=e.computed(()=>{var V;return((V=f.value)==null?void 0:V.extent)??null}),Q=e.computed(()=>p.value?`raster-${p.value}`:void 0),ue=e.computed(()=>p.value?`raster-extent-${p.value}`:"raster-extent"),fe=e.computed(()=>p.value?`raster-extent-draft-${p.value}`:"raster-extent-draft"),se=e.computed(()=>{const V=Q.value??"raster",D=R.value&&R.value.length===4?R.value.join(","):"no-extent";return`${V}-${D}`}),v=e.computed(()=>!!S.value),A=e.computed(()=>{const V=R.value;if(!V||V.length!==4)return null;const[D,te,T,U]=V;return[D,te,T,U].some(q=>typeof q!="number"||Number.isNaN(q))?null:[(D+T)/2,(te+U)/2]}),O=e.computed(()=>{var q,ie;const V=f.value,D=V==null?void 0:V.extent,T=p.value??"—",U=[V!=null&&V.extension?`Формат ${String(V.extension).toUpperCase()}`:null,(V==null?void 0:V.resolution)||null].filter(Boolean).join(", ");return{id:T,name:(V==null?void 0:V.name)||((ie=(q=V==null?void 0:V.files)==null?void 0:q[0])==null?void 0:ie.name),description:(V==null?void 0:V.description)||U||"Попередній перегляд растрового шару.",coverage:D&&D.length===4?`${W(D[0])}, ${W(D[1])} → ${W(D[2])}, ${W(D[3])}`:"Покриття уточнюється",crs:V!=null&&V.srid?`EPSG:${V.srid}`:"EPSG:4326",source:V!=null&&V.proj4?V.proj4:"Джерело: Mapnik",updatedAt:V!=null&&V.cache?"Дані кешовано":"Нові дані"}}),F=e.computed(()=>{const V=f.value;return V?[V.source_path,V.srid?`SRID: ${V.srid}`:null,V.is_public?"Публічна":"Не публічна",V.is_active?"Активна":"Неактивна",V.cache?"Кешовано":null].filter(D=>D).join(", "):""}),Y=[{key:"info",label:"Інформація",icon:z2},{key:"files",label:"Файли",icon:Tn},{key:"metadata",label:"Метадані",icon:Ro}],ce=Y.map(V=>V.key),me=e.ref(ce.includes(r.query.tab)?r.query.tab:"info"),ge=e.ref(!0);e.watch(()=>r.query.tab,V=>{V&&ce.includes(V)&&me.value!==V&&(me.value=V)}),e.watch(me,V=>{r.query.tab!==V&&o.replace({query:{...r.query,tab:V}})});const we=e.computed(()=>ne(f.value)),Se=e.computed(()=>Ee(f.value));e.watch(()=>f.value,()=>{Z()},{immediate:!0});async function We(){var T;const V=E();if(!(V!=null&&V.ready))return;await V.ready(),B();const D=(T=V.map)==null?void 0:T.value;if(!D)return;const te=()=>z();D.on("moveend",te),D.on("zoomend",te),g=()=>{D.off("moveend",te),D.off("zoomend",te)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{B()}),e.onMounted(()=>{We()}),e.onBeforeUnmount(()=>{g==null||g(),g=null,d==null||d(),d=null,le("")}),e.watch(p,()=>{Oe()},{immediate:!0});async function Ze(V){var D;Oe(),((D=f.value)==null?void 0:D.srid)!==V.srid&&(ye.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await at(`/api/gis-xml/${encodeURIComponent(p.value)}`),ye.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function Oe(){const V=p.value;if(!V){f.value=null,y.value=null;return}k.value=!0,y.value=null;try{const D=await fetch(`/api/gis-raster/${encodeURIComponent(V)}`);if(!D.ok)throw new Error(`HTTP ${D.status}`);const te=await D.json();te.xml&&(l.value=!0),f.value=te,te.xml||(ye.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await at(`/api/gis-xml/${encodeURIComponent(V)}`),ye.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(V)}?nocache=1`),l.value=!0)}catch(D){console.error("Failed to load raster info",D),f.value=null,y.value=D instanceof Error?D.message:String(D)}finally{k.value=!1}}function at(V){return new Promise((D,te)=>{const T=new EventSource(V),U=[];T.onmessage=q=>{U.push(q.data),console.log("Received:",q.data)},T.addEventListener("end",()=>{T.close(),D(U)}),T.onerror=q=>{T.close(),D(q)}})}function ne(V){var D;return(D=V==null?void 0:V.files)!=null&&D.length?V.files.map(te=>({name:te.name,resolution:re(te.name,V),size:te.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function re(V,D){const te=V.toLowerCase();return te.endsWith(".tfw")?"Georeference":te.endsWith(".xml")?"Опис":te.endsWith(".tif")||te.endsWith(".tiff")?D!=null&&D.resolution?D.resolution:"Растер":(D==null?void 0:D.resolution)??"Файл"}function Ee(V){return V?{baseParams:He(V),spatial:{crs:{code:V.srid?`EPSG:${V.srid}`:"EPSG:4326",description:V.proj4||"WGS 84 — World Geodetic System 1984"},bounds:ve(V.extent),resolution:Ge(V)},statistics:Ae(V),technical:nt(V)}:null}function Ue(V){return V!=null&&V.length?V.map(te=>{var U;if(!te)return"";const T=te.trim().split(/\s+/)[0];return((U=T==null?void 0:T[0])==null?void 0:U.toUpperCase())||""}).filter(Boolean).join(""):""}function He(V){var q,ie;const D=V.bands_count??((q=V.bands)==null?void 0:q.length)??"—",te=Ue(V.bands),T=(V.bands??[]).map(de=>de.trim()).filter(de=>de.length>0),U=T.length?T.join(", "):void 0;return[{label:"Розмір растру, px",value:V.width&&V.height?`${V.width}×${V.height}`:"—"},{label:"Формат файлу",value:((ie=V.extension)==null?void 0:ie.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:V.total_size?`${V.total_size}`:"—"},{label:"Кількість каналів",value:typeof D=="number"?`${D}${te?` (${te})`:""}`:`${D}${te?` (${te})`:""}`,tooltip:U},{label:"Глибина кольору",value:V.color_depth?`${V.color_depth} біт/канал`:"—"},{label:"Стиснення",value:V.compression||"—"}]}function ve(V){return!V||V.length!==4?[]:[{label:"Північ",value:W(V[3],"N")},{label:"Схід",value:W(V[2],"E")},{label:"Південь",value:W(V[1],"S")},{label:"Захід",value:W(V[0],"W")}]}function Ge(V){const D=[{label:"Роздільна здатність",value:V.resolution||"—"}];return V.width&&V.height&&D.push({label:"Розмір пікселя",value:`${V.width} × ${V.height} px`}),D}function Ae(V){var D;return(D=V.bands)!=null&&D.length?V.bands.map((te,T)=>{const U=n[T%n.length];return{label:`Канал ${T+1}${te?` (${te})`:""}`,cardClass:U.cardClass,titleClass:U.titleClass,metrics:[{label:"Назва",value:te||`Канал ${T+1}`},{label:"Глибина",value:V.color_depth?`${V.color_depth} біт`:"—"},{label:"Статус",value:V.cache?"Кешовано":"Готово"}]}}):[]}function nt(V){var D;return[{label:"Тип даних",value:V.color_depth?`Unsigned Integer ${V.color_depth}-bit`:"—"},{label:"Компресія",value:V.compression||"—"},{label:"Кольорова інтерпретація",value:((D=V.bands)==null?void 0:D.join(", "))||"—"},{label:"SRID",value:V.srid?`EPSG:${V.srid}`:"—"},{label:"Проекція (proj4)",value:V.proj4||"—"},{label:"URL тайла",value:V.url||"—"}]}function W(V,D){if(V==null||Number.isNaN(V))return"—";const te=`${V.toFixed(5)}°`;return D?`${te} ${D}`:te}return(V,D)=>(e.openBlock(),e.createElementBlock("div",H2,[e.createElementVNode("div",W2,[e.createElementVNode("div",Y2,[e.createElementVNode("div",G2,[e.createElementVNode("div",Z2,[e.createElementVNode("div",K2,[e.createElementVNode("div",X2,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:c},e.toDisplayString(s.value),1),D[2]||(D[2]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",J2,e.toDisplayString(O.value.name||"Растер"),1)]),e.createElementVNode("div",Q2,[e.createElementVNode("div",e_,[e.createElementVNode("div",t_,[e.createElementVNode("h1",n_,e.toDisplayString(O.value.name||"Растер"),1)]),F.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:F.value},e.toDisplayString(F.value),9,o_)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",r_,[e.createElementVNode("div",l_,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:O.value.description},e.toDisplayString(O.value.description),9,a_)]),e.createVNode(Uo,{"entity-id":p.value||"","entity-info":{name:O.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:Ze},null,8,["entity-id","entity-info"])])])])]),e.createElementVNode("div",s_,[e.createElementVNode("div",i_,[e.createVNode(An,{ref_key:"mapViewRef",ref:a},{default:e.withCtx(()=>[v.value&&l.value?(e.openBlock(),e.createBlock(q2,{key:se.value,"tile-url":S.value,extent:R.value,"layer-id":Q.value,"show-raster-extent":u.value,onToggleExtent:D[0]||(D[0]=te=>u.value=te)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(Qn,{extent:u.value?R.value:null,"layer-id":ue.value},null,8,["extent","layer-id"]),e.createVNode(Qn,{extent:b.value,"layer-id":fe.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createElementVNode("div",c_,[e.createVNode(qt)]),m.value?(e.openBlock(),e.createElementBlock("div",d_," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),e.createElementVNode("div",u_,[e.createVNode(zt),A.value?(e.openBlock(),e.createBlock(zt,{key:0,targetCenter:A.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1},512)])]),e.createVNode(Po,{open:ge.value,onToggle:D[1]||(D[1]=te=>ge.value=!ge.value)},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",ge.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",m_,[e.createElementVNode("div",p_,[e.createElementVNode("div",f_,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Y,te=>e.createElementVNode("button",{key:te.key,type:"button",role:"tab","aria-selected":me.value===te.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",me.value===te.key?"bg-white shadow-sm text-gray-700":""]),onClick:T=>me.value=te.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(te.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",y_,e.toDisplayString(te.label),1)],10,g_)),64))])]),e.createElementVNode("div",h_,[k.value?(e.openBlock(),e.createElementBlock("div",b_," Завантаження метаданих растру… ")):y.value?(e.openBlock(),e.createElementBlock("div",x_," Не вдалося отримати дані: "+e.toDisplayString(y.value),1)):e.createCommentVNode("",!0),me.value==="files"?(e.openBlock(),e.createBlock(A2,{key:2,files:we.value},null,8,["files"])):me.value==="metadata"?(e.openBlock(),e.createBlock(Oo,{key:3,data:f.value,"entity-id":p.value,"entity-type":"raster",onSaved:Oe,onEditCssBounds:I},null,8,["data","entity-id"])):Se.value?(e.openBlock(),e.createBlock(S2,{key:4,details:Se.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}})},Symbol.toStringTag,{value:"Module"})),E_={},C_={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"};function N_(t,n){return e.openBlock(),e.createElementBlock("svg",C_,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const V_=Ne(E_,[["render",N_]]),B_={class:"flex flex-col h-full"},$_={class:"flex justify-end mb-3 gap-2"},S_=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,a=e.computed({get:()=>o.modelValue,set:i=>r("update:modelValue",i)});return(i,s)=>(e.openBlock(),e.createElementBlock("div",B_,[e.createElementVNode("div",$_,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:s[0]||(s[0]=c=>i.$emit("save"))},[...s[2]||(s[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(Nn,{modelValue:a.value,"onUpdate:modelValue":s[1]||(s[1]=c=>a.value=c),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),v_={class:"flex flex-col flex-1 min-h-0"},L_={class:"flex justify-between mb-3 gap-2"},T_={class:"text-left"},A_={class:"font-medium text-gray-900"},M_={class:"text-xs text-gray-500"},D_={class:"flex justify-center gap-2"},F_=["checked","onChange"],z_={class:"text-sm font-medium text-gray-900"},I_=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Min Зум",slot:"zoomCell",width:"140px"}],r=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=n,c=e.ref(!1),p=e.ref({table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),f={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},gcol:{type:"text",label:"Колонка geometry"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function k(){p.value={table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},c.value=!0}function l(){c.value=!1}function y(){var g,d;const m=(g=p.value.table)==null?void 0:g.trim(),b=(d=p.value.key)==null?void 0:d.trim();if(!m||!b){ye.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...p.value,table:m,key:b}],c.value=!1}function u(m,b){var d;const g=((d=b==null?void 0:b.target)==null?void 0:d.checked)??!1;m.active=g,i.value=Array.isArray(i.value)?[...i.value]:[]}return(m,b)=>(e.openBlock(),e.createElementBlock("div",v_,[e.createElementVNode("div",L_,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500",onClick:k}," Додати таблицю "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:b[0]||(b[0]=g=>s("save"))}," Зберегти ")]),e.createVNode(Lt,{modelValue:i.value,"onUpdate:modelValue":b[1]||(b[1]=g=>i.value=g),"columns-scheme":o,"form-scheme":f,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:g})=>[e.createElementVNode("div",T_,[e.createElementVNode("div",A_,e.toDisplayString(g.table),1),e.createElementVNode("div",M_,e.toDisplayString(g.key),1)])]),activeCell:e.withCtx(({row:g})=>[e.createElementVNode("label",D_,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:g.active,onChange:d=>u(g,d)},null,40,F_)])]),zoomCell:e.withCtx(({row:g})=>[e.createElementVNode("div",z_,e.toDisplayString(g.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:c.value,"onUpdate:visible":b[3]||(b[3]=g=>c.value=g),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:l}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{values:p.value,"onUpdate:values":b[2]||(b[2]=g=>p.value=g),schema:f},null,8,["values"])]),_:1},8,["visible"])]))}}),j_={class:"flex flex-col flex-1 min-h-0 gap-4"},P_={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},R_=e.defineComponent({__name:"cartocss-card-tab",props:{card:{},table:{}},emits:["save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.table),i=e.ref(o.card),s=e.defineAsyncComponent(()=>import("@opengis/form").then(p=>p.VsInputText));function c(){r("save",{card_html:i.value,card_table:a.value})}return(p,f)=>(e.openBlock(),e.createElementBlock("div",j_,[e.createElementVNode("div",{class:"flex items-center justify-end gap-3"},[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:c},[...f[2]||(f[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти картку ",-1)])])]),e.createElementVNode("div",null,[e.createVNode(e.unref(s),{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=k=>a.value=k)},null,8,["modelValue"])]),e.createElementVNode("div",P_,[e.createVNode(Nn,{modelValue:i.value,"onUpdate:modelValue":f[1]||(f[1]=k=>i.value=k),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),O_=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:1}},setup(t){const n=t,o=et(),{activateTemporaryLayer:r,deactivateTemporaryLayer:a,setTemporaryLayerOpacity:i}=cn(o.map),s=e.computed(()=>{var l;const k=`${(l=n==null?void 0:n.tileUrl)==null?void 0:l.trim()}`;return k?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(k)?k:k.startsWith("//")?`${window.location.protocol}${k}`:k.startsWith("/")?`${location.origin}${k}`:`${location.origin}/${k}`:""});let c="",p="";function f(){const k=n.active&&!!s.value;c&&(!k||c!==n.layerId)&&(a(c,p||void 0),c="",p=""),k&&(r({id:n.layerId,title:n.title||n.layerId,url:s.value,opacity:n.opacity},{},n.owner),c=n.layerId,p=n.owner||"")}return e.watch(()=>[n.layerId,s.value,n.active,n.owner],f,{immediate:!0}),e.watch(()=>n.opacity,k=>{!c||!n.active||i(c,k,p||void 0)},{immediate:!0}),e.onUnmounted(()=>{c&&(a(c,p||void 0),c="",p="")}),(k,l)=>e.createCommentVNode("",!0)}}),U_=e.defineComponent({__name:"CartocssMapClickListener",props:{cartocssId:{},infoEnabled:{type:[Boolean,null]}},setup(t){const n=t,o=e.computed(()=>n.cartocssId??null),r=e.computed(()=>!!n.infoEnabled),{map:a,ready:i}=et(),s=u=>{!u||typeof window>"u"||window.dispatchEvent(new CustomEvent(wo,{detail:u}))},c=async u=>{const m=await fetch(`/api/map-format?${u.toString()}`);if(!m.ok)throw new Error(`API returned ${m.status}`);return m.json()};let p=null,f=null;const k=u=>{if(!u)return null;if(typeof u=="string")try{return JSON.parse(u)}catch{return null}return u},l=async(u,m)=>{var d;const b=o.value?`external:${o.value},${String(u)}`:null,g=new URLSearchParams({layer:o.value??"",id:String(u)});try{const h=await c(g),x=typeof h.html=="string"?h.html:null,N=k(((d=h==null?void 0:h.data)==null?void 0:d.geom)??(h==null?void 0:h.geom)??null);(x||N)&&s({html:x,geometry:N??m,infoToken:b})}catch(h){console.warn("CartoCSS map-format (id) error",h)}},y=async u=>{var d,h,x,N;if(!o.value)return;if(!r.value){ye.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const m=(d=u==null?void 0:u.lngLat)==null?void 0:d.lng,b=(h=u==null?void 0:u.lngLat)==null?void 0:h.lat;if(typeof m!="number"||typeof b!="number")return;const g=new URLSearchParams({layer:o.value,lat:b.toFixed(6),lng:m.toFixed(6)});try{const $=await c(g),_=k(((x=$==null?void 0:$.data)==null?void 0:x.geom)??($==null?void 0:$.geom)??null),w=((N=$==null?void 0:$.data)==null?void 0:N.id)??($==null?void 0:$.id);if(w!=null){await l(w,_);return}fr({html:$==null?void 0:$.html})&&s({html:$==null?void 0:$.html,geometry:_,infoToken:null})}catch($){console.warn("CartoCSS map-format error",$)}};return i().then(()=>{f=a.value,f&&(f.on("click",y),p=()=>f==null?void 0:f.off("click",y))}),e.onBeforeUnmount(()=>{p==null||p(),p=null,f=null}),()=>{}}}),q_={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},H_={class:"flex-1 relative overflow-hidden"},W_={class:"absolute top-0 left-0 w-full z-20"},Y_={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},G_={class:"flex items-start justify-between gap-4"},Z_={class:"flex-1 min-w-0"},K_={class:"flex items-center text-sm text-gray-500 mb-3"},X_={class:"text-gray-900 font-medium truncate max-w-xs"},J_={class:"flex items-center justify-between gap-4"},Q_={class:"flex-1 min-w-0"},eE={class:"flex items-center gap-3 mb-1"},tE={class:"text-base font-semibold text-gray-900 truncate"},nE={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},oE={class:"text-xs font-medium text-green-700"},rE=["title"],lE={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[115px]"},aE={class:"relative w-full h-full"},sE={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},iE={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},cE={class:"flex items-center gap-2"},dE={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},uE={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},mE=["checked"],pE={class:"absolute top-4 left-4 z-20"},fE={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},gE={key:0,class:"absolute bottom-4 left-1/2 z-30 -translate-x-1/2 rounded-2xl border border-sky-200 bg-white/95 px-4 py-2 text-xs font-medium text-slate-700 shadow-lg backdrop-blur"},yE={class:"flex-1 flex flex-col h-full"},hE={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},bE=["aria-selected","onClick"],xE={class:"leading-none"},kE={class:"flex flex-col flex-1 overflow-y-hidden p-3"},wE={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},_E="cartocss-demo-001",EE="OpenGIS",Gl=2,to=5,CE=5,NE=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"cartocss",setup(t){const n=Ie.useRouter(),o=Ie.useRoute(),r=e.ref(null),a=e.computed(()=>{var D;const W=(D=o.matched[o.matched.length-1])==null?void 0:D.path;return(typeof W=="string"&&W?W:o.path).replace(/\/:id\??$/,"")||"/"}),i=e.computed(()=>{var V;const W=(V=o.meta)==null?void 0:V.title;return typeof W=="string"&&W.trim()?W:"CartoCSS"});function s(){n.push(a.value)}const c=[{key:"css",label:"CSS",icon:Rl},{key:"data",label:"Дані",icon:V_},{key:"metadata",label:"Метадані",icon:Ro},{key:"card",label:"Картка",icon:Ol}],p=c.map(W=>W.key),f=e.ref(p.includes(o.query.tab)?o.query.tab:"css"),k=e.ref(!0),l=e.ref(null),y=e.computed(()=>{var W;return(W=l.value)!=null&&W.source_path?c.filter(V=>V.key==="card"||V.key==="metadata"):c}),u=e.computed(()=>o.params.id||_E),m=e.ref({id:u.value,name:"",description:""});let b=null;const g=e.ref(!1);function d(W){if(Array.isArray(W))return d(W[0]);if(typeof W!="string"&&typeof W!="number")return null;const V=typeof W=="number"?W:Number(W.trim());return Number.isFinite(V)?V:null}function h(W,V){return W.toFixed(V)}function x(W,V,D){const te=.5*10**-D;return Math.abs(W-V)>te}function N(){var W;return(W=r.value)==null?void 0:W.ctx}function $(){var ie,de,ke,Be;const W=(de=(ie=N())==null?void 0:ie.map)==null?void 0:de.value;if(!W)return;const V=d(o.query.z),D=d(o.query.x),te=d(o.query.y);if(V==null||D==null||te==null)return;const T=(ke=W.getCenter)==null?void 0:ke.call(W),U=(Be=W.getZoom)==null?void 0:Be.call(W);(!T||x(T.lng,D,to)||x(T.lat,te,to)||x(U??0,V,Gl))&&(g.value=!0,W.jumpTo({center:[D,te],zoom:V}),g.value=!1)}function _(){var T,U,q,ie;if(g.value)return;const W=(U=(T=N())==null?void 0:T.map)==null?void 0:U.value;if(!W)return;const V=(q=W.getCenter)==null?void 0:q.call(W),D=(ie=W.getZoom)==null?void 0:ie.call(W);if(!V||D==null)return;const te={...o.query,z:h(D,Gl),x:h(V.lng,to),y:h(V.lat,to)};o.query.z===te.z&&o.query.x===te.x&&o.query.y===te.y||n.replace({query:te})}function w(W){typeof document>"u"||(document.title=W?`${W} — CartoCSS`:EE)}const E=e.ref(""),B=e.ref([]),z=e.ref(!1),Z=e.ref(!1),P=e.ref(""),ee=e.ref(0),K=e.ref(!1),le=e.ref(1),J=e.ref(!0),G=e.ref(!1),M=e.ref(null),j=e.computed(()=>`cartocss-layer-${u.value}`),I=e.computed(()=>`${Math.round(le.value*100)}%`),S=e.computed(()=>`cartocss-extent-${u.value}`),R=e.computed(()=>`cartocss-extent-draft-${u.value}`),Q=e.computed(()=>{var T;const W=(T=P.value)==null?void 0:T.trim();if(!W)return"";const V=W.includes("?")?"&":"?",D=`${W}${V}nottl=1`,te=ee.value;return te?`${W}${V}ts=${te}&nocache=1`:D}),ue=e.ref(""),fe=e.ref(""),se=e.computed(()=>{var U;const W=(U=l.value)==null?void 0:U.bounds;if(!Array.isArray(W)||W.length<4)return null;const[V,D,te,T]=W;return[V,D,te,T].some(q=>typeof q!="number"||Number.isNaN(q))?null:[(V+te)/2,(D+T)/2]}),v=e.computed(()=>{var U;const W=(U=l.value)==null?void 0:U.bounds;if(!Array.isArray(W)||W.length<4)return null;const[V,D,te,T]=W;return[V,D,te,T].some(q=>typeof q!="number"||Number.isNaN(q))?null:[V,D,te,T]}),A=e.computed(()=>{const W=l.value;return W?[W.description,W.group_id?`Група: ${W.group_id}`:null,W.source_path?`Шлях: ${W.source_path}`:null,W.is_public===!0?"Публічний":"Не публічний",W.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", "):""}),O=e.computed(()=>{var V;const W=(V=l.value)==null?void 0:V.group_id;return W?String(W).toUpperCase():""});let F=null,Y=!1,ce=null;function me(W){return Number(W.toFixed(CE))}function ge(W,V){const[D,te]=W,[T,U]=V;return[me(Math.min(D,T)),me(Math.min(te,U)),me(Math.max(D,T)),me(Math.max(te,U))]}function we(W){const[V,D,te,T]=W;return{type:"Polygon",coordinates:[[[V,D],[te,D],[te,T],[V,T],[V,D]]]}}function Se(W){var te,T,U;const V=(T=(te=N())==null?void 0:te.map)==null?void 0:T.value,D=(U=V==null?void 0:V.getCanvas)==null?void 0:U.call(V);D!=null&&D.style&&(D.style.cursor=W)}async function We(W,V){if(!(!u.value||!l.value)){Z.value=!0;try{const D=we(W),te=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:D})});if(!te.ok)throw new Error(`Failed to save cartocss bounds: ${te.status}`);ye.notify({type:"success",title:"Bounds збережено",message:"Нові межі успішно збережено."}),await Ge(u.value,{bustCache:!0})}catch(D){console.error("Failed to save CartoCSS bounds",D),l.value&&(l.value={...l.value,bounds:V?[...V]:null}),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Bounds"})}finally{Z.value=!1}}}function Ze(W){var D,te,T;const V=(te=(D=N())==null?void 0:D.map)==null?void 0:te.value;if((T=V==null?void 0:V.dragPan)!=null&&T.enable&&V.dragPan.enable(),(W==null?void 0:W.length)===4&&l.value){const U=Array.isArray(l.value.bounds)?[...l.value.bounds]:null;l.value={...l.value,bounds:[...W]},We(W,U)}F=null,Y=!1,M.value=null,G.value=!1,Se("")}function Oe(){Ze(null)}function at(){var U,q;const W=(q=(U=N())==null?void 0:U.map)==null?void 0:q.value;if(!W)return;const V=ie=>{var ke,Be,$e;if(!G.value||((ke=ie==null?void 0:ie.originalEvent)==null?void 0:ke.button)!=null&&ie.originalEvent.button!==0)return;const de=ie==null?void 0:ie.lngLat;de&&(F=[de.lng,de.lat],Y=!0,M.value=[de.lng,de.lat,de.lng,de.lat],($e=(Be=W.dragPan)==null?void 0:Be.disable)==null||$e.call(Be))},D=ie=>{if(!G.value||!Y||!F)return;const de=ie==null?void 0:ie.lngLat;de&&(M.value=ge(F,[de.lng,de.lat]))},te=ie=>{if(!G.value||!Y||!F)return;const de=ie==null?void 0:ie.lngLat;if(!de){Oe();return}const ke=ge(F,[de.lng,de.lat]),[Be,$e,ot,gt]=ke;if(!(Math.abs(ot-Be)>0&&Math.abs(gt-$e)>0)){ye.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),Oe();return}Ze(ke)},T=ie=>{G.value&&ie.key==="Escape"&&(ie.preventDefault(),Oe())};W.on("mousedown",V),W.on("mousemove",D),W.on("mouseup",te),window.addEventListener("keydown",T),ce=()=>{W.off("mousedown",V),W.off("mousemove",D),W.off("mouseup",te),window.removeEventListener("keydown",T)}}async function ne(){var D;const W=N();!(W!=null&&W.ready)||(await W.ready(),!((D=W.map)==null?void 0:D.value))||(ce||at(),G.value=!0,Y=!1,F=null,M.value=null,Se("crosshair"),ye.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}e.watch(u,W=>{W&&Ge(W)},{immediate:!0}),e.watch(()=>{var W;return(W=m.value)==null?void 0:W.name},W=>w(W),{immediate:!0});async function re(){var te;const W=N();if(!(W!=null&&W.ready))return;await W.ready(),$();const V=(te=W.map)==null?void 0:te.value;if(!V)return;const D=()=>_();V.on("moveend",D),V.on("zoomend",D),b=()=>{V.off("moveend",D),V.off("zoomend",D)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{$()}),e.onMounted(()=>{re()}),e.onBeforeUnmount(()=>{b==null||b(),b=null,ce==null||ce(),ce=null,Se("")}),e.watch(()=>o.query.tab,W=>{W&&y.value.some(V=>V.key===W)&&f.value!==W&&(f.value=W)}),e.watch(y,W=>{W.length&&!W.some(V=>V.key===f.value)&&(f.value=W[0].key)},{immediate:!0}),e.watch(f,W=>{o.query.tab!==W&&y.value.some(V=>V.key===W)&&n.replace({query:{...o.query,tab:W}})}),e.watch(()=>l.value,W=>{const V=W==null?void 0:W.card_html;ue.value=V,fe.value=W==null?void 0:W.card_table},{immediate:!0});function Ee(){u.value&&Ge(u.value,{bustCache:!0})}async function Ue(W,V){if(u.value){Z.value=!0;try{const D=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(W)});if(!D.ok)throw new Error(`Failed to save cartocss: ${D.status}`);ye.notify({type:"success",title:"Збережено",message:V}),await Ge(u.value,{bustCache:!0})}catch(D){console.error("Failed to save CartoCSS",D),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{Z.value=!1}}}function He(W){if(!W)return null;if(typeof W=="string")try{return JSON.parse(W)}catch(V){return console.warn("Failed to parse CartoCSS config",V),null}return typeof W=="object"?W:null}function ve(W){const V=Array.isArray(W)?W:W==null?void 0:W.datasets;return Array.isArray(V)?V.map((D,te)=>({table:(D==null?void 0:D.table)||(D==null?void 0:D.id)||`dataset_${te+1}`,query:(D==null?void 0:D.query)||"",srid:(D==null?void 0:D.srid)||"",gcol:(D==null?void 0:D.gcol)||"",key:(D==null?void 0:D.key)||(D==null?void 0:D.label)||"Без підпису",active:typeof(D==null?void 0:D.active)=="boolean"?D.active:!0,minzoom:typeof(D==null?void 0:D.zoom)>"u"?"":String(D.zoom),maxzoom:typeof(D==null?void 0:D.maxzoom)>"u"?"":String(D.maxzoom),columns:(D==null?void 0:D.columns)||"",proj4text:(D==null?void 0:D.proj4text)||""})):[]}async function Ge(W,V){z.value=!0;try{const D=await fetch(`/api/gis-css/${W}`);if(!D.ok)throw new Error(`Failed to load cartocss: ${D.status}`);const te=await D.json(),T=(te==null?void 0:te.message)||te||{};l.value=T,m.value={id:T.cartocss_key||W,name:T.name||m.value.name,description:T.description||m.value.description},E.value=typeof T.style=="string"?T.style:"";const U=He(T.config??[]);B.value=ve(U);const q=typeof T.url=="string"?T.url:"";P.value=q,K.value=!!(q&&T.enabled!==!1),ee.value=V!=null&&V.bustCache?Date.now():0}catch(D){console.error("Failed to fetch CartoCSS",D),K.value=!1,P.value="",ee.value=0,l.value=null}finally{z.value=!1}}async function Ae(){await Ue({style:E.value||"",config:B.value},"CartoCSS оновлено")}async function nt(W){const V=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(W)});if(!V.ok)throw new Error(`Failed to save cartocss: ${V.status}`);ye.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(W,V)=>(e.openBlock(),e.createElementBlock("div",q_,[e.createElementVNode("div",H_,[e.createElementVNode("div",W_,[e.createElementVNode("div",Y_,[e.createElementVNode("div",G_,[e.createElementVNode("div",Z_,[e.createElementVNode("div",K_,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:s},e.toDisplayString(i.value),1),V[5]||(V[5]=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-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",X_,e.toDisplayString(m.value.name||"CartoCSS"),1)]),e.createElementVNode("div",J_,[e.createElementVNode("div",Q_,[e.createElementVNode("div",eE,[e.createElementVNode("h1",tE,e.toDisplayString(m.value.name||"CartoCSS"),1),O.value?(e.openBlock(),e.createElementBlock("div",nE,[e.createElementVNode("span",oE,e.toDisplayString(O.value),1)])):e.createCommentVNode("",!0)]),A.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:A.value},e.toDisplayString(A.value),9,rE)):e.createCommentVNode("",!0)])])]),e.createVNode(Uo,{class:"flex-shrink-0","entity-id":u.value,"entity-info":m.value,"form-endpoint":D=>`/api/form/gis.cartocss.table/${D}`,"save-endpoint":D=>`/api/gis-css/${D}`,"entity-label":"CartoCSS","save-method":"post",onSaved:Ee},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])])]),e.createElementVNode("div",lE,[e.createElementVNode("div",aE,[e.createVNode(An,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var D,te;return[e.createElementVNode("div",sE,[e.createElementVNode("div",iE,[e.createElementVNode("div",cE,[V[6]||(V[6]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[0]||(V[0]=T=>le.value=T),type:"range",min:"0",max:"1",step:"0.01",class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,le.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(I.value),1)])]),e.createElementVNode("div",dE,[e.createElementVNode("label",uE,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:J.value,onChange:V[1]||(V[1]=T=>J.value=T.target.checked)},null,40,mE),V[7]||(V[7]=e.createElementVNode("span",null,"Межі css",-1))])])]),e.createElementVNode("div",pE,[e.createVNode(qt)]),e.createElementVNode("div",fE,[e.createVNode(zt),se.value?(e.openBlock(),e.createBlock(zt,{key:0,targetCenter:se.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),G.value?(e.openBlock(),e.createElementBlock("div",gE," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),Q.value?(e.openBlock(),e.createBlock(O_,{key:1,"layer-id":j.value,"tile-url":Q.value,active:K.value,opacity:le.value,title:m.value.name,owner:u.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(Qn,{extent:J.value?v.value:null,"layer-id":S.value},null,8,["extent","layer-id"]),e.createVNode(Qn,{extent:M.value,"layer-id":R.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createVNode(U_,{"cartocss-id":u.value,bounds:((D=l.value)==null?void 0:D.bounds)??null,active:K.value&&!G.value,"info-enabled":(te=l.value)==null?void 0:te.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(_o,{"map-id":u.value},null,8,["map-id"])]}),_:1},512)])]),l.value?(e.openBlock(),e.createBlock(Po,{key:0,open:k.value,onToggle:V[2]||(V[2]=D=>k.value=!k.value)},null,8,["open"])):e.createCommentVNode("",!0)]),l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",k.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",yE,[y.value.length>1?(e.openBlock(),e.createElementBlock("div",hE,[e.createElementVNode("div",{class:"items-center justify-center text-muted-foreground grid w-full h-12 p-1 bg-gray-50 rounded-xl shadow-sm",style:e.normalizeStyle({gridTemplateColumns:`repeat(${y.value.length}, minmax(0, 1fr))`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,D=>(e.openBlock(),e.createElementBlock("button",{key:D.key,type:"button",role:"tab","aria-selected":f.value===D.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",f.value===D.key?"bg-white shadow-sm text-gray-700":""]),onClick:te=>f.value=D.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(D.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",xE,e.toDisplayString(D.label),1)],10,bE))),128))],4)])):e.createCommentVNode("",!0),e.createElementVNode("div",kE,[z.value?(e.openBlock(),e.createElementBlock("div",wE," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.value==="css"?(e.openBlock(),e.createBlock(S_,{key:0,modelValue:E.value,"onUpdate:modelValue":V[3]||(V[3]=D=>E.value=D),class:"flex-1 min-h-0",onSave:Ae},null,8,["modelValue"])):f.value==="data"?(e.openBlock(),e.createBlock(I_,{key:1,modelValue:B.value,"onUpdate:modelValue":V[4]||(V[4]=D=>B.value=D),class:"flex-1 min-h-0 flex flex-col",onSave:Ae},null,8,["modelValue"])):f.value==="card"?(e.openBlock(),e.createBlock(R_,{key:2,card:ue.value,table:fe.value,class:"flex-1 min-h-0",onSave:nt},null,8,["card","table"])):f.value==="metadata"?(e.openBlock(),e.createBlock(Oo,{key:3,data:l.value,"entity-id":u.value,"entity-type":"css",onSaved:Ee,onEditCssBounds:ne},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}})},Symbol.toStringTag,{value:"Module"})),VE={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},BE=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,a=n,i=e.computed({get:()=>r.modelValue,set:c=>a("update:modelValue",c)}),s=e.computed({get:()=>r.form,set:c=>a("update:form",c)});return(c,p)=>(e.openBlock(),e.createElementBlock("section",VE,[p[2]||(p[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:i.value,"onUpdate:values":p[0]||(p[0]=f=>i.value=f),form:s.value,"onUpdate:form":p[1]||(p[1]=f=>s.value=f)},null,8,["schema","values","form"]))]))}}),$E={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},SE=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},options:{}},emits:["update:layerIDs"],setup(t,{emit:n}){const o=t,r=n,a=e.computed({get:()=>o.layerIDs,set:i=>r("update:layerIDs",i)});return(i,s)=>(e.openBlock(),e.createElementBlock("section",$E,[s[1]||(s[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),s[2]||(s[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(Ko.VsInputArraySelect),{data:"layer_list",api:"/api/suggest/layer_list",modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=c=>a.value=c),placeholder:"Шари"},null,8,["modelValue"])]))}}),vE={class:"w-full"},LE=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",vE,[e.createVNode(qn,{class:"w-full h-[calc(100vh-200px)]",height:"h-[calc(100vh-200px)]",id:t.id},null,8,["id"])]))}}),TE={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},AE={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},ME={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},DE={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},FE={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},zE=["disabled"],IE=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(""),i=e.ref(null);e.watch(()=>o.modelValue,p=>{if(p){try{a.value=JSON.stringify(p,null,2)}catch{a.value="{}"}i.value=null}},{immediate:!0}),e.watch(a,p=>{if(!p.trim()){i.value=null;return}try{JSON.parse(p),i.value=null}catch(f){i.value=f.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:p}=window;if(p&&p.editor){const f=p.editor.getEditors();f.length>0&&f[f.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function s(){r("update:modelValue",null),a.value="",i.value=null}function c(){if(!i.value)try{const p=JSON.parse(a.value);r("save",p),s()}catch(p){console.error("Failed to parse JSON",p)}}return(p,f)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(s,["self"])},[e.createElementVNode("div",TE,[e.createElementVNode("div",AE,[f[1]||(f[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:s,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(pe.X),{size:20})])]),i.value?(e.openBlock(),e.createElementBlock("div",ME," Помилка JSON: "+e.toDisplayString(i.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",DE,[e.createVNode(Nn,{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=k=>a.value=k),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",FE,[e.createElementVNode("button",{onClick:s,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:c,disabled:!!i.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,zE)])])])):e.createCommentVNode("",!0)}}),jE={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},PE={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},RE={class:"w-full text-sm"},OE={class:"divide-y divide-gray-200"},UE={class:"px-4 py-3"},qE=["onUpdate:modelValue","onChange"],HE=["value"],WE={class:"px-4 py-3"},YE=["onUpdate:modelValue","onChange"],GE=["value"],ZE={class:"px-4 py-3 text-center"},KE=["checked","onChange"],XE={class:"px-4 py-3"},JE={key:0,class:"flex items-center gap-2"},QE=["onClick"],eC=["onClick"],tC={key:1},nC=["onClick"],oC={class:"px-4 py-3 text-right"},rC=["onClick"],lC=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,a=["catalog","legend","basemaps","info","layers","dataset","filters","search"],i=["top-left","top-right","bottom-left","bottom-right"],s=e.ref(null),c=e.ref(-1),p=e.computed(()=>o.modelValue||[]);function f(){const d=[...p.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",d)}function k(d){ye.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const h=p.value.filter((x,N)=>N!==d);r("update:modelValue",h)}})}function l(d,h,x){const N=[...p.value];N[d]={...N[d],[h]:x},r("update:modelValue",N)}function y(d){return!!d&&Object.keys(d).length>0}function u(d,h){c.value=d,s.value=h||{}}function m(d){u(d,{})}function b(d){ye.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{l(d,"config",void 0)}})}function g(d){c.value>-1&&l(c.value,"config",d),s.value=null,c.value=-1}return(d,h)=>{var x;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[h[1]||(h[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:f,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(x=p.value)!=null&&x.length?(e.openBlock(),e.createElementBlock("div",PE,[e.createElementVNode("table",RE,[h[2]||(h[2]=e.createElementVNode("thead",{class:"bg-[rgba(252,252,252,0.8)] border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",OE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(N,$)=>(e.openBlock(),e.createElementBlock("tr",{key:$,class:"hover:bg-gray-50"},[e.createElementVNode("td",UE,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>N.type=_,onChange:_=>l($,"type",N.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,HE)),64))],40,qE),[[e.vModelSelect,N.type]])]),e.createElementVNode("td",WE,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>N.position=_,onChange:_=>l($,"position",N.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,GE)),64))],40,YE),[[e.vModelSelect,N.position]])]),e.createElementVNode("td",ZE,[e.createElementVNode("input",{type:"checkbox",checked:N.visible!==!1,onChange:_=>l($,"visible",_.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,KE)]),e.createElementVNode("td",XE,[y(N.config)?(e.openBlock(),e.createElementBlock("div",JE,[e.createElementVNode("button",{onClick:_=>u($,N.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(pe.Pen),{size:16})],8,QE),e.createElementVNode("button",{onClick:_=>b($),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(pe.X),{size:16})],8,eC)])):(e.openBlock(),e.createElementBlock("div",tC,[e.createElementVNode("button",{onClick:_=>m($),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(pe.Plus),{size:16})],8,nC)]))]),e.createElementVNode("td",oC,[e.createElementVNode("button",{onClick:_=>k($),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(pe.Trash2),{size:16})],8,rC)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",jE," Немає віджетів. Додайте перший віджет. ")),e.createVNode(IE,{teleport:"#modal",modelValue:s.value,"onUpdate:modelValue":h[0]||(h[0]=N=>s.value=N),onSave:g},null,8,["modelValue"])])}}}),aC={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},sC={class:"mx-1"},iC={class:"text-gray-900 font-semibold"},cC=["disabled"],dC={key:0,class:"text-center py-12 mt-6 px-[24px]"},uC={key:1,class:"px-[24px] overflow-y-auto"},mC={class:"space-y-6"},pC={class:"space-y-6"},fC={class:"space-y-6"},gC=Object.freeze(Object.defineProperty({__proto__:null,default:Ne(e.defineComponent({__name:"MapSettings",setup(t){const n=Ie.useRouter(),o=Ie.useRoute(),r=e.computed(()=>{var _;return((_=n.resolve("/gis.maps").meta)==null?void 0:_.title)??"Карти"}),a=e.ref(!0),i=e.ref(!1),s=e.ref({}),c=e.ref({}),p=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],f=p.map(_=>_.id),k=_=>_?Array.isArray(_)?_[0]:_:null,l=(()=>{const _=k(o.query.tab);return _&&f.includes(_)?_:"general"})(),y=e.ref(l);e.watch(()=>o.query.tab,_=>{const w=k(_);w&&f.includes(w)&&y.value!==w&&(y.value=w)}),e.watch(y,_=>{o.query.tab!==_&&n.replace({query:{...o.query,tab:_}})});const u=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),m=e.computed({get:()=>(u.value.layers||[]).map(_=>_.id||_),set:_=>{u.value.layers=_}});async function b(_){if(!_.length){c.value={};return}try{const w=new URLSearchParams({json:"1",val:Array.from(new Set(_)).join(",")}),E=await fetch(`/api/suggest/layer_list?${w.toString()}`);if(!E.ok)return;const B=await E.json(),z=(B==null?void 0:B.data)??B??[],Z=Array.isArray(z)?z:[],P={...c.value};Z.forEach(ee=>{const K=ee.id!=null?String(ee.id):"";K&&(P[K]=ee.text??ee.name??K)}),c.value=P}catch(w){console.error("Failed to fetch layer labels:",w)}}const g=e.computed({get:()=>m.value.map(_=>c.value[_]??_),set:_=>{const w=Object.entries(c.value).reduce((B,[z,Z])=>(B[Z]=z,B),{}),E=_.map(B=>w[B]??null).filter(B=>B!=null);m.value=E}}),d=e.computed(()=>{const _=u.value.center;if(!Array.isArray(_)||_.length<2)return"Не задано";const[w,E]=_;return w===void 0||E===void 0||w===null||E===null||Number.isNaN(Number(w))||Number.isNaN(Number(E))?"Не задано":`Lng ${Number(w).toFixed(6)}, Lat ${Number(E).toFixed(6)}`}),h=e.computed(()=>{const _=u.value.zoom;if(_==null||_==="")return"Не задано";const w=Number(_);return Number.isNaN(w)?"Не задано":w.toFixed(2)}),x=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function N(){try{const w=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();u.value={...w,keywords:w.keywords||[],center:w.center??null,widgets:Array.isArray(w.widgets)?w.widgets:[],layers:(w.layers||[]).map(E=>E.id||E)},await b(u.value.layers??[])}catch(_){console.error("Failed to load map:",_),ye.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{a.value=!1}}async function $(){var w,E;const _=(E=(w=s.value)==null?void 0:w.validate)==null?void 0:E.call(w);if(_){ye.notify({type:"warning",title:"Валідація",message:Object.entries(_).map(([B,z])=>`${B}: ${z}`).join(`
45
- `)});return}i.value=!0;try{const B=JSON.parse(JSON.stringify(u.value));if(B.zoom=Number(B.zoom),Array.isArray(B.center)&&(B.center.every(P=>P==null||P===""||P===0)||B.center.length===0)&&(B.center=null),delete B.created_at,delete B.updated_at,delete B.created_by,delete B.updated_by,delete B.history,delete B.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)})).ok)throw new Error("Save failed");ye.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(B){console.error("Save error:",B),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{i.value=!1}}return e.watch(()=>{var _;return((_=u.value)==null?void 0:_.layers)??[]},_=>b(Array.isArray(_)?_.map(w=>(w==null?void 0:w.id)??w):[]),{immediate:!1}),e.onMounted(async()=>{await N()}),(_,w)=>{const E=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",aC,[e.createVNode(Ht,{variant:"form",title:u.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(E,{to:"/gis.maps",class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1}),e.createElementVNode("span",sC,[e.createVNode(e.unref(pe.LucideChevronRight),{size:16,class:"shrink-0"})]),e.createElementVNode("span",iC,e.toDisplayString(u.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...w[6]||(w[6]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:w[0]||(w[0]=B=>e.unref(n).back()),class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:$,disabled:i.value,class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 disabled:opacity-50"},e.toDisplayString(i.value?"Збереження...":"Зберегти"),9,cC)]),_:1},8,["title"]),a.value?(e.openBlock(),e.createElementBlock("div",dC,[...w[7]||(w[7]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",uC,[e.createVNode(Mr,{tabs:p,activeTab:y.value,"onUpdate:activeTab":w[1]||(w[1]=B=>y.value=B)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",mC,[e.createVNode(BE,{schema:x,loading:a.value,modelValue:u.value,"onUpdate:modelValue":w[2]||(w[2]=B=>u.value=B),form:s.value,"onUpdate:form":w[3]||(w[3]=B=>s.value=B)},null,8,["loading","modelValue","form"])],512),[[e.vShow,y.value==="general"]]),e.withDirectives(e.createElementVNode("div",pC,[e.createVNode(SE,{layerIDs:m.value,"onUpdate:layerIDs":w[4]||(w[4]=B=>m.value=B)},null,8,["layerIDs"])],512),[[e.vShow,y.value==="layers"]]),e.withDirectives(e.createVNode(lC,{modelValue:u.value.widgets,"onUpdate:modelValue":w[5]||(w[5]=B=>u.value.widgets=B)},null,8,["modelValue"]),[[e.vShow,y.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",fC,[e.createVNode(LE,{"center-display":d.value,"zoom-display":h.value,"layer-names":g.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,y.value==="map"]])]))])}}}),[["__scopeId","data-v-df90fbac"]])},Symbol.toStringTag,{value:"Module"}));Ke.CartoCSS=ua,Ke.Classifiers=Qs,Ke.MapSettings=ba,Ke.MapWidget=qn,Ke.Permissions=Ci,Ke.Raster=ia,Ke.Register=na,Ke.Service=la,Ke.default=qn,Ke.install=ry,Ke.template1=Nr,Ke.template2=Vr,Ke.template3=Br,Ke.template4=$r,Ke.template5=Sr,Object.defineProperties(Ke,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
44
+ ${N}`:N}c.value=!1,p.value=[]}function u(){c.value=!1,p.value=[]}function m(){const g=i.value==="html"?"html":"list",d={card_mode:g};g==="html"?d.html=s.value:g==="list"&&(d.list=a.value),r("save","card",d)}const b=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(g,d)=>(e.openBlock(),e.createElementBlock("div",mw,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:l,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(uw,{modelValue:i.value,"onUpdate:modelValue":d[0]||(d[0]=h=>i.value=h),options:b},null,8,["modelValue"]),e.createElementVNode("div",pw,[i.value==="list"?(e.openBlock(),e.createBlock(Lt,{key:0,modelValue:a.value,"onUpdate:modelValue":d[1]||(d[1]=h=>a.value=h),"columns-scheme":f,"form-scheme":k,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):i.value==="html"?(e.openBlock(),e.createBlock(Nn,{key:1,modelValue:s.value,"onUpdate:modelValue":d[2]||(d[2]=h=>s.value=h),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Wt,{visible:c.value,"onUpdate:visible":d[3]||(d[3]=h=>c.value=h),selection:p.value,"onUpdate:selection":d[4]||(d[4]=h=>p.value=h),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:y,onCancel:u},null,8,["visible","selection","fields"])]))}}),gw={class:"flex flex-col flex-1 min-h-0"},yw=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const a=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>a.value=m||[],{immediate:!0}),e.watch(a,m=>r("update:columns",m),{deep:!0,immediate:!0});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),p=[{key:"id",label:"Name"},{key:"label",label:"UA"}],f={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"autocomplete"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function k(){c.value=a.value.map(m=>m.name||m.id),s.value=!0}function l(){var d;const m=[...a.value],b=((d=o.fields)==null?void 0:d.filter(h=>c.value.includes(h.name)))||[],g=Gt(m,b,{selectedKeys:c.value,resolveKey:h=>Tt(h)});a.value=g,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function u(){let m=[];i.value==="all"?m=o.fields||[]:i.value==="none"?m=[]:m=a.value,r("save",m)}return(m,b)=>(e.openBlock(),e.createElementBlock("div",gw,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:k,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),i.value==="list"?(e.openBlock(),e.createBlock(Lt,{key:0,modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=g=>a.value=g),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":b[1]||(b[1]=g=>s.value=g),selection:c.value,"onUpdate:selection":b[2]||(b[2]=g=>c.value=g),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:l,onCancel:y},null,8,["visible","selection","fields"])]))}}),hw=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var m,b,g,d;const{map:o,flyTo:r,setZoom:a}=et(),i=((b=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:b.$settings)||null,s=t,c=s.id;String(s.id);const p=`${location.origin}/api/vtile/${s.id}/ua/{z}/{x}/{y}.vmt?all=1`,f=Me(c,{source:{type:"vector",tiles:[p],minzoom:0,maxzoom:14},popup:s.layer.popup,layer:{style:(g=s.layer)==null?void 0:g.style}});n({layerHandle:f}),(s.autoCenter??!0)&&r({center:s.layer.center||((d=i==null?void 0:i.map)==null?void 0:d.center)||[30,50],animate:!1});let k=null;function l(){if(!(f!=null&&f.setTiles))return;const h=p.includes("?")?"&":"?",x=`${p}${h}_=${Date.now()}`;f.setTiles([x])}function y(){k&&clearTimeout(k),k=setTimeout(()=>{k=null,u().catch(h=>console.error("Failed to update map layer",h))},300)}async function u(){o.value&&(l(),f.setStyle(s.styleSpec??null))}return e.watch(()=>s.styleSpec,y,{deep:!0}),e.onBeforeUnmount(()=>{f.remove()}),(h,x)=>null}}),bw={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},xw={class:"flex-1 relative overflow-hidden"},kw={class:"absolute top-0 left-0 w-full z-20"},ww={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},_w={class:"flex items-start justify-between gap-4"},Ew={class:"flex-1 min-w-0"},Cw={class:"flex items-center text-sm text-gray-500 mb-3"},Nw={class:"text-gray-900 font-medium truncate max-w-xs"},Vw={class:"flex items-center justify-between gap-4"},Bw={class:"flex-1 min-w-0"},$w={class:"flex items-center gap-3 mb-1"},Sw={class:"text-base font-semibold text-gray-900 truncate"},vw={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},Lw={class:"text-xs font-medium text-green-700"},Tw=["title"],Aw={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[115px]"},Mw={class:"relative w-full h-full"},Dw={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},Fw={class:"absolute top-4 left-4 z-20"},zw={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Iw={class:"absolute bottom-4 left-4 z-20"},jw={class:"flex-1 flex flex-col h-full"},Pw={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Rw={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Ow=["aria-selected","onClick"],Uw={class:"leading-none"},qw={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Hw="OpenGIS",Wl=2,Jn=5,Ww=1e3,Yw=Object.freeze(Object.defineProperty({__proto__:null,default:Ve(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var Oe,at;const n=t,o=e.toRef(n,"hideServiceKey"),r=Ie.useRoute(),a=Ie.useRouter(),{id:i}=r.params,s=e.ref(null),c=e.ref(null),p=e.ref({}),f=e.ref(null),k=((at=(Oe=e.getCurrentInstance())==null?void 0:Oe.appContext.config.globalProperties)==null?void 0:at.$settings)||null;function l(te){typeof document>"u"||(document.title=te?`${te} — Сервіс`:Hw)}let y=null;const u=e.ref(!1);function m(){var te;return(te=s.value)==null?void 0:te.ctx}function b(te){typeof window>"u"||window.dispatchEvent(new CustomEvent(zn,{detail:te}))}function g(te){var We,ve,Ge;const re=(ve=(We=m())==null?void 0:We.map)==null?void 0:ve.value;if(!re||!te)return[];const Ce=(Ge=f.value)!=null&&Ge.service_id?String(f.value.service_id):null;return(re.queryRenderedFeatures(te)||[]).filter(Ae=>{var ee,T,O,U,ce,de;const nt=((ee=Ae==null?void 0:Ae.properties)==null?void 0:ee.id)??(Ae==null?void 0:Ae.id);if(nt==null||!(Ae!=null&&Ae.source)||Ce&&String(Ae.source)!==Ce)return!1;const W=Me(Ae.source)||Me((T=Ae.layer)==null?void 0:T.id);if(!W)return!1;const V=(U=(O=W==null?void 0:W.opts)==null?void 0:O.source)==null?void 0:U.type,D=(de=(ce=W==null?void 0:W.opts)==null?void 0:ce.layer)==null?void 0:de.type;return V!=="raster"&&D!=="raster"})}function d(te){const re=g(te==null?void 0:te.point);b({features:re,externalItems:[]})}function h(te){if(Array.isArray(te))return h(te[0]);if(typeof te!="string"&&typeof te!="number")return null;const re=typeof te=="number"?te:Number(te.trim());return Number.isFinite(re)?re:null}function x(te,re){return te.toFixed(re)}function N(te,re,Ce){const Ue=.5*10**-Ce;return Math.abs(te-re)>Ue}function $(){var Ae,nt,W,V;const te=(nt=(Ae=m())==null?void 0:Ae.map)==null?void 0:nt.value;if(!te)return;const re=h(r.query.z),Ce=h(r.query.x),Ue=h(r.query.y);if(re==null||Ce==null||Ue==null)return;const We=(W=te.getCenter)==null?void 0:W.call(te),ve=(V=te.getZoom)==null?void 0:V.call(te);(!We||N(We.lng,Ce,Jn)||N(We.lat,Ue,Jn)||N(ve??0,re,Wl))&&(u.value=!0,te.jumpTo({center:[Ce,Ue],zoom:re}),u.value=!1)}function _(){var We,ve,Ge,Ae;if(u.value)return;const te=(ve=(We=m())==null?void 0:We.map)==null?void 0:ve.value;if(!te)return;const re=(Ge=te.getCenter)==null?void 0:Ge.call(te),Ce=(Ae=te.getZoom)==null?void 0:Ae.call(te);if(!re||Ce==null)return;const Ue={...r.query,z:x(Ce,Wl),x:x(re.lng,Jn),y:x(re.lat,Jn)};r.query.z===Ue.z&&r.query.x===Ue.x&&r.query.y===Ue.y||a.replace({query:Ue})}const w=e.ref(null),E=e.ref(""),B=e.ref([]),F=e.ref([]),Y=e.ref([]),P=e.ref("list"),Q=e.ref(""),Z=e.ref([]),ae=e.ref(!0);let X=null;const G=e.computed(()=>{var te,re;return((te=f.value)==null?void 0:te.id)??((re=f.value)==null?void 0:re.service_id)??null}),M=e.computed(()=>{const te=(k==null?void 0:k.map)||null,re=(te==null?void 0:te.boundary)??null,Ce=(te==null?void 0:te.katottg)??null;return!re&&!Ce?null:{boundary:re,katottg:Ce}}),j=e.computed(()=>{const te=f.value;if(!te)return"";const re=[];!o.value&&te.service_key&&re.push(`Сервіс: ${te.service_key}`),te.description&&re.push(te.description);const Ce=te.group_name||te.group_id;return Ce&&re.push(`Група: ${Ce}`),typeof te.is_public<"u"&&re.push(te.is_public?"Публічний":"Не публічний"),typeof te.is_active<"u"&&re.push(te.is_active?"Активний":"Неактивний"),re.join(", ")}),z=e.computed(()=>{const te=f.value,re=(te==null?void 0:te.group_name)||(te==null?void 0:te.group_id);return re?String(re).toUpperCase():""}),v=e.computed(()=>{var Ce;const te=(Ce=r.matched[r.matched.length-1])==null?void 0:Ce.path;return(typeof te=="string"&&te?te:r.path).replace(/\/:id\??$/,"")||"/"}),R=e.computed(()=>{var re;const te=(re=r.meta)==null?void 0:re.title;return typeof te=="string"&&te.trim()?te:"Datasets"});function J(){a.push(v.value)}const ue=[{key:"style",label:"Стиль",icon:Rl},{key:"popup",label:"Попап",icon:O1},{key:"filter",label:"Фільтр",icon:W1},{key:"legend",label:"Легенда",icon:D1},{key:"card",label:"Картка",icon:Ol},{key:"metadata",label:"Метадані",icon:Ro}],fe=ue.map(te=>te.key),ie=e.ref("style");e.onMounted(async()=>{const te=r.query.tab;te&&fe.includes(te)&&(ie.value=te),await pe(),le()});async function le(){var Ue;const te=m();if(!(te!=null&&te.ready))return;await te.ready(),$();const re=(Ue=te.map)==null?void 0:Ue.value;if(!re)return;const Ce=()=>_();re.on("moveend",Ce),re.on("zoomend",Ce),re.on("click",d),y=()=>{re.off("moveend",Ce),re.off("zoomend",Ce),re.off("click",d)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{$()}),e.watch(ie,te=>{r.query.tab!==te&&a.replace({query:{...r.query,tab:te}})}),e.watch(()=>r.query.tab,te=>{te&&fe.includes(te)&&ie.value!==te&&(ie.value=te)}),e.watch(()=>{var te;return(te=f.value)==null?void 0:te.name},te=>l(te),{immediate:!0});function S(te){if(!te)return null;try{return JSON.parse(JSON.stringify(te))}catch(re){return console.warn("Failed to clone style",re),null}}function I(te){if(!te)return null;if(typeof te=="string")try{return mo(Pl.load(te)||null)}catch(re){return console.warn("Failed to parse style yaml",re),null}return mo(S(te))}function A(te,re){try{return JSON.stringify(te)===JSON.stringify(re)}catch{return!1}}function H(){var re;if(!f.value)return;const te=I(w.value);A(te,((re=f.value)==null?void 0:re.style)??null)||(f.value={...f.value,style:te})}function ne(){X&&clearTimeout(X),X=setTimeout(()=>{X=null,H()},Ww)}const pe=async()=>{try{const te=await fetch(`/api/gis-service/${i}`);if(!te.ok)throw new Error(`${te.status}`);const re=await te.json();p.value=re||{},c.value=i;const Ce=I(re.style);f.value=re?{...re,style:S(Ce)}:null,w.value=Ce,E.value=typeof(re==null?void 0:re.style)=="string"?re.style:Ce?Pl.dump(Ce):"",F.value=(re==null?void 0:re.popup)||[],P.value=re.card_mode==="html"?"html":"list",Y.value=re.card,Q.value=re.html,B.value=(re==null?void 0:re.legend)||[],Z.value=(re==null?void 0:re.filters)||[]}catch(te){console.error("Failed to fetch map info",te)}};e.watch(()=>{var te;return(te=f.value)==null?void 0:te.style},te=>{w.value=I(te)},{deep:!0}),e.watch(()=>w.value,()=>{ne()},{deep:!0}),e.onBeforeUnmount(()=>{X&&(clearTimeout(X),X=null),y==null||y(),y=null});async function xe(te){try{const re=await fetch(`/api/gis-clear-vtile/${te}`),{message:Ce,error:Ue,code:We}=await re.json();if(We===200)return ge.notify({type:"success",title:"Успіх",message:Ce});ge.notify({type:"error",title:"Помилка",message:Ue})}catch(re){ge.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(re)}}async function ke(te,re){await He({[te]:re},te)}function we(){const te=S(w.value);f.value=f.value?{...f.value,style:te}:f.value}async function He(te,re){if(f.value={...f.value||{},...te},typeof te.html<"u"&&(p.value={...p.value||{},html:te.html}),!!G.value)try{if(!(await fetch(`/api/gis-service/${G.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(te)})).ok)throw new Error("Save failed");ge.notify({type:"success",title:"Успіх",message:`${re} saved`}),await pe()}catch(Ce){ge.notify({type:"error",title:"Помилка",message:`Failed to save ${re}`}),console.error(Ce)}}async function Ze(te,re){if(te!=="card"){await ke(te,re);return}const Ce=(re==null?void 0:re.card_mode)==="html"?"html":"list",Ue=Ce==="html"&&typeof(re==null?void 0:re.html)=="string"?re.html:"",We=(Ce==="html"?[]:null)||(Array.isArray(re==null?void 0:re.list)?re.list:[]);Y.value=We,P.value=Ce,Q.value=Ue;const ve={card_mode:Ce};Ce==="html"&&(ve.html=Ue),Ce==="list"&&(ve.card=We),await He(ve,"card")}return(te,re)=>{var Ce,Ue,We;return e.openBlock(),e.createElementBlock("div",bw,[e.createElementVNode("div",xw,[e.createElementVNode("div",kw,[e.createElementVNode("div",ww,[e.createElementVNode("div",_w,[e.createElementVNode("div",Ew,[e.createElementVNode("div",Cw,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:J},e.toDisplayString(R.value),1),re[10]||(re[10]=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-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",Nw,e.toDisplayString(((Ce=f.value)==null?void 0:Ce.name)||"Dataset"),1)]),e.createElementVNode("div",Vw,[e.createElementVNode("div",Bw,[e.createElementVNode("div",$w,[e.createElementVNode("h1",Sw,e.toDisplayString(((Ue=f.value)==null?void 0:Ue.name)||"Dataset"),1),z.value?(e.openBlock(),e.createElementBlock("div",vw,[e.createElementVNode("span",Lw,e.toDisplayString(z.value),1)])):e.createCommentVNode("",!0)]),j.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:j.value},e.toDisplayString(j.value),9,Tw)):e.createCommentVNode("",!0)])])]),G.value?(e.openBlock(),e.createBlock(Uo,{key:0,class:"flex-shrink-0","entity-id":G.value,"entity-info":{name:(We=f.value)==null?void 0:We.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":xe,onSaved:pe},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Aw,[e.createElementVNode("div",Mw,[e.createVNode(An,{ref_key:"mapViewRef",ref:s},{default:e.withCtx(()=>{var ve,Ge,Ae,nt,W,V,D;return[(ve=f.value)!=null&&ve.service_id?(e.openBlock(),e.createBlock(hw,{key:0,id:(Ge=f.value)==null?void 0:Ge.service_id,layer:f.value,"style-spec":((Ae=f.value)==null?void 0:Ae.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),G.value?(e.openBlock(),e.createBlock(Cr,{key:1,"layer-id":G.value,boundary:((nt=f.value)==null?void 0:nt.boundary)||((W=M.value)==null?void 0:W.boundary)||null,katottg:((V=f.value)==null?void 0:V.katottg)||((D=M.value)==null?void 0:D.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Dw,[G.value?(e.openBlock(),e.createBlock(Co,{key:0,"layer-id":G.value,filters:Z.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),re[11]||(re[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",Fw,[e.createVNode(qt)]),e.createElementVNode("div",zw,[e.createVNode(zt),p.value.center?(e.openBlock(),e.createBlock(zt,{key:0,targetCenter:p.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Iw,[e.createVNode(Eo,{items:B.value||null},null,8,["items"])]),e.createVNode(mr),e.createVNode(_o,{html:p.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(Po,{open:ae.value,onToggle:re[0]||(re[0]=ve=>ae.value=!ae.value),"top-class":"top-4"},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",ae.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",jw,[e.createElementVNode("div",Pw,[e.createElementVNode("div",Rw,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(ue,ve=>e.createElementVNode("button",{key:ve.key,type:"button",role:"tab","aria-selected":ie.value===ve.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",ie.value===ve.key?"bg-white shadow-sm text-gray-700":""]),onClick:Ge=>ie.value=ve.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ve.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Uw,e.toDisplayString(ve.label),1)],10,Ow)),64))])]),e.createElementVNode("div",qw,[ie.value==="style"?(e.openBlock(),e.createBlock(Zk,{key:0,token:G.value,"style-text":E.value,"style-yaml":w.value,"onUpdate:styleYaml":re[1]||(re[1]=ve=>w.value=ve),"onUpdate:styleText":re[2]||(re[2]=ve=>E.value=ve),onUpdate:we},null,8,["token","style-text","style-yaml"])):ie.value==="legend"?(e.openBlock(),e.createBlock(aw,{key:1,token:G.value,columns:B.value,"onUpdate:columns":re[3]||(re[3]=ve=>B.value=ve),onSave:re[4]||(re[4]=ve=>ke("legend",ve))},null,8,["token","columns"])):ie.value==="popup"?(e.openBlock(),e.createBlock(Jk,{key:2,token:G.value,columns:F.value,fields:p.value.fields,"onUpdate:columns":re[5]||(re[5]=ve=>F.value=ve),onSave:re[6]||(re[6]=ve=>ke("popup",ve))},null,8,["token","columns","fields"])):ie.value==="card"?(e.openBlock(),e.createBlock(fw,{key:3,token:G.value,columns:Y.value,fields:p.value.fields,"view-mode":P.value,html:Q.value,"onUpdate:columns":re[7]||(re[7]=ve=>Y.value=ve),onSave:Ze},null,8,["token","columns","fields","view-mode","html"])):ie.value==="filter"?(e.openBlock(),e.createBlock(yw,{key:4,token:G.value,fields:p.value.fields,columns:Z.value,"onUpdate:columns":re[8]||(re[8]=ve=>Z.value=ve),onSave:re[9]||(re[9]=ve=>ke("filters",ve))},null,8,["token","fields","columns"])):ie.value==="metadata"?(e.openBlock(),e.createBlock(Oo,{key:5,data:f.value,"entity-id":String(e.unref(i)),"entity-type":"service",onSaved:pe},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-11408bee"]])},Symbol.toStringTag,{value:"Module"})),Gw={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},Zw={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"},Kw={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},Xw={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},Jw={class:"p-3 border-b border-gray-200"},Qw={class:"flex flex-col sm:flex-row gap-2"},e2={class:"entity-table-root"},t2={class:"gap-2 inline-flex"},n2=["onClick"],o2={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"},r2={class:"text-sm text-gray-500"},l2={class:"font-medium text-gray-700"},a2={class:"font-medium text-gray-700"},s2={class:"font-medium text-gray-700"},i2={class:"flex items-center justify-end gap-3"},c2=Object.freeze(Object.defineProperty({__proto__:null,default:Ve(e.defineComponent({__name:"RastersTablePage",props:{entityKey:{default:"rasters"},entityBasePath:{default:"/gis.rasters"},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Ie.useRoute(),r=Ie.useRouter(),a=t,i=e.computed(()=>{var M;return String(((M=o.meta)==null?void 0:M.title)||"Растри")}),s=e.computed(()=>{var M;return String(((M=o.meta)==null?void 0:M.description)||"")}),c=e.computed(()=>`Пошук ${String(i.value).trim()}...`),p=e.computed(()=>a.entityKey||"rasters"),f=e.computed(()=>a.entityBasePath||"/gis.rasters"),k=e.ref([]),l=e.ref(!0),y=e.ref([]),u=e.ref([]),m=e.ref({}),b=e.ref([]),g=e.ref(String(o.query.search??"")),d=e.ref(Math.max(1,Number(o.query.page)||1)),h=e.ref(15),x=e.ref(0),N=e.computed(()=>x.value>0),$=e.computed(()=>x.value?(d.value-1)*h.value+1:0),_=e.computed(()=>x.value?Math.min(d.value*h.value,x.value):0);function w(M){const j=new URLSearchParams;return Object.entries(M).forEach(([z,v])=>{if(!(v==null||v==="")){if(Array.isArray(v)){v.forEach(R=>{R!=null&&R!==""&&j.append(z,String(R))});return}j.append(z,String(v))}}),j.toString()}function E(){return`${f.value}/new`}function B(M){return`${f.value}/${M}/edit`}async function F(){try{l.value=!0;const M=`/api/data/gis.${p.value}.table`,j=w({...m.value,page:d.value,limit:h.value}),z=await fetch(j?`${M}?${j}`:M);if(!z.ok)throw new Error(`Rows fetch failed: ${z.status}`);const v=await z.json();k.value=v.rows||[],x.value=Number(v.filtered??v.total??v.count??k.value.length)||0,y.value=a.columnsConfig.length?a.columnsConfig:v.columns||[],u.value=v.filters||[],b.value=v.actions||[],y.value.length&&!y.value[0].link?y.value[0].link=`${f.value}/{id}`:y.value.length&&(y.value[0].link=`${f.value}/{id}`)}catch{k.value=[],x.value=0}finally{l.value=!1}}function Y(M){m.value=M,d.value=1,G(),F()}async function P(M,j,z){const v=await fetch(`/api/form/gis.${p.value}.table/${M.id}`);if(!v.ok)throw new Error(`Form fetch failed: ${v.status}`);const J=(await v.json()).token,ue=await fetch(`/api/table/${J}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({[j]:z})});if(!ue.ok)throw ge.notify({type:"error",title:"Помилка збереження",message:`Поле "${j}" не оновлено`}),new Error(`Save failed: ${ue.status}`);ge.notify({title:"Збережено",message:`Поле "${j}" оновлено`})}function Q(M,j){m.value={...m.value,[M]:j},d.value=1,G(),F()}function Z(M){Q((M==null?void 0:M.name)||"search",(M==null?void 0:M.value)??g.value)}function ae(M){g.value="",Q(M||"search",void 0)}function X(M){!M||M===d.value||(d.value=M,G(),F())}function G(){const M={...o.query,page:String(d.value),...g.value?{search:g.value}:{}};g.value||delete M.search,delete M.view,r.replace({query:M})}return e.onMounted(()=>{F(),document.title=i.value}),e.watch(()=>o.name,()=>{d.value=1,g.value="",F(),document.title=i.value}),e.watch(()=>o.query,M=>{const j=Math.max(1,Number(M.page)||1),z=String(M.search??""),v=j!==d.value,R=z!==g.value;!v&&!R||(d.value=j,g.value=z,m.value={...m.value,search:z||void 0},F())}),(M,j)=>(e.openBlock(),e.createElementBlock("div",Gw,[e.createVNode(Ht,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),actions:e.withCtx(()=>[e.createElementVNode("a",Zw,[e.createVNode(e.unref(me.RefreshCw),{size:16}),j[2]||(j[2]=e.createTextVNode(" Оновити растри ",-1))]),e.createElementVNode("a",{onClick:j[0]||(j[0]=z=>e.unref(r).push(E())),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(me.Plus),{size:16}),j[3]||(j[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[s.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Kw,[e.createElementVNode("div",Xw,[e.createElementVNode("div",Jw,[e.createElementVNode("div",Qw,[e.createVNode(e.unref(Ln.FilterField),{modelValue:g.value,"onUpdate:modelValue":j[1]||(j[1]=z=>g.value=z),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:Z,onClear:ae,placeholder:c.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Ln.Filter),{schema:u.value,value:m.value,onChange:Y,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",e2,[e.createVNode(e.unref(n),{rows:k.value,columns:y.value,loading:l.value,router:e.unref(r),selectable:!1,onCellUpdate:P,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"},{action:e.withCtx(({row:z})=>[e.createElementVNode("div",t2,[e.createElementVNode("button",{onClick:v=>e.unref(r).push(B(z.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(Tn)],8,n2)])]),_:1},8,["rows","columns","loading","router"])]),N.value?(e.openBlock(),e.createElementBlock("div",o2,[e.createElementVNode("div",r2,[j[4]||(j[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",l2,e.toDisplayString($.value),1),j[5]||(j[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",a2,e.toDisplayString(_.value),1),j[6]||(j[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",s2,e.toDisplayString(x.value),1)]),e.createElementVNode("div",i2,[e.createVNode(e.unref(ge.VsPagination),{total:x.value,page:d.value,"page-size":h.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":X,onPageChange:X},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-63309b89"]])},Symbol.toStringTag,{value:"Module"})),d2={class:"flex-1 overflow-y-auto p-4 sm:p-6"},u2={class:"space-y-3"},m2={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},p2={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},f2={class:"text-xs text-gray-500 mb-1"},g2={key:0,class:"text-base text-md font-semibold text-gray-900"},y2={key:1,class:"text-base text-md font-semibold text-gray-900"},h2={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},b2={class:"space-y-2"},x2={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},k2={class:"text-sm font-semibold text-gray-900"},w2={class:"text-xs text-gray-600 mt-1"},_2={class:"grid grid-cols-2 gap-3"},E2={class:"text-xs text-gray-500 mb-1"},C2={class:"text-sm font-semibold text-gray-900"},N2={class:"bg-gray-50 p-4 rounded-lg"},V2={class:"grid grid-cols-2 gap-4"},B2={class:"text-xs text-gray-500 mb-1"},$2={class:"text-sm font-semibold text-gray-900"},S2=e.defineComponent({directives:{tooltip:ge.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",d2,[e.createElementVNode("div",u2,[e.createElementVNode("div",m2,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",p2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,a=>(e.openBlock(),e.createElementBlock("div",{key:a.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",f2,e.toDisplayString(a.label),1),a.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",g2,[e.createTextVNode(e.toDisplayString(a.value),1)])),[[r,a.tooltip]]):(e.openBlock(),e.createElementBlock("p",y2,e.toDisplayString(a.value),1))]))),128))])]),e.createElementVNode("div",h2,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-2"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",b2,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",x2,[e.createElementVNode("p",k2,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",w2,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",_2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,a=>(e.openBlock(),e.createElementBlock("div",{key:a.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",E2,e.toDisplayString(a.label),1),e.createElementVNode("p",C2,e.toDisplayString(a.value),1)]))),128))])]),e.createElementVNode("div",N2,[e.createElementVNode("div",V2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,a=>(e.openBlock(),e.createElementBlock("div",{key:a.label},[e.createElementVNode("p",B2,e.toDisplayString(a.label),1),e.createElementVNode("p",$2,e.toDisplayString(a.value),1)]))),128))])])])])])])}}}),v2={class:"flex-1 overflow-y-auto space-y-3 pr-1"},L2={class:"font-medium text-sm text-gray-800"},T2={class:"text-xs text-gray-500"},A2=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",v2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,r=>(e.openBlock(),e.createElementBlock("div",{key:r.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",L2,e.toDisplayString(r.name),1),e.createElementVNode("p",T2,e.toDisplayString(r.resolution)+" • "+e.toDisplayString(r.size)+"MB",1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",r.statusClass])},e.toDisplayString(r.status),3)]))),128))]))}}),M2={},D2={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function F2(t,n){return e.openBlock(),e.createElementBlock("svg",D2,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const z2=Ve(M2,[["render",F2]]),I2={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},j2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},P2={class:"flex items-center gap-2"},R2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},O2={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},U2=["checked"],q2=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{},showRasterExtent:{type:Boolean}},emits:["toggle-extent"],setup(t){const n=t,o=n.layerId||"raster-preview-layer",r=`${o}-source`,a=n.extent&&n.extent.length===4?[...n.extent]:void 0,i=Me(o,{sourceId:r,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...a?{bounds:a}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":1}},beforeId:n.beforeId??null}),{fitBounds:s}=et(),c=e.ref(1);e.watch(()=>n.tileUrl,l=>{if(!l){i.setVisible(!1);return}i.setVisible(!0),i.setTiles([l])},{immediate:!0}),e.watch(()=>c.value,l=>{i.setOpacity(l)},{immediate:!0});let p=null,f=!1;e.watch(()=>n.extent,l=>{if(!l||l.length!==4)return;const y=l.join(",");if(y!==p){if(p=y,!f){f=!0;return}s==null||s([[l[0],l[1]],[l[2],l[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const k=e.computed(()=>`${Math.round(c.value*100)}%`);return(l,y)=>(e.openBlock(),e.createElementBlock("div",I2,[e.createElementVNode("div",j2,[e.createElementVNode("div",P2,[y[2]||(y[2]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":y[0]||(y[0]=u=>c.value=u),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(k.value),1)])]),e.createElementVNode("div",R2,[e.createElementVNode("label",O2,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:t.showRasterExtent,onChange:y[1]||(y[1]=u=>l.$emit("toggle-extent",u.target.checked))},null,40,U2),y[3]||(y[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),Qn=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{},lineColor:{},lineWidth:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,a=e.computed(()=>{const{extent:c}=n;if(!c||c.length!==4)return null;const[p,f,k,l]=c;return[p,f,k,l].some(y=>typeof y!="number"||Number.isNaN(y))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[p,f],[k,f],[k,l],[p,l],[p,f]]]}}]}}),i=et(),s=Me(o,{sourceId:r,source:{type:"geojson",data:a.value||{type:"FeatureCollection",features:[]}},layer:{id:o,type:"line",paint:{"line-color":n.lineColor??"#ef4444","line-width":n.lineWidth??2}},beforeId:n.beforeId??null});return e.watch(()=>a.value,c=>{var f;if(!c){s.setVisible(!1),s.setData({type:"FeatureCollection",features:[]});return}s.setVisible(!0),s.setData(c);const p=(f=i.map)==null?void 0:f.value;p!=null&&p.moveLayer&&p.getLayer(o)&&p.moveLayer(o)},{immediate:!0}),(c,p)=>e.createCommentVNode("",!0)}}),H2={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},W2={class:"flex-1 relative overflow-hidden"},Y2={class:"absolute top-0 left-0 w-full z-20"},G2={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},Z2={class:"flex items-start justify-between gap-4"},K2={class:"flex-1 min-w-0"},X2={class:"flex items-center text-sm text-gray-500 mb-3"},J2={class:"text-gray-900 font-medium truncate max-w-xs"},Q2={class:"flex items-center justify-between gap-4"},e_={class:"flex-1 min-w-0"},t_={class:"flex items-center gap-3 mb-1"},n_={class:"text-base font-semibold text-gray-900 truncate"},o_=["title"],r_={class:"flex items-center gap-4 min-w-0"},l_={class:"flex-1 min-w-0"},a_=["title"],s_={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[105px]"},i_={class:"relative w-full h-full"},c_={class:"absolute top-4 left-4 z-20"},d_={key:1,class:"absolute bottom-4 left-1/2 z-30 -translate-x-1/2 rounded-2xl border border-sky-200 bg-white/95 px-4 py-2 text-xs font-medium text-slate-700 shadow-lg backdrop-blur"},u_={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},m_={class:"flex-1 flex flex-col h-full"},p_={class:"px-3 pt-3 pb-2 border-b border-gray-100"},f_={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-3 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},g_=["aria-selected","onClick"],y_={class:"leading-none"},h_={class:"flex flex-col flex-1 overflow-y-hidden p-3"},b_={key:0,class:"mb-3 text-xs text-slate-500"},x_={key:1,class:"mb-3 text-xs text-rose-600"},k_="OpenGIS",Yl=2,eo=5,w_=5,__=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=Ie.useRouter(),r=Ie.useRoute(),a=e.ref(null),i=e.computed(()=>{var ee;const V=(ee=r.matched[r.matched.length-1])==null?void 0:ee.path;return(typeof V=="string"&&V?V:r.path).replace(/\/:id\??$/,"")||"/"}),s=e.computed(()=>{var D;const V=(D=r.meta)==null?void 0:D.title;return typeof V=="string"&&V.trim()?V:"Растри"});function c(){o.push(i.value)}const p=e.computed(()=>{var D;const V=(D=r.params)==null?void 0:D.id;return typeof V=="string"?V:void 0}),f=e.ref(null),k=e.ref(!1),l=e.ref(!1),y=e.ref(null),u=e.ref(!0),m=e.ref(!1),b=e.ref(null);let g=null,d=null;const h=e.ref(!1);let x=null,N=!1;function $(V){if(Array.isArray(V))return $(V[0]);if(typeof V!="string"&&typeof V!="number")return null;const D=typeof V=="number"?V:Number(V.trim());return Number.isFinite(D)?D:null}function _(V,D){return V.toFixed(D)}function w(V,D,ee){const T=.5*10**-ee;return Math.abs(V-D)>T}function E(){var V;return(V=a.value)==null?void 0:V.ctx}function B(){var de,_e,$e,Se;const V=(_e=(de=E())==null?void 0:de.map)==null?void 0:_e.value;if(!V)return;const D=$(r.query.z),ee=$(r.query.x),T=$(r.query.y);if(D==null||ee==null||T==null)return;const O=($e=V.getCenter)==null?void 0:$e.call(V),U=(Se=V.getZoom)==null?void 0:Se.call(V);(!O||w(O.lng,ee,eo)||w(O.lat,T,eo)||w(U??0,D,Yl))&&(h.value=!0,V.jumpTo({center:[ee,T],zoom:D}),h.value=!1)}function F(){var O,U,ce,de;if(h.value)return;const V=(U=(O=E())==null?void 0:O.map)==null?void 0:U.value;if(!V)return;const D=(ce=V.getCenter)==null?void 0:ce.call(V),ee=(de=V.getZoom)==null?void 0:de.call(V);if(!D||ee==null)return;const T={...r.query,z:_(ee,Yl),x:_(D.lng,eo),y:_(D.lat,eo)};r.query.z===T.z&&r.query.x===T.x&&r.query.y===T.y||o.replace({query:T})}function Y(){var D;if(typeof document>"u")return;const V=(D=I.value)==null?void 0:D.name;document.title=V?`${V} — Растер`:k_}function P(V){return Number(V.toFixed(w_))}function Q(V,D){const[ee,T]=V,[O,U]=D;return[P(Math.min(ee,O)),P(Math.min(T,U)),P(Math.max(ee,O)),P(Math.max(T,U))]}function Z(V){const[D,ee,T,O]=V;return{type:"Polygon",coordinates:[[[D,ee],[T,ee],[T,O],[D,O],[D,ee]]]}}function ae(V){var T,O,U;const D=(O=(T=E())==null?void 0:T.map)==null?void 0:O.value,ee=(U=D==null?void 0:D.getCanvas)==null?void 0:U.call(D);ee!=null&&ee.style&&(ee.style.cursor=V)}async function X(V,D){if(!(!p.value||!f.value))try{const ee=Z(V),T=await fetch(`/api/gis-metadata/raster/${encodeURIComponent(p.value)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:ee})});if(!T.ok)throw new Error(`Failed to save raster metadata geom: ${T.status}`);ge.notify({type:"success",title:"Extent збережено",message:"Нові межі успішно збережено."}),await Oe()}catch(ee){console.error("Failed to save raster extent",ee),f.value&&(f.value={...f.value,extent:D?[...D]:void 0}),ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Extent"})}}function G(V){var ee,T,O;const D=(T=(ee=E())==null?void 0:ee.map)==null?void 0:T.value;if((O=D==null?void 0:D.dragPan)!=null&&O.enable&&D.dragPan.enable(),(V==null?void 0:V.length)===4&&f.value){const U=Array.isArray(f.value.extent)?[...f.value.extent]:null;f.value={...f.value,extent:[...V]},X(V,U)}x=null,N=!1,b.value=null,m.value=!1,ae("")}function M(){G(null)}function j(){var U,ce;const V=(ce=(U=E())==null?void 0:U.map)==null?void 0:ce.value;if(!V)return;const D=de=>{var $e,Se,ot;if(!m.value||(($e=de==null?void 0:de.originalEvent)==null?void 0:$e.button)!=null&&de.originalEvent.button!==0)return;const _e=de==null?void 0:de.lngLat;_e&&(x=[_e.lng,_e.lat],N=!0,b.value=[_e.lng,_e.lat,_e.lng,_e.lat],(ot=(Se=V.dragPan)==null?void 0:Se.disable)==null||ot.call(Se))},ee=de=>{if(!m.value||!N||!x)return;const _e=de==null?void 0:de.lngLat;_e&&(b.value=Q(x,[_e.lng,_e.lat]))},T=de=>{if(!m.value||!N||!x)return;const _e=de==null?void 0:de.lngLat;if(!_e){M();return}const $e=Q(x,[_e.lng,_e.lat]),[Se,ot,gt,ut]=$e;if(!(Math.abs(gt-Se)>0&&Math.abs(ut-ot)>0)){ge.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),M();return}G($e)},O=de=>{m.value&&de.key==="Escape"&&(de.preventDefault(),M())};V.on("mousedown",D),V.on("mousemove",ee),V.on("mouseup",T),window.addEventListener("keydown",O),d=()=>{V.off("mousedown",D),V.off("mousemove",ee),V.off("mouseup",T),window.removeEventListener("keydown",O)}}async function z(){var ee;if(m.value)return;const V=E();!(V!=null&&V.ready)||(await V.ready(),!((ee=V.map)==null?void 0:ee.value))||(d||j(),m.value=!0,N=!1,x=null,b.value=null,ae("crosshair"),ge.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}const v=e.computed(()=>{var D;const V=(D=f.value)==null?void 0:D.url;return V?/^https?:\/\//i.test(V)||typeof window>"u"||typeof location>"u"?V:`${location.origin}${V}`:""}),R=e.computed(()=>{var V;return((V=f.value)==null?void 0:V.extent)??null}),J=e.computed(()=>p.value?`raster-${p.value}`:void 0),ue=e.computed(()=>p.value?`raster-extent-${p.value}`:"raster-extent"),fe=e.computed(()=>p.value?`raster-extent-draft-${p.value}`:"raster-extent-draft"),ie=e.computed(()=>{const V=J.value??"raster",D=R.value&&R.value.length===4?R.value.join(","):"no-extent";return`${V}-${D}`}),le=e.computed(()=>!!v.value),S=e.computed(()=>{const V=R.value;if(!V||V.length!==4)return null;const[D,ee,T,O]=V;return[D,ee,T,O].some(U=>typeof U!="number"||Number.isNaN(U))?null:[(D+T)/2,(ee+O)/2]}),I=e.computed(()=>{var U,ce;const V=f.value,D=V==null?void 0:V.extent,T=p.value??"—",O=[V!=null&&V.extension?`Формат ${String(V.extension).toUpperCase()}`:null,(V==null?void 0:V.resolution)||null].filter(Boolean).join(", ");return{id:T,name:(V==null?void 0:V.name)||((ce=(U=V==null?void 0:V.files)==null?void 0:U[0])==null?void 0:ce.name),description:(V==null?void 0:V.description)||O||"Попередній перегляд растрового шару.",coverage:D&&D.length===4?`${W(D[0])}, ${W(D[1])} → ${W(D[2])}, ${W(D[3])}`:"Покриття уточнюється",crs:V!=null&&V.srid?`EPSG:${V.srid}`:"EPSG:4326",source:V!=null&&V.proj4?V.proj4:"Джерело: Mapnik",updatedAt:V!=null&&V.cache?"Дані кешовано":"Нові дані"}}),A=e.computed(()=>{const V=f.value;return V?[V.source_path,V.srid?`SRID: ${V.srid}`:null,V.is_public?"Публічна":"Не публічна",V.is_active?"Активна":"Неактивна",V.cache?"Кешовано":null].filter(D=>D).join(", "):""}),H=[{key:"info",label:"Інформація",icon:z2},{key:"files",label:"Файли",icon:Tn},{key:"metadata",label:"Метадані",icon:Ro}],ne=H.map(V=>V.key),pe=e.ref(ne.includes(r.query.tab)?r.query.tab:"info"),xe=e.ref(!0);e.watch(()=>r.query.tab,V=>{V&&ne.includes(V)&&pe.value!==V&&(pe.value=V)}),e.watch(pe,V=>{r.query.tab!==V&&o.replace({query:{...r.query,tab:V}})});const ke=e.computed(()=>te(f.value)),we=e.computed(()=>Ce(f.value));e.watch(()=>f.value,()=>{Y()},{immediate:!0});async function He(){var T;const V=E();if(!(V!=null&&V.ready))return;await V.ready(),B();const D=(T=V.map)==null?void 0:T.value;if(!D)return;const ee=()=>F();D.on("moveend",ee),D.on("zoomend",ee),g=()=>{D.off("moveend",ee),D.off("zoomend",ee)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{B()}),e.onMounted(()=>{He()}),e.onBeforeUnmount(()=>{g==null||g(),g=null,d==null||d(),d=null,ae("")}),e.watch(p,()=>{Oe()},{immediate:!0});async function Ze(V){var D;Oe(),((D=f.value)==null?void 0:D.srid)!==V.srid&&(ge.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await at(`/api/gis-xml/${encodeURIComponent(p.value)}`),ge.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function Oe(){const V=p.value;if(!V){f.value=null,y.value=null;return}k.value=!0,y.value=null;try{const D=await fetch(`/api/gis-raster/${encodeURIComponent(V)}`);if(!D.ok)throw new Error(`HTTP ${D.status}`);const ee=await D.json();ee.xml&&(l.value=!0),f.value=ee,ee.xml||(ge.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await at(`/api/gis-xml/${encodeURIComponent(V)}`),ge.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(V)}?nocache=1`),l.value=!0)}catch(D){console.error("Failed to load raster info",D),f.value=null,y.value=D instanceof Error?D.message:String(D)}finally{k.value=!1}}function at(V){return new Promise((D,ee)=>{const T=new EventSource(V),O=[];T.onmessage=U=>{O.push(U.data),console.log("Received:",U.data)},T.addEventListener("end",()=>{T.close(),D(O)}),T.onerror=U=>{T.close(),D(U)}})}function te(V){var D;return(D=V==null?void 0:V.files)!=null&&D.length?V.files.map(ee=>({name:ee.name,resolution:re(ee.name,V),size:ee.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function re(V,D){const ee=V.toLowerCase();return ee.endsWith(".tfw")?"Georeference":ee.endsWith(".xml")?"Опис":ee.endsWith(".tif")||ee.endsWith(".tiff")?D!=null&&D.resolution?D.resolution:"Растер":(D==null?void 0:D.resolution)??"Файл"}function Ce(V){return V?{baseParams:We(V),spatial:{crs:{code:V.srid?`EPSG:${V.srid}`:"EPSG:4326",description:V.proj4||"WGS 84 — World Geodetic System 1984"},bounds:ve(V.extent),resolution:Ge(V)},statistics:Ae(V),technical:nt(V)}:null}function Ue(V){return V!=null&&V.length?V.map(ee=>{var O;if(!ee)return"";const T=ee.trim().split(/\s+/)[0];return((O=T==null?void 0:T[0])==null?void 0:O.toUpperCase())||""}).filter(Boolean).join(""):""}function We(V){var U,ce;const D=V.bands_count??((U=V.bands)==null?void 0:U.length)??"—",ee=Ue(V.bands),T=(V.bands??[]).map(de=>de.trim()).filter(de=>de.length>0),O=T.length?T.join(", "):void 0;return[{label:"Розмір растру, px",value:V.width&&V.height?`${V.width}×${V.height}`:"—"},{label:"Формат файлу",value:((ce=V.extension)==null?void 0:ce.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:V.total_size?`${V.total_size}`:"—"},{label:"Кількість каналів",value:typeof D=="number"?`${D}${ee?` (${ee})`:""}`:`${D}${ee?` (${ee})`:""}`,tooltip:O},{label:"Глибина кольору",value:V.color_depth?`${V.color_depth} біт/канал`:"—"},{label:"Стиснення",value:V.compression||"—"}]}function ve(V){return!V||V.length!==4?[]:[{label:"Північ",value:W(V[3],"N")},{label:"Схід",value:W(V[2],"E")},{label:"Південь",value:W(V[1],"S")},{label:"Захід",value:W(V[0],"W")}]}function Ge(V){const D=[{label:"Роздільна здатність",value:V.resolution||"—"}];return V.width&&V.height&&D.push({label:"Розмір пікселя",value:`${V.width} × ${V.height} px`}),D}function Ae(V){var D;return(D=V.bands)!=null&&D.length?V.bands.map((ee,T)=>{const O=n[T%n.length];return{label:`Канал ${T+1}${ee?` (${ee})`:""}`,cardClass:O.cardClass,titleClass:O.titleClass,metrics:[{label:"Назва",value:ee||`Канал ${T+1}`},{label:"Глибина",value:V.color_depth?`${V.color_depth} біт`:"—"},{label:"Статус",value:V.cache?"Кешовано":"Готово"}]}}):[]}function nt(V){var D;return[{label:"Тип даних",value:V.color_depth?`Unsigned Integer ${V.color_depth}-bit`:"—"},{label:"Компресія",value:V.compression||"—"},{label:"Кольорова інтерпретація",value:((D=V.bands)==null?void 0:D.join(", "))||"—"},{label:"SRID",value:V.srid?`EPSG:${V.srid}`:"—"},{label:"Проекція (proj4)",value:V.proj4||"—"},{label:"URL тайла",value:V.url||"—"}]}function W(V,D){if(V==null||Number.isNaN(V))return"—";const ee=`${V.toFixed(5)}°`;return D?`${ee} ${D}`:ee}return(V,D)=>(e.openBlock(),e.createElementBlock("div",H2,[e.createElementVNode("div",W2,[e.createElementVNode("div",Y2,[e.createElementVNode("div",G2,[e.createElementVNode("div",Z2,[e.createElementVNode("div",K2,[e.createElementVNode("div",X2,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:c},e.toDisplayString(s.value),1),D[2]||(D[2]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",J2,e.toDisplayString(I.value.name||"Растер"),1)]),e.createElementVNode("div",Q2,[e.createElementVNode("div",e_,[e.createElementVNode("div",t_,[e.createElementVNode("h1",n_,e.toDisplayString(I.value.name||"Растер"),1)]),A.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:A.value},e.toDisplayString(A.value),9,o_)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",r_,[e.createElementVNode("div",l_,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:I.value.description},e.toDisplayString(I.value.description),9,a_)]),e.createVNode(Uo,{"entity-id":p.value||"","entity-info":{name:I.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:Ze},null,8,["entity-id","entity-info"])])])])]),e.createElementVNode("div",s_,[e.createElementVNode("div",i_,[e.createVNode(An,{ref_key:"mapViewRef",ref:a},{default:e.withCtx(()=>[le.value&&l.value?(e.openBlock(),e.createBlock(q2,{key:ie.value,"tile-url":v.value,extent:R.value,"layer-id":J.value,"show-raster-extent":u.value,onToggleExtent:D[0]||(D[0]=ee=>u.value=ee)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(Qn,{extent:u.value?R.value:null,"layer-id":ue.value},null,8,["extent","layer-id"]),e.createVNode(Qn,{extent:b.value,"layer-id":fe.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createElementVNode("div",c_,[e.createVNode(qt)]),m.value?(e.openBlock(),e.createElementBlock("div",d_," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),e.createElementVNode("div",u_,[e.createVNode(zt),S.value?(e.openBlock(),e.createBlock(zt,{key:0,targetCenter:S.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1},512)])]),e.createVNode(Po,{open:xe.value,onToggle:D[1]||(D[1]=ee=>xe.value=!xe.value)},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",xe.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",m_,[e.createElementVNode("div",p_,[e.createElementVNode("div",f_,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(H,ee=>e.createElementVNode("button",{key:ee.key,type:"button",role:"tab","aria-selected":pe.value===ee.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",pe.value===ee.key?"bg-white shadow-sm text-gray-700":""]),onClick:T=>pe.value=ee.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ee.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",y_,e.toDisplayString(ee.label),1)],10,g_)),64))])]),e.createElementVNode("div",h_,[k.value?(e.openBlock(),e.createElementBlock("div",b_," Завантаження метаданих растру… ")):y.value?(e.openBlock(),e.createElementBlock("div",x_," Не вдалося отримати дані: "+e.toDisplayString(y.value),1)):e.createCommentVNode("",!0),pe.value==="files"?(e.openBlock(),e.createBlock(A2,{key:2,files:ke.value},null,8,["files"])):pe.value==="metadata"?(e.openBlock(),e.createBlock(Oo,{key:3,data:f.value,"entity-id":p.value,"entity-type":"raster",onSaved:Oe,onEditCssBounds:z},null,8,["data","entity-id"])):we.value?(e.openBlock(),e.createBlock(S2,{key:4,details:we.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}})},Symbol.toStringTag,{value:"Module"})),E_={},C_={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"};function N_(t,n){return e.openBlock(),e.createElementBlock("svg",C_,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const V_=Ve(E_,[["render",N_]]),B_={class:"flex flex-col h-full"},$_={class:"flex justify-end mb-3 gap-2"},S_=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,a=e.computed({get:()=>o.modelValue,set:i=>r("update:modelValue",i)});return(i,s)=>(e.openBlock(),e.createElementBlock("div",B_,[e.createElementVNode("div",$_,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:s[0]||(s[0]=c=>i.$emit("save"))},[...s[2]||(s[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(Nn,{modelValue:a.value,"onUpdate:modelValue":s[1]||(s[1]=c=>a.value=c),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),v_={class:"flex flex-col flex-1 min-h-0"},L_={class:"flex justify-between mb-3 gap-2"},T_={class:"text-left"},A_={class:"font-medium text-gray-900"},M_={class:"text-xs text-gray-500"},D_={class:"flex justify-center gap-2"},F_=["checked","onChange"],z_={class:"text-sm font-medium text-gray-900"},I_=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Min Зум",slot:"zoomCell",width:"140px"}],r=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=n,c=e.ref(!1),p=e.ref({table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),f={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},gcol:{type:"text",label:"Колонка geometry"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function k(){p.value={table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},c.value=!0}function l(){c.value=!1}function y(){var g,d;const m=(g=p.value.table)==null?void 0:g.trim(),b=(d=p.value.key)==null?void 0:d.trim();if(!m||!b){ge.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...p.value,table:m,key:b}],c.value=!1}function u(m,b){var d;const g=((d=b==null?void 0:b.target)==null?void 0:d.checked)??!1;m.active=g,i.value=Array.isArray(i.value)?[...i.value]:[]}return(m,b)=>(e.openBlock(),e.createElementBlock("div",v_,[e.createElementVNode("div",L_,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500",onClick:k}," Додати таблицю "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:b[0]||(b[0]=g=>s("save"))}," Зберегти ")]),e.createVNode(Lt,{modelValue:i.value,"onUpdate:modelValue":b[1]||(b[1]=g=>i.value=g),"columns-scheme":o,"form-scheme":f,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:g})=>[e.createElementVNode("div",T_,[e.createElementVNode("div",A_,e.toDisplayString(g.table),1),e.createElementVNode("div",M_,e.toDisplayString(g.key),1)])]),activeCell:e.withCtx(({row:g})=>[e.createElementVNode("label",D_,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:g.active,onChange:d=>u(g,d)},null,40,F_)])]),zoomCell:e.withCtx(({row:g})=>[e.createElementVNode("div",z_,e.toDisplayString(g.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:c.value,"onUpdate:visible":b[3]||(b[3]=g=>c.value=g),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:l}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(a),{values:p.value,"onUpdate:values":b[2]||(b[2]=g=>p.value=g),schema:f},null,8,["values"])]),_:1},8,["visible"])]))}}),j_={class:"flex flex-col flex-1 min-h-0 gap-4"},P_={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},R_=e.defineComponent({__name:"cartocss-card-tab",props:{card:{},table:{}},emits:["save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(o.table),i=e.ref(o.card),s=e.defineAsyncComponent(()=>import("@opengis/form").then(p=>p.VsInputText));function c(){r("save",{card_html:i.value,card_table:a.value})}return(p,f)=>(e.openBlock(),e.createElementBlock("div",j_,[e.createElementVNode("div",{class:"flex items-center justify-end gap-3"},[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:c},[...f[2]||(f[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти картку ",-1)])])]),e.createElementVNode("div",null,[e.createVNode(e.unref(s),{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=k=>a.value=k)},null,8,["modelValue"])]),e.createElementVNode("div",P_,[e.createVNode(Nn,{modelValue:i.value,"onUpdate:modelValue":f[1]||(f[1]=k=>i.value=k),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),O_=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:1}},setup(t){const n=t,o=et(),{activateTemporaryLayer:r,deactivateTemporaryLayer:a,setTemporaryLayerOpacity:i}=cn(o.map),s=e.computed(()=>{var l;const k=`${(l=n==null?void 0:n.tileUrl)==null?void 0:l.trim()}`;return k?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(k)?k:k.startsWith("//")?`${window.location.protocol}${k}`:k.startsWith("/")?`${location.origin}${k}`:`${location.origin}/${k}`:""});let c="",p="";function f(){const k=n.active&&!!s.value;c&&(!k||c!==n.layerId)&&(a(c,p||void 0),c="",p=""),k&&(r({id:n.layerId,title:n.title||n.layerId,url:s.value,opacity:n.opacity},{},n.owner),c=n.layerId,p=n.owner||"")}return e.watch(()=>[n.layerId,s.value,n.active,n.owner],f,{immediate:!0}),e.watch(()=>n.opacity,k=>{!c||!n.active||i(c,k,p||void 0)},{immediate:!0}),e.onUnmounted(()=>{c&&(a(c,p||void 0),c="",p="")}),(k,l)=>e.createCommentVNode("",!0)}}),U_=e.defineComponent({__name:"CartocssMapClickListener",props:{cartocssId:{},infoEnabled:{type:[Boolean,null]}},setup(t){const n=t,o=e.computed(()=>n.cartocssId??null),r=e.computed(()=>!!n.infoEnabled),{map:a,ready:i}=et(),s=u=>{!u||typeof window>"u"||window.dispatchEvent(new CustomEvent(wo,{detail:u}))},c=async u=>{const m=await fetch(`/api/map-format?${u.toString()}`);if(!m.ok)throw new Error(`API returned ${m.status}`);return m.json()};let p=null,f=null;const k=u=>{if(!u)return null;if(typeof u=="string")try{return JSON.parse(u)}catch{return null}return u},l=async(u,m)=>{var d;const b=o.value?`external:${o.value},${String(u)}`:null,g=new URLSearchParams({layer:o.value??"",id:String(u)});try{const h=await c(g),x=typeof h.html=="string"?h.html:null,N=k(((d=h==null?void 0:h.data)==null?void 0:d.geom)??(h==null?void 0:h.geom)??null);(x||N)&&s({html:x,geometry:N??m,infoToken:b})}catch(h){console.warn("CartoCSS map-format (id) error",h)}},y=async u=>{var d,h,x,N;if(!o.value)return;if(!r.value){ge.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const m=(d=u==null?void 0:u.lngLat)==null?void 0:d.lng,b=(h=u==null?void 0:u.lngLat)==null?void 0:h.lat;if(typeof m!="number"||typeof b!="number")return;const g=new URLSearchParams({layer:o.value,lat:b.toFixed(6),lng:m.toFixed(6)});try{const $=await c(g),_=k(((x=$==null?void 0:$.data)==null?void 0:x.geom)??($==null?void 0:$.geom)??null),w=((N=$==null?void 0:$.data)==null?void 0:N.id)??($==null?void 0:$.id);if(w!=null){await l(w,_);return}fr({html:$==null?void 0:$.html})&&s({html:$==null?void 0:$.html,geometry:_,infoToken:null})}catch($){console.warn("CartoCSS map-format error",$)}};return i().then(()=>{f=a.value,f&&(f.on("click",y),p=()=>f==null?void 0:f.off("click",y))}),e.onBeforeUnmount(()=>{p==null||p(),p=null,f=null}),()=>{}}}),q_={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},H_={class:"flex-1 relative overflow-hidden"},W_={class:"absolute top-0 left-0 w-full z-20"},Y_={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},G_={class:"flex items-start justify-between gap-4"},Z_={class:"flex-1 min-w-0"},K_={class:"flex items-center text-sm text-gray-500 mb-3"},X_={class:"text-gray-900 font-medium truncate max-w-xs"},J_={class:"flex items-center justify-between gap-4"},Q_={class:"flex-1 min-w-0"},eE={class:"flex items-center gap-3 mb-1"},tE={class:"text-base font-semibold text-gray-900 truncate"},nE={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},oE={class:"text-xs font-medium text-green-700"},rE=["title"],lE={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[115px]"},aE={class:"relative w-full h-full"},sE={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},iE={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},cE={class:"flex items-center gap-2"},dE={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},uE={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},mE=["checked"],pE={class:"absolute top-4 left-4 z-20"},fE={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},gE={key:0,class:"absolute bottom-4 left-1/2 z-30 -translate-x-1/2 rounded-2xl border border-sky-200 bg-white/95 px-4 py-2 text-xs font-medium text-slate-700 shadow-lg backdrop-blur"},yE={class:"flex-1 flex flex-col h-full"},hE={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},bE=["aria-selected","onClick"],xE={class:"leading-none"},kE={class:"flex flex-col flex-1 overflow-y-hidden p-3"},wE={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},_E="cartocss-demo-001",EE="OpenGIS",Gl=2,to=5,CE=5,NE=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"cartocss",setup(t){const n=Ie.useRouter(),o=Ie.useRoute(),r=e.ref(null),a=e.computed(()=>{var D;const W=(D=o.matched[o.matched.length-1])==null?void 0:D.path;return(typeof W=="string"&&W?W:o.path).replace(/\/:id\??$/,"")||"/"}),i=e.computed(()=>{var V;const W=(V=o.meta)==null?void 0:V.title;return typeof W=="string"&&W.trim()?W:"CartoCSS"});function s(){n.push(a.value)}const c=[{key:"css",label:"CSS",icon:Rl},{key:"data",label:"Дані",icon:V_},{key:"metadata",label:"Метадані",icon:Ro},{key:"card",label:"Картка",icon:Ol}],p=c.map(W=>W.key),f=e.ref(p.includes(o.query.tab)?o.query.tab:"css"),k=e.ref(!0),l=e.ref(null),y=e.computed(()=>{var W;return(W=l.value)!=null&&W.source_path?c.filter(V=>V.key==="card"||V.key==="metadata"):c}),u=e.computed(()=>o.params.id||_E),m=e.ref({id:u.value,name:"",description:""});let b=null;const g=e.ref(!1);function d(W){if(Array.isArray(W))return d(W[0]);if(typeof W!="string"&&typeof W!="number")return null;const V=typeof W=="number"?W:Number(W.trim());return Number.isFinite(V)?V:null}function h(W,V){return W.toFixed(V)}function x(W,V,D){const ee=.5*10**-D;return Math.abs(W-V)>ee}function N(){var W;return(W=r.value)==null?void 0:W.ctx}function $(){var ce,de,_e,$e;const W=(de=(ce=N())==null?void 0:ce.map)==null?void 0:de.value;if(!W)return;const V=d(o.query.z),D=d(o.query.x),ee=d(o.query.y);if(V==null||D==null||ee==null)return;const T=(_e=W.getCenter)==null?void 0:_e.call(W),O=($e=W.getZoom)==null?void 0:$e.call(W);(!T||x(T.lng,D,to)||x(T.lat,ee,to)||x(O??0,V,Gl))&&(g.value=!0,W.jumpTo({center:[D,ee],zoom:V}),g.value=!1)}function _(){var T,O,U,ce;if(g.value)return;const W=(O=(T=N())==null?void 0:T.map)==null?void 0:O.value;if(!W)return;const V=(U=W.getCenter)==null?void 0:U.call(W),D=(ce=W.getZoom)==null?void 0:ce.call(W);if(!V||D==null)return;const ee={...o.query,z:h(D,Gl),x:h(V.lng,to),y:h(V.lat,to)};o.query.z===ee.z&&o.query.x===ee.x&&o.query.y===ee.y||n.replace({query:ee})}function w(W){typeof document>"u"||(document.title=W?`${W} — CartoCSS`:EE)}const E=e.ref(""),B=e.ref([]),F=e.ref(!1),Y=e.ref(!1),P=e.ref(""),Q=e.ref(0),Z=e.ref(!1),ae=e.ref(1),X=e.ref(!0),G=e.ref(!1),M=e.ref(null),j=e.computed(()=>`cartocss-layer-${u.value}`),z=e.computed(()=>`${Math.round(ae.value*100)}%`),v=e.computed(()=>`cartocss-extent-${u.value}`),R=e.computed(()=>`cartocss-extent-draft-${u.value}`),J=e.computed(()=>{var T;const W=(T=P.value)==null?void 0:T.trim();if(!W)return"";const V=W.includes("?")?"&":"?",D=`${W}${V}nottl=1`,ee=Q.value;return ee?`${W}${V}ts=${ee}&nocache=1`:D}),ue=e.ref(""),fe=e.ref(""),ie=e.computed(()=>{var O;const W=(O=l.value)==null?void 0:O.bounds;if(!Array.isArray(W)||W.length<4)return null;const[V,D,ee,T]=W;return[V,D,ee,T].some(U=>typeof U!="number"||Number.isNaN(U))?null:[(V+ee)/2,(D+T)/2]}),le=e.computed(()=>{var O;const W=(O=l.value)==null?void 0:O.bounds;if(!Array.isArray(W)||W.length<4)return null;const[V,D,ee,T]=W;return[V,D,ee,T].some(U=>typeof U!="number"||Number.isNaN(U))?null:[V,D,ee,T]}),S=e.computed(()=>{const W=l.value;return W?[W.description,W.group_id?`Група: ${W.group_id}`:null,W.source_path?`Шлях: ${W.source_path}`:null,W.is_public===!0?"Публічний":"Не публічний",W.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", "):""}),I=e.computed(()=>{var V;const W=(V=l.value)==null?void 0:V.group_id;return W?String(W).toUpperCase():""});let A=null,H=!1,ne=null;function pe(W){return Number(W.toFixed(CE))}function xe(W,V){const[D,ee]=W,[T,O]=V;return[pe(Math.min(D,T)),pe(Math.min(ee,O)),pe(Math.max(D,T)),pe(Math.max(ee,O))]}function ke(W){const[V,D,ee,T]=W;return{type:"Polygon",coordinates:[[[V,D],[ee,D],[ee,T],[V,T],[V,D]]]}}function we(W){var ee,T,O;const V=(T=(ee=N())==null?void 0:ee.map)==null?void 0:T.value,D=(O=V==null?void 0:V.getCanvas)==null?void 0:O.call(V);D!=null&&D.style&&(D.style.cursor=W)}async function He(W,V){if(!(!u.value||!l.value)){Y.value=!0;try{const D=ke(W),ee=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:D})});if(!ee.ok)throw new Error(`Failed to save cartocss bounds: ${ee.status}`);ge.notify({type:"success",title:"Bounds збережено",message:"Нові межі успішно збережено."}),await Ge(u.value,{bustCache:!0})}catch(D){console.error("Failed to save CartoCSS bounds",D),l.value&&(l.value={...l.value,bounds:V?[...V]:null}),ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Bounds"})}finally{Y.value=!1}}}function Ze(W){var D,ee,T;const V=(ee=(D=N())==null?void 0:D.map)==null?void 0:ee.value;if((T=V==null?void 0:V.dragPan)!=null&&T.enable&&V.dragPan.enable(),(W==null?void 0:W.length)===4&&l.value){const O=Array.isArray(l.value.bounds)?[...l.value.bounds]:null;l.value={...l.value,bounds:[...W]},He(W,O)}A=null,H=!1,M.value=null,G.value=!1,we("")}function Oe(){Ze(null)}function at(){var O,U;const W=(U=(O=N())==null?void 0:O.map)==null?void 0:U.value;if(!W)return;const V=ce=>{var _e,$e,Se;if(!G.value||((_e=ce==null?void 0:ce.originalEvent)==null?void 0:_e.button)!=null&&ce.originalEvent.button!==0)return;const de=ce==null?void 0:ce.lngLat;de&&(A=[de.lng,de.lat],H=!0,M.value=[de.lng,de.lat,de.lng,de.lat],(Se=($e=W.dragPan)==null?void 0:$e.disable)==null||Se.call($e))},D=ce=>{if(!G.value||!H||!A)return;const de=ce==null?void 0:ce.lngLat;de&&(M.value=xe(A,[de.lng,de.lat]))},ee=ce=>{if(!G.value||!H||!A)return;const de=ce==null?void 0:ce.lngLat;if(!de){Oe();return}const _e=xe(A,[de.lng,de.lat]),[$e,Se,ot,gt]=_e;if(!(Math.abs(ot-$e)>0&&Math.abs(gt-Se)>0)){ge.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),Oe();return}Ze(_e)},T=ce=>{G.value&&ce.key==="Escape"&&(ce.preventDefault(),Oe())};W.on("mousedown",V),W.on("mousemove",D),W.on("mouseup",ee),window.addEventListener("keydown",T),ne=()=>{W.off("mousedown",V),W.off("mousemove",D),W.off("mouseup",ee),window.removeEventListener("keydown",T)}}async function te(){var D;const W=N();!(W!=null&&W.ready)||(await W.ready(),!((D=W.map)==null?void 0:D.value))||(ne||at(),G.value=!0,H=!1,A=null,M.value=null,we("crosshair"),ge.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}e.watch(u,W=>{W&&Ge(W)},{immediate:!0}),e.watch(()=>{var W;return(W=m.value)==null?void 0:W.name},W=>w(W),{immediate:!0});async function re(){var ee;const W=N();if(!(W!=null&&W.ready))return;await W.ready(),$();const V=(ee=W.map)==null?void 0:ee.value;if(!V)return;const D=()=>_();V.on("moveend",D),V.on("zoomend",D),b=()=>{V.off("moveend",D),V.off("zoomend",D)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{$()}),e.onMounted(()=>{re()}),e.onBeforeUnmount(()=>{b==null||b(),b=null,ne==null||ne(),ne=null,we("")}),e.watch(()=>o.query.tab,W=>{W&&y.value.some(V=>V.key===W)&&f.value!==W&&(f.value=W)}),e.watch(y,W=>{W.length&&!W.some(V=>V.key===f.value)&&(f.value=W[0].key)},{immediate:!0}),e.watch(f,W=>{o.query.tab!==W&&y.value.some(V=>V.key===W)&&n.replace({query:{...o.query,tab:W}})}),e.watch(()=>l.value,W=>{const V=W==null?void 0:W.card_html;ue.value=V,fe.value=W==null?void 0:W.card_table},{immediate:!0});function Ce(){u.value&&Ge(u.value,{bustCache:!0})}async function Ue(W,V){if(u.value){Y.value=!0;try{const D=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(W)});if(!D.ok)throw new Error(`Failed to save cartocss: ${D.status}`);ge.notify({type:"success",title:"Збережено",message:V}),await Ge(u.value,{bustCache:!0})}catch(D){console.error("Failed to save CartoCSS",D),ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{Y.value=!1}}}function We(W){if(!W)return null;if(typeof W=="string")try{return JSON.parse(W)}catch(V){return console.warn("Failed to parse CartoCSS config",V),null}return typeof W=="object"?W:null}function ve(W){const V=Array.isArray(W)?W:W==null?void 0:W.datasets;return Array.isArray(V)?V.map((D,ee)=>({table:(D==null?void 0:D.table)||(D==null?void 0:D.id)||`dataset_${ee+1}`,query:(D==null?void 0:D.query)||"",srid:(D==null?void 0:D.srid)||"",gcol:(D==null?void 0:D.gcol)||"",key:(D==null?void 0:D.key)||(D==null?void 0:D.label)||"Без підпису",active:typeof(D==null?void 0:D.active)=="boolean"?D.active:!0,minzoom:typeof(D==null?void 0:D.zoom)>"u"?"":String(D.zoom),maxzoom:typeof(D==null?void 0:D.maxzoom)>"u"?"":String(D.maxzoom),columns:(D==null?void 0:D.columns)||"",proj4text:(D==null?void 0:D.proj4text)||""})):[]}async function Ge(W,V){F.value=!0;try{const D=await fetch(`/api/gis-css/${W}`);if(!D.ok)throw new Error(`Failed to load cartocss: ${D.status}`);const ee=await D.json(),T=(ee==null?void 0:ee.message)||ee||{};l.value=T,m.value={id:T.cartocss_key||W,name:T.name||m.value.name,description:T.description||m.value.description},E.value=typeof T.style=="string"?T.style:"";const O=We(T.config??[]);B.value=ve(O);const U=typeof T.url=="string"?T.url:"";P.value=U,Z.value=!!(U&&T.enabled!==!1),Q.value=V!=null&&V.bustCache?Date.now():0}catch(D){console.error("Failed to fetch CartoCSS",D),Z.value=!1,P.value="",Q.value=0,l.value=null}finally{F.value=!1}}async function Ae(){await Ue({style:E.value||"",config:B.value},"CartoCSS оновлено")}async function nt(W){const V=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(W)});if(!V.ok)throw new Error(`Failed to save cartocss: ${V.status}`);ge.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(W,V)=>(e.openBlock(),e.createElementBlock("div",q_,[e.createElementVNode("div",H_,[e.createElementVNode("div",W_,[e.createElementVNode("div",Y_,[e.createElementVNode("div",G_,[e.createElementVNode("div",Z_,[e.createElementVNode("div",K_,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:s},e.toDisplayString(i.value),1),V[5]||(V[5]=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-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",X_,e.toDisplayString(m.value.name||"CartoCSS"),1)]),e.createElementVNode("div",J_,[e.createElementVNode("div",Q_,[e.createElementVNode("div",eE,[e.createElementVNode("h1",tE,e.toDisplayString(m.value.name||"CartoCSS"),1),I.value?(e.openBlock(),e.createElementBlock("div",nE,[e.createElementVNode("span",oE,e.toDisplayString(I.value),1)])):e.createCommentVNode("",!0)]),S.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:S.value},e.toDisplayString(S.value),9,rE)):e.createCommentVNode("",!0)])])]),e.createVNode(Uo,{class:"flex-shrink-0","entity-id":u.value,"entity-info":m.value,"form-endpoint":D=>`/api/form/gis.cartocss.table/${D}`,"save-endpoint":D=>`/api/gis-css/${D}`,"entity-label":"CartoCSS","save-method":"post",onSaved:Ce},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])])]),e.createElementVNode("div",lE,[e.createElementVNode("div",aE,[e.createVNode(An,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var D,ee;return[e.createElementVNode("div",sE,[e.createElementVNode("div",iE,[e.createElementVNode("div",cE,[V[6]||(V[6]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[0]||(V[0]=T=>ae.value=T),type:"range",min:"0",max:"1",step:"0.01",class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,ae.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(z.value),1)])]),e.createElementVNode("div",dE,[e.createElementVNode("label",uE,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:X.value,onChange:V[1]||(V[1]=T=>X.value=T.target.checked)},null,40,mE),V[7]||(V[7]=e.createElementVNode("span",null,"Межі css",-1))])])]),e.createElementVNode("div",pE,[e.createVNode(qt)]),e.createElementVNode("div",fE,[e.createVNode(zt),ie.value?(e.openBlock(),e.createBlock(zt,{key:0,targetCenter:ie.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),G.value?(e.openBlock(),e.createElementBlock("div",gE," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),J.value?(e.openBlock(),e.createBlock(O_,{key:1,"layer-id":j.value,"tile-url":J.value,active:Z.value,opacity:ae.value,title:m.value.name,owner:u.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(Qn,{extent:X.value?le.value:null,"layer-id":v.value},null,8,["extent","layer-id"]),e.createVNode(Qn,{extent:M.value,"layer-id":R.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createVNode(U_,{"cartocss-id":u.value,bounds:((D=l.value)==null?void 0:D.bounds)??null,active:Z.value&&!G.value,"info-enabled":(ee=l.value)==null?void 0:ee.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(_o,{"map-id":u.value},null,8,["map-id"])]}),_:1},512)])]),l.value?(e.openBlock(),e.createBlock(Po,{key:0,open:k.value,onToggle:V[2]||(V[2]=D=>k.value=!k.value)},null,8,["open"])):e.createCommentVNode("",!0)]),l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",k.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",yE,[y.value.length>1?(e.openBlock(),e.createElementBlock("div",hE,[e.createElementVNode("div",{class:"items-center justify-center text-muted-foreground grid w-full h-12 p-1 bg-gray-50 rounded-xl shadow-sm",style:e.normalizeStyle({gridTemplateColumns:`repeat(${y.value.length}, minmax(0, 1fr))`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,D=>(e.openBlock(),e.createElementBlock("button",{key:D.key,type:"button",role:"tab","aria-selected":f.value===D.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",f.value===D.key?"bg-white shadow-sm text-gray-700":""]),onClick:ee=>f.value=D.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(D.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",xE,e.toDisplayString(D.label),1)],10,bE))),128))],4)])):e.createCommentVNode("",!0),e.createElementVNode("div",kE,[F.value?(e.openBlock(),e.createElementBlock("div",wE," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.value==="css"?(e.openBlock(),e.createBlock(S_,{key:0,modelValue:E.value,"onUpdate:modelValue":V[3]||(V[3]=D=>E.value=D),class:"flex-1 min-h-0",onSave:Ae},null,8,["modelValue"])):f.value==="data"?(e.openBlock(),e.createBlock(I_,{key:1,modelValue:B.value,"onUpdate:modelValue":V[4]||(V[4]=D=>B.value=D),class:"flex-1 min-h-0 flex flex-col",onSave:Ae},null,8,["modelValue"])):f.value==="card"?(e.openBlock(),e.createBlock(R_,{key:2,card:ue.value,table:fe.value,class:"flex-1 min-h-0",onSave:nt},null,8,["card","table"])):f.value==="metadata"?(e.openBlock(),e.createBlock(Oo,{key:3,data:l.value,"entity-id":u.value,"entity-type":"css",onSaved:Ce,onEditCssBounds:te},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}})},Symbol.toStringTag,{value:"Module"})),VE={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},BE=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,a=n,i=e.computed({get:()=>r.modelValue,set:c=>a("update:modelValue",c)}),s=e.computed({get:()=>r.form,set:c=>a("update:form",c)});return(c,p)=>(e.openBlock(),e.createElementBlock("section",VE,[p[2]||(p[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:i.value,"onUpdate:values":p[0]||(p[0]=f=>i.value=f),form:s.value,"onUpdate:form":p[1]||(p[1]=f=>s.value=f)},null,8,["schema","values","form"]))]))}}),$E={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},SE=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},options:{}},emits:["update:layerIDs"],setup(t,{emit:n}){const o=t,r=n,a=e.computed({get:()=>o.layerIDs,set:i=>r("update:layerIDs",i)});return(i,s)=>(e.openBlock(),e.createElementBlock("section",$E,[s[1]||(s[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),s[2]||(s[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(Ko.VsInputArraySelect),{data:"layer_list",api:"/api/suggest/layer_list",modelValue:a.value,"onUpdate:modelValue":s[0]||(s[0]=c=>a.value=c),placeholder:"Шари"},null,8,["modelValue"])]))}}),vE={class:"w-full"},LE=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",vE,[e.createVNode(qn,{class:"w-full h-[calc(100vh-200px)]",height:"h-[calc(100vh-200px)]",id:t.id},null,8,["id"])]))}}),TE={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},AE={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},ME={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},DE={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},FE={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},zE=["disabled"],IE=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,a=e.ref(""),i=e.ref(null);e.watch(()=>o.modelValue,p=>{if(p){try{a.value=JSON.stringify(p,null,2)}catch{a.value="{}"}i.value=null}},{immediate:!0}),e.watch(a,p=>{if(!p.trim()){i.value=null;return}try{JSON.parse(p),i.value=null}catch(f){i.value=f.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:p}=window;if(p&&p.editor){const f=p.editor.getEditors();f.length>0&&f[f.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function s(){r("update:modelValue",null),a.value="",i.value=null}function c(){if(!i.value)try{const p=JSON.parse(a.value);r("save",p),s()}catch(p){console.error("Failed to parse JSON",p)}}return(p,f)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(s,["self"])},[e.createElementVNode("div",TE,[e.createElementVNode("div",AE,[f[1]||(f[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:s,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(me.X),{size:20})])]),i.value?(e.openBlock(),e.createElementBlock("div",ME," Помилка JSON: "+e.toDisplayString(i.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",DE,[e.createVNode(Nn,{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=k=>a.value=k),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",FE,[e.createElementVNode("button",{onClick:s,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:c,disabled:!!i.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,zE)])])])):e.createCommentVNode("",!0)}}),jE={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},PE={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},RE={class:"w-full text-sm"},OE={class:"divide-y divide-gray-200"},UE={class:"px-4 py-3"},qE=["onUpdate:modelValue","onChange"],HE=["value"],WE={class:"px-4 py-3"},YE=["onUpdate:modelValue","onChange"],GE=["value"],ZE={class:"px-4 py-3 text-center"},KE=["checked","onChange"],XE={class:"px-4 py-3"},JE={key:0,class:"flex items-center gap-2"},QE=["onClick"],eC=["onClick"],tC={key:1},nC=["onClick"],oC={class:"px-4 py-3 text-right"},rC=["onClick"],lC=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,a=["catalog","legend","basemaps","info","layers","dataset","filters","search"],i=["top-left","top-right","bottom-left","bottom-right"],s=e.ref(null),c=e.ref(-1),p=e.computed(()=>o.modelValue||[]);function f(){const d=[...p.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",d)}function k(d){ge.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const h=p.value.filter((x,N)=>N!==d);r("update:modelValue",h)}})}function l(d,h,x){const N=[...p.value];N[d]={...N[d],[h]:x},r("update:modelValue",N)}function y(d){return!!d&&Object.keys(d).length>0}function u(d,h){c.value=d,s.value=h||{}}function m(d){u(d,{})}function b(d){ge.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{l(d,"config",void 0)}})}function g(d){c.value>-1&&l(c.value,"config",d),s.value=null,c.value=-1}return(d,h)=>{var x;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[h[1]||(h[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:f,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(x=p.value)!=null&&x.length?(e.openBlock(),e.createElementBlock("div",PE,[e.createElementVNode("table",RE,[h[2]||(h[2]=e.createElementVNode("thead",{class:"bg-[rgba(252,252,252,0.8)] border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",OE,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(N,$)=>(e.openBlock(),e.createElementBlock("tr",{key:$,class:"hover:bg-gray-50"},[e.createElementVNode("td",UE,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>N.type=_,onChange:_=>l($,"type",N.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,HE)),64))],40,qE),[[e.vModelSelect,N.type]])]),e.createElementVNode("td",WE,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>N.position=_,onChange:_=>l($,"position",N.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,GE)),64))],40,YE),[[e.vModelSelect,N.position]])]),e.createElementVNode("td",ZE,[e.createElementVNode("input",{type:"checkbox",checked:N.visible!==!1,onChange:_=>l($,"visible",_.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,KE)]),e.createElementVNode("td",XE,[y(N.config)?(e.openBlock(),e.createElementBlock("div",JE,[e.createElementVNode("button",{onClick:_=>u($,N.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(me.Pen),{size:16})],8,QE),e.createElementVNode("button",{onClick:_=>b($),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(me.X),{size:16})],8,eC)])):(e.openBlock(),e.createElementBlock("div",tC,[e.createElementVNode("button",{onClick:_=>m($),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(me.Plus),{size:16})],8,nC)]))]),e.createElementVNode("td",oC,[e.createElementVNode("button",{onClick:_=>k($),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(me.Trash2),{size:16})],8,rC)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",jE," Немає віджетів. Додайте перший віджет. ")),e.createVNode(IE,{teleport:"#modal",modelValue:s.value,"onUpdate:modelValue":h[0]||(h[0]=N=>s.value=N),onSave:g},null,8,["modelValue"])])}}}),aC={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},sC={class:"mx-1"},iC={class:"text-gray-900 font-semibold"},cC=["disabled"],dC={key:0,class:"text-center py-12 mt-6 px-[24px]"},uC={key:1,class:"px-[24px] overflow-y-auto"},mC={class:"space-y-6"},pC={class:"space-y-6"},fC={class:"space-y-6"},gC=Object.freeze(Object.defineProperty({__proto__:null,default:Ve(e.defineComponent({__name:"MapSettings",setup(t){const n=Ie.useRouter(),o=Ie.useRoute(),r=e.computed(()=>{var _;return((_=n.resolve("/gis.maps").meta)==null?void 0:_.title)??"Карти"}),a=e.ref(!0),i=e.ref(!1),s=e.ref({}),c=e.ref({}),p=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],f=p.map(_=>_.id),k=_=>_?Array.isArray(_)?_[0]:_:null,l=(()=>{const _=k(o.query.tab);return _&&f.includes(_)?_:"general"})(),y=e.ref(l);e.watch(()=>o.query.tab,_=>{const w=k(_);w&&f.includes(w)&&y.value!==w&&(y.value=w)}),e.watch(y,_=>{o.query.tab!==_&&n.replace({query:{...o.query,tab:_}})});const u=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),m=e.computed({get:()=>(u.value.layers||[]).map(_=>_.id||_),set:_=>{u.value.layers=_}});async function b(_){if(!_.length){c.value={};return}try{const w=new URLSearchParams({json:"1",val:Array.from(new Set(_)).join(",")}),E=await fetch(`/api/suggest/layer_list?${w.toString()}`);if(!E.ok)return;const B=await E.json(),F=(B==null?void 0:B.data)??B??[],Y=Array.isArray(F)?F:[],P={...c.value};Y.forEach(Q=>{const Z=Q.id!=null?String(Q.id):"";Z&&(P[Z]=Q.text??Q.name??Z)}),c.value=P}catch(w){console.error("Failed to fetch layer labels:",w)}}const g=e.computed({get:()=>m.value.map(_=>c.value[_]??_),set:_=>{const w=Object.entries(c.value).reduce((B,[F,Y])=>(B[Y]=F,B),{}),E=_.map(B=>w[B]??null).filter(B=>B!=null);m.value=E}}),d=e.computed(()=>{const _=u.value.center;if(!Array.isArray(_)||_.length<2)return"Не задано";const[w,E]=_;return w===void 0||E===void 0||w===null||E===null||Number.isNaN(Number(w))||Number.isNaN(Number(E))?"Не задано":`Lng ${Number(w).toFixed(6)}, Lat ${Number(E).toFixed(6)}`}),h=e.computed(()=>{const _=u.value.zoom;if(_==null||_==="")return"Не задано";const w=Number(_);return Number.isNaN(w)?"Не задано":w.toFixed(2)}),x=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function N(){try{const w=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();u.value={...w,keywords:w.keywords||[],center:w.center??null,widgets:Array.isArray(w.widgets)?w.widgets:[],layers:(w.layers||[]).map(E=>E.id||E)},await b(u.value.layers??[])}catch(_){console.error("Failed to load map:",_),ge.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{a.value=!1}}async function $(){var w,E;const _=(E=(w=s.value)==null?void 0:w.validate)==null?void 0:E.call(w);if(_){ge.notify({type:"warning",title:"Валідація",message:Object.entries(_).map(([B,F])=>`${B}: ${F}`).join(`
45
+ `)});return}i.value=!0;try{const B=JSON.parse(JSON.stringify(u.value));if(B.zoom=Number(B.zoom),Array.isArray(B.center)&&(B.center.every(P=>P==null||P===""||P===0)||B.center.length===0)&&(B.center=null),delete B.created_at,delete B.updated_at,delete B.created_by,delete B.updated_by,delete B.history,delete B.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)})).ok)throw new Error("Save failed");ge.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(B){console.error("Save error:",B),ge.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{i.value=!1}}return e.watch(()=>{var _;return((_=u.value)==null?void 0:_.layers)??[]},_=>b(Array.isArray(_)?_.map(w=>(w==null?void 0:w.id)??w):[]),{immediate:!1}),e.onMounted(async()=>{await N()}),(_,w)=>{const E=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",aC,[e.createVNode(Ht,{variant:"form",title:u.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(E,{to:"/gis.maps",class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1}),e.createElementVNode("span",sC,[e.createVNode(e.unref(me.LucideChevronRight),{size:16,class:"shrink-0"})]),e.createElementVNode("span",iC,e.toDisplayString(u.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...w[6]||(w[6]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:w[0]||(w[0]=B=>e.unref(n).back()),class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:$,disabled:i.value,class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 disabled:opacity-50"},e.toDisplayString(i.value?"Збереження...":"Зберегти"),9,cC)]),_:1},8,["title"]),a.value?(e.openBlock(),e.createElementBlock("div",dC,[...w[7]||(w[7]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",uC,[e.createVNode(Mr,{tabs:p,activeTab:y.value,"onUpdate:activeTab":w[1]||(w[1]=B=>y.value=B)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",mC,[e.createVNode(BE,{schema:x,loading:a.value,modelValue:u.value,"onUpdate:modelValue":w[2]||(w[2]=B=>u.value=B),form:s.value,"onUpdate:form":w[3]||(w[3]=B=>s.value=B)},null,8,["loading","modelValue","form"])],512),[[e.vShow,y.value==="general"]]),e.withDirectives(e.createElementVNode("div",pC,[e.createVNode(SE,{layerIDs:m.value,"onUpdate:layerIDs":w[4]||(w[4]=B=>m.value=B)},null,8,["layerIDs"])],512),[[e.vShow,y.value==="layers"]]),e.withDirectives(e.createVNode(lC,{modelValue:u.value.widgets,"onUpdate:modelValue":w[5]||(w[5]=B=>u.value.widgets=B)},null,8,["modelValue"]),[[e.vShow,y.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",fC,[e.createVNode(LE,{"center-display":d.value,"zoom-display":h.value,"layer-names":g.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,y.value==="map"]])]))])}}}),[["__scopeId","data-v-df90fbac"]])},Symbol.toStringTag,{value:"Module"}));Ke.CartoCSS=ua,Ke.Classifiers=Qs,Ke.MapSettings=ba,Ke.MapWidget=qn,Ke.Permissions=Ci,Ke.Raster=ia,Ke.Register=na,Ke.Service=la,Ke.default=qn,Ke.install=ry,Ke.template1=Nr,Ke.template2=Vr,Ke.template3=Br,Ke.template4=$r,Ke.template5=Sr,Object.defineProperties(Ke,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));