@opengis/gis 0.2.128 → 0.2.130

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.
Files changed (25) hide show
  1. package/dist/{CardIcon-DgpYeKbG.js → CardIcon-BeZkp0PF.js} +1 -1
  2. package/dist/{EntityTablePage-DNdVavT4.js → EntityTablePage-A1oEJgB4.js} +1 -1
  3. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-DQnIBCpE.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-Wr8oJ-ni.js} +24 -22
  4. package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-Cg2y4sIa.js → HeaderActions.vue_vue_type_script_setup_true_lang-6BnXldBs.js} +345 -321
  5. package/dist/{MapSettings-CHF3VpUu.js → MapSettings-EmXkXJ90.js} +12 -12
  6. package/dist/{RastersTablePage-Ci3P3r4c.js → RastersTablePage-Cgecxbky.js} +1 -1
  7. package/dist/cartocss-C29B9mz3.js +1024 -0
  8. package/dist/{import-utils-ElncWVJV.js → import-utils-CFjQD50e.js} +1 -1
  9. package/dist/{index-UGx54M0Q.js → index-1vaLWtnh.js} +377 -386
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/index.umd.cjs +41 -41
  13. package/dist/raster-DFuH49fc.js +792 -0
  14. package/dist/{register-BfNUPbey.js → register-COO0Y_MS.js} +3 -3
  15. package/dist/{service-DsykdHry.js → service-DagZaIev.js} +911 -879
  16. package/dist/{vs-datatable-D6g7tjZo.js → vs-datatable-BaMRTZVi.js} +1 -1
  17. package/package.json +2 -2
  18. package/server/routes/gis/cartocss/get.cartocss.js +11 -2
  19. package/server/routes/gis/registers/add.registry.js +3 -4
  20. package/server/routes/gis/registers/funcs/columns.js +2 -4
  21. package/server/routes/mapnik/controllers/pretile.js +6 -7
  22. package/server/routes/mapnik/controllers/rasterInfo.js +5 -1
  23. package/server/routes/mapnik/functions/cartoBounds.js +6 -2
  24. package/dist/cartocss-BsaIlSRb.js +0 -894
  25. package/dist/raster-BDWEafwx.js +0 -663
@@ -1,44 +1,44 @@
1
- (function(je,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):(je=typeof globalThis<"u"?globalThis:je||self,e(je.MapCustom={},je.Vue,je.vueRouter,je.lucide,je.openGIScore,je.openGISfilter,je.openGISform))})(this,(function(je,e,ve,ae,fe,Nn,Fo){"use strict";const rn=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=ve.useRoute(),r=e.useSlots(),l=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(l.value),{"entity-key":n.entityKey,"entity-base-path":n.entityBasePath,"columns-config":n.columnsConfig},e.createSlots({_:2},[e.renderList(e.unref(r),(c,f)=>({name:f,fn:e.withCtx(a=>[e.renderSlot(i.$slots,f,e.normalizeProps(e.guardReactiveProps(a)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),Tl="registers",Ml="/gis.registers",Fl=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>_h)),i={table:n,create:o,edit:r,card:l},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,f)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":Tl,"entity-base-path":Ml,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),Dl="services",zl="/gis.datasets",Il=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>W1)),i={table:n,create:o,edit:r,card:l},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(f){const a=String((f==null?void 0:f.text)||f||"").toLowerCase();return a.includes("error")||a.includes("inactive")?"bg-red-100 text-red-800":a.includes("warning")||a.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(f,a)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":Dl,"entity-base-path":zl,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:h})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(h)])},e.toDisplayString((h==null?void 0:h.text)||h||"-"),3)]),_:1}))}}),jl="rasters",Pl="/gis.rasters",Rl=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>ik)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>xw)),i={table:n,create:o,edit:r,card:l},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,f)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":jl,"entity-base-path":Pl,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),Ol="cartocss",Ul="/gis.cartocss",ql=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>k2)),i={table:n,create:o,edit:r,card:l},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(f){const a=String((f==null?void 0:f.text)||f||"").toLowerCase();return a.includes("error")||a.includes("inactive")?"bg-red-100 text-red-800":a.includes("warning")||a.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(f,a)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":Ol,"entity-base-path":Ul,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:h})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(h)])},e.toDisplayString((h==null?void 0:h.text)||h||"-"),3)]),_:1}))}}),we=(t,n)=>{const o=t.__vccOpts||t;for(const[r,l]of n)o[r]=l;return o},Hl={},Wl={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 Yl(t,n){return e.openBlock(),e.createElementBlock("svg",Wl,[...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 Vn=we(Hl,[["render",Yl]]),Zl={class:"gap-2 inline-flex"},Gl=["href"],Kl="maps",Do="/gis.maps",Xl=we(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>d_)),i={table:n,create:o,edit:r,card:l},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,f)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":Kl,"entity-base-path":Do,"columns-config":s,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:a})=>[e.createElementVNode("div",Zl,[e.createElementVNode("a",{href:`${Do}/${a.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(Vn)],8,Gl)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),Ql={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%]"},Jl={class:"pt-0 mt-0"},ea={key:0,class:"flex items-center justify-center py-12"},ta={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},na={key:2,class:"text-center py-12 text-gray-500"},oa={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},ra=["onClick"],la={class:"flex items-start justify-between"},aa={class:"flex items-start gap-3"},sa={class:"flex-1 min-w-0"},ia={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},ca=["onClick"],da={class:"relative"},ua=["onClick"],pa={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"},fa={class:"flex items-center gap-2 shrink-0"},ga={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},ya={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},Zn=30,ha=we(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,l=o,i=ve.useRouter(),s=ve.useRoute(),c=e.ref(Number(s.query.page)||1),f=e.ref(!1),a=e.ref(0),h=e.ref([]),u=e.computed(()=>{const _=(c.value-1)*Zn,w=_+Zn;return h.value.slice(_,w)}),y=e.ref(!0),d=e.ref(null),p=e.ref(null);let x=null,g=null;const m=(_="",w="")=>{const $=new URLSearchParams,D=_.trim();D&&$.set("search",D);const q=(w||"").trim();q&&$.set("type",q);const Q=$.toString();return Q?`/api/user-cls?${Q}`:"/api/user-cls"},b=async(_="",w="")=>{try{y.value=!0,d.value=null;const $=m(_,w),D=await fetch($);if(!D.ok)throw new Error(`HTTP error: ${D.status}`);const q=await D.json();if(h.value=q.data,!_.trim())a.value=q.data.length;else if(a.value===0){const Q=await fetch(m("",w));if(Q.ok){const oe=await Q.json();a.value=oe.data.length}}l("update:counts",{filtered:h.value.length,total:a.value})}catch($){d.value=$ instanceof Error?$.message:"Failed to load classifiers",console.error("Error fetching classifiers:",$)}finally{y.value=!1}};e.onMounted(()=>{f.value=!0,b(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([_,w])=>{x&&clearTimeout(x),x=setTimeout(()=>{b(_,w??""),c.value=1},300)});const k=_=>{i.push({name:"classifier-detail",params:{name:_.name}})},V=()=>{b(r.search,r.type??"")},S=async _=>{try{await navigator.clipboard.writeText(_),p.value=_,g&&clearTimeout(g),g=setTimeout(()=>{p.value=null},500)}catch(w){console.error("Failed to copy text: ",w)}};n({refetch:V});const C=_=>{c.value=_,i.replace({query:{...s.query,page:String(_)}})};return(_,w)=>(e.openBlock(),e.createElementBlock("div",Ql,[e.createElementVNode("div",Jl,[y.value?(e.openBlock(),e.createElementBlock("div",ea,[e.createVNode(e.unref(ae.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",ta,e.toDisplayString(d.value),1)):h.value.length===0?(e.openBlock(),e.createElementBlock("div",na," Нічого не знайдено ")):e.createCommentVNode("",!0),h.value.length>0?(e.openBlock(),e.createElementBlock("div",oa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,($,D)=>(e.openBlock(),e.createElementBlock("div",{key:D,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:q=>k($)},[e.createElementVNode("div",la,[e.createElementVNode("div",aa,[$.type==="sql"?(e.openBlock(),e.createBlock(e.unref(ae.Code),{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(ae.Layers),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",sa,[e.createElementVNode("div",ia,[e.createElementVNode("h4",{onClick:e.withModifiers(q=>S($.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString($.name),9,ca),e.createElementVNode("div",da,[e.createElementVNode("button",{onClick:e.withModifiers(q=>S($.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(ae.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,ua),p.value===$.name?(e.openBlock(),e.createElementBlock("div",pa," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",ma,e.toDisplayString($.description||"Опис відсутній"),1)])]),e.createElementVNode("div",fa,[$.type!="sql"?(e.openBlock(),e.createElementBlock("span",ga,e.toDisplayString($.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(ae.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,ra))),128))])):e.createCommentVNode("",!0)]),f.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",ya,[e.createVNode(e.unref(fe.VsPagination),{total:h.value.length,page:c.value,"page-size":Zn,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":C,onPageChange:C},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-e728e68b"]]),ba={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},xa={class:""},ka={class:"text-2xl font-bold mb-2 flex items-center gap-2"},wa={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},_a={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},Ea={class:"w-full md:w-auto"},Ca=["value"],Na={class:"relative w-full lg:w-[16rem]"},Va={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},Ba={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},$a=["value"],Sa=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,l=s=>{const c=s.target.value;r("update:filter",c)},i=e.ref(!1);return(s,c)=>(e.openBlock(),e.createElementBlock("div",ba,[e.createElementVNode("div",xa,[e.createElementVNode("h1",ka,[c[3]||(c[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",wa,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),c[4]||(c[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",_a,[e.createElementVNode("div",Ea,[c[6]||(c[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:l},[...c[5]||(c[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,Ca)]),e.createElementVNode("div",Na,[e.createElementVNode("div",Va,[e.createElementVNode("div",Ba,[e.createVNode(e.unref(ae.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:c[0]||(c[0]=f=>s.$emit("update:modelValue",f.target.value))},null,40,$a),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:c[1]||(c[1]=f=>s.$emit("update:modelValue",""))},[e.createVNode(e.unref(ae.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:c[2]||(c[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(ae.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),c[7]||(c[7]=e.createTextVNode(" Додати ",-1))])])]))}}),va={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},La={key:0,class:"flex items-center justify-center py-12"},Aa={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},Ta={key:2,class:"text-center py-12 text-gray-500"},Ma={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},Fa={class:"bg-gray-50 border-b border-gray-200"},Da={class:"divide-y divide-gray-200"},za={class:"px-4 py-3 w-1/12"},Ia={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},ja={class:"px-4 py-3 text-sm text-gray-600 font-mono"},Pa=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,r=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],l=e.ref([]),i=e.ref(!0),s=e.ref(null),c=e.computed(()=>{var u;if(!((u=o.search)!=null&&u.trim()))return l.value;const h=o.search.toLowerCase().trim();return l.value.filter(y=>{var d,p;return((d=y.text)==null?void 0:d.toLowerCase().includes(h))||((p=y.id)==null?void 0:p.toLowerCase().includes(h))})}),f=async h=>{try{i.value=!0,s.value=null;const u=await fetch(`/api/suggest/${encodeURIComponent(h)}`);if(!u.ok)throw new Error(`HTTP error: ${u.status}`);const y=await u.json();l.value=y.data}catch(u){s.value=u instanceof Error?u.message:"Failed to load items",console.error("Error fetching suggest items:",u)}finally{i.value=!1}};return e.onMounted(()=>{o.classifierName&&f(o.classifierName)}),e.watch(()=>o.classifierName,h=>{h&&f(h)}),n({refetch:()=>{f(o.classifierName)}}),(h,u)=>(e.openBlock(),e.createElementBlock("div",va,[i.value?(e.openBlock(),e.createElementBlock("div",La,[e.createVNode(e.unref(ae.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):s.value?(e.openBlock(),e.createElementBlock("div",Aa,e.toDisplayString(s.value),1)):l.value.length===0?(e.openBlock(),e.createElementBlock("div",Ta," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",Ma,[e.createElementVNode("thead",Fa,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,y=>e.createElementVNode("th",{key:y.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[y.width,y.align]])},e.toDisplayString(y.label),3)),64))])]),e.createElementVNode("tbody",Da,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,y=>(e.openBlock(),e.createElementBlock("tr",{key:y.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",za,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:y.color})},null,4)]),e.createElementVNode("td",Ia,e.toDisplayString(y.text),1),e.createElementVNode("td",ja,e.toDisplayString(y.id),1)]))),128))])]))]))}}),Ra={class:"space-y-6 flex-1 overflow-y-auto p-0"},Oa={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Ua={class:"text-gray-900"},qa={class:"flex items-start justify-between mb-6"},Ha={class:"flex-1 mr-4"},Wa={class:"text-2xl font-bold text-gray-900"},Ya={key:0,class:"flex items-center gap-2 group mt-1"},Za={class:"text-sm text-gray-500"},Ga={key:1,class:"flex items-center gap-2 mt-1"},Ka=["disabled"],Xa=["disabled"],Qa={class:"flex items-center gap-3"},Ja={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},es={class:"relative max-w-md"},ts={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},ns={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},os=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=ve.useRouter(),o=ve.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),i=e.ref(null),s=e.ref(null),c=e.ref(""),f=e.ref(""),a=e.ref(""),h=e.ref(!1),u=e.ref(!1),y=e.ref(null),d=async()=>{var k;try{const V=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!V.ok)return;const C=(k=(await V.json()).data)==null?void 0:k[0];C&&(f.value=C.description||"")}catch(V){console.error("Error fetching classifier details:",V)}},p=()=>{a.value=f.value,h.value=!0,e.nextTick(()=>{var k;(k=y.value)==null||k.focus()})},x=()=>{h.value=!1,a.value=""},g=async()=>{try{u.value=!0;const S=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],C={name:r.value,description:a.value.trim()||null,data:S},_=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(C)});if(!_.ok)throw new Error(`HTTP error: ${_.status}`);f.value=a.value,h.value=!1}catch(k){console.error("Error saving description:",k)}finally{u.value=!1}};e.onMounted(()=>{d()}),e.watch(r,()=>{d()});const m=()=>{i.value=null,l.value=!0},b=k=>{i.value=k,l.value=!0};return(k,V)=>(e.openBlock(),e.createElementBlock("div",Ra,[e.createElementVNode("div",null,[e.createElementVNode("div",Oa,[e.createElementVNode("button",{onClick:V[0]||(V[0]=S=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),V[4]||(V[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Ua,e.toDisplayString(r.value),1)]),e.createElementVNode("div",qa,[e.createElementVNode("div",Ha,[e.createElementVNode("h1",Wa,e.toDisplayString(r.value),1),h.value?(e.openBlock(),e.createElementBlock("div",Ga,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":V[1]||(V[1]=S=>a.value=S),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(x,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,a.value]]),e.createElementVNode("button",{onClick:g,disabled:u.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(ae.Check),{width:18,height:18,"stroke-width":2})],8,Ka),e.createElementVNode("button",{onClick:x,disabled:u.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(ae.X),{width:18,height:18,"stroke-width":2})],8,Xa)])):(e.openBlock(),e.createElementBlock("div",Ya,[e.createElementVNode("p",Za,e.toDisplayString(f.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:p,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(ae.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Qa,[e.createElementVNode("button",{onClick:m,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(ae.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),V[5]||(V[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:V[2]||(V[2]=S=>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",Ja,[e.createElementVNode("div",es,[e.createElementVNode("div",ts,[e.createElementVNode("div",ns,[e.createVNode(e.unref(ae.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[3]||(V[3]=S=>c.value=S),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.createVNode(Pa,{ref_key:"detailsTableRef",ref:s,"classifier-name":r.value,search:c.value,onEdit:b},null,8,["classifier-name","search"])]))}}),rs={class:"flex-col justify-between h-full"},ls={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},as=e.defineComponent({__name:"index",setup(t){const n=ve.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),i=e.ref({filtered:0,total:0}),s=f=>{i.value=f},c=()=>{var f;(f=l.value)==null||f.refetch()};return(f,a)=>(e.openBlock(),e.createElementBlock("div",rs,[e.createElementVNode("div",ls,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Sa,{key:0,modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=h=>o.value=h),filter:r.value,"onUpdate:filter":a[1]||(a[1]=h=>r.value=h),counts:i.value,onRefresh:c},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(os,{key:2})):(e.openBlock(),e.createBlock(ha,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":s},null,8,["search","type"]))]),a[2]||(a[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),ss={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},is={class:"w-full bg-white relative"},cs={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},ds={key:0,class:"bg-white divide-y divide-gray-200"},us={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},ps=["onClick"],ms={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},fs={key:1,class:"px-6 py-3.5"},gs={class:"text-sm font-semibold text-gray-900"},ys={class:"text-xs text-gray-400 mt-0.5"},hs={key:0,class:"inline-flex items-center cursor-pointer"},bs={class:"relative"},xs=["checked","onChange"],ks=["checked","onChange"],ws={class:"px-6 py-3"},_s={class:"ml-6"},Es={class:"text-sm text-black font-medium"},Cs={class:"text-xs text-gray-400 mt-0.5"},Ns=["checked","onChange"],Vs={key:1},Bs=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,i=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),s=e.ref({}),c=e.ref({}),f=e.computed(()=>{var k;return((k=r.data)==null?void 0:k.routers)||[]});e.watch(()=>r.modelValue,k=>{const V={};(k||[]).forEach(S=>{V[S.id]=new Set(S.actions||[])}),c.value=V},{immediate:!0});function a(){const k=Object.entries(c.value).map(([V,S])=>({id:V,actions:Array.from(S)}));l("update:modelValue",k)}function h(k){return k?k.id||k.path||k.table||k.ua||JSON.stringify(k):""}function u(k){return k?k.id||k.ua||k.name:""}function y(k){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[k]||k}function d(k,V){var C;const S=h(k);return((C=c.value[S])==null?void 0:C.has(V))||!1}function p(k){const V=u(k);return s.value[V]===!0}function x(k){const V=u(k);s.value[V]=!p(k)}function g(k,V){var S;return(S=k.menu)!=null&&S.length?k.menu.every(C=>d(C,V)):d(k,V)}function m(k,V,S){var C;if((C=k.menu)!=null&&C.length){const _={...c.value};k.menu.forEach(w=>{const $=h(w),D=new Set(_[$]||[]);S?D.add(V):D.delete(V),_[$]=D}),c.value=_,a()}}function b(k,V,S){const C=h(k),_=new Set(c.value[C]||[]);S?_.add(V):_.delete(V),c.value={...c.value,[C]:_},a()}return n({getSelected:()=>r.modelValue}),(k,V)=>{var S;return e.openBlock(),e.createElementBlock("div",ss,[e.createElementVNode("table",is,[e.createElementVNode("thead",cs,[e.createElementVNode("tr",null,[V[0]||(V[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,C=>(e.openBlock(),e.createElementBlock("th",{key:C,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(y(C)),1))),128))])]),(S=f.value)!=null&&S.length?(e.openBlock(),e.createElementBlock("tbody",ds,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,C=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h(C)},[e.createElementVNode("tr",us,[C!=null&&C.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:_=>x(C)},[e.createElementVNode("button",ms,[e.createVNode(e.unref(ae.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":p(C)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(C.ua),1)])],8,ps)):(e.openBlock(),e.createElementBlock("td",fs,[e.createElementVNode("div",gs,e.toDisplayString(C.ua),1),e.createElementVNode("div",ys,e.toDisplayString(C.path||C.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,_=>(e.openBlock(),e.createElementBlock("td",{key:_,class:"px-4 py-3.5 text-center"},[C!=null&&C.menu?(e.openBlock(),e.createElementBlock("label",hs,[e.createElementVNode("div",bs,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:g(C,_),onChange:w=>m(C,_,w.target.checked)},null,40,xs),V[1]||(V[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:d(C,_),onChange:w=>b(C,_,w.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,ks))]))),128))]),C!=null&&C.menu&&p(C)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(C.menu,_=>(e.openBlock(),e.createElementBlock("tr",{key:h(_),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",ws,[e.createElementVNode("div",_s,[e.createElementVNode("div",Es,e.toDisplayString(_.ua),1),e.createElementVNode("div",Cs,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-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:d(_,w),onChange:$=>b(_,w,$.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,Ns)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",Vs,[...V[2]||(V[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),$s={class:"flex flex-col gap-4 mt-2 mx-2"},Ss={class:"flex items-center gap-3"},vs={class:"flex-1 relative"},Ls=e.defineComponent({__name:"VsPermissions",setup(t){const n=ve.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),i=e.ref([]),s=e.ref(["edit"]),c=e.computed(()=>a(l.value)),f=e.computed(()=>{const y=o.value.toLowerCase().trim();return y?c.value.map(d=>{const p=String(d.ua||"").toLowerCase().includes(y),x=(d.menu||[]).filter(g=>String(g.ua||"").toLowerCase().includes(y));return p?{...d,menu:d.menu}:x.length?{...d,menu:x}:null}).filter(Boolean):c.value}),a=y=>{const d=y.categories||[],p=y.layers||[],x=d.map(m=>{const b=p.filter(k=>k.category_id===m.category_id).map(k=>({id:String(k.layer_id),ua:k.name,path:String(k.layer_id)}));return b.length?{ua:m.name,menu:b,id:String(m.category_id)}:null}).filter(Boolean),g=p.filter(m=>!m.category_id).map(m=>({ua:m.name,id:String(m.layer_id),path:String(m.layer_id)}));return g.length&&x.push({ua:"Без категорії",menu:g,id:"noCategory"}),x},h=async()=>{const[y,d]=await Promise.all([fetch("/api/catalog").then(p=>p.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(p=>p.json())]);l.value=y,i.value=((d==null?void 0:d.layer_list)||[]).filter(p=>p.service_id).map(p=>({id:String(p.service_id),actions:p.actions||[]}))},u=async()=>{var p,x;const d=(((x=(p=r.value)==null?void 0:p.getSelected)==null?void 0:x.call(p))||i.value).filter(g=>{var m;return(m=g.actions)==null?void 0:m.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(d)}).then(g=>g.json()).then(g=>{fe.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(g=>{fe.notify({title:"Помилка",message:g.message,type:"error"})})};return e.onMounted(h),(y,d)=>(e.openBlock(),e.createElementBlock("div",$s,[e.createElementVNode("div",Ss,[e.createElementVNode("div",vs,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=p=>o.value=p),type:"text",placeholder:"Пошук...",class:"w-full pl-3 pr-4 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border bg-background hover:text-accent-foreground h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50",onClick:d[1]||(d[1]=p=>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:u}," Зберегти ")]),e.createVNode(Bs,{ref_key:"accessRef",ref:r,data:{routers:f.value},modelValue:i.value,"onUpdate:modelValue":d[2]||(d[2]=p=>i.value=p),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 Tt(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 Tt(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=Rt(o),i=Rt(r);if(l!=null&&i!=null)return[l,i]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Rt(n),l=Rt(o);return r!=null&&l!=null?[r,l]:null}return null}const zo=Symbol("MapContext");function As(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],i=()=>{r=!0,l.length&&l.forEach(d=>d())},s=()=>{const d=t.container;return typeof d=="string"?document.getElementById(d):(d==null?void 0:d.value)!==void 0?d.value:d},c=()=>r?Promise.resolve():new Promise(d=>l.push(d)),f=(d,p)=>{if(d==null)return p;const x=Number(typeof d=="string"?d.trim():d);return Number.isFinite(x)?x:p},a=d=>{if(!n.value||!d)return;const p=Tt(d.center);p&&n.value.setCenter(p);const x=n.value.getZoom(),g=f(d.zoom,x);if(g!==x&&n.value.setZoom(g),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const m=n.value.getMaxZoom(),b=f(d.maxZoom,m);b!==m&&n.value.setMaxZoom(b)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const m=n.value.getMinZoom(),b=f(d.minZoom,m);b!==m&&n.value.setMinZoom(b)}d.bounds&&n.value.fitBounds(d.bounds,{animate:!1})},h=async()=>{var V,S,C,_,w,$,D;if(typeof window>"u"||n.value)return;const d=s();if(!d)throw new Error("Map container not found");const p=e.unref(t.settings)||null,x=Tt((V=p==null?void 0:p.map)==null?void 0:V.center)||[30,50],g=f((S=p==null?void 0:p.map)==null?void 0:S.zoom,7),m=f((C=p==null?void 0:p.map)==null?void 0:C.maxZoom,20),k={...{attributionControl:!1,center:x,zoom:g,maxZoom:m,minZoom:4},...t.mapOptions||{},container:d};k.maxZoom==null&&(k.maxZoom=m),n.value=new maplibregl.Map(k),(_=t.controls)!=null&&_.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var oe;const q=n.value.getContainer(),Q=(oe=q==null?void 0:q.querySelector)==null?void 0:oe.call(q,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");Q&&typeof n.value.easeTo=="function"&&Q.addEventListener("click",Z=>{Z.preventDefault(),Z.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(w=t.controls)!=null&&w.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),($=t.controls)!=null&&$.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(D=t.controls)!=null&&D.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var q;a((q=e.unref(t.settings))==null?void 0:q.map),o.value=!0,i()})};e.watch(()=>{var d;return(d=e.unref(t.settings))==null?void 0:d.map},d=>{a(d)},{deep:!0});const u=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(h),e.onUnmounted(u);const y={map:n,ready:c,flyTo:d=>{var p;return(p=n.value)==null?void 0:p.flyTo(d)},fitBounds:(d,p)=>{var x;return(x=n.value)==null?void 0:x.fitBounds(d,p)},setCenter:d=>{var p;return(p=n.value)==null?void 0:p.setCenter(d)},setZoom:d=>{var p;return(p=n.value)==null?void 0:p.setZoom(d)},addControl:(d,p)=>{var x;return(x=n.value)==null?void 0:x.addControl(d,p)},removeControl:d=>{var p;return(p=n.value)==null?void 0:p.removeControl(d)},on:(d,p,x)=>{var g,m;return typeof p=="string"?((g=n.value)==null||g.on(d,p,x),()=>{var b;return(b=n.value)==null?void 0:b.off(d,p,x)}):((m=n.value)==null||m.on(d,p),()=>{var b;return(b=n.value)==null?void 0:b.off(d,p)})},off:(d,p,x)=>{var g,m;typeof p=="string"?(g=n.value)==null||g.off(d,p,x):(m=n.value)==null||m.off(d,p)},project:d=>{var p;return(p=n.value)==null?void 0:p.project(d)},unproject:d=>{var p;return(p=n.value)==null?void 0:p.unproject(d)}};return e.provide(zo,y),y}function We(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(zo);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Io=Symbol.for("gis.settingsRef");function Gn(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[Io];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[Io]=o),o}const Bn=we(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=Gn(),i=As({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!0,scale:!0},settings:l});async function s(){var h;await e.nextTick();const a=(h=i.map)==null?void 0:h.value;a!=null&&a.resize&&a.resize()}function c(){typeof ResizeObserver>"u"||r.value||!o.value||(r.value=new ResizeObserver(()=>{s()}),r.value.observe(o.value))}function f(){var a;(a=r.value)==null||a.disconnect(),r.value=null}return e.onMounted(()=>{s(),c(),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",s),f()}),n({ctx:i}),(a,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(a.$slots,"default",{},void 0,!0)],512))}}),[["__scopeId","data-v-d6e61166"]]),Ts=["Noto Sans Regular"],Ms=12,Fs="#0f172a",Ds="#fff",zs=14;function Ge(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 Is(t){return t?Array.isArray(t)?t:[t]:Ts}function Kn(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 js(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 Ps(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 Rs(t,n={}){if(!t)return[];const o=Ge(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=js(o);if(!r)return[];const l=r,i=(n.geometry||t.type||"point").toString().toLowerCase(),s=Ge(t,["text-font","textFont"]),c=Kn(Ge(t,["text-size","textSize"]),Ms),f=Ge(t,["text-allow-overlap","textAllowOverlap"]),a=Ge(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),h=Ge(t,["text-maxzoom","textMaxZoom","maxzoom"]),u=Ge(t,["text-color","textColor"])||Fs,y=Ge(t,["text-halo-color","textHaloColor"])||Ds,d=Ge(t,["text-halo-width","textHaloWidth"]),p=Ge(t,["text-halo-blur","textHaloBlur"]),x=Ge(t,["text-offset","textOffset"]),g=Ge(t,["text-anchor","textAnchor"]),m=Ge(t,["text-justify","textJustify"]),b=Ge(t,["text-letter-spacing","textLetterSpacing"]),k=Ge(t,["text-transform","textTransform"]),V=Ge(t,["symbol-placement","symbolPlacement"]),S=Ge(t,["symbol-spacing","symbolSpacing"]),C=Ge(t,["text-rotation-alignment","textRotationAlignment"]),_=Ge(t,["text-pitch-alignment","textPitchAlignment"]),w=Ge(t,["text-opacity","textOpacity"]),$={"text-field":l,"text-font":Is(s),"text-size":c,"text-allow-overlap":f??!1};x&&($["text-offset"]=x),i!=="line"&&($["text-anchor"]=g??"center"),m&&($["text-justify"]=m),b!==void 0&&($["text-letter-spacing"]=b),k&&($["text-transform"]=k),S!==void 0&&($["symbol-spacing"]=S),i==="line"?($["symbol-placement"]=V||"line",$["text-rotation-alignment"]=C||"map",$["text-pitch-alignment"]=_||"map"):(C&&($["text-rotation-alignment"]=C),_&&($["text-pitch-alignment"]=_),V&&($["symbol-placement"]=V)),g&&i==="line"&&($["text-anchor"]=g);const D={"text-color":u,"text-opacity":w??1};D["text-halo-color"]=y,d!==void 0&&(D["text-halo-width"]=d),p!==void 0&&(D["text-halo-blur"]=p);const q={type:"symbol",layout:$,paint:D},Q=Kn(a,zs);if(q.minzoom=Q,h!==void 0){const Z=Kn(h,void 0);Z!==void 0&&(q.maxzoom=Z)}const oe=Ps(n.filter,n.excludeClusters);return oe&&(q.filter=oe),[q]}const Ot="#9ca3af";function Xn(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const Qn=new Map,Jn={};function eo(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,Ot]}return null}function Os(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,[l,i],s)=>r.concat([l,n[s]]),[]),t.icon]}function Ut(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function Us(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],i=["has","point_count"],s=["!",i],a={type:"circle",maxzoom:r,filter:i,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},h={type:"symbol",maxzoom:r,filter:i,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},u={...n,filter:["all",s,n.filter||!0]};return[a,h,u]}function jo(t,n){const o=eo(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}},l=Us(t,r);return l||r}function qs(t){const n=eo(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 Hs(t){return{type:"line",paint:{"line-color":eo(t)||t.color||Ot,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Ws(t){const n=Os(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 Po(t,n={}){if(!t)return[];if(!Ys(t))return[];const o=[];t.icon&&Ut(o,Ws(t)),t.pointZoom&&Ut(o,jo(t,t.pointZoom)),t.type==="polygon"?Ut(o,qs(t)):t.type==="line"?Ut(o,Hs(t)):Ut(o,jo(t));const l=n.sourceType!=="raster"?Rs(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Ut(o,l),o.filter(Boolean)}function Ys(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 Ro(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let l=Xn(t);if(l&&o&&(l.filter=o),l)return Po(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const i={type:"point",color:Ot};return o&&(i.filter=o),Po(i,{sourceType:n})}return[]}function Zs(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function Oo(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(i=>{r.push(`${l}+${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 Ie(t,n,o){var Q,oe;if(!t)return Jn;if(!n)return Jn[t];const{map:r,ready:l=()=>Promise.resolve()}=We(o),i=t||((Q=n.layer)==null?void 0:Q.id),s=n.sourceId??t,c={...n};c.point&&(c.source=Zs(c.point)),!c.layer&&((oe=c.source)==null?void 0:oe.type)==="raster"&&(c.layer={id:s,type:"raster",source:s}),c.layer&&!c.layer.source&&Object.assign(c.layer,{source:s});let f=!1,a=!1;const h=()=>{var Z,ee,H,z,v,M,N,E,A,I;if(!(a||!r.value)){if(c.source&&!r.value.getSource(s)&&r.value.addSource(s,c.source),!r.value.getLayer(i)){const K=c.beforeId===0?(ee=(Z=r.value.getStyle().layers)==null?void 0:Z[0])==null?void 0:ee.id:c.beforeId;(z=(H=c.layer)==null?void 0:H.style)!=null&&z.icon&&Oo(r.value,c.layer.style.icon,c.layer.style.colors);const re=((v=c.source)==null?void 0:v.type)||((M=c.layer)==null?void 0:M.type),J=c.layer&&(c.layer.type||c.layer.ref)?c.layer:null,ne=(N=c.layer)==null?void 0:N.style,me=((E=c.layer)==null?void 0:E["source-layer"])||((A=c.source)==null?void 0:A["source-layer"])||c.sourceLayer||s,pe=c.style||ne,de=Ro(pe,{sourceType:re,filter:(I=c.layer)==null?void 0:I.filter,allowFallback:!J});if(!de.length){if(J){const Ve={...J,id:J.id||i,source:J.source||s};re==="vector"&&me&&(Ve["source-layer"]=Ve["source-layer"]||me),r.value.addLayer(Ve,K)}return}de.forEach((Ve,Y)=>{const T={...Ve,id:`${i}${Y||""}`,source:s};re==="vector"&&me&&(T["source-layer"]=me),r.value.addLayer(T,K)})}f=!0}};l().then(h);const u=(Z,ee)=>r.value?(r.value.on(Z,i,ee),()=>{var H;return(H=r.value)==null?void 0:H.off(Z,i,ee)}):()=>{},y=Z=>{const ee=r.value;if(!ee)return;const H=ee.getStyle(),z=H==null?void 0:H.layers;z!=null&&z.length&&z.filter(v=>v.source===i).forEach(v=>{ee.setLayoutProperty(v.id,"visibility",Z?"visible":"none")})},d=(Z=!0)=>{var H,z,v;if(!r.value)return;(((v=(z=(H=r.value).getStyle)==null?void 0:z.call(H))==null?void 0:v.layers)??[]).filter(M=>M.source===i).forEach(M=>{r.value.removeLayer(M.id)}),a=!0,c.source&&Z&&r.value.getSource(s)&&r.value.removeSource(s)},p=async Z=>{var v,M,N,E,A;if(!r.value)return;Z!=null&&Z.icon&&Oo(r.value,Z.icon,Z.colors);const ee=((v=c.source)==null?void 0:v.type)||((M=c.layer)==null?void 0:M.type),H=((N=c.layer)==null?void 0:N["source-layer"])||((E=c.source)==null?void 0:E["source-layer"])||c.sourceLayer||s,z=Ro(Z,{sourceType:ee,filter:(A=c.layer)==null?void 0:A.filter,allowFallback:!0});d(!1),z.forEach((I,K)=>{var J;const re={...I,id:`${i}${K}`,source:((J=c.layer)==null?void 0:J.source)||s};ee==="vector"&&H&&(re["source-layer"]=re["source-layer"]||H),r.value.addLayer(re)})},x=Z=>{r.value&&Object.entries(Z).forEach(([ee,H])=>{r.value.setPaintProperty(i,ee,H)})},g=(Z,ee,H)=>{const z=r.value;if(z)switch(ee){case"raster":z.setPaintProperty(Z,"raster-opacity",H);break;case"fill":z.setPaintProperty(Z,"fill-opacity",H);break;case"line":z.setPaintProperty(Z,"line-opacity",H);break;case"circle":z.setPaintProperty(Z,"circle-opacity",H);break;case"symbol":z.setPaintProperty(Z,"icon-opacity",H),z.setPaintProperty(Z,"text-opacity",H);break}},$={ids:{layerId:i,sourceId:s},isMounted:()=>{var Z;return f&&!!((Z=r.value)!=null&&Z.getLayer(i))},setVisible:y,updatePaint:x,updateLayout:Z=>{r.value&&Object.entries(Z).forEach(([ee,H])=>{r.value.setLayoutProperty(i,ee,H)})},updateFilter:Z=>{r.value&&r.value.setFilter(i,Z)},setOpacity:Z=>{var z;if(!r.value)return;const H=(((z=r.value.getStyle())==null?void 0:z.layers)||[]).filter(v=>v.source===s);if(!H.length){const v=r.value.getLayer(i);v&&g(i,v.type,Z);return}H.forEach(v=>g(v.id,v.type,Z))},setData:Z=>{if(!r.value)return;const ee=r.value.getSource(s);ee&&"setData"in ee&&ee.setData(Z)},setTiles:Z=>{if(!r.value)return;const ee=r.value.getSource(s);ee&&"setTiles"in ee&&ee.setTiles(Z)},setStyle:p,setFilter:Z=>{var H,z;if(!r.value)return;const ee=r.value.getSource(s);if(ee&&"setTiles"in ee&&((z=(H=c.source)==null?void 0:H.tiles)!=null&&z[0])){const v=c.source.tiles[0];ee.setTiles([`${v}${v.includes("?")?"&":"?"}filter=${Z}`])}},setFeatureState:(Z,ee)=>{r.value&&r.value.setFeatureState({source:s,...Z},ee)},removeFeatureState:(Z,ee)=>{r.value&&r.value.removeFeatureState({source:s,...Z},ee?{key:ee}:void 0)},remove:d,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:u};Qn.set(i,$);const D=()=>{Qn.get(i)===$&&Qn.delete(i)},q=$.remove;return $.remove=()=>{D(),q()},e.getCurrentInstance()&&e.onBeforeUnmount($.remove),Jn[t]=$,$}const Gs={class:"flex flex-row gap-x-3 z-10 relative widget"},Ks=["onClick"],Xs=["src","alt"],qt=e.defineComponent({__name:"BaseMaps",setup(t){var m,b,k;const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o={z:13,x:4790,y:2762};function r(V){if(V)return V.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function l(V,S){let C=V||`layers-${Object.keys(S).length}`,_=1;for(;S[C];)C=`${V}-${_}`,_+=1;return C}const i=e.getCurrentInstance(),s=(m=i==null?void 0:i.appContext.config.globalProperties)==null?void 0:m.$settings,c=s==null?void 0:s.map,f=ve.useRoute(),a=ve.useRouter();function h(){const V=f==null?void 0:f.query;return!V||typeof V!="object"?null:typeof V.basemap=="string"?V.basemap:null}const u=e.computed(()=>h()),y=e.computed(()=>{const V=Array.isArray(c==null?void 0:c.basemaps)?c==null?void 0:c.basemaps:[];if(!V.length)return{};const S={};return V.forEach((C,_)=>{const w=C.name??C.title??`basemap-${_}`,$=(C.id??w??`basemap-${_}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),D=l($||`basemap-${_}`,S),q=C.preview||(C.url?r(C.url):void 0);S[D]={url:C.url,preview:q,title:w}}),S}),d=e.computed(()=>{const V=y.value;return Object.keys(V).length?V:n}),p=e.ref(u.value??Object.keys(d.value)[0]??"gki"),x=Ie("base",{source:{type:"raster",tiles:(b=d.value[p.value])!=null&&b.url?[(k=d.value[p.value])==null?void 0:k.url]:[]},beforeId:0});function g(V){if(!d.value[V])return;p.value=V;const S=d.value[V];if(!(S!=null&&S.url)){x.setVisible(!1);return}x.setVisible(!0),x.setTiles([S.url]),typeof window<"u"&&h()!==V&&a.replace({query:{...f==null?void 0:f.query,basemap:V}}).catch(()=>{})}return e.watch(()=>d.value,V=>{const S=u.value&&V[u.value]?u.value:p.value;V[S]?p.value=S:p.value=Object.keys(V)[0]??S;const C=V[p.value];C!=null&&C.url?(x.setVisible(!0),x.setTiles([C.url])):x.setVisible(!1)},{immediate:!0}),e.watch(()=>[u.value,d.value],([V])=>{if(typeof V!="string"||!d.value[V]||p.value===V)return;p.value=V;const S=d.value[V];if(!(S!=null&&S.url)){x.setVisible(!1);return}x.setVisible(!0),x.setTiles([S.url])}),(V,S)=>(e.openBlock(),e.createElementBlock("div",Gs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(C,_)=>(e.openBlock(),e.createElementBlock("div",{key:_,onClick:w=>g(_)},[_!=="none"&&C.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",p.value===_?"border-blue-500":"border-gray-200"])},[C.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:C.preview,alt:C.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Xs)):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",p.value===_?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(ae.EyeOff),{class:"w-4 h-4 text-gray-500"})],2))],8,Ks))),128))]))}}),Qs={class:"mapLayer-info__inner"},Js={class:"mapLayer-info__item-label"},to=we(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),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 f(x){if(r.open){y();return}const g=x.currentTarget,m=g==null?void 0:g.closest(".mapLayer-info");if(!m){y();return}l.value=m,r.open=!0,e.nextTick(()=>{a(),d(),requestAnimationFrame(()=>{a()})})}function a(){if(!r.open||!l.value||!i.value)return;const x=l.value.getBoundingClientRect(),g=12,m=window.scrollX+g,b=window.scrollX+window.innerWidth-g,k=window.scrollY+g,V=window.scrollY+window.innerHeight-g,S=i.value.offsetWidth||Math.min(300,window.innerWidth-24),C=i.value.offsetHeight||0;let _=x.left+window.scrollX+(x.width-S)/2;_<m&&(_=m),_+S>b&&(_=Math.max(m,b-S)),r.left=_;let w=x.bottom+window.scrollY+g;w+C>V&&(w=x.top+window.scrollY-C-g,w<k&&(w=Math.max(k,V-C))),w<k&&(w=k),w+C>V&&(w=Math.max(k,V-C)),r.top=w,r.transform="none"}function h(x){var m,b;if(!r.open)return;const g=x.target;(m=l.value)!=null&&m.contains(g)||(b=i.value)!=null&&b.contains(g)||y()}function u(x){x.key==="Escape"&&y()}function y(){p(),r.open=!1,l.value=null,i.value=null}function d(){p(),i.value&&(s=new ResizeObserver(()=>{a()}),s.observe(i.value))}function p(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",h,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",a,!0),window.addEventListener("resize",a)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",h,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",a,!0),window.removeEventListener("resize",a),p()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>a())},{deep:!0}),n({close:y}),(x,g)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(f,["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",Qs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,m=>(e.openBlock(),e.createElementBlock("div",{key:m.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Js,e.toDisplayString(m.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":m.breakLine}])},e.toDisplayString(m.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),ei={key:0,class:"map-info__title"},ti={class:"map-info__actions"},ni={key:0,class:"map-info__menu"},oi=["href"],ri=["innerHTML"],Uo=we(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),i=e.ref(null),s=e.ref({top:0,left:0});ve.useRouter();const c=e.ref(!0),f=e.ref(!1),a=e.computed(()=>Array.isArray(n.links)?n.links.filter(V=>(V==null?void 0:V.name)&&(V==null?void 0:V.slug)):[]),h=e.computed(()=>({top:`${s.value.top}px`,left:`${s.value.left}px`})),u=e.computed(()=>{const V=[];return n.mapName&&V.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&V.push({label:"Опис",value:n.mapDescription,breakLine:!0}),V});function y(V){return V==null?!1:V.replace(/<[^>]*>/g,"").trim().length>0}const d=e.computed(()=>y(n.content)),p=e.computed(()=>d.value);function x(V){V.stopPropagation(),r.value=!r.value}function g(){const V=l.value;if(!V||!i.value)return;const S=V.getBoundingClientRect(),C=12,_=8,w=window.scrollX+C,$=window.scrollX+window.innerWidth-C,D=window.scrollY+C,q=window.scrollY+window.innerHeight-C,Q=i.value.offsetWidth||160,oe=i.value.offsetHeight||0;let Z=S.bottom+window.scrollY+_,ee=S.left+window.scrollX;ee+Q>$&&(ee=S.right+window.scrollX-Q,ee<w&&(ee=w)),ee<w&&(ee=w),Z+oe>q&&(Z=S.top+window.scrollY-oe-_,Z<D&&(Z=Math.max(D,q-oe))),Z<D&&(Z=D),Z+oe>q&&(Z=Math.max(D,q-oe)),s.value={top:Z,left:ee}}function m(V){if(!r.value)return;const S=o.value;if(!S){r.value=!1;return}S.contains(V.target)||(r.value=!1)}e.watch(r,V=>{V?e.nextTick(()=>{g(),requestAnimationFrame(()=>{g()}),window.addEventListener("scroll",g,!0),window.addEventListener("resize",g)}):(window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g))});function b(){c.value=!c.value}function k(){f.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",m,!0),k(),p.value?f.value&&(c.value=!1):c.value=!1,window.addEventListener("resize",k)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",m,!0),window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g),window.removeEventListener("resize",k)}),(V,S)=>(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||a.value.length||u.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([d.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",ei,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",ti,[a.value.length?(e.openBlock(),e.createElementBlock("div",ni,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:x,"aria-label":"Показати посилання"},[...S[1]||(S[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(h.value),onClick:S[0]||(S[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,C=>(e.openBlock(),e.createElementBlock("a",{key:C.slug||C.name,href:`/maps/${C.slug}`,class:"map-info__popover-link"},e.toDisplayString(C.name),9,oi))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),u.value.length?(e.openBlock(),e.createBlock(to,{key:1,items:u.value},null,8,["items"])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:b,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":c.value})},[...S[2]||(S[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!c.value}]),innerHTML:t.content},null,10,ri)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),pt=e.ref([]);function li(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const i=n[l];return i!=null?String(i):""}):t}function $n(t){return t==null?"":String(t).trim()}function no(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function ai(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function si(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let r=0;r<n.length;r+=1){const l=n[r];if(!(!l||typeof l.id!="string")&&l.type&&l.type!=="background"&&l.type!=="raster")return l.id}}function oo(t){function n(s,c={},f,a){var k,V;const h=$n(s==null?void 0:s.id),u=((k=s==null?void 0:s.title)==null?void 0:k.trim())||h,y=((V=s==null?void 0:s.url)==null?void 0:V.trim())||"";if(!h||!y)return;const d=li(y,c);if(!d)return;const p=a??t;if(!p)return;const x=ai(p);if(!x)return;const g=pt.value.findIndex(S=>S.id===h);g!==-1&&(no(pt.value[g]),pt.value.splice(g,1));let m=null;const b=s.beforeId??si(x);try{m=Ie(h,{source:{type:"raster",tiles:[d],tileSize:s.tileSize??256,minzoom:s.minzoom??0,maxzoom:s.maxzoom??19},layer:{id:h,type:"raster",source:h,paint:{"raster-opacity":s.opacity??.85}},beforeId:b},p)}catch(S){const C=(S==null?void 0:S.message)??"";if(!(typeof C=="string"&&C.includes("Map provider")))throw S;return}pt.value=[...pt.value,{id:h,title:u,originalUrl:y,resolvedUrl:d,owner:f??null,handle:m??null}]}function o(s,c){const f=$n(s);if(!f)return;const a=pt.value.findIndex(u=>u.id===f&&(!c||u.owner===c));if(a===-1)return;const[h]=pt.value.splice(a,1);no(h)}function r(s,c,f){var u;const a=$n(s);if(!a)return;const h=pt.value.find(y=>y.id===a&&(!f||y.owner===f));(u=h==null?void 0:h.handle)!=null&&u.setOpacity&&h.handle.setOpacity(c)}function l(s){if(!pt.value.length)return;const c=[];pt.value.forEach(f=>{(s?f.owner===s:!0)?no(f):c.push(f)}),pt.value=c}function i(s,c){const f=$n(s);return f?pt.value.some(a=>a.id===f&&(!c||a.owner===c)):!1}return{temporaryLayers:pt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:i}}const ln=e.ref(null);function ii(){ln.value=null}function ci(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(ln,s=>{s!==o()&&n.value&&(n.value=!1)});function r(){ln.value=o(),n.value=!0}function l(){ln.value===o()&&(ln.value=null),n.value=!1}function i(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:i}}const di={class:"map-filter"},ui={class:"map-filter__header"},pi={class:"map-filter__title"},mi={"aria-hidden":"true"},ro="#map-filter-popover-host",Sn=we(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var N;return((N=o.layer)==null?void 0:N.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:i,close:s,toggle:c}=ci(l),f=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),a=e.ref(null),h=e.ref(null);let u=null;const y=e.ref({}),d=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),p=e.computed(()=>i.value),x=e.computed(()=>{var N;return Array.isArray((N=o.layer)==null?void 0:N.filters)?o.layer.filters:[]}),g=e.computed(()=>x.value.length>0),m=e.computed(()=>{var N;return((N=o.layer)==null?void 0:N.name)??""}),b=e.computed(()=>x.value),k=e.ref(null),V=e.computed(()=>x.value.length),S=e.computed(()=>V.value<=2),C=e.computed(()=>S.value?"body":typeof window>"u"||k.value?ro:"body"),_=e.computed(()=>{if(!p.value||!S.value)return{};const N=typeof window<"u"?window.innerWidth:280,A=Math.max(280,N-16*2);return{position:"absolute",top:`${f.top}px`,left:`${f.left}px`,transform:f.transform,zIndex:1e3,width:"280px",maxWidth:`${A}px`}});function w(){s()}function $(N,E,A=8){const I=window.scrollY+A,K=window.scrollY+window.innerHeight-A;let re=N;return re+E>K&&(re=K-E),re<I&&(re=I),re}function D(){var ne,me,pe;if(!a.value||!S.value)return;const N=a.value.getBoundingClientRect(),E=window.scrollX+8,A=window.scrollX+window.innerWidth-8,I=((ne=h.value)==null?void 0:ne.offsetWidth)||280,K=((me=h.value)==null?void 0:me.offsetHeight)||0;let re=0,J=0;if((pe=o.catalogAnchor)!=null&&pe.value){const de=o.catalogAnchor.value.getBoundingClientRect(),Ve=de.top+window.scrollY;re=$(Ve,K,8);const Y=de.right+window.scrollX+12,T=A-I,j=E;J=Math.min(Math.max(Y,j),Math.max(j,T))}else{const de=N.bottom+window.scrollY+8;re=$(de,K,8);let Ve=N.left+window.scrollX;Ve<E&&(Ve=E),Ve+I>A&&(Ve=Math.max(E,A-I)),J=Ve}f.left=J,f.top=re,f.transform="none"}function q(){S.value||M(),c(),i.value&&S.value&&e.nextTick(()=>{D(),z(),requestAnimationFrame(()=>D())})}function Q(){o.disabled||q()}e.watch(p,N=>{N&&S.value?e.nextTick(()=>{D(),z(),requestAnimationFrame(()=>D())}):(v(),S.value||M())}),e.watch(b,()=>{!p.value||!S.value||e.nextTick(()=>D())},{deep:!0}),e.watch(S,N=>{p.value&&(N?e.nextTick(()=>{D(),z()}):(v(),M()))}),e.watch(()=>o.disabled,N=>{N&&(s(),y.value={})});function oe(){!p.value||!S.value||D()}function Z(N){const E=r.value;if(!E)return;const A=Ie(E);if(!(A!=null&&A.setFilter))return;y.value=N;const I=Object.entries(N).map(([K,re])=>`${K}=${re}`).join("|");A.setFilter(I)}function ee(N){if(!o.disabled)return;const E=N.currentTarget;if(!E)return;const A=E.getBoundingClientRect();d.left=A.left+A.width/2+window.scrollX,d.top=A.bottom+8+window.scrollY,d.visible=!0}function H(){d.visible=!1}e.onMounted(()=>{M(),window.addEventListener("resize",oe),window.addEventListener("scroll",oe,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",oe),window.removeEventListener("scroll",oe,!0),v()});function z(){v(),!(!h.value||!S.value)&&(u=new ResizeObserver(()=>{!p.value||!S.value||D()}),u.observe(h.value))}function v(){u&&(u.disconnect(),u=null)}function M(){typeof window>"u"||typeof document>"u"||(k.value=document.querySelector(ro))}return(N,E)=>g.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:a},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(Q,["prevent","stop"]),onMouseenter:ee,onMouseleave:H,onFocus:ee,onBlur:H},[...E[2]||(E[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:C.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":!S.value}]),style:e.normalizeStyle(_.value),ref_key:"panel",ref:h,onClick:E[1]||(E[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",di,[e.createElementVNode("div",ui,[e.createElementVNode("h3",pi,e.toDisplayString(m.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:w},[e.createElementVNode("span",mi,[e.createVNode(e.unref(ae.X),{class:"h-4 w-4"})]),E[3]||(E[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:y.value,limit:10,onChange:E[0]||(E[0]=A=>Z(A.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-cc1f0579"]]),fi={class:"opacity-popover__content"},gi={class:"opacity-popover__value"},qo=we(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),i=e.ref(null),s=e.reactive({top:0,left:0});function c(){var S;const u=(S=i.value)==null?void 0:S.querySelector("button");if(!u||!l.value)return;const y=u.getBoundingClientRect(),d=260,p=l.value.offsetHeight||60,x=8,g=12,m=window.innerWidth,b=window.innerHeight;let k=y.bottom+x+window.scrollY,V=y.left+window.scrollX;V+d>m-g&&(V=m-d-g+window.scrollX),V<g+window.scrollX&&(V=g+window.scrollX),k+p>b+window.scrollY-g&&(k=y.top-p-x+window.scrollY,k<g+window.scrollY&&(k=b-p-g+window.scrollY)),s.top=k,s.left=V}function f(){o.value=!o.value,o.value&&e.nextTick(c)}function a(){var p;const u=Ie(n.layerId),y=(r.value??100)/100;if(u!=null&&u.setOpacity){u.setOpacity(y);return}const d=(p=u==null?void 0:u.getLayer)==null?void 0:p.call(u);if(d)switch(d.type){case"raster":u.updatePaint({"raster-opacity":y});break;case"fill":u.updatePaint({"fill-opacity":y});break;case"line":u.updatePaint({"line-opacity":y});break;case"circle":u.updatePaint({"circle-opacity":y});break;case"symbol":u.updatePaint({"icon-opacity":y});break}}function h(u){var d,p;if(!o.value)return;const y=u.target;(d=l.value)!=null&&d.contains(y)||(p=i.value)!=null&&p.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",h),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",h),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c)}),(u,y)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:i},[e.renderSlot(u.$slots,"trigger",{toggle:f,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(f,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:s.top+"px",left:s.left+"px"})},[e.createElementVNode("div",fi,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=d=>r.value=d),class:"opacity-popover__range",onInput:a},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",gi,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),yi={class:"layers-panel"},hi={class:"layers-panel__header"},bi={class:"layers-panel__heading"},xi={class:"layers-panel__heading-title"},ki={class:"layers-panel__count"},wi={class:"layers-panel__bulk-actions"},_i={class:"layers-panel__header-actions"},Ei={class:"layers-panel__header-controls"},Ci={class:"layers-panel__label"},Ni={class:"layers-panel__label-row"},Vi=["checked","onChange"],Bi={class:"layers-panel__title-block"},$i={class:"layers-panel__name"},Si={class:"layers-panel__meta text-slate-500"},vi=["onClick"],Li={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Ai={key:0,class:"layers-panel__actions"},Ti=["innerHTML","onClick"],Ho="map:temporary-layer-request",Mi="#5763ba",Wo=we(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),i=e.ref(!1),s=We(),{temporaryLayers:c,activateTemporaryLayer:f,deactivateTemporaryLayer:a,clearTemporaryLayers:h}=oo(s.map),u=e.computed(()=>{const N=o.layers.map(A=>({...A,isTemporary:!1,owner:null,visible:A.visible!==!1})),E=c.value.map(A=>({id:A.id,name:A.title,visible:r.value[A.id]??!0,actions:[],filters:null,isTemporary:!0,owner:A.owner??null,handle:A.handle??null,card:A.card??null,popup:A.popup??null,style:A.style??null,group_name:null,count:null,holder:null}));return[...N,...E]}),y=e.computed(()=>u.value.length),d=e.computed(()=>u.value.filter(N=>V(N.id)).length),p=e.computed(()=>y.value>0&&d.value===y.value),x=e.computed(()=>c.value.length>0),g=n;function m(){var N;for(let E=0;E<o.layers.length;E++){const A=o.layers[E],I=b(A);if(!I)continue;const K=Ie(A.id,I),re=A.visible!==!1;r.value[A.id]=re,re||(N=K==null?void 0:K.setVisible)==null||N.call(K,!1)}}function b(N){const E=N.id;if(!E)return null;const A=(N.type||N.service_type||N.service||"").toString().toLowerCase(),I=N.service_url||N.url||null;if(!!I&&(A==="tms"||A==="wmts"||A==="wms"||A==="ogc")){const J=k(I);return J?{sourceId:E,service:A,source:{type:"raster",tiles:[J],tileSize:N.tileSize||256,minzoom:N.minzoom??0,maxzoom:N.maxzoom??22,scheme:N.scheme||"xyz"},layer:{id:E,type:"raster",source:E},card:N.card,popup:N.popup}:null}if(A==="cartocss"){const J=N.url?k(N.url):`${location.origin}/api/gis-rtile/${E}/{z}/{x}/{y}.png`;return J?{sourceId:E,service:A,source:{type:"raster",tiles:[J],tileSize:N.tileSize||256,minzoom:N.minzoom??0,maxzoom:N.maxzoom??22},layer:{id:E,type:"raster",source:E},card:N.card,popup:N.popup}:null}if(A==="raster"){const J=N.url?k(N.url):`${location.origin}/api/gis-rtile/${E}/{z}/{x}/{y}.png`;return J?{sourceId:E,service:A,source:{type:"raster",tiles:[J],tileSize:N.tileSize||256,minzoom:N.minzoom??0,maxzoom:N.maxzoom??22},layer:{id:E,type:"raster",source:E},card:N.card,popup:N.popup}:null}const re=`${location.origin}/api/vtile/${E}/ua/{z}/{x}/{y}.vmt`;return{sourceId:E,service:A,source:{type:"vector",tiles:[re],minZoom:4,maxZoom:14},layer:{id:E,source:E,"source-layer":E,style:N.style},card:N.card,popup:N.popup}}function k(N){return N?/^https?:\/\//i.test(N)?N:N.startsWith("//")?`${window.location.protocol}${N}`:N.startsWith("/")?`${location.origin}${N}`:`${location.origin}/${N}`:null}function V(N){const E=r.value[N];return E??!0}function S(N){var I,K;if(!(N!=null&&N.id))return null;const E=(I=N.title)==null?void 0:I.trim(),A=(K=N.url)==null?void 0:K.trim();return!E||!A?null:{id:N.id,title:E,url:A,tileSize:N.tileSize,minzoom:N.minzoom,maxzoom:N.maxzoom,opacity:N.opacity}}function C(N){if(!N)return;const E=N.owner;if(N.action==="clear"){const I=c.value.filter(K=>!E||K.owner===E).map(K=>K.id);h(E),I.forEach(K=>{K in r.value&&delete r.value[K]});return}const A=S(N.spec);if(A){if(N.action==="activate"){f(A,N.context||{},E),r.value[A.id]=!0;return}N.action==="deactivate"&&(a(A.id,E),delete r.value[A.id])}}function _(N){N instanceof CustomEvent&&C(N.detail)}e.watch(()=>c.value.map(N=>N.id),(N,E)=>{const A=new Set(E||[]),I=new Set(N);N.forEach(K=>{K in r.value||(r.value[K]=!0)}),A.forEach(K=>{I.has(K)||delete r.value[K]})},{immediate:!0});function w(N,E){var I,K,re;if(N.isTemporary){if(!E){a(N.id,N.owner||void 0),delete r.value[N.id];return}r.value[N.id]=!0;const J=N.handle||((I=c.value.find(ne=>ne.id===N.id))==null?void 0:I.handle);(K=J==null?void 0:J.setVisible)==null||K.call(J,!0);return}r.value[N.id]=E;const A=Ie(N.id);(re=A==null?void 0:A.setVisible)==null||re.call(A,E)}function $(N,E){const A=E.target;w(N,A.checked)}function D(N){u.value.forEach(E=>w(E,N))}function q(){D(!p.value)}function Q(N){return N.isTemporary?[{label:"Назва",value:N.name??null},{label:"Тип",value:"Тимчасовий шар"},N.owner?{label:"Джерело",value:N.owner}:null].filter(Boolean):[{label:"Назва",value:N.name??null},{label:"Назва групи",value:N.group_name||null},{label:"Кількість",value:N.count??null},{label:"Балансоутримувач",value:N.holder??null}]}function oe(N){const E=N.trim();return E?!!(/^#[\da-fA-F]{3,8}$/.test(E)||/^rgb\s*\(/.test(E)||/^rgba\s*\(/.test(E)||/^hsl\s*\(/.test(E)||/^hsla\s*\(/.test(E)||/^[a-zA-Z]+$/.test(E)&&E.length<25):!1}function Z(N){var E,A,I,K,re,J;if(!N)return null;if(typeof N=="string"){const ne=N.trim();return!ne||!oe(ne)?null:ne}if(Array.isArray(N)){for(const ne of N){const me=Z(ne);if(me)return me}return null}if(typeof N=="object"){const ne=N;return Z(ne.color??ne.fill??ne.stroke??ne.lineColor??ne.fillColor??((E=ne.paint)==null?void 0:E["fill-color"])??((A=ne.paint)==null?void 0:A["line-color"])??((I=ne.paint)==null?void 0:I["circle-color"])??((K=ne.paint)==null?void 0:K.color)??((re=ne.paint)==null?void 0:re.lineColor)??((J=ne.paint)==null?void 0:J.fillColor)??ne.paint??ne.value)}return null}function ee(N){const E=Array.isArray(N==null?void 0:N.legend)?N.legend[0]:N==null?void 0:N.legend,A=Z(E);return A||Z(N==null?void 0:N.style)||Mi}function H(N){return{"--layers-panel-checkbox-color":ee(N)}}function z(){if(!c.value.length)return;const N=c.value.map(E=>E.id);h(),N.forEach(E=>delete r.value[E])}function v(){l.value=!l.value}function M(){i.value=window.innerWidth<=768}return e.onMounted(()=>{m(),window.addEventListener(Ho,_),M(),i.value&&(l.value=!1),window.addEventListener("resize",M)}),e.watch(()=>{var N;return((N=o.layers)==null?void 0:N.length)??0},(N,E)=>{N>0&&E===0&&m()}),e.onBeforeUnmount(()=>{window.removeEventListener(Ho,_),window.removeEventListener("resize",M)}),(N,E)=>(e.openBlock(),e.createElementBlock("div",yi,[e.createElementVNode("div",hi,[e.createElementVNode("div",bi,[e.createElementVNode("div",xi,[E[0]||(E[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",ki," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(y.value)+") ",1),e.createElementVNode("div",wi,[u.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:q},e.toDisplayString(p.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",_i,[e.createElementVNode("div",Ei,[u.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:v,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":l.value})},[...E[1]||(E[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),x.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:z}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,A=>{var I;return e.openBlock(),e.createElementBlock("div",{key:A.id,class:"layers-panel__item"},[e.createElementVNode("label",Ci,[e.createElementVNode("div",Ni,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:V(A.id),style:e.normalizeStyle(H(A)),onChange:K=>$(A,K)},null,44,Vi),e.createElementVNode("div",Bi,[e.createElementVNode("span",$i,e.toDisplayString(A.name),1)]),e.createElementVNode("div",Si,[V(A.id)&&!A.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(qo,{"layer-id":A.id,class:"flex"},{trigger:e.withCtx(({toggle:K})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(K,["prevent","stop"])},[e.createElementVNode("div",Li,[e.createVNode(e.unref(ae.Contrast))])],8,vi)]),_:1},8,["layer-id"]),e.createVNode(Sn,{count:Array.isArray(A.filters)?A.filters.length:0,layer:A},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(to,{items:Q(A)},null,8,["items"])])])]),(I=A.actions)!=null&&I.length?(e.openBlock(),e.createElementBlock("div",Ai,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.actions,K=>(e.openBlock(),e.createElementBlock("button",{key:K.widget||K.id||K.icon,type:"button",class:"layers-panel__action",innerHTML:K.icon,onClick:re=>g("action",{layerId:K.widget})},null,8,Ti))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-4706ee79"]]);function Fi(){const{map:t,ready:n}=We(),o=e.ref(null),r=e.ref(null),l=e.ref(null),i=e.ref(null);let s=[];function c(){s.forEach(d=>d()),s=[]}const f=d=>{const p=(d==null?void 0:d.properties)||{};return!!(p.cluster||p.point_count||p.point_count_abbreviated)},a=d=>{var m,b;o.value=[d.point.x,d.point.y];const p=t.value.queryRenderedFeatures(d.point);if(!(p!=null&&p.length)){h();return}const x=p.find(k=>!f(k));if(!x){h();return}const g=Ie(x.source)||Ie((m=x.layer)==null?void 0:m.id);g!=null&&g.popup&&(r.value=((b=g.popup)==null?void 0:b.fields)||g.popup,i.value=x.properties)},h=()=>{r.value=null,i.value=null,o.value=null};async function u(){await n(),t.value&&(c(),t.value.on("mousemove",a),t.value.on("mouseleave",h))}function y(){c(),r.value=null,i.value=null,o.value=null}return n().then(u),{popupCoords:o,popupFields:r,popupValues:i,disable:y,title:l}}const Di={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},zi={class:"space-y-1.5"},Ii={class:"font-bold text-slate-700"},ji={class:"text-slate-700"},Yo=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=Fi(),{map:i}=We(),s=e.ref(null),c=e.ref({left:"-9999px",top:"-9999px"}),f=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function a(x,g){if(g==null||g==="")return g;if((x==null?void 0:x.type)==="number"){const m=typeof g=="number"?g:Number(g);if(Number.isFinite(m))return f.format(m)}return g}function h(x,g,m){const b=x.name||x.label||x.title||`field-${m}`,k=x.label||x.title||x.name||b,V=x.name?g[x.name]:void 0,C=(x.name?g[`${x.name}_text`]:void 0)??V??x.value??null;return{key:b,label:k,value:a(x,C)}}const u=e.computed(()=>{const x=o.value||[],g=r.value||{};return x.filter(m=>(m==null?void 0:m.meta)!=="title").map((m,b)=>h(m,g,b)).filter(m=>m.label)}),y=e.computed(()=>{const x=o.value||[],g=r.value||{},m=x.find(b=>(b==null?void 0:b.meta)==="title");return m?h(m,g,0):null}),d=e.computed(()=>{var g;const x=u.value;return(g=y.value)!=null&&g.value?[{...y.value,key:`${y.value.key}-title`,label:"Назва"},...x]:x});function p(){var v,M;if(!d.value.length||!n.value||!s.value){c.value={left:"-9999px",top:"-9999px"};return}const x=s.value,g=x.offsetParent||null,m=(g==null?void 0:g.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},b=((M=(v=i.value)==null?void 0:v.getContainer)==null?void 0:M.call(v))||void 0,k=(b==null?void 0:b.getBoundingClientRect())??m,V=k.left-m.left,S=k.top-m.top,C=x.offsetWidth||0,_=x.offsetHeight||0,w=12,$=8,[D,q]=n.value;let Q=V+D+w,oe=S+q+w;Q+C+$>m.width&&(Q=V+D-C-w),oe+_+$>m.height&&(oe=S+q-_-w);const Z=$,ee=$,H=Math.max($,m.width-C-$),z=Math.max($,m.height-_-$);Q=Math.min(Math.max(Q,Z),H),oe=Math.min(Math.max(oe,ee),z),c.value={left:`${Q}px`,top:`${oe}px`}}return e.watch([n,d],()=>{e.nextTick(()=>p())}),e.onMounted(()=>{window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",p),l()}),(x,g)=>d.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",Di,[e.createElementVNode("div",zi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.key,class:"flex flex-col"},[e.createElementVNode("span",Ii,e.toDisplayString(m.label),1),e.createElementVNode("span",ji,e.toDisplayString(m.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Pi(){const t=ve.useRoute(),n=ve.useRouter(),o=e.ref(null),r=e.ref(null),l=e.ref(null),i=e.ref(!1),s=e.ref([]),c=e.ref(0),f=e.computed(()=>s.value.length),a=e.computed(()=>i.value||!!o.value||!!l.value);let h=!1;function u(){o.value=null,r.value=null,l.value=null,i.value=!1,s.value=[],c.value=0}function y(_,w=0){if(!_.length){u(),S(null);return}s.value=_,d(w)}function d(_){const w=s.value[_];if(!w)return;c.value=_;const $=Ie(w.source);g(w,$==null?void 0:$.card)}function p(){c.value>=s.value.length-1||d(c.value+1)}function x(){c.value<=0||d(c.value-1)}async function g(_,w){var q,Q,oe,Z,ee;if(!((q=_==null?void 0:_.properties)!=null&&q.id))return;const $=new URLSearchParams;$.set("layer",_.source),$.set("id",String((Q=_.properties)==null?void 0:Q.id));const D=Array.isArray(w)&&w.length>0;i.value=D,l.value=null,o.value=null,r.value=_||null;try{const H=await fetch(`/api/map-format?${$.toString()}`);if(!H.ok)throw new Error(`Failed (${H.status})`);const z=await H.json(),v=Array.isArray(z.columns)?z.columns:[],M=Array.isArray(w)?w:[];if(!v.length&&!M.length){console.error("Configure layer in admin"),m();return}const N=z.rows??z.data??{};o.value={rows:N,fields:M,columns:v,html:z.html||null},h||S(r.value);const E=((oe=z.rows)==null?void 0:oe.geom)??((Z=z.data)==null?void 0:Z.geom);if(E){const A=typeof E=="string"?JSON.parse(E):E;A&&(r.value={...r.value,geometry:A,properties:{...((ee=r.value)==null?void 0:ee.properties)||{},geom:A,geom_4326:A}})}}catch(H){console.error("Failed to load feature card:",H),m()}finally{i.value=!1}}function m(){u(),S(null)}function b(){u()}C(k()),e.onBeforeUnmount(()=>b());function k(){const _=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof _!="string")return null;const w=_.trim();return w.startsWith("external:")?null:w||null}function V(_){var q,Q;const w=(_==null?void 0:_.source)??((q=_==null?void 0:_.layer)==null?void 0:q.id),$=(Q=_==null?void 0:_.properties)==null?void 0:Q.id;return!w||$===void 0||$===null?null:`${w},${$}`.trim()||null}function S(_){const w=V(_),$=k();if(w===$)return;const D={...t.query};w?D.info=w:delete D.info,n.push({query:D}).catch(()=>{})}async function C(_){if(!_){u();return}if(_===V(r.value))return;const[w,$]=_.split(","),D=w==null?void 0:w.trim(),q=$==null?void 0:$.trim();if(!D||!q){u(),S(null);return}h=!0;try{y([{source:D,properties:{id:q}}],0)}finally{h=!1}}return e.watch(()=>k(),_=>{_!==V(r.value)&&(h=!0,C(_).finally(()=>{h=!1}))}),{card:o,cardFeature:r,cardError:l,cardLoading:i,isOpen:a,close:m,openFeature:_=>y(_?[_]:[],0),openFeatures:y,next:p,prev:x,count:f,index:c}}function Ri(){const{map:t,ready:n}=We(),o=e.ref([]),r=e.ref(0),l=e.ref(0),i=e.ref(!1),s=e.ref(null),c=e.ref({}),f=e.ref(null),a=e.ref([]),h=e.computed(()=>o.value[l.value]||null),u=e.computed(()=>o.value.length>0);let y=null;const d=()=>{y==null||y.remove(),y=null},p=w=>w?w.type==="FeatureCollection"?w:w.type==="Feature"?{type:"FeatureCollection",features:[w]}:w.type&&Array.isArray(w.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:w,properties:{}}]}:Array.isArray(w.features)?{type:"FeatureCollection",features:w.features}:w.geometry?p(w.geometry):null:null,x=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),g=w=>Number(w.toFixed(5)),m=async w=>{if(await n(),!t.value)return;const $=p(w);$&&(d(),y=Ie("feature-highlight",{source:{type:"geojson",data:$},style:x()},t))},b=async(w,$,D)=>{var oe,Z;const[q,Q]=[g(w),g($)];f.value={x:q,y:Q},a.value=D,i.value=!0,s.value=null,o.value=[],c.value={},l.value=0;try{const ee=D.map(async N=>{const E=`/api/map-info-point?x=${q}&y=${Q}&layers=${N}`,A=await fetch(E);if(!A.ok)return null;const I=await A.json();if(!I.count)return null;const re=await(await fetch(`${E}&index=0`)).json();return{layerId:N,data:re,count:I.count}}),z=(await Promise.all(ee)).filter(Boolean);if(z.length===0){r.value=0;return}o.value=z.map(N=>N.data);const[v]=o.value;r.value=z.reduce((N,E)=>N+(E.count||0),0),c.value[0]=v;const M=((oe=v==null?void 0:v.data)==null?void 0:oe.geom_4326)??((Z=v==null?void 0:v.data)==null?void 0:Z.geom);await m(M)}catch(ee){s.value=ee.message}finally{i.value=!1}},k=async w=>{if(!f.value||!a.value.length)return;if(c.value[w]){o.value[w]=c.value[w];return}const{x:$,y:D}=f.value,q=a.value.join(","),Q=`/api/map-info-point?x=${$}&y=${D}&index=${w}&layers=${q}`;try{i.value=!0;const oe=await fetch(Q);if(!oe.ok)throw new Error("Failed to fetch feature by index");const Z=await oe.json();o.value[w]=Z,c.value[w]=Z}catch(oe){s.value=oe.message}finally{i.value=!1}},V=async()=>{l.value<r.value-1&&(l.value+=1,c.value[l.value]||await k(l.value))},S=async()=>{l.value>0&&(l.value-=1,c.value[l.value]||await k(l.value))},C=()=>{o.value=[],r.value=0,l.value=0,c.value={},f.value=null,a.value=[],d()};e.watch(l,async()=>{var $,D;const w=h.value;if(w){const q=(($=w==null?void 0:w.data)==null?void 0:$.geom_4326)??((D=w==null?void 0:w.data)==null?void 0:D.geom);await m(q)}});let _=null;return e.onMounted(async()=>{await n(),t.value&&(_=async w=>{const{lng:$,lat:D}=w.lngLat,q=Ie(),oe=Object.entries(q).map(([Z,ee])=>{var H,z,v,M;return{id:Z,service:((H=ee==null?void 0:ee.opts)==null?void 0:H.service)??((v=(z=ee==null?void 0:ee.opts)==null?void 0:z.source)==null?void 0:v.service)??null,count:((M=ee==null?void 0:ee.opts)==null?void 0:M.count)??null,visible:(()=>{var N;try{return((N=t.value)==null?void 0:N.getLayer(Z))?t.value.getLayoutProperty(Z,"visibility")!=="none":!0}catch{return!0}})()}}).filter(Z=>Z.service==="ogc"&&Z.visible).map(Z=>Z.id);oe.length>0&&await b($,D,oe)},t.value.on("dblclick",_))}),e.onBeforeUnmount(()=>{t.value&&_&&t.value.off("dblclick",_),d()}),{features:o,count:r,index:l,current:h,loading:i,error:s,active:u,next:V,prev:S,close:C}}const Zo=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(a){const h=a.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(h)return h;const u=Array.from(a).map(y=>y.charCodeAt(0).toString(16)).join("").slice(0,8);return u?`layer-${u}`:"layer-temp"}const i=e.computed(()=>{var a;return((a=o.id)==null?void 0:a.trim())||l(o.title)}),s=e.computed(()=>o.buttonText||"Показати шар");function c(){return{id:i.value,title:o.title,url:o.url}}function f(){r("activate",c())}return(a,h)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:f},[e.renderSlot(a.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.value),1)])]))}}),lo="map-card:external-payload",ao="map-card:click-results",Go=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,Oi={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},Ui={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},qi={class:"min-w-0 flex-1"},Hi={class:"text-base font-semibold text-slate-900 truncate"},Wi={key:0,class:"flex gap-1 mt-1"},Yi=["disabled"],Zi=["disabled"],Gi={key:1,class:"flex gap-1 mt-1"},Ki=["disabled"],Xi=["disabled"],Qi={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},Ji={key:0,class:"text-center text-xs text-slate-500"},ec={key:1,class:"text-center text-xs text-red-500"},tc={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},nc={class:"divide-y divide-gray-100 py-[5px]"},oc={class:"text-gray-900 font-normal"},rc={key:0,class:"flex gap-1 flex-wrap"},lc={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},ac=["innerHTML"],sc=["innerHTML"],ic={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},cc={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},dc={class:"text-xs tracking-[0.02em] leading-none"},uc={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},pc={class:"space-y-1"},mc={class:"flex items-center cursor-pointer gap-2 flex-1"},fc=["checked","onChange"],gc={class:"text-[13px] text-gray-600"},yc={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},hc={key:5,class:"text-center text-xs text-slate-400"},bc="map:temporary-layer-request",Ko="cardHideEmpty",xc=14,so=we(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Pi(),r=Ri(),l=ve.useRouter(),i=e.ref([]),s=e.ref(0),c=e.computed(()=>i.value[s.value]||null),f=e.computed(()=>{var B;return((B=c.value)==null?void 0:B.type)==="external"?c.value:null}),a=e.computed(()=>i.value.length>0),h=e.computed(()=>{var B,L;return!!((L=(B=f.value)==null?void 0:B.html)!=null&&L.trim())}),u=e.computed(()=>{var B;return((B=f.value)==null?void 0:B.geometry)??null});function y(){i.value=[],s.value=0}function d(B){if(!B)return null;if(typeof B=="string")try{return JSON.parse(B)}catch{return null}return B}function p(){const B=Array.isArray(ee.query.info)?ee.query.info[0]:ee.query.info;return typeof B!="string"?null:B.trim()||null}function x(B){if(!B||!B.startsWith("external:"))return null;const L=B.slice(9),[O,te]=L.split(","),ce=O==null?void 0:O.trim(),ke=te==null?void 0:te.trim();return!ce||!ke?null:{layer:ce,id:ke,token:`external:${ce},${ke}`}}function g(B){const L=p(),O=(B==null?void 0:B.trim())||null;if(L===O)return;const te={...ee.query};if(O)te.info=O;else if(L!=null&&L.startsWith("external:"))delete te.info;else return;l.push({query:te}).catch(()=>{})}function m(B){var O;const L=i.value[B];if(!L){y(),o.close(),Ze();return}if(s.value=B,L.type==="feature"){o.openFeature(L.feature);return}o.close(),g(L.infoToken??null),(O=L.html)!=null&&O.trim()?V():Ze()}function b(B,L=0){if(r.close(),i.value=B.map(O=>({type:"external",...O})),!i.value.length){o.close(),g(null),Ze();return}m(Math.min(Math.max(L,0),i.value.length-1))}function k(B){r.close();const L=Array.isArray(B==null?void 0:B.features)?B.features.filter(Boolean):[],O=Array.isArray(B==null?void 0:B.externalItems)?B.externalItems.filter(te=>typeof(te==null?void 0:te.html)=="string"&&te.html.trim()):[];if(i.value=[...L.map(te=>({type:"feature",feature:te})),...O.map(te=>({type:"external",...te}))],!i.value.length){o.close(),g(null),Ze();return}m(0)}function V(){return h.value?u.value?(Sl(u.value),!0):(Ze(),!0):(Ze(),!1)}const S=B=>{var te,ce,ke,_e;const L=B,O=Array.isArray((te=L.detail)==null?void 0:te.items)?(ce=L.detail)==null?void 0:ce.items.filter(Te=>typeof(Te==null?void 0:Te.html)=="string"&&Te.html.trim()):[];O.length?b(O,Number(((ke=L.detail)==null?void 0:ke.index)??0)):typeof((_e=L.detail)==null?void 0:_e.html)=="string"&&L.detail.html.trim()?b([{html:L.detail.html,geometry:L.detail.geometry??null,infoToken:L.detail.infoToken??null}],0):(y(),o.close(),g(null),Ze())},C=B=>{k(B.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(ao,C),window.addEventListener(lo,S))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(ao,C),window.removeEventListener(lo,S))});const _=e.computed(()=>r.active.value),w=e.computed(()=>_.value||o.isOpen.value||h.value),$=e.computed(()=>_.value?r.loading.value:o.cardLoading.value),D=e.computed(()=>_.value?r.error.value:o.cardError.value),q=e.computed(()=>{var B,L,O;return _.value?((B=r.current.value)==null?void 0:B.html)||null:h.value?((L=f.value)==null?void 0:L.html)||null:((O=o.card.value)==null?void 0:O.html)||null}),Q=We(),oe=Gn(),Z=e.computed(()=>{var B,L;return((L=(B=oe.value)==null?void 0:B.map)==null?void 0:L.cardHideEmpty)??null}),ee=ve.useRoute(),{activateTemporaryLayer:H,deactivateTemporaryLayer:z,clearTemporaryLayers:v,isTemporaryLayerActive:M}=oo(Q.map);function N(B){window.dispatchEvent(new CustomEvent(bc,{detail:B}))}const E=e.computed(()=>{var B;return((B=o.cardFeature.value)==null?void 0:B.source)??null}),A=e.computed(()=>E.value?`map-card:${E.value}`:"map-card"),I=e.computed(()=>{var te,ce;const B=o.cardFeature.value,L=(B==null?void 0:B.source)||((te=B==null?void 0:B.layer)==null?void 0:te.id),O=((ce=B==null?void 0:B.properties)==null?void 0:ce.id)??(B==null?void 0:B.id);return L&&O!=null?`${L}:${O}`:null}),K=e.ref(null),re=e.ref([]),J=e.ref(0),ne=new Map;function me(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const pe=e.computed(()=>{const B=typeof n.mapId=="string"?n.mapId.trim():"";if(B.length)return B;const L=typeof ee.params.slug=="string"?ee.params.slug.trim():"";if(L.length)return L;const O=typeof ee.query.slug=="string"?ee.query.slug.trim():"";return O.length?O:me()}),de=e.ref(null),Ve=e.ref(null),Y=new Map;function T(B){const L=B.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const O=Array.from(B).map(te=>te.charCodeAt(0).toString(16)).join("").slice(0,8);return O?`layer-${O}`:`layer-${Math.random().toString(36).slice(2,8)}`}function j(B){if(typeof B!="string")return"";const L=B.trim();if(!L)return"";if(/^https?:\/\//i.test(L))return L;if(L.startsWith("//"))return typeof window>"u"?`https:${L}`:`${window.location.protocol}${L}`;const O=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?O?`${O}${L}`:L:O?`${O}/${L}`:L}function F(B){if(B==null)return[];if(Array.isArray(B))return B.flatMap(L=>F(L));if(typeof B=="number")return Number.isFinite(B)?[B]:[];if(typeof B=="string"){const L=B.match(/-?\d+(?:\.\d+)?/g);return!L||!L.length?[]:L.map(O=>Number(O)).filter(O=>Number.isFinite(O))}return[]}function P(B){const L=F(B);if(L.length<4)return null;const[O,te,ce,ke]=L;return[O,te,ce,ke].every(_e=>Number.isFinite(_e))?[O,te,ce,ke]:null}function le(B){if(!B)return null;const L=B.trim();if(!L.length)return null;try{const ce=JSON.parse(L),ke=P(ce);if(ke)return ke}catch{}const O=L.match(/-?\d+(?:\.\d+)?/g);if(!O||O.length<4)return null;const te=O.slice(0,4).map(ce=>Number(ce));return te.every(ce=>Number.isFinite(ce))?[te[0],te[1],te[2],te[3]]:null}function ye(B){const L={},O=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let te;for(;(te=O.exec(B))!==null;){const ce=te[1],ke=te[2]??te[3]??te[4]??"";ce&&(L[ce]=ke)}return L}function Ee(B,L){for(const O of L)if(B[O]!=null&&String(B[O]).trim().length)return String(B[O]).trim();return""}function ge(B){if(!(B!=null&&B.length))return;const L=Number(B);return Number.isFinite(L)?L:void 0}function Ue(B){if(typeof B!="string"||!B.length)return[];const L=[],O=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let te=0,ce;const ke=new Set,_e=Te=>{let Oe=Te,Xe=2;for(;ke.has(Oe);)Oe=`${Te}-${Xe}`,Xe+=1;return ke.add(Oe),Oe};for(;(ce=O.exec(B))!==null;){const[Te,Oe="",Xe=""]=ce,Pe=ce.index;if(Pe>te){const Al=B.slice(te,Pe);Al.trim().length&&L.push({type:"html",content:Al})}const et=ye(Oe),ut=Ee(et,["title"])||"Тимчасовий шар",At=j(Ee(et,["url"]));if(!At){L.push({type:"html",content:Te}),te=Pe+Te.length;continue}const Cn=Ee(et,["id"]),Ao=Ee(et,["button-text","buttonText","show","show-label","showLabel"]),x_=ge(Ee(et,["tile-size","tileSize"])),k_=ge(Ee(et,["minzoom","minZoom"])),w_=ge(Ee(et,["maxzoom","maxZoom"])),__=ge(Ee(et,["opacity"])),E_=le(Ee(et,["bounds","data-bounds","bbox"])),C_=Cn||T(`${ut}-${At}`)||T(ut),vl=_e(C_||`layer-${L.length+1}`),To=Xe.trim(),Ll=/<[^>]+>/.test(To),N_=Ll?To:null,Mo=Ll?null:To,V_=Ao&&Ao.trim().length?Ao.trim():Mo&&Mo.trim().length?Mo.trim():void 0;L.push({type:"layer",spec:{id:vl,title:ut,url:At,tileSize:x_,minzoom:k_,maxzoom:w_,opacity:__,bounds:E_},componentProps:{title:ut,url:At,id:vl,buttonText:V_},slotText:N_}),te=Pe+Te.length}if(te<B.length){const Te=B.slice(te);Te.trim().length&&L.push({type:"html",content:Te})}return!L.length&&B.trim().length&&L.push({type:"html",content:B}),L}function ze(B){if(!B)return null;const L=typeof B.id=="string"?B.id.trim():"",O=typeof B.title=="string"?B.title.trim():"",te=j(typeof B.url=="string"?B.url:"");return!L||!te?null:{id:L,title:O||L,url:te,tileSize:B.tileSize,minzoom:B.minzoom,maxzoom:B.maxzoom,opacity:B.opacity,bounds:B.bounds}}const Ye=e.computed(()=>{if(_.value&&r.current.value)return r.current.value.data??{};const B=o.card.value;return(B==null?void 0:B.rows)??{}}),tt=e.computed(()=>{if(_.value&&r.current.value){const te=r.current.value,ce=Array.isArray(te.columns)?te.columns:[];return ce.length?ce:te.fields??[]}const B=o.card.value;if(!B)return[];const L=Array.isArray(B.columns)?B.columns:[];return L.length?L:Array.isArray(B.fields)?B.fields:[]}),ot=e.computed(()=>{const B=tt.value;if(!B.length)return[];const L=Ye.value;return B.map(O=>({key:O.name,label:O.ua||O.label||O.title||O.name,value:ft(L[O.name],O.format||"text"),format:O.format||"text"}))}),xt=new Set(["—","-","–","−"]);function en(B){const L=B.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return B;const[,O,te,ce]=L;return`${ce}.${te}.${O}`}function zt(B){return Number.isFinite(B)?new Intl.NumberFormat("uk-UA").format(B):"—"}function ft(B,L){if(B==null)return"—";if(L==="tags")return B;if(Array.isArray(B))return B.length?B.map(O=>ft(O,"text")).join(", "):"—";if(typeof B=="boolean")return B?"так":"ні";if(typeof B=="number")return zt(B);if(typeof B=="string"){const O=B.trim();if(!O.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(O))return en(O);if(/^-?\d+(?:\.\d+)?$/.test(O)){const te=Number(O);return Number.isFinite(te)?zt(te):O}return O}return String(B)}function It(B){if(B==null)return!0;if(typeof B=="string"){const L=B.trim();return L.length?xt.has(L):!0}return!1}function tn(B){if(!B)return[];if(Array.isArray(B))return B;if(typeof B=="string"){const L=B.trim();if(L.startsWith("{")&&L.endsWith("}")){const te=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return te?te.map(ce=>ce.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const gt=e.ref(!1),ht=e.ref(!0),U=()=>{var B,L;return typeof window>"u"?null:((L=(B=window.localStorage)==null?void 0:B.getItem)==null?void 0:L.call(B,Ko))??null},G=e.ref(U()),W=B=>{const L=typeof B=="string"&&B.toLowerCase()==="true";gt.value=L,ht.value=!L},ue=B=>{G.value=B};if(typeof window<"u"){const B=L=>{L.key===Ko&&ue(L.newValue)};window.addEventListener("storage",B),e.onBeforeUnmount(()=>{window.removeEventListener("storage",B)})}const he=e.computed(()=>typeof G.value=="string");e.watch(G,B=>{W(typeof B=="string"?B:Z.value)},{immediate:!0}),e.watch(Z,B=>{he.value||W(B)},{immediate:!0});const Ne=e.computed(()=>ot.value.filter(B=>It(B.value)).length),Me=e.computed(()=>gt.value&&!ht.value?ot.value.filter(B=>!It(B.value)):ot.value);function $e(B){const L=typeof B=="string"?B:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const te=new DOMParser().parseFromString(L,"text/html");let ce=0;return te.querySelectorAll("dd").forEach(ke=>{var Oe;const _e=((Oe=ke.textContent)==null?void 0:Oe.trim())??"",Te=ke.closest("div");if(It(_e)){ce+=1,Te?Te.remove():ke.remove();return}}),{sanitized:te.body.innerHTML,hiddenCount:ce}}const it=e.computed(()=>$e(q.value)),yt=e.computed(()=>q.value?it.value.hiddenCount:0),ct=e.computed(()=>Ne.value+yt.value),Vt=e.computed(()=>{var B;return gt.value&&!ht.value&&!!((B=q.value)!=null&&B.trim())}),nn=e.computed(()=>gt.value&&ct.value>0),So=e.computed(()=>ht.value?"Приховати пусті значення":"Показати пусті значення"),vo=e.computed(()=>ht.value?ae.ChevronUp:ae.ChevronDown);function wn(){ht.value=!ht.value}const jt=e.computed(()=>{const B=Vt.value?it.value.sanitized:q.value??"";return Ue(B)}),Bt=e.computed(()=>jt.value.filter(B=>B.type==="layer"));function on(B){return Array.isArray(B)?B.map((L,O)=>{const te=j(typeof(L==null?void 0:L.url)=="string"?L.url:""),ce=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",ke=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${O+1}`).toString(),_e=(L==null?void 0:L.id)!=null?String(L.id):T(`${ke}-${O+1}`),Te=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,Oe=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,Xe=te||j(ce)||"";if(!Xe)return null;const Pe={id:_e,title:ke,url:Xe,subtitle:Oe,buttonText:Te||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Pe.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Pe.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Pe.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Pe.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Pe.opacity=L.opacity);const et=P((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return et&&(Pe.bounds=et),Pe}).filter(Boolean):[]}const Pt=e.computed(()=>{var te,ce;const B=o.card.value,L=r.current.value,O=[(te=B==null?void 0:B.rows)==null?void 0:te.layers,B==null?void 0:B.layers,(ce=L==null?void 0:L.data)==null?void 0:ce.layers,L==null?void 0:L.layers];for(const ke of O){const _e=on(ke);if(_e.length)return _e}return[]}),Un=e.computed(()=>jt.value.length>0||ot.value.length>0||Pt.value.length>0),_n=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function qn(){const B={},L=de.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([O,te])=>{typeof te=="string"&&(B[O]=te)}),E.value&&(B.layer=E.value),!B.geohub){const O=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,te=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,ce=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;B.geohub=O||te||ce||B.layer||""}return B}async function Hn(){const B=E.value;if(!B)return de.value=null,Ve.value=null,null;if(Ve.value===B&&de.value)return de.value;if(Y.has(B)){const L=Y.get(B);return de.value=L,Ve.value=B,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(B)}`);if(!L.ok)return null;const O=await L.json();return Y.set(B,O),de.value=O,Ve.value=B,O}catch{return null}}async function R(B){if(!(B!=null&&B.id))return;await Hn();const L=qn(),O=Bt.value.find(Te=>Te.spec.id===B.id),te=Pt.value.find(Te=>Te.id===B.id),ce=(O==null?void 0:O.spec)||ze(te)||ze(B),ke=(O==null?void 0:O.spec.bounds)??(te==null?void 0:te.bounds);if(!ce||M(ce.id,A.value))return;const _e=A.value||void 0;K.value=_e??null,H(ce,L,_e),N({action:"activate",owner:_e,spec:ce,context:L}),X(ke)}async function X(B){var ke;if(!(B!=null&&B.length))return;const[L,O,te,ce]=B;[L,O,te,ce].every(_e=>Number.isFinite(_e))&&typeof Q.fitBounds=="function"&&(await((ke=Q.ready)==null?void 0:ke.call(Q)),Q.fitBounds([[L,O],[te,ce]],{padding:48,maxZoom:18}))}function xe(B){if(!B)return;const L=Le()||void 0;z(B,L),N({action:"deactivate",owner:L,spec:{id:B}})}function Ce(B){return M(B,Le())}function se(B,L){const O=L.target;!!(O!=null&&O.checked)?R(B):xe(B.id)}function Le(){return K.value||A.value||null}e.watch(E,(B,L)=>{B!==L&&(de.value=null,Ve.value=null)});const{next:Be,prev:ie,count:Se,index:Fe}=r,Ae=e.computed(()=>o.count.value),Re=e.computed(()=>o.index.value),rt=e.computed(()=>_.value?!1:a.value?i.value.length>1:Ae.value>1),De=e.computed(()=>_.value?Se.value:a.value?i.value.length:Ae.value),Je=e.computed(()=>_.value?Fe.value:a.value?s.value:Re.value),qe=()=>{if(a.value){if(s.value>=i.value.length-1)return;m(s.value+1);return}o.next()},He=()=>{if(a.value){if(s.value<=0)return;m(s.value-1);return}o.prev()};function lt(){const B=Le();B&&(v(B),N({action:"clear",owner:B}),K.value=null)}function Wn(){y(),o.close(),r.close(),lt(),g(null)}e.watch(w,(B,L)=>{!B&&L&&(lt(),Ze())});function Bl(){!o.isOpen.value&&!r.active.value&&lt()}e.watch(()=>o.isOpen.value,()=>{Bl()}),e.watch(()=>r.active.value,()=>{Bl()}),e.watch(E,(B,L)=>{B&&L&&B!==L&&lt()}),e.watch(Fe,(B,L)=>{B!==L&&lt()}),e.watch(I,(B,L)=>{B&&L&&B!==L&&lt()});function u_(B){if(!B)return null;if(B.geometry)return B.geometry;const L=(B==null?void 0:B.data)??(B==null?void 0:B.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function Ze(){re.value.length&&(re.value.forEach((B,L)=>{var O;(O=B==null?void 0:B.remove)==null||O.call(B,L===0)}),re.value=[])}function p_(B){var O,te,ce;const L=(B==null?void 0:B.type)||((ce=(te=(O=B==null?void 0:B.features)==null?void 0:O[0])==null?void 0:te.geometry)==null?void 0:ce.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 Lo=null;function $l(){return p()}function m_(B){var ce,ke;if(!B)return null;const L=(B==null?void 0:B.source)??((ce=B==null?void 0:B.layer)==null?void 0:ce.id),O=((ke=B==null?void 0:B.properties)==null?void 0:ke.id)??(B==null?void 0:B.id);return!L||O===void 0||O===null?null:`${L},${O}`.trim()||null}function Yn(B,L){if(B){if(Array.isArray(B)){if(B.length>=2&&typeof B[0]=="number"&&typeof B[1]=="number"){L.push([B[0],B[1]]);return}B.forEach(O=>Yn(O,L));return}typeof B=="object"&&(Array.isArray(B.coordinates)&&Yn(B.coordinates,L),Array.isArray(B.features)&&B.features.forEach(O=>Yn(O==null?void 0:O.geometry,L)))}}function f_(B){var Te,Oe;if(!B)return null;const L=B.type==="FeatureCollection"?(Oe=(Te=B.features)==null?void 0:Te[0])==null?void 0:Oe.geometry:B.type==="Feature"?B.geometry:B,O=[];if(Yn(L,O),!O.length)return null;let te=O[0][0],ce=O[0][0],ke=O[0][1],_e=O[0][1];return O.forEach(([Xe,Pe])=>{Xe<te&&(te=Xe),Xe>ce&&(ce=Xe),Pe<ke&&(ke=Pe),Pe>_e&&(_e=Pe)}),[(te+ce)/2,(ke+_e)/2]}async function g_(B,L){var ke;const O=$l();if(!O||O.startsWith("external:"))return;const te=m_(B);if(!te||te!==O||Lo===O)return;const ce=f_(L);ce&&(await((ke=Q.ready)==null?void 0:ke.call(Q)),Q.flyTo({center:ce,zoom:xc}),Lo=O)}function Sl(B){var ce;if(!B){Ze();return}const L=(ce=Q.map)==null?void 0:ce.value,O={type:"FeatureCollection",features:[{type:"Feature",geometry:B,properties:{}}]};Ze();const te=p_(B);if(re.value=te.map((ke,_e)=>Ie(`feature-card-highlight${_e||""}`,{..._e===0?{source:{type:"geojson",data:O}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${_e||""}`,type:ke.type,source:"feature-card-highlight",paint:ke.paint}},Q.map)),L!=null&&L.moveLayer){const ke=()=>{try{re.value.forEach(Xe=>{var et;const Pe=(et=Xe==null?void 0:Xe.ids)==null?void 0:et.layerId;Pe&&L.moveLayer(Pe)})}catch{}},_e=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(ke)}):setTimeout(ke,0)};_e();const Te=()=>_e();L.once("styledata",Te);const Oe=()=>{_e(),L.off("styledata",Te),L.off("idle",Oe)};L.on("idle",Oe)}}function y_(B){var te,ce;const L=(B==null?void 0:B.source)||((te=B==null?void 0:B.layer)==null?void 0:te.id)||"unknown",O=((ce=B==null?void 0:B.properties)==null?void 0:ce.id)??(B==null?void 0:B.id)??"unknown";return`${L}:${O}`}async function h_(B){var ke,_e,Te,Oe,Xe;if(!B)return null;const L=u_(B);if(L)return L;const O=((ke=B==null?void 0:B.properties)==null?void 0:ke.id)??(B==null?void 0:B.id);if(!O)return null;const te=y_(B);if(ne.has(te))return ne.get(te);const ce=[pe.value,B==null?void 0:B.source,(_e=B==null?void 0:B.layer)==null?void 0:_e.id].map(Pe=>typeof Pe=="string"?Pe.trim():"").filter(Boolean);for(const Pe of ce)try{const et=await fetch(`/api/map-features/${encodeURIComponent(Pe)}/${encodeURIComponent(String(O))}`);if(!et.ok)continue;const ut=await et.json(),At=((Te=ut==null?void 0:ut.data)==null?void 0:Te.geom)||((Oe=ut==null?void 0:ut.data)==null?void 0:Oe.geometry)||((Xe=ut==null?void 0:ut.data)==null?void 0:Xe.geom_4326)||null,Cn=typeof At=="string"?JSON.parse(At):At;if(Cn)return ne.set(te,Cn),Cn}catch{continue}return null}async function En(B){J.value+=1;const L=J.value;if(V())return;if(!B||_.value){Ze();return}if(!_n.value){Ze();return}const O=await h_(B);if(L===J.value){if(!O){Ze();return}Sl(O),g_(B,O)}}async function b_(B){var O,te,ce;const L=x(B);if(!L){(O=p())!=null&&O.startsWith("external:")&&(y(),Ze());return}if(((te=f.value)==null?void 0:te.infoToken)===L.token){V();return}try{const ke=await fetch(`/api/map-format?layer=${encodeURIComponent(L.layer)}&id=${encodeURIComponent(L.id)}`);if(!ke.ok)throw new Error(`Failed (${ke.status})`);const _e=await ke.json(),Te=typeof(_e==null?void 0:_e.html)=="string"?_e.html:null,Oe=d(((ce=_e==null?void 0:_e.data)==null?void 0:ce.geom)??(_e==null?void 0:_e.geom)??null);if(!Te&&!Oe){y(),Ze();return}b([{html:Te,geometry:Oe,infoToken:L.token}],0)}catch{y(),Ze()}}return e.watch(()=>o.cardFeature.value,B=>{En(B)},{immediate:!0}),e.watch(()=>o.index.value,()=>{_.value||En(o.cardFeature.value)}),e.watch(_,B=>{if(B){h.value||Ze();return}if(h.value){V();return}En(o.cardFeature.value)}),e.watch(pe,()=>{if(h.value){V();return}!_.value&&o.cardFeature.value&&En(o.cardFeature.value)}),e.watch(_n,B=>{V()||(B?En(o.cardFeature.value):Ze())}),e.watch(()=>$l(),B=>{if(Lo=null,B!=null&&B.startsWith("external:")){b_(B);return}f.value&&(y(),Ze())},{immediate:!0}),e.watch(f,B=>{var L;if(!((L=B==null?void 0:B.html)!=null&&L.trim())){Ze();return}V()}),e.onBeforeUnmount(()=>{lt(),Ze()}),(B,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[w.value?(e.openBlock(),e.createElementBlock("div",Oi,[e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("p",Hi,[_.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Je.value+1)+" / "+e.toDisplayString(De.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[rt.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Je.value+1)+" / "+e.toDisplayString(De.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),_.value&&e.unref(Se)>1?(e.openBlock(),e.createElementBlock("div",Wi,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...O)=>e.unref(ie)&&e.unref(ie)(...O)),disabled:e.unref(Fe)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ae.ArrowLeft),{class:"h-4 w-4"})],8,Yi),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...O)=>e.unref(Be)&&e.unref(Be)(...O)),disabled:e.unref(Fe)===e.unref(Se)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ae.ArrowRight),{class:"h-4 w-4"})],8,Zi)])):!_.value&&rt.value?(e.openBlock(),e.createElementBlock("div",Gi,[e.createElementVNode("button",{onClick:He,disabled:Je.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ae.ArrowLeft),{class:"h-4 w-4"})],8,Ki),e.createElementVNode("button",{onClick:qe,disabled:Je.value>=De.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ae.ArrowRight),{class:"h-4 w-4"})],8,Xi)])):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:Wn}," ✕ ")]),e.createElementVNode("div",Qi,[$.value?(e.openBlock(),e.createElementBlock("div",Ji," Завантаження даних… ")):D.value?(e.openBlock(),e.createElementBlock("div",ec,e.toDisplayString(D.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[ot.value.length?(e.openBlock(),e.createElementBlock("div",tc,[e.createElementVNode("dl",nc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Me.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",oc,e.toDisplayString(O.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",O.format==="badge"?"font-semibold text-yellow-800":""])},[O.format==="tags"?(e.openBlock(),e.createElementBlock("div",rc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(tn(O.value),(te,ce)=>(e.openBlock(),e.createElementBlock("span",{key:ce,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(te),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(O.value),1)],64))],2)]))),128))])])):jt.value.length?(e.openBlock(),e.createElementBlock("div",lc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(jt.value,(O,te)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:te},[O.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:O.content},null,8,ac)):(e.openBlock(),e.createBlock(Zo,{key:1,title:O.componentProps.title,url:O.componentProps.url,id:O.componentProps.id,"button-text":O.componentProps.buttonText,onActivate:R},e.createSlots({_:2},[O.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:O.slotText},null,8,sc)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),Bt.value.length?(e.openBlock(),e.createElementBlock("div",ic,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Bt.value,O=>(e.openBlock(),e.createBlock(Zo,{key:O.spec.id,title:O.componentProps.title,url:O.componentProps.url,id:O.spec.id,"button-text":O.componentProps.buttonText,onActivate:R},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),nn.value?(e.openBlock(),e.createElementBlock("div",cc,[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:wn},[e.createElementVNode("span",dc,e.toDisplayString(So.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(vo.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),Pt.value.length?(e.openBlock(),e.createElementBlock("div",uc,[L[3]||(L[3]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",pc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Pt.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",mc,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:Ce(O.id),onChange:te=>se(O,te)},null,40,fc),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",gc,e.toDisplayString(O.title),1)]),O.subtitle?(e.openBlock(),e.createElementBlock("div",yc,e.toDisplayString(O.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Un.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",hc," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-3a3cb28b"]]),kc={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%"}},wc={class:"flex flex-col gap-1 p-5"},_c={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},io=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=We(),l=e.ref([]);let i=null;function s(h){return h?h.map((u,y)=>{var x;const d=(u==null?void 0:u.name)||(u==null?void 0:u.label)||(u==null?void 0:u.title)||(u==null?void 0:u.id)||`Layer ${y+1}`,p=(u==null?void 0:u.color)||(u==null?void 0:u.fill)||((x=u==null?void 0:u.paint)==null?void 0:x.color)||"#3388ff";return{id:`${d}-${y}`,label:d,color:p}}):[]}function c(h){return h!=null&&h.layers?h.layers.filter(u=>{const y=u.paint||{};return y["fill-color"]||y["line-color"]||y["circle-color"]}).map((u,y)=>{var x;const d=u.paint||{},p=d["fill-color"]||d["line-color"]||d["circle-color"]||"#3388ff";return{id:u.id||`layer-${y}`,label:((x=u.metadata)==null?void 0:x.title)||u.id||`Layer ${y+1}`,color:p}}):[]}async function f(){var y;await r();const h=o.value;if(!h)return;const u=(y=h.getStyle)==null?void 0:y.call(h);l.value=c(u)}function a(){o.value&&(i==null||i())}return e.watch(()=>n.items,async h=>{h!=null?(l.value=s(h),i==null||i()):(await r(),a(),f())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),a(),f())}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(h,u)=>l.value.length?(e.openBlock(),e.createElementBlock("div",kc,[e.createElementVNode("div",wc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.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",_c,[e.createElementVNode("span",null,e.toDisplayString(y.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Ec={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=we(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",Ec,[e.createVNode(Sn,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),Cc={class:"catalog-tab__search relative mt-[10px]"},Nc={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%)"}},Vc={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Bc={key:0,class:"text-sm text-gray-400 text-center mt-6"},$c=["onClick"],Sc={class:"flex items-center gap-x-3"},vc={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Lc={class:"text-xs opacity-60 text-[#4b5563]"},Ac={class:"flex items-center cursor-pointer gap-2 flex-1"},Tc=["checked","onChange"],Mc={class:"text-[13px] text-gray-600 max-w-[260px]"},Fc={class:"flex items-center gap-2"},Dc=we(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),i=e.ref(null),s=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),c=new Intl.Collator("uk",{sensitivity:"base"}),f=e.computed(()=>{const m=o.search.trim().toLowerCase();return o.catalog.groups.map(b=>{const k=b.layers.filter(V=>{const S=x(V);return S?m?S.toLowerCase().includes(m):!0:!1}).sort((V,S)=>c.compare(x(V),x(S)));return{...b,layers:k}}).filter(b=>b.layers.length>0).sort((b,k)=>c.compare(b.name,k.name))}),a=e.computed({get:()=>o.search,set:m=>r("update:search",m)});function h(m){l[m]=!l[m],ii()}function u(m){return!!l[m]}function y(m,b){if(o.selected.includes(b)){s.visible=!1,s.layerId=null;return}const k=m.currentTarget;if(!k)return;const V=k.getBoundingClientRect(),S=typeof window<"u"?window.scrollX:0,C=typeof window<"u"?window.scrollY:0;s.left=V.left+V.width/2+S,s.top=V.bottom+8+C,s.layerId=b,s.visible=!0}function d(){s.visible=!1,s.layerId=null}function p(m){return[{label:"Назва",value:g(m.name)},{label:"Сервіс",value:g(m.service)},{label:"Посилання",value:g(m.url),breakLine:!0}]}function x(m){return typeof(m==null?void 0:m.name)=="string"?m.name.trim():""}function g(m){return m==null||m===""?null:String(m)}return e.watch(()=>o.selected?o.selected.slice():[],m=>{!s.visible||!s.layerId||m.includes(s.layerId)&&(s.visible=!1,s.layerId=null)}),(m,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:i,class:"catalog-tab"},[e.createElementVNode("div",Cc,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=k=>a.value=k),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,a.value]]),(e.openBlock(),e.createElementBlock("svg",Nc,[...b[1]||(b[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",Vc,[f.value.length===0?(e.openBlock(),e.createElementBlock("div",Bc," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,k=>(e.openBlock(),e.createElementBlock("div",{key:k.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:V=>h(k.id)},[e.createElementVNode("div",Sc,[(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",u(k.id)?"rotate-90":""])},[...b[2]||(b[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",vc,e.toDisplayString(k.name),1)]),e.createElementVNode("div",Lc,e.toDisplayString(k.layers.length),1)],8,$c),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(k.layers,V=>(e.openBlock(),e.createElementBlock("div",{key:V.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Ac,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(V.id),onChange:S=>m.$emit("toggle-layer",V.id,S.target.checked,V)},null,40,Tc),b[3]||(b[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 shrink-0"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Mc,e.toDisplayString(V.name),1)]),e.createElementVNode("div",Fc,[Array.isArray(V.filters)&&V.filters.length?(e.openBlock(),e.createBlock(Sn,{key:0,count:V.filters.length,layer:V,disabled:!t.selected.includes(V.id),onMouseenter:S=>y(S,V.id),onMouseleave:d,onFocus:S=>y(S,V.id),onBlur:d},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(to,{items:p(V)},null,8,["items"])])]))),128))],512),[[e.vShow,u(k.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"]]),zc={class:"flex flex-col gap-0"},Ic={class:"text-xs text-slate-600 font-semibold"},jc=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),i=e.ref(null);let s=null;const c=e.computed(()=>{if(!r.open)return{display:"none"};const x=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${x}px`,maxWidth:`${x}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function f(){if(r.open){y();return}if(!l.value){y();return}r.open=!0,e.nextTick(()=>{a(),d(),requestAnimationFrame(()=>{a()})})}function a(){if(!r.open||!l.value||!i.value)return;const x=l.value.getBoundingClientRect(),g=12,m=window.scrollX+g,b=window.scrollX+window.innerWidth-g,k=window.scrollY+g,V=window.scrollY+window.innerHeight-g,S=i.value.offsetWidth||Math.min(460,window.innerWidth-24),C=i.value.offsetHeight||0;let _=x.left+window.scrollX+(x.width-S)/2;_<m&&(_=m),_+S>b&&(_=Math.max(m,b-S)),r.left=_;let w=x.bottom+window.scrollY+g;w+C>V&&(w=x.top+window.scrollY-C-g,w<k&&(w=Math.max(k,V-C))),w<k&&(w=k),w+C>V&&(w=Math.max(k,V-C)),r.top=w,r.transform="none"}function h(x){var m,b;if(!r.open)return;const g=x.target;(m=l.value)!=null&&m.contains(g)||(b=i.value)!=null&&b.contains(g)||y()}function u(x){x.key==="Escape"&&y()}function y(){p(),r.open=!1,l.value=null,i.value=null}function d(){p(),i.value&&(s=new ResizeObserver(()=>{a()}),s.observe(i.value))}function p(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",h,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",a,!0),window.addEventListener("resize",a)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",h,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",a,!0),window.removeEventListener("resize",a),p()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>a())},{deep:!0}),n({close:y}),(x,g)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(f,["prevent","stop"])},[e.renderSlot(x.$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",zc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,m=>(e.openBlock(),e.createElementBlock("div",{key:m.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",Ic,e.toDisplayString(m.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":m.breakLine}])},e.toDisplayString(m.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Pc={class:"selected-tab"},Rc={class:"selected-tab__actions"},Oc={key:0,class:"selected-tab__scroll"},Uc=["onDragstart","onDragover","onDrop"],qc={class:"selected-tab__item-header"},Hc={class:"selected-tab__item-info"},Wc=["checked","onChange"],Yc={class:"selected-tab__item-name"},Zc={class:"selected-tab__item-controls"},Gc=["onClick"],Kc={class:"selected-tab__menu-inner"},Xc=we(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),i=e.ref(null),s=e.ref(null),c=new Map,f=e.reactive({top:0,left:0}),a=e.ref(null),h=e.reactive({top:0,left:0}),u=e.ref(null),y=new Map,d=e.reactive({});function p(v){var M;for(const N of((M=o.catalog)==null?void 0:M.groups)??[]){const E=N.layers.find(A=>A.id===v);if(E)return E}return null}e.watch(()=>o.selected,v=>{v.forEach(M=>{l[M]==null&&(l[M]=100)})},{immediate:!0});function x(){if(!i.value)return;const v=c.get(i.value);if(!v)return;const M=v.getBoundingClientRect();f.top=M.bottom+8+window.scrollY,f.left=M.left+window.scrollX}e.watch(()=>o.selected,v=>{v.forEach(M=>{d[M]==null&&(d[M]=!0)})},{immediate:!0});function g(v,M){d[v]=M;const N=Ie(v);N&&N.setVisible(M)}function m(v,M){M?y.set(v,M):y.delete(v)}function b(v){a.value=a.value===v?null:v,a.value&&e.nextTick(()=>{k(v),requestAnimationFrame(()=>{k(v)})})}function k(v){const M=y.get(v);if(!M||!u.value)return;const N=M.getBoundingClientRect(),E=12,A=6,I=window.scrollX+E,K=window.scrollX+window.innerWidth-E,re=window.scrollY+E,J=window.scrollY+window.innerHeight-E,ne=u.value.offsetWidth||190,me=u.value.offsetHeight||0;let pe=N.bottom+window.scrollY+A,de=N.left+window.scrollX;de+ne>K&&(de=N.right+window.scrollX-ne,de<I&&(de=I)),de<I&&(de=I),pe+me>J&&(pe=N.top+window.scrollY-me-A,pe<re&&(pe=Math.max(re,J-me))),pe<re&&(pe=re),pe+me>J&&(pe=Math.max(re,J-me)),h.top=pe,h.left=de}function V(v){const M=Ie(v);M&&M.remove(),r("remove",v),a.value=null}function S(v){const M=v.target,N=i.value,E=a.value;if(N){const A=s.value,I=c.get(N);if(A&&A.contains(M)||I&&I.contains(M))return;i.value=null}if(E){const A=u.value,I=y.get(E);if(A&&A.contains(M)||I&&I.contains(M))return;a.value=null}}function C(){i.value&&x(),a.value&&k(a.value)}e.onMounted(()=>{document.addEventListener("click",S),window.addEventListener("resize",C),window.addEventListener("scroll",C,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",S),window.removeEventListener("resize",C),window.removeEventListener("scroll",C,!0)});const{map:_}=We();function w(v){var A,I,K;if(!v)return;const M=Ie(v),N=p(v);if(!M&&!N)return;if(((A=N==null?void 0:N.extent)==null?void 0:A.length)===4&&((I=_.value)!=null&&I.fitBounds)){const re=N.extent.map(J=>Number(J));if(re.every(J=>Number.isFinite(J))){const[J,ne,me,pe]=re;_.value.fitBounds([[J,ne],[me,pe]],{padding:40}),a.value=null;return}}(K=M==null?void 0:M.getSource)!=null&&K.call(M)&&(a.value=null)}const $=e.ref(null),D=e.ref(null);function q(v,M){$.value=M,D.value=M,v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(M)))}function Q(v){D.value=v}function oe(v,M){if(v.preventDefault(),$.value===null||$.value===M){$.value=null,D.value=null;return}const E=[...o.selected],[A]=E.splice($.value,1);E.splice(M,0,A),r("reorder",E),$.value=null,D.value=null}function Z(){$.value=null,D.value=null}function ee(v){return v==null||v===""?null:String(v)}function H(v,M){return!Array.isArray(v)||v.length===0?null:`${v.length} ${M}`}function z(v){var pe,de,Ve,Y,T,j;const M=Ie(v),N=p(v);if(!M&&!N)return[];const E=(N==null?void 0:N.name)||((de=(pe=M==null?void 0:M.opts)==null?void 0:pe.layer)==null?void 0:de.name)||null,A=(N==null?void 0:N.service)||((Ve=M==null?void 0:M.opts)==null?void 0:Ve.service)||null,I=(Y=M==null?void 0:M.getSource)==null?void 0:Y.call(M),K=I&&"tiles"in I?(T=I.tiles)==null?void 0:T[0]:(N==null?void 0:N.url)||null,re=(N==null?void 0:N.source_path)||null,J=(M==null?void 0:M.popup)||(N==null?void 0:N.popup),ne=(M==null?void 0:M.card)||(N==null?void 0:N.card),me=(N==null?void 0:N.filters)||((j=M==null?void 0:M.opts)==null?void 0:j.filters);return[{label:"Назва",value:ee(E)},{label:"Сервіс",value:ee(A)},{label:"Посилання",value:ee(K),breakLine:!0},{label:"Джерело",value:ee(re),breakLine:!0},{label:"Popup",value:H(J,"полів")},{label:"Картка",value:H(ne,"полів")},{label:"Фільтри",value:H(me,"фільтрів")}]}return(v,M)=>(e.openBlock(),e.createElementBlock("div",Pc,[e.createElementVNode("div",Rc,[e.createElementVNode("button",{class:"selected-tab__add",onClick:M[0]||(M[0]=N=>r("select-layer"))},[...M[3]||(M[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",Oc,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(N,E)=>{var A;return e.openBlock(),e.createElementBlock("div",{key:N,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":$.value===E,"selected-tab__item--over":D.value===E}]),draggable:"true",onDragstart:I=>q(I,E),onDragover:e.withModifiers(I=>Q(E),["prevent"]),onDrop:I=>oe(I,E),onDragend:Z},[e.createElementVNode("div",qc,[e.createElementVNode("div",Hc,[M[4]||(M[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:d[N]??!0,onChange:I=>g(N,I.target.checked)},null,40,Wc),e.createElementVNode("span",Yc,e.toDisplayString(((A=p(N))==null?void 0:A.name)||"Шар"),1)]),e.createElementVNode("div",Zc,[e.createVNode(qo,{"layer-id":N},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:I=>m(N,I),onClick:e.withModifiers(I=>b(N),["stop"])},[...M[5]||(M[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,Gc)])])],42,Uc)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:u,class:"selected-tab__menu",style:e.normalizeStyle({top:h.top+"px",left:h.left+"px"})},[e.createElementVNode("div",Kc,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:M[1]||(M[1]=N=>w(a.value))},[...M[6]||(M[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(jc,{items:z(a.value)},{default:e.withCtx(()=>[...M[7]||(M[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"]),M[9]||(M[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:M[2]||(M[2]=N=>V(a.value))},[...M[8]||(M[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-1566770c"]]),Qc={class:"filter-tab"},Jc={key:0,class:"filter-tab__header"},ed={class:"filter-tab__title"},td={key:1,class:"filter-tab__content rounded-md"},nd={class:"filter-tab__scroll"},od={key:2,class:"filter-tab__empty"},rd=we(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,i=e.computed(()=>{var f;return((f=r.layer)==null?void 0:f.filters)??[]}),s=e.computed(()=>i.value.length>0);function c(f){l("change",f.data)}return(f,a)=>(e.openBlock(),e.createElementBlock("div",Qc,[t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",Jc,[e.createElementVNode("div",null,[e.createElementVNode("p",ed,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",td,[e.createElementVNode("div",nd,[e.createVNode(e.unref(o),{view:"vertical",schema:i.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:a[0]||(a[0]=h=>c(h))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",od,[...a[1]||(a[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),ld={class:"flex items-center justify-between mb-1"},ad={class:"flex items-center gap-2"},sd={class:"text-lg font-semibold text-gray-800"},id={key:0},cd={key:1,class:"block text-sm font-normal text-gray-500"},dd={class:"flex items-center gap-2"},ud={class:"flex mb-4 border-b border-gray-200"},pd={class:"map-catalog-widget__body"},Xo=we(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=ve.useRoute(),o=ve.useRouter();function r(){const z=n.query["catalog-tab"];return(Array.isArray(z)?z[0]:z)==="selected"?"selected":"catalog"}const l=e.ref(r()),i=e.ref({groups:[]}),s=e.ref([]),c=e.ref(""),{map:f}=We(),a=e.reactive({}),h=e.ref(null),u=e.ref(!0),y=e.ref(!1);function d(z){return i.value.groups.map(v=>v.layers.find(M=>M.id===z)).find(Boolean)||null}function p(z){return typeof(z==null?void 0:z.name)=="string"&&z.name.trim().length>0}function x(){const z=h.value;if(!z)return;delete a[z];const v=Ie(z);v!=null&&v.setFilter&&v.setFilter("")}function g(z,v){const M=Ie(z);if(a[z]={...v},!(M!=null&&M.setFilter))return;const N=Object.entries(v).filter(([,E])=>E!=null&&E!=="").map(([E,A])=>`${E}=${A}`);M.setFilter(N.join("|"))}function m(z){const v=h.value;v&&g(v,z)}function b(z){const v=z.url;let M=null;if(v&&(M=v.startsWith("http")?v:`${window.location.origin}${v}`),!M)return null;const N=(z.service||"").toString().toLowerCase(),E=z.count??null;return N&&N!=="vtile"?{service:N,count:E,source:{type:"raster",tiles:[M],tileSize:256,minzoom:0,maxzoom:20}}:{service:N,count:E,source:{type:"vector",tiles:[M],minzoom:0,maxzoom:14},layer:{style:z.style},card:z.card,popup:z.popup}}function k(z,v,M){var I;const N=M??d(z);if(!N)return;const E=b(N);if(!E)return;const A=Ie(N.id,E,f);if(A)if(A.setVisible(v),v){if(!s.value.includes(z)&&(s.value.push(z),(I=f.value)!=null&&I.getLayer(z)))try{f.value.moveLayer(z)}catch(K){console.warn("Cannot move new layer",z,K)}}else s.value=s.value.filter(K=>K!==z),h.value===z&&(x(),h.value=null)}function V(){s.value.forEach(z=>{const v=Ie(z);v&&v.setVisible(!1)}),s.value=[]}function S(z){s.value=[...z],e.nextTick(()=>{var E;if(!f.value)return;const v=((E=f.value.getStyle())==null?void 0:E.layers)??[];let M;const N=A=>v.filter(I=>{var K,re;return(I==null?void 0:I.source)===A||(I==null?void 0:I.id)===A||((re=(K=I==null?void 0:I.id)==null?void 0:K.startsWith)==null?void 0:re.call(K,`${A}`))}).map(I=>I.id);for(let A=z.length-1;A>=0;A-=1){const I=z[A],K=N(I);K.length&&(K.forEach(re=>{var J;if((J=f.value)!=null&&J.getLayer(re))try{f.value.moveLayer(re,M)}catch(ne){console.warn("Cannot move layer",re,ne)}}),M=K[0])}})}function C(z){!z||!Array.isArray(z.filters)||z.filters.length===0||s.value.includes(z.id)&&(h.value=z.id,a[z.id]||(a[z.id]={}),l.value="filter")}function _(){l.value="catalog"}const w=e.computed(()=>h.value?d(h.value):null),$=e.computed(()=>{const z=h.value;return z?a[z]??{}:{}}),D=e.computed(()=>i.value.groups.reduce((z,v)=>z+v.layers.filter(p).length,0)),q=e.computed(()=>l.value==="selected"?"Вибрані шари":l.value==="filter"?"Фільтр шарів":"Каталог"),Q=e.computed(()=>l.value==="selected"?s.value.length:l.value==="catalog"?D.value:null),oe=e.computed(()=>{var z;return l.value==="filter"?((z=w.value)==null?void 0:z.name)??"":""});async function Z(){const v=await(await fetch("/api/gis-layer-list")).json(),M=new Map;v.forEach(A=>{const I=A.group_id??"other";M.has(I)||M.set(I,{id:I,name:A.group_name||"Інші шари",layers:[]}),M.get(I).layers.push(A)}),i.value={groups:Array.from(M.values())};const N=n.query.layers;if(!N)return;const E=Array.isArray(N)?N[0]:N;typeof E=="string"&&E.split(",").forEach(A=>{const I=A.trim();if(!I)return;const K=d(I);K&&k(I,!0,K)})}e.watch(h,z=>{!z&&l.value==="filter"&&(l.value="catalog")}),e.watch(w,z=>{!z&&h.value&&(h.value=null)}),e.watch(s,z=>{const v={...n.query};z.length?v.layers=z.join(","):delete v.layers,o.replace({query:v}).catch(()=>{})},{deep:!0});function ee(){u.value=!u.value}function H(){y.value=window.innerWidth<=768}return e.onMounted(()=>{Z(),H(),y.value&&(u.value=!1),window.addEventListener("resize",H)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",H)}),(z,v)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",u.value&&(l.value==="selected"||Q.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",ld,[e.createElementVNode("div",ad,[v[5]||(v[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",sd,[e.createTextVNode(e.toDisplayString(q.value)+" ",1),Q.value!==null?(e.openBlock(),e.createElementBlock("span",id,"("+e.toDisplayString(Q.value)+")",1)):e.createCommentVNode("",!0),oe.value?(e.openBlock(),e.createElementBlock("span",cd,e.toDisplayString(oe.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",dd,[e.createElementVNode("button",{onClick:V,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...v[6]||(v[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-a5b24fc9><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-a5b24fc9></path><path d="M21 3v5h-5" data-v-a5b24fc9></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-a5b24fc9></path><path d="M8 16H3v5" data-v-a5b24fc9></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:ee,"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":u.value})},[...v[7]||(v[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!u.value}])},[e.createElementVNode("div",ud,[e.createElementVNode("button",{onClick:v[0]||(v[0]=M=>l.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:v[1]||(v[1]=M=>l.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",pd,[l.value==="catalog"?(e.openBlock(),e.createBlock(Dc,{key:0,class:"map-catalog-widget__scroll",catalog:i.value,selected:s.value,search:c.value,"onUpdate:search":v[2]||(v[2]=M=>c.value=M),onToggleLayer:k,onOpenFilter:C},null,8,["catalog","selected","search"])):l.value==="selected"?(e.openBlock(),e.createBlock(Xc,{key:1,catalog:i.value,selected:s.value,onToggleLayer:k,onSelectLayer:v[3]||(v[3]=M=>l.value="catalog"),onReorder:S,onRemove:v[4]||(v[4]=M=>s.value=s.value.filter(N=>N!==M))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(rd,{key:2,layer:w.value,value:$.value,onChange:m,onClose:_},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-a5b24fc9"]]),md={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},fd={class:"flex items-start justify-between gap-3 p-5 pb-3"},gd={class:"inline-block text-xl font-semibold text-gray-800"},yd={key:0,class:"mt-1 text-sm text-gray-500"},hd={class:"flex items-center gap-[6px]"},bd={class:"px-5 pb-5 space-y-6"},xd={key:0,class:"space-y-2"},kd={class:"flex flex-wrap gap-4"},wd=["value"],_d={key:1,class:"text-sm text-gray-500"},Ed={key:2,class:"text-sm text-gray-500"},Cd={class:"text-4xl font-medium text-gray-800"},Nd={class:"space-y-[14px]"},Vd={class:"flex items-center gap-[10px] text-gray-600"},Bd={class:"font-medium text-gray-700"},$d={class:"flex items-center justify-end text-end gap-3"},Sd={class:"font-medium text-gray-800"},vd={class:"min-w-[40px] font-medium text-[#3C3C4399]"},Qo=we(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),i=e.ref([]),s=e.ref(null),c=e.ref(null),f=e.ref(null),a=e.ref(null),h=e.ref(null),u=e.ref({}),y=e.ref(null);function d(H){return H&&JSON.parse(JSON.stringify(H))}const p=e.computed(()=>{const H=o.config.layer;if(typeof H!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const z=H.trim();if(!z)throw new Error("MapAttributeWidget: `layer` must be non-empty");return z}),x=e.computed(()=>{const{list:H,attribute:z}=o.config;if(Array.isArray(H)&&H.length)return H.map(v=>({id:(v==null?void 0:v.id)!=null?String(v.id).trim():"",text:(v==null?void 0:v.text)!=null&&String(v.text).trim()||null})).filter(v=>v.id.length);if(Array.isArray(z))return z.map(v=>v!=null?String(v).trim():"").filter(v=>v.length).map(v=>({id:v,text:null}));if(typeof z=="string"){const v=z.trim();if(!v)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:v,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),g=e.computed(()=>x.value.map(H=>({id:H.id,label:H.text||u.value[H.id]||H.id})));e.watch(x,H=>{if(!H.length){y.value=null,i.value=[];return}(!y.value||!H.some(z=>z.id===y.value))&&(y.value=H[0].id)},{immediate:!0});const m=e.computed(()=>{var H;return y.value||((H=x.value[0])==null?void 0:H.id)||null});e.watch(p,()=>{var H,z;(z=(H=c.value)==null?void 0:H.remove)==null||z.call(H),c.value=null,f.value=null,a.value=null,h.value=null,u.value={}});const b=e.computed(()=>{var H;return(H=a.value)!=null&&H.length?{id:p.value,name:f.value,filters:a.value}:null}),k=e.computed(()=>{var H,z;return((z=(H=b.value)==null?void 0:H.filters)==null?void 0:z.length)||0});async function V(H){var M;const z=await fetch(`/api/gis-service/${encodeURIComponent(H)}`);if(!z.ok){let N="Не вдалося завантажити налаштування шару";try{const E=await z.json();N=((M=E==null?void 0:E.message)==null?void 0:M.error)||(E==null?void 0:E.message)||N}catch{}throw new Error(N)}const v=await z.json();return f.value=(v==null?void 0:v.name)||null,a.value=Array.isArray(v==null?void 0:v.filters)?v.filters:null,h.value=d((v==null?void 0:v.style)||{}),u.value=((v==null?void 0:v.attributes)||[]).reduce((N,E)=>{const A=typeof(E==null?void 0:E.name)=="string"?E.name.trim():"",I=typeof(E==null?void 0:E.ua)=="string"?E.ua.trim():"";return A&&(N[A]=I||A),N},{}),v}function S(H,z){let v=Ie(H);if(!v){const M=`${location.origin}/api/vtile/${H}/ua/{z}/{x}/{y}.vmt`;v=Ie(H,{source:{type:"vector",tiles:[M],minzoom:0,maxzoom:14},layer:{id:H,source:H,"source-layer":H,style:(z==null?void 0:z.style)||{}},card:z==null?void 0:z.card,popup:z==null?void 0:z.popup})}return c.value=v,v}async function C(H,z){var N;const v=`/api/gis-service/${encodeURIComponent(H)}/${encodeURIComponent(z)}`,M=await fetch(v);if(!M.ok){let E="Не вдалося отримати статистику";try{const A=await M.json();E=((N=A==null?void 0:A.message)==null?void 0:N.error)||(A==null?void 0:A.message)||E}catch{}throw new Error(E)}return M.json()}function _(H){const z=new Map;return H&&(H.rules||[]).forEach(M=>{const N=(M==null?void 0:M.value)??(M==null?void 0:M.id);N!=null&&z.set(String(N),M)}),z}function w(H,z,v,M,N){if(typeof(z==null?void 0:z.color)=="string"&&z.color.trim())return z.color.trim();const E=o.config.colors||{};if(E[H])return E[H];const I=_(v==null?void 0:v.style).get(H);return typeof(I==null?void 0:I.color)=="string"&&I.color.trim()?I.color.trim():n[N%n.length]}function $(H,z,v,M){var N;return(z==null?void 0:z.text)||(z==null?void 0:z.label)||(z==null?void 0:z.name)||(z==null?void 0:z[`${M}_text`])||((N=_(v==null?void 0:v.style).get(H))==null?void 0:N.label)||H}function D(H,z,v,M){if(!H)return;const N=d((z==null?void 0:z.style)||h.value)||{},E=M.trim();if(!E)return;const A={...N.colors||{},...o.config.colors||{}};E===M&&v.forEach(I=>{I.color.trim()&&(A[I.id]=I.color)}),H.setStyle({...N,type:N.type||"polygon",colorAttr:E,opacity:.8,colors:A})}async function q(){var E,A;i.value=[],s.value=null;const H=p.value,z=m.value;if(!z)return;l.value=!0;const v=await V(H);S(H,v);const M=await C(H,z),N=Array.isArray(M==null?void 0:M.rows)?M.rows.map((I,K)=>{const re=(I==null?void 0:I.id)??(I==null?void 0:I.value),J=re!=null?String(re):"";if(!J)return null;const ne=$(J,I,v,z),me=Number((I==null?void 0:I.count)??0)||0,pe=w(J,I,v,z,K);return{id:J,label:ne,count:me,color:pe}}).filter(Boolean):[];i.value=N,s.value=((E=M==null?void 0:M.field)==null?void 0:E.label)||((A=M==null?void 0:M.field)==null?void 0:A.name)||null,D(c.value,v,N,z),l.value=!1}e.watch(()=>[p.value,m.value],()=>{q()},{immediate:!0});const Q=e.computed(()=>"Набори даних"),oe=e.computed(()=>i.value.reduce((H,z)=>H+z.count,0)),Z=e.computed(()=>{var v;const H=m.value;return((v=g.value.find(M=>M.id===H))==null?void 0:v.label)||null||s.value||H||null});function ee(H){return oe.value?`${(H/oe.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var H,z;(z=(H=c.value)==null?void 0:H.remove)==null||z.call(H)}),(H,z)=>r.value?(e.openBlock(),e.createElementBlock("div",md,[e.createElementVNode("div",fd,[e.createElementVNode("div",null,[e.createElementVNode("h2",gd,e.toDisplayString(Q.value),1),Z.value&&g.value.length===1?(e.openBlock(),e.createElementBlock("p",yd,e.toDisplayString(Z.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",hd,[b.value?(e.openBlock(),e.createBlock(Sn,{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:k.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:z[1]||(z[1]=v=>r.value=!1)},[...z[3]||(z[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",bd,[g.value.length>1?(e.openBlock(),e.createElementBlock("div",xd,[e.createElementVNode("div",kd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,v=>(e.openBlock(),e.createElementBlock("label",{key:v.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:v.id,"onUpdate:modelValue":z[2]||(z[2]=M=>y.value=M)},null,8,wd),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(v.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",_d,"Завантаження…")):i.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Cd,e.toDisplayString(oe.value),1),e.createElementVNode("ul",Nd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,v=>(e.openBlock(),e.createElementBlock("li",{key:v.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Vd,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:v.color})},null,4),e.createElementVNode("span",Bd,e.toDisplayString(v.label),1)]),e.createElementVNode("div",$d,[e.createElementVNode("span",Sd,e.toDisplayString(v.count),1),e.createElementVNode("span",vd,e.toDisplayString(ee(v.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Ed,"Дані відсутні"))])])):(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:z[0]||(z[0]=v=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Ld=["title"],Ad={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"},Td=["onClick"],Md=["placeholder"],Fd={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Dd={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},zd={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},Id={class:"max-h-[60vh] overflow-auto"},jd={key:0,class:"divide-y divide-gray-100"},Pd=["onClick"],Rd={key:1,class:"px-3 py-3 text-xs text-gray-500"},Jo="mapSearchAddressHistory",an="search-geom-source",sn="search-geom-layer-fill",vn="search-geom-layer-line",Od=12,Ud="https://data.softpro.ua/api-user/gis-url-proxy",qd="https://geo.rv.ua/api-user/dzk.api",Hd="https://nominatim.openstreetmap.org/search",er=we(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(U,G){if(typeof document>"u")return;let W=null;const ue=8,he=()=>{const Me=String((G==null?void 0:G.value)??"");if(!Me)return;W=document.createElement("div"),W.textContent=Me,Object.assign(W.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(W);const $e=U.getBoundingClientRect();W.style.left=`${$e.right+window.scrollX+ue}px`,W.style.top=`${$e.top+window.scrollY+($e.height-W.offsetHeight)/2}px`},Ne=()=>{W!=null&&W.parentNode&&W.parentNode.removeChild(W),W=null};U.addEventListener("mouseenter",he),U.addEventListener("mouseleave",Ne),Object.assign(U,{tooltipRightHandlers:{show:he,hide:Ne}})},unmounted(U){if(typeof document>"u")return;const G=U.tooltipRightHandlers;G&&(U.removeEventListener("mouseenter",G.show),U.removeEventListener("mouseleave",G.hide))}},o=t,r=We(),l=e.getCurrentInstance();function i(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function s(){var ue,he,Ne;const U=(ue=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ue.$settings,G=(he=U==null?void 0:U.map)==null?void 0:he.searchViewbox;if(G)return G;const W=i();return(Ne=W==null?void 0:W.map)==null?void 0:Ne.searchViewbox}function c(){var he,Ne,Me;const U=(he=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:he.$settings,G=(Ne=U==null?void 0:U.map)==null?void 0:Ne.addressSuggest;if(typeof G=="string"&&G.trim())return G.trim();const W=i(),ue=(Me=W==null?void 0:W.map)==null?void 0:Me.addressSuggest;if(typeof ue=="string"&&ue.trim())return ue.trim()}const f=!!c(),a=!!s(),h=e.computed(()=>{const U=["xy","parcel"];return f&&U.push("address"),a&&U.push("nominatim"),U}),u=e.computed(()=>{var W,ue;const U=h.value,G=(ue=(W=o.config)==null?void 0:W.tools)==null?void 0:ue.filter(he=>U.includes(he));return G&&G.length?G:U}),y=e.computed(()=>{var U,G;return((G=(U=o.config)==null?void 0:U.placeholder)==null?void 0:G.trim())||"Пошук…"}),d=e.ref(u.value[0]);e.watch(u,U=>{U.includes(d.value)||(d.value=U[0])});const p=e.ref(""),x=e.ref(!1),g=e.ref(null),m=e.ref(null),b=e.ref(null),k=e.ref(null),V=e.ref([]),S=e.ref(null),C=e.ref(!1),_=e.ref([]),w=e.computed(()=>(d.value==="address"||d.value==="nominatim")&&C.value),$=e.computed(()=>{var U;return((U=o.config)==null?void 0:U.addressDebounceMs)??1e3});let D=null;const q=e.ref(!1),Q=e.computed(()=>p.value.trim().length>0?V.value:_.value),oe=e.computed(()=>p.value.trim().length?`Знайдено ${V.value.length}`:"Історія пошуку"),Z=e.computed(()=>p.value.trim().length?"Нічого не знайдено":"Історія порожня");function ee(){var U,G;if(typeof window>"u")return[];try{const W=(G=(U=window.localStorage)==null?void 0:U.getItem)==null?void 0:G.call(U,Jo);if(!W)return[];const ue=JSON.parse(W);return Array.isArray(ue)?ue:[]}catch{return[]}}function H(U){var G,W;typeof window>"u"||(W=(G=window.localStorage)==null?void 0:G.setItem)==null||W.call(G,Jo,JSON.stringify(U))}function z(U){const W=[U,..._.value.filter(ue=>ue.id!==U.id)].slice(0,10);_.value=W,H(W)}let v=null;function M(){v&&(v.remove(),v=null)}function N(){var G;const U=(G=r.map)==null?void 0:G.value;U&&(U.getLayer(sn)&&U.removeLayer(sn),U.getLayer(vn)&&U.removeLayer(vn),U.getSource(an)&&U.removeSource(an))}function E(U){var he,Ne,Me,$e;if(!((he=o.config)!=null&&he.showMarker)||!U)return;const G=(Ne=r.map)==null?void 0:Ne.value;if(!G)return;N(),I();const W={type:"Feature",geometry:U,properties:{}};G.addSource(an,{type:"geojson",data:W});const ue=((Me=o.config)==null?void 0:Me.geometryColor)||(($e=o.config)==null?void 0:$e.markerColor)||"#3B82F6";G.addLayer({id:sn,type:"fill",source:an,paint:{"fill-color":ue,"fill-opacity":.3}}),G.addLayer({id:vn,type:"line",source:an,paint:{"line-color":ue,"line-width":1,"line-opacity":1}}),K(G)}let A=null;function I(){A&&(cancelAnimationFrame(A),A=null)}function K(U){const W=performance.now();function ue(he){if(!U.getLayer(sn))return;const Me=(he-W)%1200/1200,$e=Math.sin(Me*Math.PI),it=.2+$e*.3,yt=1+$e*1;U.setPaintProperty(sn,"fill-opacity",it),U.setPaintProperty(vn,"line-width",yt),A=requestAnimationFrame(ue)}A=requestAnimationFrame(ue)}function re(U,G){var he,Ne,Me;if(!((he=o.config)!=null&&he.showMarker))return;M(),N();const W=(Ne=r.map)==null?void 0:Ne.value;if(!W)return;if(G){E(G);return}const ue=((Me=o.config)==null?void 0:Me.markerColor)||"#3B82F6";v=new maplibregl.Marker({color:ue}).setLngLat([U.lng,U.lat]).addTo(W)}const J=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function ne(){var Ne;if(!k.value)return;const U=k.value.getBoundingClientRect(),G=(Ne=b.value)==null?void 0:Ne.getBoundingClientRect(),W=(G==null?void 0:G.width)??U.width,ue=((G==null?void 0:G.left)??U.left)+window.scrollX,he=U.bottom+window.scrollY+Od;J.left=`${ue}px`,J.top=`${he}px`,J.width=`${W}px`,J.display="block"}const me=()=>{w.value&&ne()};function pe(){D&&(clearTimeout(D),D=null)}e.watch(d,()=>{p.value="",x.value=!1,V.value=[],C.value=!1,pe(),q.value=!1,M(),N()}),e.watch(w,U=>{U?e.nextTick(()=>{ne()}):J.display="none"}),e.watch(p,U=>{if(d.value!=="address"&&d.value!=="nominatim"){V.value=[],pe();return}if(!U.trim()){V.value=[],C.value=_.value.length>0,pe();return}pe(),C.value=!0,D=window.setTimeout(()=>{zt(U).catch(G=>{const W=(G==null?void 0:G.message)||"Помилка пошуку адреси";fe.notify({type:"error",title:"Пошук адреси",message:W})})},$.value)});function de(U){var ue;const G=[];m.value&&G.push(m.value),U instanceof HTMLElement&&G.push(U);const W=(ue=g.value)==null?void 0:ue.querySelectorAll("li");W==null||W.forEach(he=>{G.push(he)}),G.forEach(he=>{he.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function Ve(U){x.value&&de(U.target),x.value=!x.value}function Y(U,G){de(G==null?void 0:G.target),d.value=U}function T(){p.value="",V.value=[],C.value=!1,q.value=!1,M(),N()}function j(U){const G=U.target;if(x.value){const W=g.value;W&&!W.contains(G)&&(de(G),x.value=!1)}if(w.value){const W=S.value,ue=k.value;W&&!W.contains(G)&&(!ue||!ue.contains(G))&&(C.value=!1)}}e.onMounted(()=>{_.value=ee(),window.addEventListener("click",j,!0),window.addEventListener("scroll",me,!0),window.addEventListener("resize",me)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",j,!0),window.removeEventListener("scroll",me,!0),window.removeEventListener("resize",me),pe(),M(),N()});function F(U){return U==="xy"?"Координати":U==="parcel"?"Кадастр":U==="nominatim"?"Nominatim":"Адресний"}function P(U){switch(U){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 le(U){const G=U.replace(/[,]+/g," ").trim();if(!G)return null;const W=G.split(/\s+/).filter(Boolean);if(W.length<2)return null;const ue=W.slice(0,2).map(Number);if(!ue.every(ct=>Number.isFinite(ct)))return null;let[he,Ne]=ue,Me=he,$e=Ne;const it=ct=>Math.abs(ct)<=90,yt=ct=>Math.abs(ct)<=180;if(!it(Me)||!yt($e))if(it($e)&&yt(Me))Me=Ne,$e=he;else return null;return{lat:Me,lng:$e}}function ye(U){return((U==null?void 0:U.items)||[]).map((W,ue)=>{var he,Ne,Me;return{id:String((W==null?void 0:W.id)??ue),title:(W==null?void 0:W.title)||((he=W==null?void 0:W.address)==null?void 0:he.label)||"Знайдений обʼєкт",lat:Number((Ne=W==null?void 0:W.position)==null?void 0:Ne.lat),lng:Number((Me=W==null?void 0:W.position)==null?void 0:Me.lng)}})}function Ee(U){const G=(U==null?void 0:U.result)||(U==null?void 0:U.data)||U;if(!G)return[];const W=G.geom_centroid;if(!W||!Array.isArray(W.coordinates))return[];const[ue,he]=W.coordinates;return!Number.isFinite(he)||!Number.isFinite(ue)?[]:[{id:"parcel",title:G.cadnum||G.cad_num||"Земельна ділянка",lat:he,lng:ue,geom:G.geom||null}]}function ge(U){return(Array.isArray(U==null?void 0:U.features)?U.features:[]).map((W,ue)=>{var ct,Vt,nn;const he=(ct=W==null?void 0:W.geometry)==null?void 0:ct.coordinates,Ne=Number(he==null?void 0:he[0]),Me=Number(he==null?void 0:he[1]);if(!Number.isFinite(Me)||!Number.isFinite(Ne))return null;const $e=(W==null?void 0:W.properties)||{},it=((Vt=$e==null?void 0:$e.geocoding)==null?void 0:Vt.label)||($e==null?void 0:$e.display_name)||($e==null?void 0:$e.label)||"Адреса";return{id:String(((nn=$e==null?void 0:$e.geocoding)==null?void 0:nn.place_id)||($e==null?void 0:$e.place_id)||ue),title:it,lat:Me,lng:Ne}}).filter(W=>!!W)}function Ue(U){return Number.isFinite(U.lat)&&Number.isFinite(U.lng)}function ze(U){const G=Number(U);return Number.isFinite(G)?G:null}function Ye(U){var he,Ne,Me,$e,it,yt;const G=ze(U.lng)??ze(U.lon)??ze(U.longitude)??ze(U.x),W=ze(U.lat)??ze(U.latitude)??ze(U.y);if(G!=null&&W!=null)return{lat:W,lng:G};const ue=((he=U==null?void 0:U.geometry)==null?void 0:he.coordinates)??((Ne=U==null?void 0:U.geom_centroid)==null?void 0:Ne.coordinates)??((Me=U==null?void 0:U.centroid)==null?void 0:Me.coordinates)??((it=($e=U==null?void 0:U.geojson)==null?void 0:$e.geometry)==null?void 0:it.coordinates)??((yt=U==null?void 0:U.geom)==null?void 0:yt.coordinates);if(Array.isArray(ue)&&ue.length>=2){const ct=ze(ue[0]),Vt=ze(ue[1]);if(ct!=null&&Vt!=null)return{lat:Vt,lng:ct}}return null}function tt(U){return(Array.isArray(U==null?void 0:U.data)?U.data:[]).map((W,ue)=>{const he=Ye(W),Ne=String(W.text??W.title??W.label??W.name??W.address??W.display_name??W.id??"Адреса"),Me=String(W.id??W.code??W.value??ue);return he?{id:Me,title:Ne,...he}:{id:Me,title:Ne}}).filter(W=>!!(W!=null&&W.title))}function ot(U){const G=c();if(!G)return null;if(G.includes(":name"))return G.replace(":name",encodeURIComponent(U));try{const W=new URL(G,window.location.origin);return U.trim()&&W.searchParams.set("q",U),W.toString()}catch{return G}}async function xt(U){const G=ot(U);if(!G)return[];const W=await fetch(G);if(!W.ok)throw new Error(`HTTP ${W.status}`);const ue=await W.json();return tt(ue)}async function en(U){const G=new URL(Hd);G.searchParams.set("format","geojson"),G.searchParams.set("q",U),G.searchParams.set("addressdetails","1"),G.searchParams.set("bounded","1");const W=s();W&&G.searchParams.set("viewbox",W);const ue=await fetch(G.toString());if(!ue.ok)throw new Error(`HTTP ${ue.status}`);const he=await ue.json();return ge(he)}async function zt(U){if(V.value=[],pe(),d.value==="address"){if(!c()){fe.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ue=await xt(U);if(!ue.length){fe.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}V.value=ue;return}const G=await en(U);if(!G.length){fe.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}V.value=G}async function ft(U){if(Ue(U)){gt(U),z(U);return}try{const W=(await en(U.title))[0];if(!W||!Ue(W)){fe.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено координати адреси"});return}gt(W),z(W)}catch(G){const W=(G==null?void 0:G.message)||"Помилка пошуку адреси";fe.notify({type:"error",title:"Пошук адреси",message:W})}}function It(){d.value!=="address"&&d.value!=="nominatim"||p.value.trim().length||_.value.length&&(C.value=!0,e.nextTick(()=>{ne()}))}function tn(U){const W=U.replace(/\s+/g,"").split(":");if(console.log(W),W.length!==4)return!1;const ue=[10,2,3,4];return W.every((he,Ne)=>he.length===ue[Ne]&&/^\d+$/.test(he))}function gt(U){var W,ue;const G=((W=o.config)==null?void 0:W.zoom)??17;(ue=r.flyTo)==null||ue.call(r,{center:[U.lng,U.lat],zoom:G}),re(U,U.geom),q.value=!0}async function ht(){const U=p.value.trim();if(U){if(d.value==="xy"){const G=le(U);if(!G){fe.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}gt(G);return}if(d.value==="address"||d.value==="nominatim"){try{await zt(U)}catch(G){const W=(G==null?void 0:G.message)||"Помилка пошуку адреси";fe.notify({type:"error",title:"Пошук адреси",message:W})}return}try{const G=new URL(d.value==="here"?Ud:qd);if(d.value==="here")G.searchParams.set("searchtext",U);else{if(!tn(U)){fe.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}G.searchParams.set("cad_num",U)}const W=await fetch(G.toString());if(!W.ok)throw new Error(`HTTP ${W.status}`);const ue=await W.json(),he=d.value==="here"?ye(ue):Ee(ue);if(!he.length)fe.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const Ne=he[0];gt(Ne)}}catch(G){const W=(G==null?void 0:G.message)||"Помилка пошуку";fe.notify({type:"error",title:"Пошук",message:W})}}}return(U,G)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:b,class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(ht,["prevent"])},[u.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:Ve},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:m,class:"block w-full truncate",title:F(d.value)},[e.createTextVNode(e.toDisplayString(F(d.value)),1)],8,Ld)),[[n,P(d.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":x.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...G[3]||(G[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),x.value?(e.openBlock(),e.createElementBlock("div",Ad,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,W=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:W,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ue=>Y(W,ue)},[e.createTextVNode(e.toDisplayString(F(W)),1)],8,Td)),[[n,P(W)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:k,class:"relative flex-1 min-w-[140px]"},[d.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Fo.VsInputMask),{key:0,modelValue:p.value,"onUpdate:modelValue":G[0]||(G[0]=W=>p.value=W),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",q.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":G[1]||(G[1]=W=>p.value=W),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",q.value?"!pr-14":"!pr-8"]),onFocus:It},null,42,Md)),[[e.vModelText,p.value,void 0,{trim:!0}]]),e.createElementVNode("div",Fd,[q.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:T},[...G[4]||(G[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),G[5]||(G[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))]),w.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:S,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(J)},[e.createElementVNode("div",Dd,[e.createElementVNode("span",zd,e.toDisplayString(oe.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:G[2]||(G[2]=W=>C.value=!1)}," ✕ ")]),e.createElementVNode("div",Id,[Q.value.length?(e.openBlock(),e.createElementBlock("ul",jd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Q.value,W=>(e.openBlock(),e.createElementBlock("li",{key:W.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ue=>ft(W)},e.toDisplayString(W.title),9,Pd))),128))])):(e.openBlock(),e.createElementBlock("div",Rd,e.toDisplayString(Z.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-ba50488b"]]),Wd="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Yd="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Zd=we(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=We(),i=e.ref(null),s=e.ref(null),c=e.ref(null),f=e.ref(null);let a=null;function h(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function u(C){if(Array.from(document.styleSheets).some($=>{var D;return(D=$==null?void 0:$.href)==null?void 0:D.includes(C)}))return;const w=document.createElement("link");w.rel="stylesheet",w.href=C,document.head.appendChild(w)}function y(C){return new Promise((_,w)=>{const $=Array.from(document.scripts).find(q=>q.src===C);if($){if($._loaded)return _();$.addEventListener("load",()=>_()),$.addEventListener("error",()=>w(new Error(`Failed ${C}`)));return}const D=document.createElement("script");D.src=C,D.async=!0,D.onload=()=>{D._loaded=!0,_()},D.onerror=()=>w(new Error(`Failed ${C}`)),document.head.appendChild(D)})}function d(){var _,w,$;const C=window;return C.MapboxExportControl||((_=C.mapboxgl)==null?void 0:_.MapboxExportControl)||((w=C.mapboxglExport)==null?void 0:w.MapboxExportControl)||(($=C.mapboxglExport)==null?void 0:$.default)||null}function p(){const C=document.createElementNS("http://www.w3.org/2000/svg","svg");return C.setAttribute("xmlns","http://www.w3.org/2000/svg"),C.setAttribute("viewBox","0 0 24 24"),C.setAttribute("width","18"),C.setAttribute("height","18"),C.setAttribute("fill","none"),C.setAttribute("stroke","currentColor"),C.setAttribute("stroke-width","2"),C.setAttribute("stroke-linecap","round"),C.setAttribute("stroke-linejoin","round"),C.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((w,$)=>{const D=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(w).forEach(([q,Q])=>{D.setAttribute(q,Q)}),C.appendChild(D)}),C}function x(){const C=document.createElement("button");C.id="print-btn",C.type="button",C.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(" "),C.setAttribute("aria-label","Друк карти");const _=p(),w=document.createElement("span");return w.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(" "),w.textContent="Друк карти",w.setAttribute("aria-hidden","true"),C.appendChild(_),C.appendChild(w),C.addEventListener("click",$=>{$.stopPropagation(),g()}),f.value=C,C}function g(){if(!c.value)return;c.value.style.display==="block"?b():m()}function m(){var C,_,w;c.value&&(c.value.style.display="block",(C=f.value)==null||C.classList.add("scale-105","shadow-xl"),(_=s.value)==null||_.toggleCrosshair(!0),(w=s.value)==null||w.togglePrintableArea(!0),document.addEventListener("click",k))}function b(){var C,_,w;c.value&&(c.value.style.display="none",(C=f.value)==null||C.classList.remove("scale-105","shadow-xl"),(_=s.value)==null||_.toggleCrosshair(!1),(w=s.value)==null||w.togglePrintableArea(!1),document.removeEventListener("click",k))}function k(C){const _=i.value;_&&(C.target&&_.contains(C.target)||b())}function V(C){const _={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};C.querySelectorAll("label, option").forEach($=>{var q;const D=(q=$.textContent)==null?void 0:q.trim();D&&_[D]&&($.textContent=_[D])});const w=C.querySelector("button");w&&(w.textContent="Друкувати")}function S(C){const _=C.querySelector(".mapboxgl-export-list");if(!_||!i.value)return;c.value=_;const w=C.querySelector("button");if(w&&(w.style.display="none"),C.style.display="none",!f.value){const D=x();i.value.appendChild(D)}_.style.display="none";const $="_printControlBound";if(!_[$]){const D=q=>q.stopPropagation();_.addEventListener("click",D),_.addEventListener("mousedown",D),_[$]=!0}i.value.appendChild(_),V(_)}return e.onMounted(async()=>{await(o==null?void 0:o());const C=n.value;if(!C)return;u(Wd),h();try{await y(Yd)}catch($){console.warn("[MapPrintControl] load error",$);return}const _=d();if(!_)return;const w=new _({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(s.value=w,typeof w.onAdd=="function"){const $=w.onAdd.bind(w);w.onAdd=D=>{const q=$(D);return setTimeout(()=>q&&S(q),50),q}}r?r(w,"top-right"):C.addControl(w,"top-right"),a=$=>{$.key==="Escape"&&b()},document.addEventListener("keyup",a)}),e.onBeforeUnmount(()=>{b(),a&&(document.removeEventListener("keyup",a),a=null);const C=n.value;if(s.value)try{l?l(s.value):C==null||C.removeControl(s.value)}catch{}s.value=null}),(C,_)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),Gd={class:"map-center-control"},Kd=["aria-label"],Xd={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"},Mt=we(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=We(),l=e.ref(null),i=e.ref(null),s=e.ref(null),c=e.ref(null),f=Gn(),a=e.computed(()=>{var b;return((b=f.value)==null?void 0:b.map)??null});function h(b){if(Array.isArray(b)&&b.length>=2){const[k,V]=b.slice(0,2).map(S=>Number(S));return Number.isNaN(k)||Number.isNaN(V)?null:[k,V]}if(b&&typeof b=="object"){const k=b,V=k.lng??k.lon??k.long??k.x,S=k.lat??k.y;if(V!=null&&S!=null){const C=Number(V),_=Number(S);if(!Number.isNaN(C)&&!Number.isNaN(_))return[C,_]}}if(typeof b=="string"){const k=b.split(",").map(V=>Number(V.trim()));if(k.length>=2&&k.every(V=>!Number.isNaN(V)))return[k[0],k[1]]}return null}function u(b){const k=h(b);k&&(l.value=k)}function y(b){const k=Number(b);Number.isNaN(k)||(i.value=k)}e.watch(()=>n.center,b=>u(b),{immediate:!0}),e.watch(()=>n.zoom,b=>y(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{s.value=h(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const k=Number(b);c.value=Number.isNaN(k)?null:k},{immediate:!0}),e.watch(()=>{var b;return(b=a.value)==null?void 0:b.center},b=>{u(b)},{immediate:!0}),e.watch(()=>{var b;return(b=a.value)==null?void 0:b.zoom},b=>{y(b)},{immediate:!0});const d=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),p=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),x=e.computed(()=>!!s.value);e.onMounted(async()=>{await(r==null?void 0:r());const b=o.value;if(b){if(!l.value){const k=b.getCenter();l.value=[k.lng,k.lat]}i.value==null&&(i.value=b.getZoom())}});function g(){const b=o.value;if(!b)return;const k=l.value||(()=>{const S=b.getCenter();return[S.lng,S.lat]})(),V=i.value??b.getZoom();b.flyTo({center:k,zoom:V})}function m(){const b=o.value;if(!b||!s.value)return;const k=c.value??i.value??b.getZoom();b.flyTo({center:s.value,zoom:k})}return(b,k)=>(e.openBlock(),e.createElementBlock("div",Gd,[x.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"])},[k[0]||(k[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(ae.House),{class:"w-4 h-4"})])),x.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":p.value,onClick:e.withModifiers(m,["stop"])},[e.createElementVNode("span",Xd,e.toDisplayString(d.value),1),e.createVNode(e.unref(ae.MapPin),{class:"w-4 h-4"})],8,Kd)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),Qd={class:"cursor-coordinates"},Jd={class:"cursor-coordinates__text"},eu=we(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Qd,[e.createElementVNode("span",Jd,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),tu={class:"minimap__wrapper"},Ln="minimap-viewport",nu="minimap-viewport-layer",ou=we(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var k,V,S,C;const n=t,o=((V=(k=e.getCurrentInstance())==null?void 0:k.appContext.config.globalProperties)==null?void 0:V.$settings)||null,r=Tt((S=o==null?void 0:o.map)==null?void 0:S.center)||[30,50],l=e.ref(null),i=e.shallowRef(null),s=(C=n.options)==null?void 0:C.active,c=e.ref(s===void 0?!1:!!s);function f(_,w){return typeof _=="number"&&Number.isFinite(_)?_:w}const a=e.computed(()=>{var q,Q;const _=(q=n.options)==null?void 0:q.width,w=(Q=n.options)==null?void 0:Q.height,$=f(n.width??_,210),D=f(n.height??w,150);return{width:`${$}px`,height:`${D}px`}});function h(){var w,$;const _=($=(w=n.mapContext)==null?void 0:w.map)==null?void 0:$.value;if(!_||typeof _.getStyle!="function")return null;try{const D=_.getStyle();return D?JSON.parse(JSON.stringify(D)):null}catch{return null}}let u=null;function y(){var q;if(typeof window>"u"||i.value||!l.value)return;const _=h(),w=r,$={container:l.value,style:_??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:w,zoom:((q=n.options)==null?void 0:q.zoom)??3,interactive:!1,attributionControl:!1},D={...$,...n.options??{}};D.container=$.container,i.value=new maplibregl.Map(D),i.value.on("load",()=>{p(),g()})}function d(){if(!i.value)return;const _=h();_&&(i.value.once("styledata",()=>{p(),g()}),i.value.setStyle(_))}function p(){if(i.value){if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{p(),g()});return}i.value.getSource(Ln)||(i.value.addSource(Ln,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),i.value.addLayer({id:nu,type:"fill",source:Ln,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function x(){c.value=!c.value,c.value&&e.nextTick(()=>{var _;return(_=i.value)==null?void 0:_.resize()})}function g(){var oe,Z;const _=(Z=(oe=n.mapContext)==null?void 0:oe.map)==null?void 0:Z.value;if(!i.value||!_||!_.getBounds)return;if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{g()});return}const w=_.getBounds();if(!w)return;const $=w.getNorthEast(),D=w.getSouthWest();if(!$||!D)return;const q=[[D.lng,$.lat],[$.lng,$.lat],[$.lng,D.lat],[D.lng,D.lat],[D.lng,$.lat]],Q=i.value.getSource(Ln);if(!Q){p();return}Q.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[q]},properties:{}})}function m(){var $;const _=n.mapContext,w=($=_==null?void 0:_.map)==null?void 0:$.value;!(_!=null&&_.on)||!w||(u==null||u(),u=_.on("move",g),g())}async function b(){const _=n.mapContext;if(_){if(typeof _.ready=="function")try{await _.ready()}catch{return}m()}}return e.onMounted(()=>{y(),b()}),e.watch(()=>n.mapContext,()=>{b(),g()}),e.watch(()=>{var _,w;return(w=(_=n.mapContext)==null?void 0:_.map)==null?void 0:w.value},()=>{i.value&&(d(),b())}),e.watch(a,()=>{i.value&&e.nextTick(()=>{var _;return(_=i.value)==null?void 0:_.resize()})}),e.watch(()=>n.options,()=>{var w;u==null||u(),u=null,i.value&&(i.value.remove(),i.value=null);const _=(w=n.options)==null?void 0:w.active;typeof _=="boolean"&&(c.value=_),e.nextTick(()=>{y(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{u==null||u(),u=null,i.value&&(i.value.remove(),i.value=null)}),(_,w)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":c.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:x},[e.createVNode(e.unref(ae.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",tu,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(a.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,c.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),ru={class:"pt-1 border-t border-gray-100"},lu={class:"space-y-1"},au=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),i=(f,a,h)=>Math.min(Math.max(f,a),h),s=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const f=i(r.value,-90,90),a=i(l.value,-180,180);o("submit",{lat:f,lng:a}),r.value=null,l.value=null},c=()=>{r.value=null,l.value=null,o("cancel")};return(f,a)=>(e.openBlock(),e.createElementBlock("div",ru,[a[2]||(a[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",lu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[0]||(a[0]=h=>r.value=h),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":a[1]||(a[1]=h=>l.value=h),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick: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}," Скасувати ")])])]))}}),su=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(ae.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),iu=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(ae.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),cu=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(ae.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),du=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Ft(t){return du.format(t)}function tr(t){return t>=1e3?`${Ft(t/1e3)} км`:`${Ft(t)} м`}const uu={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},pu={key:0,class:"flex-1 flex gap-1"},mu={key:1,class:"flex-1 font-mono text-gray-700"},fu=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),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 f=(y,d,p)=>Math.min(Math.max(y,d),p),a=()=>{i.value=!0},h=()=>{if(!Number.isFinite(s.value)||!Number.isFinite(c.value))return;const y=f(s.value,-90,90),d=f(c.value,-180,180);r("update",{id:o.id,coords:{lat:y,lng:d}}),i.value=!1},u=()=>{r("delete",o.id)};return(y,d)=>(e.openBlock(),e.createElementBlock("div",uu,[e.createVNode(e.unref(ae.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),i.value?(e.openBlock(),e.createElementBlock("div",pu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=p=>s.value=p),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,s.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[1]||(d[1]=p=>c.value=p),type:"number",step:"0.0001",min:"-180",max:"180",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота"},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("button",{class:"px-1.5 py-0.5 bg-emerald-500 text-white rounded hover:bg-emerald-600 text-xs",type:"button",onClick:h}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",mu,e.toDisplayString(l.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:a}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:u}," ✕ ")]))}}),gu={class:"ruler-control px-3 py-2.5 space-y-2"},yu={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},hu={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"},bu={class:"text-sm font-semibold text-slate-700"},xu={class:"ruler-row"},ku={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},wu={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"},_u={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},Eu=["onClick"],Cu={class:"flex items-center gap-2 mt-0.5 pl-7"},Nu={key:0,class:"text-base font-semibold text-green-600"},Vu={key:1,class:"text-xs text-gray-400"},Bu={class:"ruler-row flex items-center gap-2 cursor-pointer"},$u={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"},Su={class:"text-xs font-medium text-gray-600 flex-1"},vu={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},Lu=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],i=()=>{o.value=!o.value},s=(p,x)=>{const g=$=>$*Math.PI/180,m=g(x.lat-p.lat),b=g(x.lng-p.lng),k=g(p.lat),V=g(x.lat),S=Math.sin(m/2),C=Math.sin(b/2);return 6371e3*(2*Math.asin(Math.sqrt(S*S+Math.cos(k)*Math.cos(V)*C*C)))},c=e.computed(()=>{if(n.points.length<2)return 0;let p=0;for(let x=1;x<n.points.length;x+=1)p+=s(n.points[x-1].coords,n.points[x].coords);return n.isShapeClosed&&n.points.length>=2&&(p+=s(n.points[n.points.length-1].coords,n.points[0].coords)),p}),f=e.computed(()=>c.value>=1e3?`${Ft(c.value/1e3)} км`:`${Ft(c.value)} м`);function a(p){if(p.length<3)return 0;const x=p[0].lat,g=p[0].lng,m=(k,V)=>{const S=(k-x)*110574;return{x:(V-g)*111320*Math.cos(x*Math.PI/180),y:S}};let b=0;for(let k=0;k<p.length;k++){const V=(k+1)%p.length,S=m(p[k].lat,p[k].lng),C=m(p[V].lat,p[V].lng);b+=S.x*C.y-S.y*C.x}return Math.abs(b)*.5}const h=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const p=n.points.map(x=>x.coords);return a(p)}),u=e.computed(()=>h.value>0),y=e.computed(()=>{const p=h.value;if(p===0)return"—";if(r.value==="km2"){const g=p/1e6;return`${Ft(g)} км²`}if(r.value==="ha"){const g=p/1e4;return`${Ft(g)} га`}const x=p>=1?Math.round(p):p;return`${Ft(x)} м²`}),d=e.computed(()=>{const p=n.points.length;return p===1?"1 точка":p>=2&&p<=4?`${p} точки`:`${p} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(p,x)=>(e.openBlock(),e.createElementBlock("div",gu,[e.createElementVNode("button",yu,[e.createElementVNode("span",hu,[e.createVNode(e.unref(ae.Info),{size:12,"stroke-width":2.5})]),x[1]||(x[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",bu,e.toDisplayString(f.value),1)]),e.createElementVNode("div",xu,[e.createElementVNode("button",ku,[e.createElementVNode("span",wu,[e.createVNode(e.unref(ae.Info),{size:12,"stroke-width":2.5})]),x[2]||(x[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",_u,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(g,m)=>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",m===0&&"rounded-l-md",m===l.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(b=>r.value=g.id,["stop"])},e.toDisplayString(g.label),11,Eu)),64))])]),e.createElementVNode("div",Cu,[u.value?(e.openBlock(),e.createElementBlock("span",Nu,e.toDisplayString(y.value),1)):(e.openBlock(),e.createElementBlock("span",Vu,"—"))])]),e.createElementVNode("div",Bu,[e.createElementVNode("span",$u,[e.createVNode(e.unref(ae.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",Su,e.toDisplayString(d.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",vu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(g,m)=>(e.openBlock(),e.createBlock(fu,{key:g.id,id:g.id,index:m+1,coords:g.coords,onUpdate:x[0]||(x[0]=b=>p.$emit("update-point",b)),onDelete:b=>p.$emit("delete-point",g.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),Au={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},Tu={class:"flex items-start gap-2"},Mu=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Au,[e.createElementVNode("div",Tu,[e.createVNode(e.unref(ae.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))])]))}}),Fu={class:"space-y-1.5"},Du={class:"space-y-1 max-h-40 overflow-y-auto"},zu={class:"text-gray-700"},Iu={class:"font-semibold text-slate-800"},ju=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(i,s){const c=d=>d*Math.PI/180,f=c(s.lat-i.lat),a=c(s.lng-i.lng),h=c(i.lat),u=c(s.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(f/2)**2+Math.cos(h)*Math.cos(u)*Math.sin(a/2)**2)))}function r(i){return tr(i)}const l=e.computed(()=>{const i=[],s=n.points;if(s.length<2)return i;for(let c=0;c<s.length;c++){const f=c===s.length-1&&n.isShapeClosed?0:c+1;if(f>=s.length)break;const a=o(s[c].coords,s[f].coords);i.push({from:c+1,to:f+1,label:r(a)})}return i});return(i,s)=>(e.openBlock(),e.createElementBlock("div",Fu,[s[0]||(s[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",Du,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(c,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",zu,"Точка "+e.toDisplayString(c.from)+" → Точка "+e.toDisplayString(c.to),1),e.createElementVNode("span",Iu,e.toDisplayString(c.label),1)]))),128))])]))}}),Pu={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Ru={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Ou={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Uu={class:"flex items-center gap-2"},qu={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Hu={class:"flex border-b border-gray-200"},Wu={key:1,class:"px-3 py-2.5"},Yu={key:1,class:"text-xs text-gray-500"},Zu={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Gu={class:"flex gap-1.5"},Ku=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),i=e.computed(()=>l.value.length>0),s=e.ref(!1),c=e.ref(!1),f=e.ref("general");function a(q){f.value=q,r("tab-change",q)}e.onMounted(()=>{r("tab-change",f.value)});const h=e.computed(()=>l.value.length>=3&&!c.value);let u=1;const y=()=>l.value.map(q=>({id:q.id,coords:{...q.coords}})),d=()=>{l.value.length<3&&c.value&&(c.value=!1,r("shape-closed-change",!1)),r("points-change",y())},p=()=>{const q=u;return u+=1,q},x=q=>{l.value=[...l.value,{id:p(),coords:{lat:q.lat,lng:q.lng}}],d()},g=({id:q,coords:Q})=>{const oe=l.value.findIndex(ee=>ee.id===q);if(oe===-1)return;const Z=[...l.value];Z[oe]={id:q,coords:{...Q}},l.value=Z,d()},m=q=>{l.value=l.value.filter(Q=>Q.id!==q),d()},b=()=>{l.value=[],c.value&&(c.value=!1,r("shape-closed-change",!1)),d()},k=q=>{g(q)},V=q=>{m(q)},S=()=>{s.value=!0,r("add-request")},C=q=>{x(q),s.value=!1},_=()=>{s.value=!1},w=()=>{h.value&&(c.value=!0,r("complete"),r("shape-closed-change",!0))},$=q=>{const Q=(q??[]).map(oe=>({id:oe.id??p(),coords:{...oe.coords}}));l.value=Q,Q.length===0?u=1:u=Math.max(...Q.map(oe=>oe.id))+1,d()},D=()=>{b(),s.value=!1,r("close")};return n({addPoint:x,setPoints:$,clearPoints:b}),(q,Q)=>(e.openBlock(),e.createElementBlock("div",Pu,[e.createElementVNode("div",Ru,[e.createElementVNode("div",Ou,[e.createElementVNode("div",Uu,[e.createElementVNode("div",qu,[e.createVNode(e.unref(ae.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),Q[2]||(Q[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:D},[e.createVNode(e.unref(ae.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Hu,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",f.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:Q[0]||(Q[0]=oe=>a("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",f.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:Q[1]||(Q[1]=oe=>a("topoint"))}," До точки ",2)]),f.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[i.value?(e.openBlock(),e.createBlock(Lu,{key:1,points:l.value,"is-shape-closed":c.value,onUpdatePoint:k,onDeletePoint:V},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(Mu,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",Wu,[i.value?(e.openBlock(),e.createBlock(ju,{key:0,points:l.value,"is-shape-closed":c.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",Yu,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",Zu,[e.createElementVNode("div",Gu,[s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(su,{key:0,onClick:S})),h.value?(e.openBlock(),e.createBlock(cu,{key:1,onClick:w})):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createBlock(au,{key:0,onSubmit:C,onCancel:_})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(iu,{key:1,onClick:b})):e.createCommentVNode("",!0)])])]))}}),mt="ruler-points",kt="ruler-line",wt="ruler-polygon",_t="ruler-segments",Xu=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(g,m){const b=w=>w*Math.PI/180,k=b(m.lat-g.lat),V=b(m.lng-g.lng),S=b(g.lat),C=b(m.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(k/2)**2+Math.cos(S)*Math.cos(C)*Math.sin(V/2)**2)))}function o(g){return tr(g)}const r=t,{map:l,ready:i}=We();function s(){return{type:"FeatureCollection",features:[]}}function c(g,m,b){const k=b??"general",V=[];let S=0;V.push(0);for(let C=1;C<g.length;C++)S+=n(g[C-1].coords,g[C].coords),V.push(S);return m&&g.length>=2&&(S+=n(g[g.length-1].coords,g[0].coords)),{type:"FeatureCollection",features:g.map((C,_)=>{const w=k==="general"?_===0?"0":o(V[_]):_===0?"0":o(n(g[_-1].coords,g[_].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[C.coords.lng,C.coords.lat]},properties:{id:C.id,index:_+1,label:w}}})}}function f(g,m){if(g.length<2)return s();const b=[];for(let k=0;k<g.length;k++){const V=k===g.length-1&&m?0:k+1;if(V>=g.length)break;const S=g[k].coords,C=g[V].coords,_=n(S,C);b.push({type:"Feature",geometry:{type:"LineString",coordinates:[[S.lng,S.lat],[C.lng,C.lat]]},properties:{distance:o(_)}})}return{type:"FeatureCollection",features:b}}function a(g,m){if(g.length<2)return s();const b=g.map(k=>[k.coords.lng,k.coords.lat]);return m&&b.push(b[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:b},properties:{}}]}}function h(g){if(g.length<3)return s();const m=g.map(b=>[b.coords.lng,b.coords.lat]);return m.push(m[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[m]},properties:{}}]}}let u=!1;function y(g){g.getSource(mt)||(g.addSource(mt,{type:"geojson",data:s()}),g.addLayer({id:`${mt}-circle`,type:"circle",source:mt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),g.addLayer({id:`${mt}-labels`,type:"symbol",source:mt,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(_t)||(g.addSource(_t,{type:"geojson",data:s()}),g.addLayer({id:`${_t}-labels`,type:"symbol",source:_t,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(kt)||(g.addSource(kt,{type:"geojson",data:s()}),g.addLayer({id:`${kt}-layer`,type:"line",source:kt,paint:{"line-color":"#3b82f6","line-width":2}})),g.getSource(wt)||(g.addSource(wt,{type:"geojson",data:s()}),g.addLayer({id:`${wt}-layer`,type:"fill",source:wt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),u=!0}function d(g){if(g){try{g.getLayer(`${wt}-layer`)&&g.removeLayer(`${wt}-layer`),g.getSource(wt)&&g.removeSource(wt),g.getLayer(`${kt}-layer`)&&g.removeLayer(`${kt}-layer`),g.getSource(kt)&&g.removeSource(kt),g.getLayer(`${_t}-labels`)&&g.removeLayer(`${_t}-labels`),g.getSource(_t)&&g.removeSource(_t),g.getLayer(`${mt}-labels`)&&g.removeLayer(`${mt}-labels`),g.getLayer(`${mt}-circle`)&&g.removeLayer(`${mt}-circle`),g.getSource(mt)&&g.removeSource(mt)}catch{}u=!1}}function p(g){if(!g)return;const m=g.getSource(mt),b=g.getSource(kt),k=g.getSource(wt),V=g.getSource(_t),S=r.points,C=r.labelMode??"general";m&&m.setData(c(S,r.isShapeClosed,C)),b&&b.setData(a(S,r.isShapeClosed)),k&&k.setData(h(S)),V&&V.setData(C==="topoint"?f(S,r.isShapeClosed):s())}function x(){i().then(()=>{const g=l.value;g&&(u||y(g),p(g))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>x(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{i().then(()=>d(l.value))}),(g,m)=>null}}),Qu={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},Ju={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ep={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},tp={class:"flex items-center gap-2"},np=["disabled"],op={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},rp={class:"text-sm font-mono text-slate-700"},lp={class:"flex items-center gap-2 shrink-0"},ap={key:0,class:"text-xs font-[100] text-gray-500"},sp=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),i=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),s=e.ref(!1);let c=null;function f(){if(o.position==null)return;const u=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(u).then(()=>{s.value=!0,c&&clearTimeout(c),c=setTimeout(()=>{s.value=!1,c=null},600)})}function a(){r("close")}function h(){o.position!=null&&r("recenter")}return(u,y)=>(e.openBlock(),e.createElementBlock("div",Qu,[e.createElementVNode("div",Ju,[e.createElementVNode("div",ep,[e.createElementVNode("div",tp,[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:h},[e.createVNode(e.unref(ae.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,np),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:a},[e.createVNode(e.unref(ae.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",op,[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",rp,[y[1]||(y[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.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",lp,[s.value?(e.openBlock(),e.createElementBlock("span",ap," Скопійовано! ")):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:f},[e.createVNode(e.unref(ae.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),Et="geolocation-marker",ip=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=We();let l=!1;function i(){return{type:"FeatureCollection",features:[]}}function s(u){return{type:"Feature",geometry:{type:"Point",coordinates:[u.lng,u.lat]},properties:{}}}function c(u){u.getSource(Et)||(u.addSource(Et,{type:"geojson",data:i()}),u.addLayer({id:`${Et}-circle`,type:"circle",source:Et,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function f(u){try{u.getLayer(`${Et}-circle`)&&u.removeLayer(`${Et}-circle`),u.getSource(Et)&&u.removeSource(Et)}catch{}l=!1}function a(u){const y=u.getSource(Et);if(y){if(n.position==null){y.setData(i());return}y.setData({type:"FeatureCollection",features:[s(n.position)]})}}function h(){r().then(()=>{const u=o.value;if(u){if(n.position==null){l&&f(u);return}l||c(u),a(u)}})}return e.watch(()=>n.position,()=>h(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>f(o.value))}),(u,y)=>null}}),cp={class:"animate-slide-up"},dp={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},up={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},pp={class:"flex items-center gap-2"},mp={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},fp={class:"px-3 py-2.5 border-b border-gray-200"},gp={class:"flex gap-1 flex-nowrap"},yp=["title","onClick"],hp={class:"px-3 py-2.5 border-b border-gray-200"},bp={class:"flex items-center gap-4"},xp={class:"flex items-center gap-2 cursor-pointer shrink-0"},kp={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},wp={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"},Ep=we(e.defineComponent({name:"DrawingPanel",__name:"index",emits:["close","clear","download","finish-polygon","undo","update:tool","update:stroke-color","update:stroke-width"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"pen",icon:ae.Pen,title:"Олівець"},{id:"line",icon:ae.Minus,title:"Лінія"},{id:"rect",icon:ae.Square,title:"Прямокутник"},{id:"circle",icon:ae.Circle,title:"Коло"},{id:"polygon",icon:ae.Pentagon,title:"Полігон"},{id:"paint",icon:ae.PaintBucket,title:"Балончик"},{id:"eraser",icon:ae.Eraser,title:"Стирачка"}],i=e.ref("pen"),s=e.ref("#2563eb"),c=e.ref(3),f=()=>r("update:stroke-color",s.value),a=()=>r("update:stroke-width",c.value);e.watch(i,x=>r("update:tool",x)),e.watch(s,x=>r("update:stroke-color",x)),e.watch(c,x=>r("update:stroke-width",x));function h(){r("close")}function u(){r("undo")}function y(){r("finish-polygon")}function d(){r("clear")}function p(){r("download")}return n({tool:i,strokeColor:s,strokeWidth:c}),(x,g)=>(e.openBlock(),e.createElementBlock("div",cp,[e.createElementVNode("div",dp,[e.createElementVNode("div",up,[e.createElementVNode("div",pp,[e.createElementVNode("div",mp,[e.createVNode(e.unref(ae.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:h},[e.createVNode(e.unref(ae.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",fp,[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",gp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,m=>e.createElementVNode("button",{key:m.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",i.value===m.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:m.title,onClick:b=>i.value=m.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(m.icon),{size:16,"stroke-width":2}))],10,yp)),64))])]),e.createElementVNode("section",hp,[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",bp,[e.createElementVNode("label",xp,[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]=m=>s.value=m),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:f},null,544),[[e.vModelText,s.value]])]),e.createElementVNode("label",kp,[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]=m=>c.value=m),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:a},null,544),[[e.vModelText,c.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",wp,[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:u},[e.createVNode(e.unref(ae.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:d},[e.createVNode(e.unref(ae.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(ae.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:p},[e.createVNode(e.unref(ae.Download),{size:14,"stroke-width":2}),g[9]||(g[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),Cp=we(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),i=e.ref({x:0,y:0}),s=e.ref(!1),c=t,f=e.computed(()=>Math.max(c.strokeWidth*3,12)),a=e.computed(()=>{const E=f.value*2;return{width:`${E}px`,height:`${E}px`,left:`${i.value.x}px`,top:`${i.value.y}px`,marginLeft:`-${f.value}px`,marginTop:`-${f.value}px`}}),{ready:h}=We(),u=e.ref(!1),y=e.ref([]),d=e.ref([]);let p=0,x=0,g=0,m=0,b=null;function k(){const E=r.value,A=l.value,I=o.value;if(!E||!I)return;const K=I.parentElement;if(!K)return;const re=K.clientWidth,J=K.clientHeight;if(re<=0||J<=0)return;const ne=window.devicePixelRatio||1;E.width=re*ne,E.height=J*ne,E.style.width=`${re}px`,E.style.height=`${J}px`;const me=E.getContext("2d");if(me&&me.scale(ne,ne),A){A.width=re*ne,A.height=J*ne,A.style.width=`${re}px`,A.style.height=`${J}px`;const pe=A.getContext("2d");pe&&pe.scale(ne,ne)}}function V(E){const A=r.value;if(!A)return{x:0,y:0};const I=A.getBoundingClientRect();return{x:E.clientX-I.left,y:E.clientY-I.top}}function S(){const E=r.value;return E?E.getContext("2d"):null}function C(){const E=l.value;return E?E.getContext("2d"):null}function _(){const E=l.value;if(!E)return;const A=window.devicePixelRatio||1,I=E.getContext("2d");I&&I.clearRect(0,0,E.width/A,E.height/A)}function w(){const E=C();if(E){if(_(),E.globalCompositeOperation="source-over",E.strokeStyle=c.strokeColor,E.lineWidth=c.strokeWidth,E.lineCap="round",E.lineJoin="round",c.tool==="line")E.beginPath(),E.moveTo(p,x),E.lineTo(g,m),E.stroke();else if(c.tool==="rect"){const A=Math.min(p,g),I=Math.min(x,m),K=Math.abs(g-p),re=Math.abs(m-x);E.strokeRect(A,I,K,re)}else if(c.tool==="circle"){const A=Math.sqrt((g-p)**2+(m-x)**2);E.beginPath(),E.arc(p,x,Math.max(A,1),0,2*Math.PI),E.stroke()}else if(c.tool==="polygon"&&y.value.length>0){const A=y.value;E.beginPath(),E.moveTo(A[0].x,A[0].y);for(let I=1;I<A.length;I++)E.lineTo(A[I].x,A[I].y);E.lineTo(g,m),E.stroke()}}}function $(E){E.strokeStyle=c.strokeColor,E.lineWidth=c.strokeWidth,E.lineCap="round",E.lineJoin="round"}function D(){const E=r.value;if(!E)return;const A=E.getContext("2d");if(!A)return;const I=A.getImageData(0,0,E.width,E.height);d.value=[...d.value.slice(-19),I]}function q(E){if(!r.value)return;const{x:A,y:I}=V(E);p=A,x=I,g=A,m=I;const K=S();if(K){if(c.tool==="pen"||c.tool==="eraser"){D(),u.value=!0,c.tool==="eraser"?(K.globalCompositeOperation="destination-out",K.lineWidth=Math.max(c.strokeWidth*3,12)):(K.globalCompositeOperation="source-over",$(K)),K.beginPath(),K.moveTo(A,I);return}if(c.tool==="paint"){D(),u.value=!0,K.globalCompositeOperation="source-over",K.fillStyle=c.strokeColor,ee(K,A,I);return}if(c.tool==="line"||c.tool==="rect"||c.tool==="circle"){D(),u.value=!0;return}if(c.tool==="polygon"){y.value=[...y.value,{x:A,y:I}],g=A,m=I,w();return}}}function Q(E){const{x:A,y:I}=V(E);g=A,m=I,c.tool==="eraser"&&(i.value={x:E.clientX,y:E.clientY},s.value=!0);const K=S();if(K){if(c.tool==="pen"&&u.value){K.globalCompositeOperation="source-over",$(K),K.lineTo(A,I),K.stroke();return}if(c.tool==="eraser"&&u.value){K.globalCompositeOperation="destination-out",K.lineWidth=Math.max(c.strokeWidth*3,12),K.lineTo(A,I),K.stroke();return}if(c.tool==="paint"&&u.value){K.globalCompositeOperation="source-over",K.fillStyle=c.strokeColor,ee(K,A,I);return}u.value&&(c.tool==="line"||c.tool==="rect"||c.tool==="circle")&&w(),c.tool==="polygon"&&y.value.length>0&&w()}}function oe(){s.value=!1}function Z(){c.tool==="polygon"&&z()}function ee(E,A,I){const K=Math.max(c.strokeWidth*2.5,8),re=12+Math.floor(c.strokeWidth);for(let J=0;J<re;J++){const ne=Math.random()*2*Math.PI,me=K*Math.random(),pe=A+Math.cos(ne)*me,de=I+Math.sin(ne)*me,Ve=1+Math.random()*2;E.beginPath(),E.arc(pe,de,Ve,0,2*Math.PI),E.fill()}}function H(){if(!u.value)return;const E=S();if(!E){u.value=!1;return}if(c.tool==="paint"){_(),u.value=!1,E.globalCompositeOperation="source-over";return}if(c.tool==="line")E.globalCompositeOperation="source-over",$(E),E.beginPath(),E.moveTo(p,x),E.lineTo(g,m),E.stroke();else if(c.tool==="rect"){E.globalCompositeOperation="source-over",$(E);const A=Math.min(p,g),I=Math.min(x,m),K=Math.abs(g-p),re=Math.abs(m-x);E.strokeRect(A,I,K,re)}else if(c.tool==="circle"){E.globalCompositeOperation="source-over",$(E);const A=Math.sqrt((g-p)**2+(m-x)**2);E.beginPath(),E.arc(p,x,Math.max(A,1),0,2*Math.PI),E.stroke()}_(),u.value=!1,E.globalCompositeOperation="source-over"}function z(){const E=S(),A=y.value;if(!E||A.length<2){y.value=[],_();return}D(),E.globalCompositeOperation="source-over",$(E),E.beginPath(),E.moveTo(A[0].x,A[0].y);for(let I=1;I<A.length;I++)E.lineTo(A[I].x,A[I].y);E.closePath(),E.stroke(),y.value=[],_(),E.globalCompositeOperation="source-over"}function v(){const E=r.value;if(!E||d.value.length===0)return;const A=E.getContext("2d");if(!A)return;const I=d.value[d.value.length-1];d.value=d.value.slice(0,-1),A.putImageData(I,0,0)}function M(){const E=r.value;if(!E)return;const A=E.getContext("2d");if(!A)return;const I=window.devicePixelRatio||1;A.clearRect(0,0,E.width/I,E.height/I),y.value=[],d.value=[],_()}function N(){return r.value}return e.watch(()=>c.tool,(E,A)=>{A==="polygon"&&E!=="polygon"&&(y.value=[],_())}),e.onMounted(()=>{h().then(()=>{var A;k();const E=(A=o.value)==null?void 0:A.parentElement;E&&typeof ResizeObserver<"u"&&(b=new ResizeObserver(k),b.observe(E))})}),e.onBeforeUnmount(()=>{b==null||b.disconnect(),b=null}),n({clear:M,getCanvas:N,finishPolygon:z,undo:v,canUndo:()=>d.value.length>0}),(E,A)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:q,onMousemove:Q,onMouseup:H,onDblclick:Z,onMouseleave:A[0]||(A[0]=()=>{oe(),H()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:l,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(a.value)},null,4),[[e.vShow,t.tool==="eraser"&&s.value]])],34))}}),[["__scopeId","data-v-ed2688bc"]]),nr=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var y,d;const n=t,o=((d=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:d.$settings)||null,{map:r,ready:l}=We();let i=null;function s(){i==null||i.remove(),i=null}function c(p){if(!p)return null;if(typeof p=="string")try{p=JSON.parse(p)}catch{return null}return p.type==="FeatureCollection"?p:p.type==="Feature"?{type:"FeatureCollection",features:[p]}:p.type&&Array.isArray(p.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:p,properties:{}}]}:Array.isArray(p.features)?{type:"FeatureCollection",features:p.features}:p.geometry?c(p.geometry):null}function f(p){var m,b,k;return{type:"line",color:"#8e4484",width:2,opacity:((((k=(b=(m=p==null?void 0:p.features)==null?void 0:m[0])==null?void 0:b.geometry)==null?void 0:k.type)||"").includes("Polygon"),.95)}}async function a(p){const x=await fetch(p);if(!x.ok)throw new Error(String(x.status));return x.json()}async function h(p,x){if(p){const g=/^https?:\/\//.test(p)?p:new URL(p,location.origin).toString(),m=await a(g).catch(()=>null),b=c(m);if(b)return b}if(x){const g=await a(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(x)}`).catch(()=>null),m=c(g);if(m)return m}return null}async function u(){var m,b,k,V;if(!n.layerId||!r.value){s();return}typeof l=="function"&&await l().catch(()=>{});const p=n.boundary??((m=n.settingsMap)==null?void 0:m.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,x=n.katottg??((k=n.settingsMap)==null?void 0:k.katottg)??((V=o==null?void 0:o.map)==null?void 0:V.katottg)??null;if(!p&&!x){s();return}const g=await h(p,x);if(!g){s();return}s(),i=Ie(`${n.layerId}-boundary`,{source:{type:"geojson",data:g},style:f(g)},r)}return e.watch(()=>{var p,x;return[n.layerId,n.boundary,n.katottg,(p=n.settingsMap)==null?void 0:p.boundary,(x=n.settingsMap)==null?void 0:x.katottg,r.value]},()=>{u()},{immediate:!0}),e.onBeforeUnmount(s),(p,x)=>null}}),Np={key:2,class:"absolute bottom-16 right-4 z-[100] pointer-events-auto"},Vp={key:3,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Bp={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},$p=["aria-label","disabled"],Sp={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},vp=["aria-label"],Lp={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"},Ap=["aria-label"],Tp={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"},Mp={class:"map-widget__overlay-grid"},Fp={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Dp={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},zp={class:"map-widget__stack"},Ip={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},jp={class:"map-widget__stack map-widget__stack--bottom"},Pp={key:0,class:"map-widget__state"},Rp={key:1,class:"map-widget__state map-widget__state--error"},An=we(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var Un,_n,qn,Hn;const n=t,o=ve.useRoute(),r=ve.useRouter(),l=e.ref(null),i=e.ref({}),s=e.ref(null),c=e.ref(!1),f=e.ref(null),a=e.ref(!1),h=e.ref([]),u=e.ref(null),y=e.computed(()=>u.value==="ruler"),d=e.computed(()=>u.value==="draw"),p=e.computed(()=>u.value==="geolocation"),x=e.ref("general"),g=e.ref(null),m=e.ref(null),b=e.ref(null),k=e.ref("pen"),V=e.ref("#2563eb"),S=e.ref(3),C=e.ref([]),_=e.ref(!1),w=e.ref(null),$=e.ref(!1),D=e.ref(null),q=e.computed(()=>n.id||"main"),Q=e.computed(()=>{var R,X;return{height:((R=n.height)==null?void 0:R.trim())||((X=i.value)==null?void 0:X.height)||"calc(100vh - 65px)"}}),oe=e.computed(()=>{var R;return((R=i.value)==null?void 0:R.name)??null}),Z=e.computed(()=>{var R;return((R=i.value)==null?void 0:R.description)??null}),ee=e.computed(()=>{var R;return pe((R=i.value)==null?void 0:R.maps)}),H=e.computed(()=>{var X,xe;const R=((X=i.value)==null?void 0:X.minZoom)??((xe=i.value)==null?void 0:xe.minzoom)??null;return typeof R=="number"?R:null}),z=e.computed(()=>{var X,xe;const R=((X=i.value)==null?void 0:X.maxZoom)??((xe=i.value)==null?void 0:xe.maxzoom)??null;return typeof R=="number"?R:typeof n.maxZoom=="number"?n.maxZoom:20}),v=e.ref(null),M=e.computed(()=>{if(!v.value)return null;const{lng:R,lat:X}=v.value;return`${X.toFixed(6)}, ${R.toFixed(6)}`}),N=e.computed(()=>{var R;return((R=l.value)==null?void 0:R.ctx)??null}),E=e.computed(()=>{var R;return((R=i.value)==null?void 0:R.minimap)??null});function A(R){if(!R||typeof R!="object")return R;const X=Tt(R.center);return X?{...R,center:X}:R}const I=((_n=(Un=e.getCurrentInstance())==null?void 0:Un.appContext.config.globalProperties)==null?void 0:_n.$settings)||null;function K(R){if(R==null)return null;const X=Number(typeof R=="string"?R.trim():R);return Number.isFinite(X)?X:null}const re=Tt((qn=I==null?void 0:I.map)==null?void 0:qn.center),J=K((Hn=I==null?void 0:I.map)==null?void 0:Hn.zoom),ne=e.computed(()=>{const R=(I==null?void 0:I.map)||null,X=(R==null?void 0:R.boundary)??null,xe=(R==null?void 0:R.katottg)??null;return!X&&!xe?null:{boundary:X,katottg:xe}});function me(R){return typeof R=="string"&&R.trim()?R.trim().toLowerCase():"top-left"}function pe(R){return Array.isArray(R)?R:R&&typeof R=="object"?Object.values(R).filter(Boolean):[]}const de=e.computed(()=>{var R;return pe((R=i.value)==null?void 0:R.widgets)}),Ve=e.computed(()=>de.value.some(R=>(R==null?void 0:R.type)==="basemaps")),Y=["left","right"],T=e.computed(()=>{const R={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},X={"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 de.value.forEach(xe=>{const Ce=me(xe.position),se=X[Ce]??{side:"left",align:"top"};R[se.side][se.align].push(xe)}),R});function j(R){return Array.isArray(R)?R[0]??null:typeof R=="string"?R:null}async function F(){var X;await e.nextTick();const R=(X=l.value)==null?void 0:X.ctx;return R?(R.ready&&await R.ready(),R):null}function P(){var R,X,xe;return((xe=(X=(R=l.value)==null?void 0:R.ctx)==null?void 0:X.map)==null?void 0:xe.value)??null}function le(){const R=P();if(!R)return null;const X=R.getCenter();return{z:R.getZoom().toFixed(2),x:X.lng.toFixed(5),y:X.lat.toFixed(5)}}async function ye(){var xe;const R=await F(),X=(xe=R==null?void 0:R.map)==null?void 0:xe.value;X&&(typeof H.value=="number"&&X.setMinZoom(H.value),typeof z.value=="number"&&X.setMaxZoom(z.value))}async function Ee(){var se;if(s.value)return;const R=await F(),X=(se=R==null?void 0:R.map)==null?void 0:se.value;if(!X)return;const xe=X.getCenter(),Ce=X.getZoom();s.value={center:[xe.lng,xe.lat],zoom:Ce}}function ge(){if(ot.value)return;const R=le();if(!R)return;const X=j(o.query.x),xe=j(o.query.y),Ce=j(o.query.z);X===R.x&&xe===R.y&&Ce===R.z||(xt.value=R,r.replace({query:{...o.query,...R}}).catch(()=>{}))}function Ue(R,X,xe=1e-6){return Math.abs(R-X)<=xe}async function ze(){var Fe;if(en())return;const R=await F(),X=(Fe=R==null?void 0:R.map)==null?void 0:Fe.value;if(!R||!X)return;const xe=parseFloat(j(o.query.x)??""),Ce=parseFloat(j(o.query.y)??""),se=parseFloat(j(o.query.z)??""),Le=!Number.isNaN(xe),Be=!Number.isNaN(Ce),ie=!Number.isNaN(se);let Se=!1;ot.value=!0;try{if(Le&&Be){const Ae=X.getCenter();(!Ue(Ae.lng,xe)||!Ue(Ae.lat,Ce))&&(X.setCenter([xe,Ce]),Se=!0)}if(ie){const Ae=X.getZoom();Ue(Ae,se,.001)||(X.setZoom(se),Se=!0)}(!Le||!Be||!ie||Se)&&ge()}finally{ot.value=!1}}let Ye=null,tt=null;const ot=e.ref(!1),xt=e.ref(null);function en(){const R=xt.value;if(!R)return!1;const X=j(o.query.x),xe=j(o.query.y),Ce=j(o.query.z);return X===R.x&&xe===R.y&&Ce===R.z?(xt.value=null,!0):!1}function zt(R){const X=R==null?void 0:R.lngLat;X&&(v.value={lng:X.lng,lat:X.lat})}let ft=null;function It(R){typeof window>"u"||window.dispatchEvent(new CustomEvent(ao,{detail:R}))}function tn(R){if(!R)return null;if(typeof R=="string")try{return JSON.parse(R)}catch{return null}return R}async function gt(R){const X=await fetch(`/api/map-format?${R.toString()}`);if(!X.ok)throw new Error(`API returned ${X.status}`);return X.json()}function ht(){const R=P();return R?Object.entries(Ie()).filter(([,X])=>{var Ae,Re,rt,De,Je,qe,He;const xe=(Re=(Ae=X==null?void 0:X.opts)==null?void 0:Ae.source)==null?void 0:Re.type,Ce=(De=(rt=X==null?void 0:X.opts)==null?void 0:rt.layer)==null?void 0:De.type,se=(((Je=X==null?void 0:X.opts)==null?void 0:Je.service)||"").toString().toLowerCase(),Le=Array.isArray(X==null?void 0:X.card)?X.card.length>0:!!(X!=null&&X.card),Be=Array.isArray(X==null?void 0:X.popup)?X.popup.length>0:!!(X!=null&&X.popup),ie=(qe=X==null?void 0:X.ids)==null?void 0:qe.sourceId;if(xe!=="raster"&&Ce!=="raster"||se!=="cartocss"&&!Le&&!Be||!ie||!R.getSource(ie))return!1;const Fe=(((He=R.getStyle())==null?void 0:He.layers)||[]).filter(lt=>lt.source===ie);return Fe.length?Fe.some(lt=>{try{return R.getLayoutProperty(lt.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([X])=>X):[]}function U(R){const X=P();return X?(X.queryRenderedFeatures(R==null?void 0:R.point)||[]).filter(Ce=>{var ie,Se,Fe,Ae,Re;if(!((ie=Ce==null?void 0:Ce.properties)!=null&&ie.id))return!1;const se=Ie(Ce.source);if(!se)return!1;const Le=(Fe=(Se=se==null?void 0:se.opts)==null?void 0:Se.source)==null?void 0:Fe.type,Be=(Re=(Ae=se==null?void 0:se.opts)==null?void 0:Ae.layer)==null?void 0:Re.type;return Le!=="raster"&&Be!=="raster"}):[]}async function G(R){var Le,Be,ie,Se,Fe;const X=(Le=R==null?void 0:R.lngLat)==null?void 0:Le.lng,xe=(Be=R==null?void 0:R.lngLat)==null?void 0:Be.lat;if(typeof X!="number"||typeof xe!="number")return[];const Ce=ht();if(!Ce.length)return[];const se=[];for(let Ae=0;Ae<Ce.length;Ae+=1){const Re=Ce[Ae],rt=new URLSearchParams({layer:Re,lat:xe.toFixed(6),lng:X.toFixed(6)});try{const De=await gt(rt),Je=tn(((ie=De==null?void 0:De.data)==null?void 0:ie.geom)??(De==null?void 0:De.geom)??null),qe=((Se=De==null?void 0:De.data)==null?void 0:Se.id)??(De==null?void 0:De.id);if(qe!=null){const He=await gt(new URLSearchParams({layer:Re,id:String(qe)})),lt=typeof(He==null?void 0:He.html)=="string"?He.html:null,Wn=tn(((Fe=He==null?void 0:He.data)==null?void 0:Fe.geom)??(He==null?void 0:He.geom)??null);if(lt||Wn){se.push({html:lt,geometry:Wn??Je,infoToken:`external:${Re},${String(qe)}`});continue}}Go({html:De==null?void 0:De.html})&&se.push({html:De.html,geometry:Je,infoToken:null})}catch{}}return se}async function W(R){var se;const X=R==null?void 0:R.lngLat;h.value.includes("ruler")&&y.value&&X&&((se=g.value)==null||se.addPoint({lat:X.lat,lng:X.lng}));const xe=U(R),Ce=await G(R).catch(()=>[]);It({features:xe,externalItems:Ce})}function ue(){var R;u.value==="ruler"?(C.value=[],_.value=!1,(R=g.value)==null||R.clearPoints(),u.value=null):(w.value=null,D.value=null,u.value="ruler")}function he(){u.value=null,C.value=[],_.value=!1}function Ne(){u.value==="draw"?u.value=null:(w.value=null,D.value=null,u.value="draw")}function Me(){if(u.value==="geolocation"&&w.value!=null){it();return}if(D.value=null,$.value=!0,!navigator.geolocation){D.value="Геолокація не підтримується браузером",$.value=!1;return}navigator.geolocation.getCurrentPosition(R=>{const X=R.coords.latitude,xe=R.coords.longitude;w.value={lat:X,lng:xe},D.value=null,$.value=!1,u.value="geolocation",F().then(Ce=>{Ce!=null&&Ce.flyTo&&Ce.flyTo({center:[xe,X],zoom:15})})},()=>{D.value="Не вдалося визначити місце розташування",$.value=!1},{enableHighAccuracy:!0})}function $e(){u.value=null,w.value=null,D.value=null}function it(){const R=w.value;R!=null&&F().then(X=>{X!=null&&X.flyTo&&X.flyTo({center:[R.lng,R.lat],zoom:15})})}function yt(R){C.value=R}function ct(){var R;(R=b.value)==null||R.clear()}function Vt(){var R;(R=b.value)==null||R.finishPolygon()}function nn(){var R;(R=b.value)==null||R.undo()}function So(){var se,Le,Be,ie;const R=(Be=(Le=(se=l.value)==null?void 0:se.ctx)==null?void 0:Le.map)==null?void 0:Be.value,X=(ie=b.value)==null?void 0:ie.getCanvas();if(!R||!X)return;const xe=(Se,Fe)=>{const Ae=document.createElement("a");Ae.download=Fe,Ae.rel="noopener",typeof Se=="string"?Ae.href=Se:(Ae.href=URL.createObjectURL(Se),setTimeout(()=>URL.revokeObjectURL(Ae.href),100)),document.body.appendChild(Ae),Ae.click(),document.body.removeChild(Ae)},Ce=()=>{const Se=R.getCanvas();if(!Se)return;const Fe=Se.width,Ae=Se.height;if(Fe<=0||Ae<=0)return;const Re=document.createElement("canvas");Re.width=Fe,Re.height=Ae;const rt=Re.getContext("2d");if(!rt)return;rt.drawImage(Se,0,0),rt.drawImage(X,0,0,X.width,X.height,0,0,Fe,Ae);const De=`map-drawing-${Date.now()}.png`;Re.toBlob(Je=>{if(Je){xe(Je,De);return}try{const qe=Re.toDataURL("image/png");xe(qe,De)}catch{const qe=document.createElement("canvas");qe.width=X.width,qe.height=X.height;const He=qe.getContext("2d");He&&(He.drawImage(X,0,0),qe.toBlob(lt=>lt&&xe(lt,De),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Ce))}async function vo(){const R=await F();R!=null&&R.on&&(Ye==null||Ye(),Ye=R.on("moveend",ge),tt==null||tt(),tt=R.on("mousemove",zt),ft==null||ft(),ft=R.on("click",W))}e.onUnmounted(()=>{Ye==null||Ye(),Ye=null,tt==null||tt(),tt=null,ft==null||ft(),ft=null});async function wn(R=!1){var xe,Ce;a.value=!1,f.value=null,v.value=null;const X=R||!n.data;c.value=X;try{const se=X?await(async()=>{const Fe=await fetch(`/api/gis-map/${encodeURIComponent(q.value)}`);if(!Fe.ok)throw new Error(`Помилка завантаження (${Fe.status})`);return Fe.json()})():n.data;X||(a.value=!0);const Le=Tt(se.center)??re,Be=pe(se.layers).map(Fe=>A(Fe)),ie=K(se.zoom)??J;i.value={...se,center:Le??null,zoom:ie??se.zoom??null,layers:Be,widgets:se.widgets},h.value=se.tools||["home","print","ruler","draw"];const Se=await F();Se&&(Le&&((xe=Se.setCenter)==null||xe.call(Se,Le)),ie!=null&&((Ce=Se.setZoom)==null||Ce.call(Se,ie)),s.value||await Ee()),await ye(),await ze(),await vo(),a.value=!0}catch(se){f.value=(se==null?void 0:se.message)||"Не вдалося завантажити карту"}finally{X&&(c.value=!1)}}const jt=e.computed(()=>{var Ce;const R=new Map;return pe((Ce=i.value)==null?void 0:Ce.layers).forEach(se=>{if(!(se!=null&&se.id))return;const Le=A(se)||se;R.set(se.id,{...Le})}),de.value.filter(se=>(se==null?void 0:se.type)==="layers").flatMap(se=>{var Le;return pe((Le=se==null?void 0:se.config)==null?void 0:Le.layers)}).forEach(se=>{if(!(se!=null&&se.id))return;const Le=R.get(se.id)||{},Be=A(se)||se;R.set(se.id,{...Le,...Be,actions:se.actions||Le.actions||null,name:Le.name||se.name||se.title||Le.title||se.id,title:Le.title||se.title||Le.name||null,visible:Le.visible??se.visible??!0})}),Array.from(R.values())}),Bt=e.ref([]);function on(R){Bt.value.includes(R)?Bt.value=Bt.value.filter(X=>X!==R):Bt.value.push(R)}const Pt=e.computed(()=>R=>Bt.value.includes(R.id));return e.watch([H,z],()=>{ye()},{immediate:!0}),e.watch(q,()=>{wn(!0)}),e.watch(()=>n.data,R=>{R&&wn()}),e.onMounted(()=>{wn()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{ze()}),(R,X)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(Q.value)},[X[8]||(X[8]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Bn,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var xe,Ce,se,Le;return[Ve.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(qt,{key:0,class:"hidden"})),ne.value?(e.openBlock(),e.createBlock(nr,{key:1,"layer-id":"app-boundary",boundary:ne.value.boundary,katottg:ne.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),N.value&&h.value.includes("draw")&&d.value?(e.openBlock(),e.createElementBlock("div",Np,[e.createVNode(Ep,{ref_key:"drawingPanelRef",ref:m,onClose:X[0]||(X[0]=Be=>u.value=null),onClear:ct,onDownload:So,onFinishPolygon:Vt,onUndo:nn,"onUpdate:tool":X[1]||(X[1]=Be=>k.value=Be),"onUpdate:strokeColor":X[2]||(X[2]=Be=>V.value=Be),"onUpdate:strokeWidth":X[3]||(X[3]=Be=>S.value=Be)},null,512)])):e.createCommentVNode("",!0),N.value?(e.openBlock(),e.createElementBlock("div",Vp,[M.value?(e.openBlock(),e.createBlock(eu,{key:0,coordinates:M.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(ou,{"map-context":N.value,options:E.value},null,8,["map-context","options"]),h.value.includes("ruler")&&y.value?(e.openBlock(),e.createBlock(Ku,{key:1,ref_key:"rulerPanelRef",ref:g,onClose:he,onTabChange:X[4]||(X[4]=Be=>x.value=Be),onPointsChange:yt,onShapeClosedChange:X[5]||(X[5]=Be=>_.value=Be)},null,512)):e.createCommentVNode("",!0),h.value.includes("geolocation")&&p.value?(e.openBlock(),e.createBlock(sp,{key:2,position:w.value,onClose:$e,onRecenter:it},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Bp,[h.value.includes("home")?(e.openBlock(),e.createBlock(Mt,{key:0,center:((xe=i.value)==null?void 0:xe.center)||((Ce=s.value)==null?void 0:Ce.center)||null,zoom:((se=i.value)==null?void 0:se.zoom)??((Le=s.value)==null?void 0:Le.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),h.value.includes("print")?(e.openBlock(),e.createBlock(Zd,{key:1})):e.createCommentVNode("",!0),h.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",p.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":p.value?"Вимкнути геолокацію":"Ваше розташування",disabled:$.value,onClick:e.withModifiers(Me,["stop"])},[e.createElementVNode("span",Sp,e.toDisplayString(p.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(ae.MapPin),{class:"w-4 h-4"})],10,$p)):e.createCommentVNode("",!0),h.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",y.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":y.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(ue,["stop"])},[e.createElementVNode("span",Lp,e.toDisplayString(y.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(ae.Ruler),{class:"w-4 h-4"})],10,vp)):e.createCommentVNode("",!0),h.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",d.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":d.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(Ne,["stop"])},[e.createElementVNode("span",Tp,e.toDisplayString(d.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(ae.Pen),{class:"w-4 h-4"})],10,Ap)):e.createCommentVNode("",!0)]),a.value&&y.value&&C.value.length>0?(e.openBlock(),e.createBlock(Xu,{key:4,points:C.value,"is-shape-closed":_.value,"label-mode":x.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),a.value&&w.value!=null?(e.openBlock(),e.createBlock(ip,{key:5,position:w.value},null,8,["position"])):e.createCommentVNode("",!0),a.value&&d.value?(e.openBlock(),e.createBlock(Cp,{key:6,ref_key:"drawingCanvasRef",ref:b,tool:k.value,"stroke-color":V.value,"stroke-width":S.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",Mp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Y,Be=>e.createElementVNode("div",{key:Be,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Be}`])},[Be==="left"?(e.openBlock(),e.createElementBlock("div",Fp)):e.createCommentVNode("",!0),T.value[Be].top.length?(e.openBlock(),e.createElementBlock("div",Dp,[e.createElementVNode("div",zp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value[Be].top,ie=>{var Se,Fe,Ae,Re,rt,De,Je,qe;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ie.id||ie.type,class:"map-overlay__item"},[ie.type==="info"?(e.openBlock(),e.createBlock(Uo,{key:0,title:((Se=ie.config)==null?void 0:Se.title)||ie.title||null,content:((Fe=ie.config)==null?void 0:Fe.content)||"",links:ee.value,"map-name":oe.value,"map-description":Z.value},null,8,["title","content","links","map-name","map-description"])):ie.type==="catalog"?(e.openBlock(),e.createBlock(Xo,{key:1,api:((Ae=ie.config)==null?void 0:Ae.api)||null},null,8,["api"])):ie.type==="layers"?(e.openBlock(),e.createBlock(Wo,{key:2,layers:jt.value,onAction:X[6]||(X[6]=He=>on(He.layerId)),config:ie.config},null,8,["layers","config"])):ie.type==="basemaps"?(e.openBlock(),e.createBlock(qt,{key:3,layers:((Re=ie.config)==null?void 0:Re.layers)||null,"default-layer":((rt=ie.config)==null?void 0:rt.default)||null,title:ie.title||((De=ie.config)==null?void 0:De.title)||null},null,8,["layers","default-layer","title"])):ie.type==="legend"?(e.openBlock(),e.createBlock(io,{key:4,items:((Je=ie.config)==null?void 0:Je.items)||[]},null,8,["items"])):ie.type==="filters"&&Pt.value(ie)?(e.openBlock(),e.createBlock(co,{key:5,"layer-id":(qe=ie.config)==null?void 0:qe.layer,onClose:on},null,8,["layer-id"])):ie.type==="dataset"||ie.type==="attribute"?(e.openBlock(),e.createBlock(Qo,{key:6,config:ie.config},null,8,["config"])):ie.type==="search"?(e.openBlock(),e.createBlock(er,{key:7,config:ie.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ie.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),T.value[Be].bottom.length?(e.openBlock(),e.createElementBlock("div",Ip,[e.createElementVNode("div",jp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value[Be].bottom,ie=>{var Se,Fe,Ae,Re,rt,De,Je,qe;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ie.id||ie.type,class:"map-overlay__item"},[ie.type==="info"?(e.openBlock(),e.createBlock(Uo,{key:0,title:((Se=ie.config)==null?void 0:Se.title)||ie.title||null,content:((Fe=ie.config)==null?void 0:Fe.content)||"",links:ee.value,"map-name":oe.value,"map-description":Z.value},null,8,["title","content","links","map-name","map-description"])):ie.type==="catalog"?(e.openBlock(),e.createBlock(Xo,{key:1,api:((Ae=ie.config)==null?void 0:Ae.api)||null},null,8,["api"])):ie.type==="layers"?(e.openBlock(),e.createBlock(Wo,{key:2,layers:jt.value,onAction:X[7]||(X[7]=He=>on(He.layerId)),config:ie.config},null,8,["layers","config"])):ie.type==="basemaps"?(e.openBlock(),e.createBlock(qt,{key:3,layers:((Re=ie.config)==null?void 0:Re.layers)||null,"default-layer":((rt=ie.config)==null?void 0:rt.default)||null,title:ie.title||((De=ie.config)==null?void 0:De.title)||null},null,8,["layers","default-layer","title"])):ie.type==="legend"?(e.openBlock(),e.createBlock(io,{key:4,items:((Je=ie.config)==null?void 0:Je.items)||[]},null,8,["items"])):ie.type==="filters"&&Pt.value(ie)?(e.openBlock(),e.createBlock(co,{key:5,"layer-id":(qe=ie.config)==null?void 0:qe.layer,onClose:on},null,8,["layer-id"])):ie.type==="dataset"||ie.type==="attribute"?(e.openBlock(),e.createBlock(Qo,{key:6,config:ie.config},null,8,["config"])):ie.type==="search"?(e.openBlock(),e.createBlock(er,{key:7,config:ie.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ie.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(Yo),e.createVNode(so,{"map-id":q.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),c.value?(e.openBlock(),e.createElementBlock("div",Pp,"Завантаження карти…")):f.value?(e.openBlock(),e.createElementBlock("div",Rp,e.toDisplayString(f.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-890fa8c5"]]),Op=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function cn(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,i]=n.split("-");if(!r||!l||!i)return t;const s=parseInt(l,10),c=Op[s]||l;let f=`${parseInt(i,10)} ${c} ${r}`;if(o){const a=o.split(".")[0],[h,u,y]=a.split(":");h&&u&&y?f+=`, ${h}:${u}:${y}`:h&&u?f+=`, ${h}:${u}`:h&&(f+=`, ${h}`)}return f}function dn(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 Up={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"},qp={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"},Hp={class:"flex flex-col gap-2 md:flex-row md:items-center"},Wp={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},Yp={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},Zp={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"},Gp={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Kp={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"},Xp={class:"p-3 md:p-3.5 lg:p-4 pt-2"},Qp={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},Jp={class:"text-gray-500 shrink-0 md:max-w-[50%]"},em={class:"font-medium flex flex-wrap gap-1"},tm={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},nm=["href"],om=["href"],or=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=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),l=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")),f=(u,y)=>{if(y)return u[y]},a=u=>{const y=f(u,n.id_key);return`${n.path}?id=${y}`},h=(u,y)=>{const d=f(u,n.id_key);return`/map?layers=${y}&info=${y},${d}`};return(u,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var p,x,g;return e.openBlock(),e.createElementBlock("div",{key:d.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",Up,[e.createElementVNode("div",qp,[e.createElementVNode("div",Hp,[e.createElementVNode("h2",Wp,e.toDisplayString(d[`${(p=l.value)==null?void 0:p.name}_text`]||d[(x=l.value)==null?void 0:x.name]||d[(g=l.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Yp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("div",Zp,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Gp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("span",Kp,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Xp,[e.createElementVNode("div",Qp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,m=>{var b;return e.openBlock(),e.createElementBlock("div",{key:m.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",Jp,e.toDisplayString((m==null?void 0:m.ua)||m.label||m.name)+": ",1),e.createElementVNode("span",em,[Array.isArray(d[m==null?void 0:m.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name],(k,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(k),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[m.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):m.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=d[(m==null?void 0:m.name)+"_data"])==null?void 0:b.text)||d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",tm,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:h(d,d==null?void 0:d.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,nm)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(d),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,om))])])}),128))}}),rm={class:"p-0"},lm={class:"border-l-4 border-l-slate-400"},am={class:"p-4"},sm={class:"flex flex-wrap items-center gap-2 mb-3"},im={class:"text-lg font-bold"},cm={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"},dm={key:1,class:"flex"},um={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"},pm={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"},mm={class:"text-xs text-gray-500 mb-1"},fm={class:"font-medium"},gm={class:"flex justify-end gap-2 mt-3 border-t pt-3"},ym=["href"],hm=["href"],rr=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=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),l=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")),f=(u,y)=>{if(y)return u[y]},a=u=>{const y=f(u,n.id_key);return`${n.path}?id=${y}`},h=(u,y)=>{const d=f(u,n.id_key);return`/map?layers=${y}&info=${y},${d}`};return(u,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var p,x,g;return e.openBlock(),e.createElementBlock("div",{key:d.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",rm,[e.createElementVNode("div",lm,[e.createElementVNode("div",am,[e.createElementVNode("div",sm,[e.createElementVNode("h2",im,e.toDisplayString(d[`${(p=l.value)==null?void 0:p.name}_text`]||d[(x=l.value)==null?void 0:x.name]||d[(g=l.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,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("div",cm,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",dm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.name,class:"flex flex-wrap gap-1 ml-2"},[d[m.name]?(e.openBlock(),e.createElementBlock("span",um,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",pm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,m=>{var b;return e.openBlock(),e.createElementBlock("div",{key:m.name},[e.createElementVNode("p",mm,e.toDisplayString(m.ua),1),e.createElementVNode("p",fm,[Array.isArray(d[m==null?void 0:m.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[m==null?void 0:m.name],(k,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(k),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[m.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):m.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=d[(m==null?void 0:m.name)+"_data"])==null?void 0:b.text)||d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",gm,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:h(d,d==null?void 0:d.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,ym)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(d),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,hm))])])])])])}),128))}}),bm={class:"space-y-4"},xm={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},km={class:"flex-1"},wm={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},_m={class:"col-span-1 lg:col-span-4"},Em={class:"flex items-start"},Cm={class:"flex flex-col"},Nm={class:"font-bold text-xs lg:text-sm"},Vm={key:0,class:"flex flex-wrap gap-1 mt-1"},Bm={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},$m={key:1,class:"flex flex-wrap gap-1 mt-1"},Sm={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"},vm={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},Lm={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},Am={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},Tm={class:"truncate font-medium text-xs lg:text-sm"},Mm={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},Fm=["href"],Dm=["href"],lr=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),l=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")),f=e.computed(()=>"bg-blue-500"),a=(y,d)=>{if(d)return y[d]},h=y=>{const d=a(y,n.id_key);return`${n.path}?id=${d}`},u=(y,d)=>{const p=a(y,n.id_key);return`/map?layers=${d}&info=${d},${p}`};return(y,d)=>(e.openBlock(),e.createElementBlock("div",bm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,p=>{var x,g,m;return e.openBlock(),e.createElementBlock("div",{key:p.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",xm,[e.createElementVNode("div",km,[e.createElementVNode("div",wm,[e.createElementVNode("div",_m,[e.createElementVNode("div",Em,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",f.value])},null,2),e.createElementVNode("div",Cm,[e.createElementVNode("p",Nm,e.toDisplayString(p[`${(x=l.value)==null?void 0:x.name}_text`]||p[(g=l.value)==null?void 0:g.name]||p[(m=l.value)==null?void 0:m.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Vm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[p[b.name]?(e.openBlock(),e.createElementBlock("span",Bm,e.toDisplayString(p[`${b.name}_text`]||p[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",$m,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[p[b.name]?(e.openBlock(),e.createElementBlock("span",Sm,e.toDisplayString(p[`${b.name}_text`]||p[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",vm,[e.createElementVNode("div",Lm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,b=>{var k;return e.openBlock(),e.createElementBlock("div",{key:b.name},[e.createElementVNode("p",Am,e.toDisplayString(b.ua),1),e.createElementVNode("p",Tm,[Array.isArray(p[b.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(p[b.name],(V,S)=>(e.openBlock(),e.createElementBlock("span",{key:S,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(V),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(dn)(p[b.name])||"Немає даних"),1)],64)):b.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(p[b.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((k=p[b.name+"_data"])==null?void 0:k.text)||p[b.name+"_text"]||p[b.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",Mm,[!t.hideDetailsButton&&r(p)?(e.openBlock(),e.createElementBlock("a",{key:0,href:u(p,p.service_id),class:"inline-flex items-center justify-center gap-2 text-xs lg:text-sm font-medium hover:bg-accent hover:text-accent-foreground h-8 lg:h-9 rounded-md px-2 lg:px-3"},[...d[0]||(d[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"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,Fm)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:h(p),class:"flex items-center justify-center hover:bg-accent hover:text-accent-foreground rounded-md h-8 w-8 lg:h-7 lg:w-7"},[...d[1]||(d[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,Dm))])])])}),128))]))}}),zm={class:"flex flex-col space-y-1.5 p-6 pb-2"},Im={class:"flex items-center gap-2 flex-wrap"},jm={class:"tracking-tight text-lg font-medium"},Pm={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"},Rm={key:1,class:"flex"},Om={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"},Um={class:"p-6 pt-0 pb-4"},qm={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Hm={class:"text-sm text-gray-500"},Wm={class:"font-medium"},Ym={class:"flex items-center p-6 pt-0 gap-2"},Zm=["href"],Gm=["href"],ar=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=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),l=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")),f=(u,y)=>{if(y)return u[y]},a=u=>{const y=f(u,n.id_key);return`${n.path}?id=${y}`},h=(u,y)=>{const d=f(u,n.id_key);return`/map?layers=${y}&info=${y},${d}`};return(u,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var p,x,g;return e.openBlock(),e.createElementBlock("div",{key:d.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",zm,[e.createElementVNode("div",Im,[e.createElementVNode("h3",jm,e.toDisplayString(d[`${(p=l.value)==null?void 0:p.name}_text`]||d[(x=l.value)==null?void 0:x.name]||d[(g=l.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,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("div",Pm,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Rm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.name,class:"flex flex-wrap gap-1 ml-2"},[d[m.name]?(e.openBlock(),e.createElementBlock("span",Om,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Um,[e.createElementVNode("div",qm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,m=>{var b;return e.openBlock(),e.createElementBlock("div",{key:m.name},[e.createElementVNode("p",Hm,e.toDisplayString(m.ua),1),e.createElementVNode("p",Wm,[Array.isArray(d[m==null?void 0:m.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[m==null?void 0:m.name],(k,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(k),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[m.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):m.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=d[(m==null?void 0:m.name)+"_data"])==null?void 0:b.text)||d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Ym,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:h(d,d==null?void 0:d.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,Zm)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(d),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,Gm))])])}),128))}}),Km={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},Xm={key:0,class:"w-full lg:w-auto lg:col-span-1"},Qm=["src"],Jm={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},ef={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},tf={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},nf={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},of={class:"flex flex-wrap gap-2 lg:gap-0"},rf={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"},lf={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},af={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},sf={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},cf=["innerHTML"],df={class:"text-gray-500 font-medium md:font-normal"},uf={class:"text-gray-600 break-words line-clamp-2"},pf={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"},mf={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},ff={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},gf={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"},yf={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"},hf={class:"w-full space-y-2"},bf=["href"],xf=["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=d=>(d==null?void 0:d.service_id)&&(d==null?void 0:d.is_map)&&d[n.id_key]&&(d==null?void 0:d.geom),l=e.computed(()=>n.columns.find(d=>d.meta==="title")),i=e.computed(()=>n.columns.filter(d=>d.meta==="category")),s=e.computed(()=>n.columns.filter(d=>d.meta==="tags")),c=e.computed(()=>n.columns.filter(d=>d.meta!=="title")),f=e.computed(()=>n.columns.find(d=>d.meta==="image")),a=e.computed(()=>n.columns.find(d=>d.meta==="desc")||n.columns.find(d=>d.name==="description")),h=(d,p)=>{if(p)return d[p]},u=d=>{const p=h(d,n.id_key);return`${n.path}?id=${p}`},y=(d,p)=>{const x=h(d,n.id_key);return`/map?layers=${p}&info=${p},${x}`};return(d,p)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,x=>{var g,m,b,k,V,S,C,_,w;return e.openBlock(),e.createElementBlock("div",{key:x.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",Km,[f.value?(e.openBlock(),e.createElementBlock("div",Xm,[x[(g=f.value)==null?void 0:g.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:x[(m=f.value)==null?void 0:m.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,Qm)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",Jm,[...p[0]||(p[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",ef,[e.createElementVNode("div",tf,[e.createElementVNode("h3",nf,e.toDisplayString(x[`${(b=l.value)==null?void 0:b.name}_text`]||x[(k=l.value)==null?void 0:k.name]||x[(V=l.value)==null?void 0:V.label]||"Не вказано"),1),e.createElementVNode("div",of,[Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,$=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:$.name},[x[$.name]?(e.openBlock(),e.createElementBlock("div",rf,e.toDisplayString(x[`${$.name}_text`]||x[$.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",lf,e.toDisplayString(((C=x[((S=a.value)==null?void 0:S.name)+"_data"])==null?void 0:C.text)||x[((_=a.value)==null?void 0:_.name)+"_text"]||x[(w=a.value)==null?void 0:w.name]),1),e.createElementVNode("div",af,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,$=>{var D;return e.openBlock(),e.createElementBlock("div",{key:$.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",sf,[$.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:$.icon},null,8,cf)):e.createCommentVNode("",!0),e.createElementVNode("span",df,e.toDisplayString(($==null?void 0:$.ua)||$.label||$.name)+":",1)]),e.createElementVNode("span",uf,[Array.isArray(x[$==null?void 0:$.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(x[$==null?void 0:$.name],(q,Q)=>(e.openBlock(),e.createElementBlock("span",{key:Q,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(q),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[$.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(x[$==null?void 0:$.name])||"Немає даних"),1)],64)):$.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(x[$==null?void 0:$.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((D=x[($==null?void 0:$.name)+"_data"])==null?void 0:D.text)||x[($==null?void 0:$.name)+"_text"]||x[$==null?void 0:$.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",pf,[e.createElementVNode("p",mf," Теги: "+e.toDisplayString(s.value.length&&x[s.value[0].name]?"":"відсутні"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",ff,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,$=>(e.openBlock(),e.createElementBlock("div",{key:$.name,class:"flex flex-wrap gap-1"},[x[$.name]?(e.openBlock(),e.createElementBlock("span",gf,e.toDisplayString(x[`${$.name}_text`]||x[$.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",yf,[e.createElementVNode("div",hf,[!t.hideDetailsButton&&r(x)?(e.openBlock(),e.createElementBlock("a",{key:0,href:y(x,x==null?void 0:x.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,bf)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:u(x),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,xf))])])])])}),128))}});function kf(t){t.component("MapCustom",An)}const wf={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},_f={key:0,class:"flex items-center gap-2 flex-shrink-0"},Ef={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(l,i)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[l.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",wf,[e.renderSlot(l.$slots,"breadcrumbs")])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center justify-between",{"gap-2":t.variant==="table"}])},[e.createElementVNode("h2",{class:e.normalizeClass(["text-xl font-semibold text-gray-900 p-0 m-0 flex-shrink-0",r.value])},[e.renderSlot(l.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])],2),l.$slots.actions?(e.openBlock(),e.createElementBlock("div",_f,[e.renderSlot(l.$slots,"actions")])):e.createCommentVNode("",!0)],2),l.$slots.description?(e.openBlock(),e.createElementBlock("p",Ef,[e.renderSlot(l.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),Cf={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},Nf={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"},Vf={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},Bf={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},$f={class:"p-3 border-b border-gray-200"},Sf={class:"flex flex-col sm:flex-row gap-2"},vf={class:"entity-table-root"},Lf={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},Af={key:0,class:"gap-2 inline-flex"},Tf=["onClick"],Mf={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"},Ff={class:"text-sm text-gray-500"},Df={class:"font-medium text-gray-700"},zf={class:"font-medium text-gray-700"},If={class:"font-medium text-gray-700"},jf={class:"flex items-center justify-end gap-3"},Tn=Object.freeze(Object.defineProperty({__proto__:null,default:we(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=ve.useRoute(),r=ve.useRouter(),l=t,i=e.computed(()=>l.entityKey||String(o.name??"").split("-")[0]),s=e.computed(()=>{var A;let E=(((A=o.matched[o.matched.length-1])==null?void 0:A.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return E.startsWith("/")||(E=`/${E}`),E}),c=e.computed(()=>l.entityBasePath||s.value),f=e.computed(()=>{var E;const N=((E=o.matched[o.matched.length-1])==null?void 0:E.path)||"";return/:id\??/.test(N)&&/:action\??/.test(N)}),a=e.computed(()=>{var E,A;return(E=o.meta)!=null&&E.title?o.meta.title:o.name?o.name:((A=o.path)==null?void 0:A.replace(/^\//,""))||""||"GIS"}),h=e.computed(()=>{var N;return((N=o.meta)==null?void 0:N.description)||""}),u=e.computed(()=>{const N=String(a.value||"").trim();return N?`Пошук ${N}...`:"Пошук..."}),y=e.ref([]),d=e.ref(!0),p=e.ref([]),x=e.ref([]),g=e.ref({}),m=e.ref([]),b=e.ref(String(o.query.search??"")),k=e.ref(Math.max(1,Number(o.query.page)||1)),V=e.ref(15),S=e.ref(0),C=e.computed(()=>S.value>0),_=e.computed(()=>S.value?(k.value-1)*V.value+1:0),w=e.computed(()=>S.value?Math.min(k.value*V.value,S.value):0);function $(N){const E=new URLSearchParams;return Object.entries(N).forEach(([A,I])=>{if(!(I==null||I==="")){if(Array.isArray(I)){I.forEach(K=>{K!=null&&K!==""&&E.append(A,String(K))});return}E.append(A,String(I))}}),E.toString()}function D(){return f.value?`${c.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function q(N){if(f.value)return`${c.value}/${N}/edit`;const E=String(o.name??"").split("_")[0];return E==="services"?`/gis.datasets/${N}/edit`:`/gis.${E}/edit/${N}`}const Q=async()=>{const N=`/api/data/gis.${i.value}.table`;if(!N){y.value=[],d.value=!1;return}try{d.value=!0;const E=$({...g.value,page:k.value,limit:V.value}),A=await fetch(E?`${N}?${E}`:N);if(!A.ok)throw new Error(`Rows fetch failed: ${A.status}`);const I=await A.json();y.value=I.rows||[],S.value=Number(I.filtered??I.total??I.count??y.value.length)||0,p.value=l.columnsConfig.length?l.columnsConfig:I.columns||[],x.value=I.filters||[],d.value=!1,m.value=I.actions,I.card!==!1&&p.value.length&&(f.value?p.value[0].link=`${c.value}/{id}`:p.value[0].link||(p.value[0].link=`/${o.name}/{id}`))}catch{y.value=[],d.value=!1}};function oe(N){g.value=N,k.value=1,M(),Q()}e.onMounted(()=>{Q(),document.title=a.value}),e.watch(()=>o.name,()=>{k.value=1,b.value="",Q(),document.title=a.value}),e.watch(()=>o.query,N=>{const E=Math.max(1,Number(N.page)||1),A=String(N.search??""),I=E!==k.value,K=A!==b.value;!I&&!K||(k.value=E,b.value=A,g.value={...g.value,search:A||void 0},Q())});async function Z(N,E,A){const I=await fetch(`/api/form/gis.${i.value}.table/${N.id}`);if(!I.ok)throw new Error(`Form fetch failed: ${I.status}`);const re=(await I.json()).token,J={[E]:A},ne=await fetch(`/api/table/${re}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(J)});if(!ne.ok)throw fe.notify({type:"error",title:"Помилка збереження",message:`Поле "${E}" не оновлено`}),new Error(`Save failed: ${ne.status}`);fe.notify({title:"Збережено",message:`Поле "${E}" оновлено`})}function ee(N,E){g.value={...g.value,[N]:E},k.value=1,M(),Q()}function H(N){ee((N==null?void 0:N.name)||"search",(N==null?void 0:N.value)??b.value)}function z(N){b.value="",ee(N||"search",void 0)}function v(N){!N||N===k.value||(k.value=N,M(),Q())}function M(){const N={...o.query,page:String(k.value),...b.value?{search:b.value}:{}};b.value||delete N.search,r.replace({query:N})}return(N,E)=>(e.openBlock(),e.createElementBlock("div",Cf,[e.createVNode(Ht,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(a.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",Nf,[e.createVNode(e.unref(ae.RefreshCw),{size:16}),E[2]||(E[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:E[0]||(E[0]=A=>e.unref(r).push(D())),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(ae.Plus),{size:16}),E[3]||(E[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[h.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Vf,[e.createElementVNode("div",Bf,[e.createElementVNode("div",$f,[e.createElementVNode("div",Sf,[e.createVNode(e.unref(Nn.FilterField),{modelValue:b.value,"onUpdate:modelValue":E[1]||(E[1]=A=>b.value=A),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:H,onClear:z,placeholder:u.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Nn.Filter),{schema:x.value,value:g.value,onChange:oe,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",vf,[e.createVNode(e.unref(n),{rows:y.value,columns:p.value,loading:d.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:A,value:I,column:K})=>[e.renderSlot(N.$slots,"badge",{row:A,value:I,column:K},()=>[e.createElementVNode("span",Lf,e.toDisplayString((I==null?void 0:I.text)||I||"-"),1)],!0)]),action:e.withCtx(({row:A})=>[e.renderSlot(N.$slots,"action",{row:A},()=>[m.value.includes("add")?(e.openBlock(),e.createElementBlock("div",Af,[e.createElementVNode("button",{onClick:I=>e.unref(r).push(q(A.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(Vn)],8,Tf)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),C.value?(e.openBlock(),e.createElementBlock("div",Mf,[e.createElementVNode("div",Ff,[E[4]||(E[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",Df,e.toDisplayString(_.value),1),E[5]||(E[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",zf,e.toDisplayString(w.value),1),E[6]||(E[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",If,e.toDisplayString(S.value),1)]),e.createElementVNode("div",jf,[e.createVNode(e.unref(fe.VsPagination),{total:S.value,page:k.value,"page-size":V.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":v,onPageChange:v},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),Pf={class:"mx-1"},Rf={class:"flex items-center gap-2 mt-[0.4rem]"},Of={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},Uf={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},qf={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"},Hf={class:"vs-form w-full"},un=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityCreatePage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),i=ve.useRouter(),s=ve.useRoute(),c=t,f=e.ref({}),a=e.ref(""),h=e.computed(()=>s.path.replace(/\/(add|new)$/,"")),u=e.computed(()=>{var g;return((g=i.resolve(h.value).meta)==null?void 0:g.title)??""}),y=e.computed(()=>u.value?`Додати в ${u.value.toLowerCase()}`:"Додати"),d=e.computed(()=>{var g;return((g=s.meta)==null?void 0:g.description)??""});function p(){i.push(h.value||"/")}async function x(){if(!l.value){fe.notify({type:"error",title:"Error",message:"Create token is missing."});return}const g=f.value.validate();if(g){fe.notify({type:"warning",title:"Validation",message:Object.entries(g).map(([b,k])=>`${b}: ${k}`).join(`
2
- `)});return}const m=await fetch("/api/table/"+l.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!m.ok){fe.notify({type:"error",title:"Error",message:`Error code: ${m.status}`});return}await m.json(),fe.notify({title:"Success!",message:"Object created."}),i.back()}return e.onMounted(async()=>{const g=c.entityKey||String(s.name??"").split("-")[0],m=await fetch(`/api/form/gis.${g}.table`).then(b=>b.json());l.value=m.token,a.value=m.id,r.value=m.schema,document.title=y.value}),(g,m)=>{const b=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Ht,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[h.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(b,{to:h.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(u.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Pf,[e.createVNode(e.unref(ae.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),m[2]||(m[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Rf,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:p,"aria-label":"Назад"},[e.createVNode(e.unref(ae.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(u.value||"Створення"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:p}," Назад "),e.createElementVNode("button",{onClick:x,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},[d.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Of,[e.createElementVNode("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("div",Hf,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":m[0]||(m[0]=k=>o.value=k),form:f.value,"onUpdate:form":m[1]||(m[1]=k=>f.value=k),schema:r.value,style:{primaryColor:"blue"},formId:a.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Wf={class:"mx-1"},Yf={class:"mx-1"},Zf={class:"flex items-center gap-2 mt-[0.4rem]"},Gf={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},Kf={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Xf={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"},Qf={class:"vs-form w-full"},pn=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityEditPage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),i=e.ref({}),s=e.ref(""),c=ve.useRoute(),f=ve.useRouter(),h=t.entityKey||String(c.name??"").split("-")[0],{id:u}=c.params,y=e.computed(()=>c.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),d=e.computed(()=>u?`${y.value}/${u}`:y.value||"/"),p=e.computed(()=>{var b;return((b=f.resolve(y.value).meta)==null?void 0:b.title)??""}),x=e.computed(()=>{var b;return((b=c.meta)==null?void 0:b.description)??""});function g(){f.push(y.value||"/")}async function m(){const b=i.value.validate();if(b){fe.notify({type:"warning",title:"Validation",message:Object.entries(b).map(([V,S])=>`${V}: ${S}`).join(`
3
- `)});return}if(!l.value){fe.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const k=await fetch(`/api/table/${l.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!k.ok){fe.notify({type:"error",title:"Error",message:`Error code: ${k.status}`});return}await k.json(),fe.notify({title:"Success!",message:"Your changes have been saved."}),f.back()}return e.onMounted(async()=>{const b=await fetch(`/api/form/gis.${h}.table/${u}`).then(V=>V.json());o.value=b.data,l.value=b.token,r.value=b.schema;const k=b.data;s.value=(k==null?void 0:k.name)||(k==null?void 0:k.title)||(k==null?void 0:k.register_key)||(k==null?void 0:k.map_key)||""}),(b,k)=>{const V=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(V,{to:y.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Wf,[e.createVNode(e.unref(ae.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(V,{to:d.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",Yf,[e.createVNode(e.unref(ae.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),k[2]||(k[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Редагування",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Zf,[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(ae.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(s.value||p.value||"Редагування"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:g}," Назад "),e.createElementVNode("button",{onClick:m,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},[x.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Gf,[e.createElementVNode("div",Kf,[e.createElementVNode("div",Xf,[e.createElementVNode("div",Qf,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":k[0]||(k[0]=S=>o.value=S),form:i.value,"onUpdate:form":k[1]||(k[1]=S=>i.value=S),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Jf={class:"flex items-center justify-center col-span-3 gap-2"},eg={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},tg=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(h=>h.VsModal)),r=t,l=e.useModel(t,"columns"),i=e.ref(!1),s=e.ref({}),c=e.ref({...r.data||{}});e.watch(()=>r.data,h=>{c.value={...h||{}}},{deep:!0});const f=()=>l.value=l.value.filter((h,u)=>u!==r.index),a=async()=>{const h=s.value.validate();if(h){fe.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([u,y])=>`${u}: ${y}`).join(`
4
- `)});return}l.value[r.index]=c.value,i.value=!1};return(h,u)=>(e.openBlock(),e.createElementBlock("div",Jf,[e.createElementVNode("button",{onClick:u[0]||(u[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(ae.Edit),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:f,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 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(ae.Trash),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:i.value,"onUpdate:visible":u[4]||(u[4]=y=>i.value=y),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",eg,[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:u[3]||(u[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:a}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:c.value,"onUpdate:values":u[1]||(u[1]=y=>c.value=y),schema:t.scheme,form:s.value,"onUpdate:form":u[2]||(u[2]=y=>s.value=y)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),ng={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")})}},og={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"},ir=t=>og[t==null?void 0:t.toLowerCase()]||"gray",rg=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],cr=t=>{var n;return rg.includes((n=t||"")==null?void 0:n.toLowerCase())},lg={},ag={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 sg(t,n){return e.openBlock(),e.createElementBlock("svg",ag,[...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 ig=we(lg,[["render",sg]]),cg={},dg={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 ug(t,n){return e.openBlock(),e.createElementBlock("svg",dg,[...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 pg=we(cg,[["render",ug]]),mg={},fg={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 gg(t,n){return e.openBlock(),e.createElementBlock("svg",fg,[...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 yg=we(mg,[["render",gg]]),hg={},bg={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 xg(t,n){return e.openBlock(),e.createElementBlock("svg",bg,[...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 kg=we(hg,[["render",xg]]),wg={},_g={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 Eg(t,n){return e.openBlock(),e.createElementBlock("svg",_g,[...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 Cg=we(wg,[["render",Eg]]),Ng={},Vg={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 Bg(t,n){return e.openBlock(),e.createElementBlock("svg",Vg,[...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 $g=we(Ng,[["render",Bg]]),Sg={},vg={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 Lg(t,n){return e.openBlock(),e.createElementBlock("svg",vg,[...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 Ag=we(Sg,[["render",Lg]]),Tg={},Mg={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 Fg(t,n){return e.openBlock(),e.createElementBlock("svg",Mg,[...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 Dg=we(Tg,[["render",Fg]]),zg={},Ig={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 jg(t,n){return e.openBlock(),e.createElementBlock("svg",Ig,[...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 Pg=we(zg,[["render",jg]]),Rg={},Og={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 Ug(t,n){return e.openBlock(),e.createElementBlock("svg",Og,[...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 qg=we(Rg,[["render",Ug]]),Hg={},Wg={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 Yg(t,n){return e.openBlock(),e.createElementBlock("svg",Wg,[...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 Zg=we(Hg,[["render",Yg]]),Gg={},Kg={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 Xg(t,n){return e.openBlock(),e.createElementBlock("svg",Kg,[...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 Qg=we(Gg,[["render",Xg]]),Jg={},ey={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 ty(t,n){return e.openBlock(),e.createElementBlock("svg",ey,[...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 ny=we(Jg,[["render",ty]]),oy={},ry={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 ly(t,n){return e.openBlock(),e.createElementBlock("svg",ry,[...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 ay=we(oy,[["render",ly]]),sy={},iy={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 cy(t,n){return e.openBlock(),e.createElementBlock("svg",iy,[...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 dy=we(sy,[["render",cy]]),uy={},py={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function my(t,n){return e.openBlock(),e.createElementBlock("svg",py,[...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 dr={IconText:ig,IconNumber:pg,IconDate:yg,IconDatetime:kg,IconRichtext:Cg,IconBoolean:$g,IconFile:Ag,IconImage:Dg,IconArray:Pg,IconSelect:qg,IconSlug:Zg,IconDatalist:Qg,IconReference:ny,IconReferenceList:ay,IconBadge:dy,IconCheck:we(uy,[["render",my]])},fy={key:0,class:"flex items-center justify-between mb-6"},gy={class:"flex justify-end w-full"},yy={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},hy={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},by={class:"table-fixed w-full text-[13px]"},xy={class:"bg-gray-50 border-b border-gray-200"},ky={key:0},wy=["onDragstart","onDragover","onDrop"],_y={key:0,class:"flex w-fit items-center gap-2 text-left"},Ey={class:"flex-1 min-w-0"},Cy={class:"font-medium text-gray-900 truncate"},Ny={class:"text-xs text-gray-500"},Vy={key:1,class:"flex items-center justify-center"},By={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"},$y={key:1,class:"text-gray-500 text-sm"},Sy={key:3},vy={class:"px-6 py-4"},Ly={key:1},Ay=["colspan"],$t=we(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(C){return C.charAt(0).toUpperCase()+C.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(C=>C.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=t,c=e.ref({}),f=e.ref(!1),a=e.ref({}),h=e.ref(null),u=e.useSlots(),y=C=>!!(C&&u[C]);n({openCreateDialog:()=>{f.value=!0}});const d=e.computed({get(){return Array.isArray(i.value)?i.value:i.value&&Array.isArray(i.value.columns)?i.value.columns:[]},set(C){Array.isArray(i.value)?i.value=C:i.value&&Array.isArray(i.value.columns)&&(i.value.columns=C)}}),p=e.computed(()=>{const C=s.columnsScheme.map(_=>_.key);return C.includes("name")&&C.includes("label")||C.includes("id")&&C.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...s.columnsScheme.filter(_=>!["name","id","label"].includes(_.key))]:s.columnsScheme});function x(){f.value=!1,a.value={},h.value=null}async function g(){const C=c.value.validate();if(C){fe.notify({type:"warning",title:"Validation",message:Object.entries(C).map(([_,w])=>`${_}: ${w}`).join(`
5
- `)});return}if(h.value===null)d.value=[...d.value,{...a.value}];else{const _=[...d.value];_[h.value]={...a.value},d.value=_}x()}const m=e.ref(null),b=e.ref(null),k=C=>{m.value=C},V=C=>{b.value=C},S=C=>{if(m.value===null||m.value===C){m.value=null,b.value=null;return}const _=[...d.value],[w]=_.splice(m.value,1);_.splice(C,0,w),d.value=_,m.value=null,b.value=null};return(C,_)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",fy,[e.createElementVNode("div",gy,[e.createElementVNode("button",{onClick:_[0]||(_[0]=w=>f.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"},[..._[4]||(_[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",yy,[e.createElementVNode("div",hy,[e.createElementVNode("table",by,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,w=>(e.openBlock(),e.createElementBlock("col",{key:w.key,style:e.normalizeStyle(w.type==="main"?`width: ${t.mainColWidth}`:w.width?`width: ${w.width}`:"auto")},null,4))),128)),_[5]||(_[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",xy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,w=>(e.openBlock(),e.createElementBlock("th",{key:w.key,class:"px-6 py-4"},e.toDisplayString(w.label),1))),128)),_[6]||(_[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),d.value.length?(e.openBlock(),e.createElementBlock("tbody",ky,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(w,$)=>(e.openBlock(),e.createElementBlock("tr",{key:w.id||w.name||$,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":m.value===$,"border-t-2 border-b-2 border-blue-500 bg-blue-50":b.value===$}]),draggable:"true",onDragstart:D=>k($),onDragover:e.withModifiers(D=>V($),["prevent"]),onDrop:D=>S($)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,D=>(e.openBlock(),e.createElementBlock("td",{key:D.key,class:"px-6 py-4 align-middle text-center"},[D.type==="main"?(e.openBlock(),e.createElementBlock("div",_y,[_[7]||(_[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(cr)(w.format==="yes/no"?"check":w.format||w.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(ir)(w.format==="yes/no"?"check":w.format||w.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.format==="yes/no"?"icon-check":e.unref(dr)["Icon"+o(w.format||w.type)]||e.unref(dr).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",Ey,[e.withDirectives((e.openBlock(),e.createElementBlock("p",Cy,[e.createTextVNode(e.toDisplayString(w.name||w.id),1)])),[[e.unref(ng)]]),e.createElementVNode("p",Ny,e.toDisplayString(w.ua||w.label||w.name||w.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[D.slot&&y(D.slot)?e.renderSlot(C.$slots,D.slot,{key:0,row:w,column:D,value:w[D.key],rowIndex:$},void 0,!0):D.type==="color"?(e.openBlock(),e.createElementBlock("div",Vy,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${w[D.key]}]`])},null,2)])):["format","type","meta"].includes(D.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[w[D.key]?(e.openBlock(),e.createElementBlock("span",By,e.toDisplayString(w[D.key]),1)):(e.openBlock(),e.createElementBlock("span",$y,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",Sy,e.toDisplayString(w[D.key]),1))],64))]))),128)),e.createElementVNode("td",vy,[e.createVNode(tg,{columns:d.value,"onUpdate:columns":_[1]||(_[1]=D=>d.value=D),data:w,index:$,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,wy))),128))])):(e.openBlock(),e.createElementBlock("tr",Ly,[e.createElementVNode("td",{colspan:p.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,Ay)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:f.value,"onUpdate:visible":_[3]||(_[3]=w=>f.value=w)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:x,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(l),{ref_key:"form",ref:c,modelValue:a.value,"onUpdate:modelValue":_[2]||(_[2]=w=>a.value=w),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),Ty={class:"p-4 text-[13px]"},My={class:"grid grid-cols-2 gap-x-6 gap-y-2"},Fy=["id","checked","onChange"],Dy={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},zy={class:"font-medium text-gray-900 truncate"},Iy={class:"text-xs text-gray-500"},jy={key:0,class:"text-xs text-[#B2C9D6]"},Py={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"),l=t,i=n,s=e.defineAsyncComponent(()=>import("@opengis/core").then(k=>k.VsModal)),c=e.computed(()=>Array.isArray(l.fields)?l.fields.filter(Boolean):[]),f=k=>(k==null?void 0:k.name)??(k==null?void 0:k.id)??(k==null?void 0:k.key)??(k==null?void 0:k.code)??(k==null?void 0:k.field)??(k==null?void 0:k.value)??"",a=k=>String(f(k)??"").trim(),h=k=>(k==null?void 0:k.title)??(k==null?void 0:k.label)??a(k),u=k=>String((k==null?void 0:k.type)??"").trim(),y=e.computed(()=>new Set(r.value.map(k=>String(k??"").trim()))),d=k=>y.value.has(a(k)),p=k=>{const V=a(k);if(!V)return;const S=new Set(y.value);S.has(V)?S.delete(V):S.add(V),r.value=Array.from(S)},x=e.computed(()=>l.confirmText||"Імпортувати"),g=e.computed(()=>l.cancelText||"Скасувати"),m=()=>{o.value=!1,i("cancel")},b=()=>{i("confirm"),o.value=!1};return(k,V)=>(e.openBlock(),e.createBlock(e.unref(s),{visible:o.value,"onUpdate:visible":V[0]||(V[0]=S=>o.value=S),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Py,[e.createElementVNode("button",{onClick:m,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(g.value),1),e.createElementVNode("button",{onClick:b,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(x.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Ty,[e.createElementVNode("div",My,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,S=>(e.openBlock(),e.createElementBlock("label",{key:a(S),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${a(S)}`,checked:d(S),onChange:C=>p(S)},null,40,Fy),e.createElementVNode("div",Dy,[e.unref(cr)(S.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(ir)(S.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${S.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",zy,e.toDisplayString(a(S)),1),e.createElementVNode("p",Iy,e.toDisplayString(h(S)),1),u(S)?(e.openBlock(),e.createElementBlock("p",jy,e.toDisplayString(u(S)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function Yt(t){return t==null?"":String(t).trim()}function St(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 Zt(t,n,o){const r=Array.isArray(t)?[...t]:[],l=Array.isArray(n)?n:[],{selectedKeys:i,resolveKey:s}=o,c=new Set;for(const u of i){const y=Yt(u);y&&c.add(y)}if(c.size===0)return[];const f=u=>Yt(s(u)),a=[],h=new Set;for(const u of r){const y=f(u);!y||!c.has(y)||(a.push(u),h.add(y))}for(const u of l){const y=f(u);!y||h.has(y)||!c.has(y)||(a.push(u),h.add(y))}return a}const Ry={class:"vs-form"},Oy={class:"vs-form__body auto-rows-max container"},Uy={class:"flex flex-wrap"},qy={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},Hy={class:"h-fit w-full flex flex-wrap"},Wy={class:"w-full"},Yy=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,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=b=>St(b||{}),s=e.defineAsyncComponent(()=>import("@opengis/form")),c=e.ref(),f=e.ref(!1),a=e.ref([]),h=()=>{const b=y.value.map(k=>i(k)).filter(k=>k.length>0);a.value=[...b],f.value=!0},u=e.computed(()=>{var b,k;return((b=n.value)==null?void 0:b.token)||((k=n.value)==null?void 0:k.id)||"register-form"}),y=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.columns)||(n.value.columns=[]),n.value.columns),set:b=>{n.value||(n.value={}),n.value.columns=Array.isArray(b)?b:[]}}),d=e.computed({get:()=>n.value||{},set:b=>{var V;const k=Array.isArray((V=n.value)==null?void 0:V.columns)?n.value.columns:[];n.value={...n.value,...b,columns:k}}});e.watch(()=>c.value,b=>{o.value=b||null},{immediate:!0}),e.watch(f,b=>{b||(a.value=[])});const p=()=>{const b=new Set(a.value.map(S=>Yt(S)).filter(S=>S.length>0)),k=Array.isArray(y.value)?[...y.value]:[],V=l.value.filter(S=>b.has(i(S))).map(S=>{const C=i(S),_=S.title??S.label??C;return{...S,name:C,label:_,type:S.type||"text",meta:S.meta??"features"}});y.value=Zt(k,V,{selectedKeys:a.value,resolveKey:i}),f.value=!1,a.value=[]},x={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"}],m={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}),(b,k)=>(e.openBlock(),e.createElementBlock("div",Ry,[e.createElementVNode("div",Oy,[e.createElementVNode("div",Uy,[e.createElementVNode("div",qy,[(e.openBlock(),e.createBlock(e.unref(s),{ref_key:"formEl",ref:c,key:u.value,schema:x,modelValue:d.value,"onUpdate:modelValue":k[0]||(k[0]=V=>d.value=V)},null,8,["modelValue"]))]),e.createElementVNode("div",Hy,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:h,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"},[...k[4]||(k[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",Wy,[e.createVNode($t,{modelValue:y.value,"onUpdate:modelValue":k[1]||(k[1]=V=>y.value=V),"columns-scheme":g,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:f.value,"onUpdate:visible":k[2]||(k[2]=V=>f.value=V),selection:a.value,"onUpdate:selection":k[3]||(k[3]=V=>a.value=V),fields:l.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:p},null,8,["visible","selection","fields"])]))}}),Zy={class:"vs-form"},Gy={class:"vs-form__body auto-rows-max container"},Ky={class:"flex flex-wrap"},Xy={class:"h-fit w-full flex flex-wrap"},Qy={class:"w-full"},Jy=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,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=d=>St(d||{}),s=e.ref(!1),c=e.ref([]),f=()=>{const d=a.value.map(p=>i(p)).filter(p=>p.length>0);c.value=[...d],s.value=!0},a=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:d=>{n.value||(n.value={}),n.value.filters=Array.isArray(d)?d:[]}});e.watch(s,d=>{d||(c.value=[])});const h=()=>{const d=new Set(c.value.map(g=>Yt(g)).filter(g=>g.length>0)),p=Array.isArray(a.value)?[...a.value]:[],x=l.value.filter(g=>d.has(i(g))).map(g=>({name:i(g),label:g.title??g.label??i(g),type:g.type||"text"}));a.value=Zt(p,x,{selectedKeys:c.value,resolveKey:i}),s.value=!1,c.value=[]},u=[{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}),(d,p)=>(e.openBlock(),e.createElementBlock("div",Zy,[e.createElementVNode("div",Gy,[e.createElementVNode("div",Ky,[p[4]||(p[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",Xy,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:f,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"},[...p[3]||(p[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",Qy,[e.createVNode($t,{modelValue:a.value,"onUpdate:modelValue":p[0]||(p[0]=x=>a.value=x),"columns-scheme":u,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":p[1]||(p[1]=x=>s.value=x),selection:c.value,"onUpdate:selection":p[2]||(p[2]=x=>c.value=x),fields:l.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:h},null,8,["visible","selection","fields"])]))}}),eh={class:"vs-form"},th={class:"vs-form__body auto-rows-max container"},nh={class:"flex flex-wrap"},oh={class:"h-fit w-full flex flex-wrap"},rh={class:"w-full"},lh=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,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),i=d=>St(d||{}),s=e.ref(!1),c=e.ref([]),f=()=>{const d=a.value.map(p=>i(p)).filter(p=>p.length>0);c.value=[...d],s.value=!0},a=e.computed({get:()=>n.value.card,set:d=>{n.value||(n.value={}),n.value.card=Array.isArray(d)?d:[]}});e.watch(s,d=>{var p;if(d){const x=((p=a.value)==null?void 0:p.map(g=>g.name))||[];c.value=[...x]}});const h=()=>{const d=new Set(c.value.map(g=>Yt(g)).filter(g=>g.length>0)),p=Array.isArray(a.value)?[...a.value]:[],x=l.value.filter(g=>d.has(i(g))).map(g=>{const m=i(g),b=g.title??g.label??m;return{...g,name:m,label:b,format:g.format||g.type||"text",meta:g.meta||"title"}});a.value=Zt(p,x,{selectedKeys:c.value,resolveKey:i}),s.value=!1,c.value=[]},u=[{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:"text",label:"Класифікатор",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(d,p)=>(e.openBlock(),e.createElementBlock("div",eh,[e.createElementVNode("div",th,[e.createElementVNode("div",nh,[p[4]||(p[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",oh,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:f,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"},[...p[3]||(p[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",rh,[e.createVNode($t,{modelValue:a.value,"onUpdate:modelValue":p[0]||(p[0]=x=>a.value=x),"columns-scheme":u,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":p[1]||(p[1]=x=>s.value=x),selection:c.value,"onUpdate:selection":p[2]||(p[2]=x=>c.value=x),fields:l.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:h},null,8,["visible","selection","fields"])]))}}),ur={template1:or,template2:rr,template3:lr,template4:ar,template5:sr},ah={class:"space-y-4"},sh={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},ih={class:"text-lg font-semibold mb-4"},ch={class:"bg-white"},dh={key:1,class:"text-gray-400 text-center py-12"},uh={key:2,class:"text-gray-400 text-center py-12"},ph=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"}],l={view:{type:"radio",label:"Вигляд",position:"horizontal",required:!0,options:r,col:12}},i=e.computed(()=>{var h;return Array.isArray((h=o.value)==null?void 0:h.columns)?o.value.columns:[]}),s=e.computed(()=>{var h;return((h=o.value)==null?void 0:h.view)||"template1"}),c=e.computed(()=>ur[s.value]||ur.template1),f=e.computed(()=>{var y;const h=(y=o.value)==null?void 0:y.view;if(!h)return"template1";const u=r.find(d=>d.id===h);return(u==null?void 0:u.text)||h}),a=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(u=>{var y,d;return{...u,service_id:(y=o.value)==null?void 0:y.service_id,is_map:(d=o.value)==null?void 0:d.is_map}}));return(h,u)=>(e.openBlock(),e.createElementBlock("div",ah,[e.createElementVNode("div",sh,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:l,modelValue:o.value,"onUpdate:modelValue":u[0]||(u[0]=y=>o.value=y)},null,8,["modelValue"]))]),e.createElementVNode("h2",ih," Превʼю таблиці ("+e.toDisplayString(f.value)+") ",1),e.createElementVNode("div",ch,[c.value&&a.value.length&&i.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value),{items:a.value,columns:i.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:s.value},null,8,["items","columns","hide-details-button"])):a.value.length?(e.openBlock(),e.createElementBlock("div",uh," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",dh," Немає даних для превʼю "))])]))}}),mh={class:"w-full mb-6"},fh={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},gh=["onClick"],pr=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,r=l=>{o("update:activeTab",l)};return(l,i)=>(e.openBlock(),e.createElementBlock("div",mh,[e.createElementVNode("div",fh,[(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,gh))),128))])]))}}),yh={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},hh={class:"mx-1"},bh={class:"text-gray-900 font-semibold"},xh={key:0,class:"text-center py-12 mt-6 px-[24px]"},kh={key:1,class:"px-[24px] overflow-y-auto"},wh={class:"space-y-6"},_h=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=ve.useRoute(),o=ve.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),l=e.computed(()=>{var m;return((m=o.resolve(r.value).meta)==null?void 0:m.title)??""}),i=e.computed(()=>{var m;return((m=y.value)==null?void 0:m.name)||"Налаштування реєстру"}),s=e.ref("list"),c=e.ref(""),f=e.ref(!0),a=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],h={list:Yy,filters:Jy,card:lh,preview:ph},u=a.map(m=>m.id),y=e.ref({columns:[],filters:[],card:[],tableData:[]}),d=e.ref([]),p=async()=>{var b;if(!((b=y.value)==null?void 0:b.token)){fe.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const k=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y.value)});if(!k.ok)throw new Error(`Failed to save content: ${k.status}`);fe.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(k){fe.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(k)}},x=async m=>{try{const k=await(await fetch(`/api/gis-registry/${m}`)).json(),V=Array.isArray(k==null?void 0:k.rows)?k.rows:[];y.value.tableData=V.slice(0,3)}catch(b){console.error("Помилка завантаження превʼю:",b)}},g=async()=>{var m,b;try{f.value=!0;const V=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),S=((m=V==null?void 0:V.rows)==null?void 0:m[0])||{};c.value=S.register_key||"",y.value={...S,columns:Array.isArray(S.columns)?S.columns:[],filters:Array.isArray(S.filters)?S.filters:[],card:Array.isArray(S.card)?S.card:[],tableData:Array.isArray(S.tableData)?S.tableData:[]},(b=V==null?void 0:V.tokens)!=null&&b.edit&&(y.value.token=V.tokens.edit),d.value=Array.isArray(V==null?void 0:V.fields)?V.fields:[]}catch(k){console.error("Помилка завантаження даних:",k)}finally{f.value=!1}};return e.onMounted(async()=>{const m=n.query.tab;typeof m=="string"&&u.includes(m)&&(s.value=m),await g(),c.value&&await x(c.value)}),e.watch(s,m=>{n.query.tab!==m&&o.replace({query:{...n.query,tab:m}})}),e.watch(()=>n.query.tab,m=>{typeof m=="string"&&u.includes(m)&&s.value!==m&&(s.value=m)}),e.watch(()=>n.params.id,async(m,b)=>{!m||m===b||(await g(),c.value&&await x(c.value))}),(m,b)=>{const k=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",yh,[e.createVNode(Ht,{variant:"form",title:i.value},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(k,{to:r.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",hh,[e.createVNode(e.unref(ae.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",bh,e.toDisplayString(i.value),1)]),description:e.withCtx(()=>[...b[3]||(b[3]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:b[0]||(b[0]=V=>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:p,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"]),f.value?(e.openBlock(),e.createElementBlock("div",xh,[...b[4]||(b[4]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",kh,[e.createVNode(pr,{tabs:a,activeTab:s.value,"onUpdate:activeTab":b[1]||(b[1]=V=>s.value=V)},null,8,["activeTab"]),e.createElementVNode("div",wh,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(h[s.value]),{data:y.value,"onUpdate:data":b[2]||(b[2]=V=>y.value=V),fields:d.value,"hide-details-button":t.hideDetailsButton,key:s.value},null,40,["data","fields","hide-details-button"]))])]))])}}})},Symbol.toStringTag,{value:"Module"}));/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function mr(t){return typeof t>"u"||t===null}function Eh(t){return typeof t=="object"&&t!==null}function Ch(t){return Array.isArray(t)?t:mr(t)?[]:[t]}function Nh(t,n){var o,r,l,i;if(n)for(i=Object.keys(n),o=0,r=i.length;o<r;o+=1)l=i[o],t[l]=n[l];return t}function Vh(t,n){var o="",r;for(r=0;r<n;r+=1)o+=t;return o}function Bh(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var $h=mr,Sh=Eh,vh=Ch,Lh=Vh,Ah=Bh,Th=Nh,Qe={isNothing:$h,isObject:Sh,toArray:vh,repeat:Lh,isNegativeZero:Ah,extend:Th};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(Ye,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):(Ye=typeof globalThis<"u"?globalThis:Ye||self,e(Ye.MapCustom={},Ye.Vue,Ye.vueRouter,Ye.lucide,Ye.openGIScore,Ye.openGISfilter,Ye.openGISform))})(this,(function(Ye,e,Fe,ce,ye,Nn,Do){"use strict";const rn=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=Fe.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(g=>[e.renderSlot(i.$slots,p,e.normalizeProps(e.guardReactiveProps(g)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),Ml="registers",Fl="/gis.registers",Dl=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eh)),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(rn,{components:i,"entity-key":Ml,"entity-base-path":Fl,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),zl="services",Il="/gis.datasets",Pl=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Y1)),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 g=String((p==null?void 0:p.text)||p||"").toLowerCase();return g.includes("error")||g.includes("inactive")?"bg-red-100 text-red-800":g.includes("warning")||g.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(p,g)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":zl,"entity-base-path":Il,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:x})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(x)])},e.toDisplayString((x==null?void 0:x.text)||x||"-"),3)]),_:1}))}}),jl="rasters",Rl="/gis.rasters",Ol=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>ck)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>_w)),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(rn,{components:i,"entity-key":jl,"entity-base-path":Rl,"columns-config":s,"create-param":"new","edit-action":"edit"}))}}),Ul="cartocss",ql="/gis.cartocss",Hl=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>N2)),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 g=String((p==null?void 0:p.text)||p||"").toLowerCase();return g.includes("error")||g.includes("inactive")?"bg-red-100 text-red-800":g.includes("warning")||g.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(p,g)=>(e.openBlock(),e.createBlock(rn,{components:i,"entity-key":Ul,"entity-base-path":ql,"columns-config":s,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:x})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",c(x)])},e.toDisplayString((x==null?void 0:x.text)||x||"-"),3)]),_:1}))}}),Ce=(t,n)=>{const o=t.__vccOpts||t;for(const[r,a]of n)o[r]=a;return o},Wl={},Yl={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 Zl(t,n){return e.openBlock(),e.createElementBlock("svg",Yl,[...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 Vn=Ce(Wl,[["render",Zl]]),Gl={class:"gap-2 inline-flex"},Kl=["href"],Xl="maps",zo="/gis.maps",Ql=Ce(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>un)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>pn)),a=e.defineAsyncComponent(()=>Promise.resolve().then(()=>g_)),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(rn,{components:i,"entity-key":Xl,"entity-base-path":zo,"columns-config":s,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:g})=>[e.createElementVNode("div",Gl,[e.createElementVNode("a",{href:`${zo}/${g.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(Vn)],8,Kl)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),Jl={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%]"},ea={class:"pt-0 mt-0"},ta={key:0,class:"flex items-center justify-center py-12"},na={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},oa={key:2,class:"text-center py-12 text-gray-500"},ra={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},la=["onClick"],aa={class:"flex items-start justify-between"},sa={class:"flex items-start gap-3"},ia={class:"flex-1 min-w-0"},ca={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},da=["onClick"],ua={class:"relative"},pa=["onClick"],ma={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"},fa={class:"text-xs text-gray-600 line-clamp-2"},ga={class:"flex items-center gap-2 shrink-0"},ya={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},ha={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},Kn=30,xa=Ce(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,a=o,i=Fe.useRouter(),s=Fe.useRoute(),c=e.ref(Number(s.query.page)||1),p=e.ref(!1),g=e.ref(0),x=e.ref([]),l=e.computed(()=>{const w=(c.value-1)*Kn,S=w+Kn;return x.value.slice(w,S)}),y=e.ref(!0),d=e.ref(null),u=e.ref(null);let b=null,f=null;const m=(w="",S="")=>{const A=new URLSearchParams,R=w.trim();R&&A.set("search",R);const Z=(S||"").trim();Z&&A.set("type",Z);const I=A.toString();return I?`/api/user-cls?${I}`:"/api/user-cls"},h=async(w="",S="")=>{try{y.value=!0,d.value=null;const A=m(w,S),R=await fetch(A);if(!R.ok)throw new Error(`HTTP error: ${R.status}`);const Z=await R.json();if(x.value=Z.data,!w.trim())g.value=Z.data.length;else if(g.value===0){const I=await fetch(m("",S));if(I.ok){const K=await I.json();g.value=K.data.length}}a("update:counts",{filtered:x.value.length,total:g.value})}catch(A){d.value=A instanceof Error?A.message:"Failed to load classifiers",console.error("Error fetching classifiers:",A)}finally{y.value=!1}};e.onMounted(()=>{p.value=!0,h(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([w,S])=>{b&&clearTimeout(b),b=setTimeout(()=>{h(w,S??""),c.value=1},300)});const k=w=>{i.push({name:"classifier-detail",params:{name:w.name}})},N=()=>{h(r.search,r.type??"")},$=async w=>{try{await navigator.clipboard.writeText(w),u.value=w,f&&clearTimeout(f),f=setTimeout(()=>{u.value=null},500)}catch(S){console.error("Failed to copy text: ",S)}};n({refetch:N});const E=w=>{c.value=w,i.replace({query:{...s.query,page:String(w)}})};return(w,S)=>(e.openBlock(),e.createElementBlock("div",Jl,[e.createElementVNode("div",ea,[y.value?(e.openBlock(),e.createElementBlock("div",ta,[e.createVNode(e.unref(ce.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",na,e.toDisplayString(d.value),1)):x.value.length===0?(e.openBlock(),e.createElementBlock("div",oa," Нічого не знайдено ")):e.createCommentVNode("",!0),x.value.length>0?(e.openBlock(),e.createElementBlock("div",ra,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(A,R)=>(e.openBlock(),e.createElementBlock("div",{key:R,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=>k(A)},[e.createElementVNode("div",aa,[e.createElementVNode("div",sa,[A.type==="sql"?(e.openBlock(),e.createBlock(e.unref(ce.Code),{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(ce.Layers),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",ia,[e.createElementVNode("div",ca,[e.createElementVNode("h4",{onClick:e.withModifiers(Z=>$(A.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(A.name),9,da),e.createElementVNode("div",ua,[e.createElementVNode("button",{onClick:e.withModifiers(Z=>$(A.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(ce.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,pa),u.value===A.name?(e.openBlock(),e.createElementBlock("div",ma," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",fa,e.toDisplayString(A.description||"Опис відсутній"),1)])]),e.createElementVNode("div",ga,[A.type!="sql"?(e.openBlock(),e.createElementBlock("span",ya,e.toDisplayString(A.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(ce.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,la))),128))])):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",ha,[e.createVNode(e.unref(ye.VsPagination),{total:x.value.length,page:c.value,"page-size":Kn,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":E,onPageChange:E},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-e728e68b"]]),ba={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},ka={class:""},wa={class:"text-2xl font-bold mb-2 flex items-center gap-2"},_a={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Ea={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},Ca={class:"w-full md:w-auto"},Na=["value"],Va={class:"relative w-full lg:w-[16rem]"},Ba={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},$a={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},Sa=["value"],va=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=s=>{const c=s.target.value;r("update:filter",c)},i=e.ref(!1);return(s,c)=>(e.openBlock(),e.createElementBlock("div",ba,[e.createElementVNode("div",ka,[e.createElementVNode("h1",wa,[c[3]||(c[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",_a,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),c[4]||(c[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Ea,[e.createElementVNode("div",Ca,[c[6]||(c[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:a},[...c[5]||(c[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,Na)]),e.createElementVNode("div",Va,[e.createElementVNode("div",Ba,[e.createElementVNode("div",$a,[e.createVNode(e.unref(ce.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:c[0]||(c[0]=p=>s.$emit("update:modelValue",p.target.value))},null,40,Sa),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:c[1]||(c[1]=p=>s.$emit("update:modelValue",""))},[e.createVNode(e.unref(ce.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:c[2]||(c[2]=p=>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(ce.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),c[7]||(c[7]=e.createTextVNode(" Додати ",-1))])])]))}}),La={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},Aa={key:0,class:"flex items-center justify-center py-12"},Ta={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},Ma={key:2,class:"text-center py-12 text-gray-500"},Fa={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},Da={class:"bg-gray-50 border-b border-gray-200"},za={class:"divide-y divide-gray-200"},Ia={class:"px-4 py-3 w-1/12"},Pa={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},ja={class:"px-4 py-3 text-sm text-gray-600 font-mono"},Ra=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,r=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],a=e.ref([]),i=e.ref(!0),s=e.ref(null),c=e.computed(()=>{var l;if(!((l=o.search)!=null&&l.trim()))return a.value;const x=o.search.toLowerCase().trim();return a.value.filter(y=>{var d,u;return((d=y.text)==null?void 0:d.toLowerCase().includes(x))||((u=y.id)==null?void 0:u.toLowerCase().includes(x))})}),p=async x=>{try{i.value=!0,s.value=null;const l=await fetch(`/api/suggest/${encodeURIComponent(x)}`);if(!l.ok)throw new Error(`HTTP error: ${l.status}`);const y=await l.json();a.value=y.data}catch(l){s.value=l instanceof Error?l.message:"Failed to load items",console.error("Error fetching suggest items:",l)}finally{i.value=!1}};return e.onMounted(()=>{o.classifierName&&p(o.classifierName)}),e.watch(()=>o.classifierName,x=>{x&&p(x)}),n({refetch:()=>{p(o.classifierName)}}),(x,l)=>(e.openBlock(),e.createElementBlock("div",La,[i.value?(e.openBlock(),e.createElementBlock("div",Aa,[e.createVNode(e.unref(ce.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):s.value?(e.openBlock(),e.createElementBlock("div",Ta,e.toDisplayString(s.value),1)):a.value.length===0?(e.openBlock(),e.createElementBlock("div",Ma," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",Fa,[e.createElementVNode("thead",Da,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,y=>e.createElementVNode("th",{key:y.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[y.width,y.align]])},e.toDisplayString(y.label),3)),64))])]),e.createElementVNode("tbody",za,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,y=>(e.openBlock(),e.createElementBlock("tr",{key:y.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",Ia,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:y.color})},null,4)]),e.createElementVNode("td",Pa,e.toDisplayString(y.text),1),e.createElementVNode("td",ja,e.toDisplayString(y.id),1)]))),128))])]))]))}}),Oa={class:"space-y-6 flex-1 overflow-y-auto p-0"},Ua={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},qa={class:"text-gray-900"},Ha={class:"flex items-start justify-between mb-6"},Wa={class:"flex-1 mr-4"},Ya={class:"text-2xl font-bold text-gray-900"},Za={key:0,class:"flex items-center gap-2 group mt-1"},Ga={class:"text-sm text-gray-500"},Ka={key:1,class:"flex items-center gap-2 mt-1"},Xa=["disabled"],Qa=["disabled"],Ja={class:"flex items-center gap-3"},es={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},ts={class:"relative max-w-md"},ns={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},os={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},rs=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Fe.useRouter(),o=Fe.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(""),g=e.ref(""),x=e.ref(!1),l=e.ref(!1),y=e.ref(null),d=async()=>{var k;try{const N=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!N.ok)return;const E=(k=(await N.json()).data)==null?void 0:k[0];E&&(p.value=E.description||"")}catch(N){console.error("Error fetching classifier details:",N)}},u=()=>{g.value=p.value,x.value=!0,e.nextTick(()=>{var k;(k=y.value)==null||k.focus()})},b=()=>{x.value=!1,g.value=""},f=async()=>{try{l.value=!0;const $=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],E={name:r.value,description:g.value.trim()||null,data:$},w=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)});if(!w.ok)throw new Error(`HTTP error: ${w.status}`);p.value=g.value,x.value=!1}catch(k){console.error("Error saving description:",k)}finally{l.value=!1}};e.onMounted(()=>{d()}),e.watch(r,()=>{d()});const m=()=>{i.value=null,a.value=!0},h=k=>{i.value=k,a.value=!0};return(k,N)=>(e.openBlock(),e.createElementBlock("div",Oa,[e.createElementVNode("div",null,[e.createElementVNode("div",Ua,[e.createElementVNode("button",{onClick:N[0]||(N[0]=$=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),N[4]||(N[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",qa,e.toDisplayString(r.value),1)]),e.createElementVNode("div",Ha,[e.createElementVNode("div",Wa,[e.createElementVNode("h1",Ya,e.toDisplayString(r.value),1),x.value?(e.openBlock(),e.createElementBlock("div",Ka,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":N[1]||(N[1]=$=>g.value=$),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(f,["enter"]),e.withKeys(b,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,g.value]]),e.createElementVNode("button",{onClick:f,disabled:l.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(ce.Check),{width:18,height:18,"stroke-width":2})],8,Xa),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(ce.X),{width:18,height:18,"stroke-width":2})],8,Qa)])):(e.openBlock(),e.createElementBlock("div",Za,[e.createElementVNode("p",Ga,e.toDisplayString(p.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:u,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(ce.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Ja,[e.createElementVNode("button",{onClick:m,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(ce.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),N[5]||(N[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:N[2]||(N[2]=$=>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",es,[e.createElementVNode("div",ts,[e.createElementVNode("div",ns,[e.createElementVNode("div",os,[e.createVNode(e.unref(ce.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":N[3]||(N[3]=$=>c.value=$),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.createVNode(Ra,{ref_key:"detailsTableRef",ref:s,"classifier-name":r.value,search:c.value,onEdit:h},null,8,["classifier-name","search"])]))}}),ls={class:"flex-col justify-between h-full"},as={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},ss=e.defineComponent({__name:"index",setup(t){const n=Fe.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,g)=>(e.openBlock(),e.createElementBlock("div",ls,[e.createElementVNode("div",as,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(va,{key:0,modelValue:o.value,"onUpdate:modelValue":g[0]||(g[0]=x=>o.value=x),filter:r.value,"onUpdate:filter":g[1]||(g[1]=x=>r.value=x),counts:i.value,onRefresh:c},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(rs,{key:2})):(e.openBlock(),e.createBlock(xa,{key:1,ref_key:"gridRef",ref:a,search:o.value,type:r.value,"onUpdate:counts":s},null,8,["search","type"]))]),g[2]||(g[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),is={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},cs={class:"w-full bg-white relative"},ds={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},us={key:0,class:"bg-white divide-y divide-gray-200"},ps={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},ms=["onClick"],fs={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},gs={key:1,class:"px-6 py-3.5"},ys={class:"text-sm font-semibold text-gray-900"},hs={class:"text-xs text-gray-400 mt-0.5"},xs={key:0,class:"inline-flex items-center cursor-pointer"},bs={class:"relative"},ks=["checked","onChange"],ws=["checked","onChange"],_s={class:"px-6 py-3"},Es={class:"ml-6"},Cs={class:"text-sm text-black font-medium"},Ns={class:"text-xs text-gray-400 mt-0.5"},Vs=["checked","onChange"],Bs={key:1},$s=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 k;return((k=r.data)==null?void 0:k.routers)||[]});e.watch(()=>r.modelValue,k=>{const N={};(k||[]).forEach($=>{N[$.id]=new Set($.actions||[])}),c.value=N},{immediate:!0});function g(){const k=Object.entries(c.value).map(([N,$])=>({id:N,actions:Array.from($)}));a("update:modelValue",k)}function x(k){return k?k.id||k.path||k.table||k.ua||JSON.stringify(k):""}function l(k){return k?k.id||k.ua||k.name:""}function y(k){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[k]||k}function d(k,N){var E;const $=x(k);return((E=c.value[$])==null?void 0:E.has(N))||!1}function u(k){const N=l(k);return s.value[N]===!0}function b(k){const N=l(k);s.value[N]=!u(k)}function f(k,N){var $;return($=k.menu)!=null&&$.length?k.menu.every(E=>d(E,N)):d(k,N)}function m(k,N,$){var E;if((E=k.menu)!=null&&E.length){const w={...c.value};k.menu.forEach(S=>{const A=x(S),R=new Set(w[A]||[]);$?R.add(N):R.delete(N),w[A]=R}),c.value=w,g()}}function h(k,N,$){const E=x(k),w=new Set(c.value[E]||[]);$?w.add(N):w.delete(N),c.value={...c.value,[E]:w},g()}return n({getSelected:()=>r.modelValue}),(k,N)=>{var $;return e.openBlock(),e.createElementBlock("div",is,[e.createElementVNode("table",cs,[e.createElementVNode("thead",ds,[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=>(e.openBlock(),e.createElementBlock("th",{key:E,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(y(E)),1))),128))])]),($=p.value)!=null&&$.length?(e.openBlock(),e.createElementBlock("tbody",us,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,E=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:x(E)},[e.createElementVNode("tr",ps,[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:w=>b(E)},[e.createElementVNode("button",fs,[e.createVNode(e.unref(ce.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":u(E)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(E.ua),1)])],8,ms)):(e.openBlock(),e.createElementBlock("td",gs,[e.createElementVNode("div",ys,e.toDisplayString(E.ua),1),e.createElementVNode("div",hs,e.toDisplayString(E.path||E.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"},[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("label",xs,[e.createElementVNode("div",bs,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:f(E,w),onChange:S=>m(E,w,S.target.checked)},null,40,ks),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:d(E,w),onChange:S=>h(E,w,S.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,ws))]))),128))]),E!=null&&E.menu&&u(E)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(E.menu,w=>(e.openBlock(),e.createElementBlock("tr",{key:x(w),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",_s,[e.createElementVNode("div",Es,[e.createElementVNode("div",Cs,e.toDisplayString(w.ua),1),e.createElementVNode("div",Ns,e.toDisplayString(w.path||w.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,S=>(e.openBlock(),e.createElementBlock("td",{key:S,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:d(w,S),onChange:A=>h(w,S,A.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,Vs)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",Bs,[...N[2]||(N[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),Ss={class:"flex flex-col gap-4 mt-2 mx-2"},vs={class:"flex items-center gap-3"},Ls={class:"flex-1 relative"},As=e.defineComponent({__name:"VsPermissions",setup(t){const n=Fe.useRoute(),o=e.ref(""),r=e.ref(null),a=e.ref({categories:[],layers:[]}),i=e.ref([]),s=e.ref(["edit"]),c=e.computed(()=>g(a.value)),p=e.computed(()=>{const y=o.value.toLowerCase().trim();return y?c.value.map(d=>{const u=String(d.ua||"").toLowerCase().includes(y),b=(d.menu||[]).filter(f=>String(f.ua||"").toLowerCase().includes(y));return u?{...d,menu:d.menu}:b.length?{...d,menu:b}:null}).filter(Boolean):c.value}),g=y=>{const d=y.categories||[],u=y.layers||[],b=d.map(m=>{const h=u.filter(k=>k.category_id===m.category_id).map(k=>({id:String(k.layer_id),ua:k.name,path:String(k.layer_id)}));return h.length?{ua:m.name,menu:h,id:String(m.category_id)}:null}).filter(Boolean),f=u.filter(m=>!m.category_id).map(m=>({ua:m.name,id:String(m.layer_id),path:String(m.layer_id)}));return f.length&&b.push({ua:"Без категорії",menu:f,id:"noCategory"}),b},x=async()=>{const[y,d]=await Promise.all([fetch("/api/catalog").then(u=>u.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(u=>u.json())]);a.value=y,i.value=((d==null?void 0:d.layer_list)||[]).filter(u=>u.service_id).map(u=>({id:String(u.service_id),actions:u.actions||[]}))},l=async()=>{var u,b;const d=(((b=(u=r.value)==null?void 0:u.getSelected)==null?void 0:b.call(u))||i.value).filter(f=>{var m;return(m=f.actions)==null?void 0:m.length}).map(f=>({service_id:f.id,actions:f.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)}).then(f=>f.json()).then(f=>{ye.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(f=>{ye.notify({title:"Помилка",message:f.message,type:"error"})})};return e.onMounted(x),(y,d)=>(e.openBlock(),e.createElementBlock("div",Ss,[e.createElementVNode("div",vs,[e.createElementVNode("div",Ls,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=u=>o.value=u),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:d[1]||(d[1]=u=>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($s,{ref_key:"accessRef",ref:r,data:{routers:p.value},modelValue:i.value,"onUpdate:modelValue":d[2]||(d[2]=u=>i.value=u),actions:s.value},null,8,["data","modelValue","actions"])]))}});function Ut(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function zt(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Ut(t[0]),o=Ut(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return zt(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=Ut(o),i=Ut(r);if(a!=null&&i!=null)return[a,i]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Ut(n),a=Ut(o);return r!=null&&a!=null?[r,a]:null}return null}const Io=Symbol("MapContext");function Ts(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const a=[],i=()=>{r=!0,a.length&&a.forEach(d=>d())},s=()=>{const d=t.container;return typeof d=="string"?document.getElementById(d):(d==null?void 0:d.value)!==void 0?d.value:d},c=()=>r?Promise.resolve():new Promise(d=>a.push(d)),p=(d,u)=>{if(d==null)return u;const b=Number(typeof d=="string"?d.trim():d);return Number.isFinite(b)?b:u},g=d=>{if(!n.value||!d)return;const u=zt(d.center);u&&n.value.setCenter(u);const b=n.value.getZoom(),f=p(d.zoom,b);if(f!==b&&n.value.setZoom(f),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const m=n.value.getMaxZoom(),h=p(d.maxZoom,m);h!==m&&n.value.setMaxZoom(h)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const m=n.value.getMinZoom(),h=p(d.minZoom,m);h!==m&&n.value.setMinZoom(h)}d.bounds&&n.value.fitBounds(d.bounds,{animate:!1})},x=async()=>{var N,$,E,w,S,A,R;if(typeof window>"u"||n.value)return;const d=s();if(!d)throw new Error("Map container not found");const u=e.unref(t.settings)||null,b=zt((N=u==null?void 0:u.map)==null?void 0:N.center)||[30,50],f=p(($=u==null?void 0:u.map)==null?void 0:$.zoom,7),m=p((E=u==null?void 0:u.map)==null?void 0:E.maxZoom,20),k={...{attributionControl:!1,center:b,zoom:f,maxZoom:m,minZoom:4},...t.mapOptions||{},container:d};k.maxZoom==null&&(k.maxZoom=m),n.value=new maplibregl.Map(k),(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 K;const Z=n.value.getContainer(),I=(K=Z==null?void 0:Z.querySelector)==null?void 0:K.call(Z,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");I&&typeof n.value.easeTo=="function"&&I.addEventListener("click",q=>{q.preventDefault(),q.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(S=t.controls)!=null&&S.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(A=t.controls)!=null&&A.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(R=t.controls)!=null&&R.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var Z;g((Z=e.unref(t.settings))==null?void 0:Z.map),o.value=!0,i()})};e.watch(()=>{var d;return(d=e.unref(t.settings))==null?void 0:d.map},d=>{g(d)},{deep:!0});const l=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(x),e.onUnmounted(l);const y={map:n,ready:c,flyTo:d=>{var u;return(u=n.value)==null?void 0:u.flyTo(d)},fitBounds:(d,u)=>{var b;return(b=n.value)==null?void 0:b.fitBounds(d,u)},setCenter:d=>{var u;return(u=n.value)==null?void 0:u.setCenter(d)},setZoom:d=>{var u;return(u=n.value)==null?void 0:u.setZoom(d)},addControl:(d,u)=>{var b;return(b=n.value)==null?void 0:b.addControl(d,u)},removeControl:d=>{var u;return(u=n.value)==null?void 0:u.removeControl(d)},on:(d,u,b)=>{var f,m;return typeof u=="string"?((f=n.value)==null||f.on(d,u,b),()=>{var h;return(h=n.value)==null?void 0:h.off(d,u,b)}):((m=n.value)==null||m.on(d,u),()=>{var h;return(h=n.value)==null?void 0:h.off(d,u)})},off:(d,u,b)=>{var f,m;typeof u=="string"?(f=n.value)==null||f.off(d,u,b):(m=n.value)==null||m.off(d,u)},project:d=>{var u;return(u=n.value)==null?void 0:u.project(d)},unproject:d=>{var u;return(u=n.value)==null?void 0:u.unproject(d)}};return e.provide(Io,y),y}function tt(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(Io);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Po=Symbol.for("gis.settingsRef");function Xn(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[Po];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[Po]=o),o}const Bn=Ce(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),a=Xn(),i=Ts({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!0,scale:!0},settings:a});async function s(){var x;await e.nextTick();const g=(x=i.map)==null?void 0:x.value;g!=null&&g.resize&&g.resize()}function c(){typeof ResizeObserver>"u"||r.value||!o.value||(r.value=new ResizeObserver(()=>{s()}),r.value.observe(o.value))}function p(){var g;(g=r.value)==null||g.disconnect(),r.value=null}return e.onMounted(()=>{s(),c(),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",s),p()}),n({ctx:i}),(g,x)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(g.$slots,"default",{},void 0,!0)],512))}}),[["__scopeId","data-v-d6e61166"]]),Ms=["Noto Sans Regular"],Fs=12,Ds="#0f172a",zs="#fff",Is=14;function ot(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Ps(t){return t?Array.isArray(t)?t:[t]:Ms}function Qn(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 js(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 Rs(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 Os(t,n={}){if(!t)return[];const o=ot(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=js(o);if(!r)return[];const a=r,i=(n.geometry||t.type||"point").toString().toLowerCase(),s=ot(t,["text-font","textFont"]),c=Qn(ot(t,["text-size","textSize"]),Fs),p=ot(t,["text-allow-overlap","textAllowOverlap"]),g=ot(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),x=ot(t,["text-maxzoom","textMaxZoom","maxzoom"]),l=ot(t,["text-color","textColor"])||Ds,y=ot(t,["text-halo-color","textHaloColor"])||zs,d=ot(t,["text-halo-width","textHaloWidth"]),u=ot(t,["text-halo-blur","textHaloBlur"]),b=ot(t,["text-offset","textOffset"]),f=ot(t,["text-anchor","textAnchor"]),m=ot(t,["text-justify","textJustify"]),h=ot(t,["text-letter-spacing","textLetterSpacing"]),k=ot(t,["text-transform","textTransform"]),N=ot(t,["symbol-placement","symbolPlacement"]),$=ot(t,["symbol-spacing","symbolSpacing"]),E=ot(t,["text-rotation-alignment","textRotationAlignment"]),w=ot(t,["text-pitch-alignment","textPitchAlignment"]),S=ot(t,["text-opacity","textOpacity"]),A={"text-field":a,"text-font":Ps(s),"text-size":c,"text-allow-overlap":p??!1};b&&(A["text-offset"]=b),i!=="line"&&(A["text-anchor"]=f??"center"),m&&(A["text-justify"]=m),h!==void 0&&(A["text-letter-spacing"]=h),k&&(A["text-transform"]=k),$!==void 0&&(A["symbol-spacing"]=$),i==="line"?(A["symbol-placement"]=N||"line",A["text-rotation-alignment"]=E||"map",A["text-pitch-alignment"]=w||"map"):(E&&(A["text-rotation-alignment"]=E),w&&(A["text-pitch-alignment"]=w),N&&(A["symbol-placement"]=N)),f&&i==="line"&&(A["text-anchor"]=f);const R={"text-color":l,"text-opacity":S??1};R["text-halo-color"]=y,d!==void 0&&(R["text-halo-width"]=d),u!==void 0&&(R["text-halo-blur"]=u);const Z={type:"symbol",layout:A,paint:R},I=Qn(g,Is);if(Z.minzoom=I,x!==void 0){const q=Qn(x,void 0);q!==void 0&&(Z.maxzoom=q)}const K=Rs(n.filter,n.excludeClusters);return K&&(Z.filter=K),[Z]}const qt="#9ca3af";function Jn(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const eo=new Map,to={};function no(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,qt]}return null}function Us(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 Ht(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function qs(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],g={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}},x={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[g,x,l]}function jo(t,n){const o=no(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||qt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},a=qs(t,r);return a||r}function Hs(t){const n=no(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||qt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||qt}}}function Ws(t){return{type:"line",paint:{"line-color":no(t)||t.color||qt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Ys(t){const n=Us(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 Ro(t,n={}){if(!t)return[];if(!Zs(t))return[];const o=[];t.icon&&Ht(o,Ys(t)),t.pointZoom&&Ht(o,jo(t,t.pointZoom)),t.type==="polygon"?Ht(o,Hs(t)):t.type==="line"?Ht(o,Ws(t)):Ht(o,jo(t));const a=n.sourceType!=="raster"?Os(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Ht(o,a),o.filter(Boolean)}function Zs(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 Oo(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let a=Jn(t);if(a&&o&&(a.filter=o),a)return Ro(a,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const i={type:"point",color:qt};return o&&(i.filter=o),Ro(i,{sourceType:n})}return[]}function Gs(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function Uo(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 Ue(t,n,o){var I,K;if(!t)return to;if(!n)return to[t];const{map:r,ready:a=()=>Promise.resolve()}=tt(o),i=t||((I=n.layer)==null?void 0:I.id),s=n.sourceId??t,c={...n};c.point&&(c.source=Gs(c.point)),!c.layer&&((K=c.source)==null?void 0:K.type)==="raster"&&(c.layer={id:s,type:"raster",source:s}),c.layer&&!c.layer.source&&Object.assign(c.layer,{source:s});let p=!1,g=!1;const x=()=>{var q,ne,Y,D,v,F,V,_,T,z;if(!(g||!r.value)){if(c.source&&!r.value.getSource(s)&&r.value.addSource(s,c.source),!r.value.getLayer(i)){const Q=c.beforeId===0?(ne=(q=r.value.getStyle().layers)==null?void 0:q[0])==null?void 0:ne.id:c.beforeId;(D=(Y=c.layer)==null?void 0:Y.style)!=null&&D.icon&&Uo(r.value,c.layer.style.icon,c.layer.style.colors);const se=((v=c.source)==null?void 0:v.type)||((F=c.layer)==null?void 0:F.type),te=c.layer&&(c.layer.type||c.layer.ref)?c.layer:null,oe=(V=c.layer)==null?void 0:V.style,fe=((_=c.layer)==null?void 0:_["source-layer"])||((T=c.source)==null?void 0:T["source-layer"])||c.sourceLayer||s,he=c.style||oe,ie=Oo(he,{sourceType:se,filter:(z=c.layer)==null?void 0:z.filter,allowFallback:!te});if(!ie.length){if(te){const Be={...te,id:te.id||i,source:te.source||s};se==="vector"&&fe&&(Be["source-layer"]=Be["source-layer"]||fe),r.value.addLayer(Be,Q)}return}ie.forEach((Be,We)=>{const qe={...Be,id:`${i}${We||""}`,source:s};se==="vector"&&fe&&(qe["source-layer"]=fe),r.value.addLayer(qe,Q)})}p=!0}};a().then(x);const l=(q,ne)=>r.value?(r.value.on(q,i,ne),()=>{var Y;return(Y=r.value)==null?void 0:Y.off(q,i,ne)}):()=>{},y=q=>{const ne=r.value;if(!ne)return;const Y=ne.getStyle(),D=Y==null?void 0:Y.layers;D!=null&&D.length&&D.filter(v=>v.source===i).forEach(v=>{ne.setLayoutProperty(v.id,"visibility",q?"visible":"none")})},d=(q=!0)=>{var Y,D,v;if(!r.value)return;(((v=(D=(Y=r.value).getStyle)==null?void 0:D.call(Y))==null?void 0:v.layers)??[]).filter(F=>F.source===i).forEach(F=>{r.value.removeLayer(F.id)}),g=!0,c.source&&q&&r.value.getSource(s)&&r.value.removeSource(s)},u=async q=>{var v,F,V,_,T;if(!r.value)return;q!=null&&q.icon&&Uo(r.value,q.icon,q.colors);const ne=((v=c.source)==null?void 0:v.type)||((F=c.layer)==null?void 0:F.type),Y=((V=c.layer)==null?void 0:V["source-layer"])||((_=c.source)==null?void 0:_["source-layer"])||c.sourceLayer||s,D=Oo(q,{sourceType:ne,filter:(T=c.layer)==null?void 0:T.filter,allowFallback:!0});d(!1),D.forEach((z,Q)=>{var te;const se={...z,id:`${i}${Q}`,source:((te=c.layer)==null?void 0:te.source)||s};ne==="vector"&&Y&&(se["source-layer"]=se["source-layer"]||Y),r.value.addLayer(se)})},b=q=>{r.value&&Object.entries(q).forEach(([ne,Y])=>{r.value.setPaintProperty(i,ne,Y)})},f=(q,ne,Y)=>{const D=r.value;if(D)switch(ne){case"raster":D.setPaintProperty(q,"raster-opacity",Y);break;case"fill":D.setPaintProperty(q,"fill-opacity",Y);break;case"line":D.setPaintProperty(q,"line-opacity",Y);break;case"circle":D.setPaintProperty(q,"circle-opacity",Y);break;case"symbol":D.setPaintProperty(q,"icon-opacity",Y),D.setPaintProperty(q,"text-opacity",Y);break}},A={ids:{layerId:i,sourceId:s},isMounted:()=>{var q;return p&&!!((q=r.value)!=null&&q.getLayer(i))},setVisible:y,updatePaint:b,updateLayout:q=>{r.value&&Object.entries(q).forEach(([ne,Y])=>{r.value.setLayoutProperty(i,ne,Y)})},updateFilter:q=>{r.value&&r.value.setFilter(i,q)},setOpacity:q=>{var D;if(!r.value)return;const Y=(((D=r.value.getStyle())==null?void 0:D.layers)||[]).filter(v=>v.source===s);if(!Y.length){const v=r.value.getLayer(i);v&&f(i,v.type,q);return}Y.forEach(v=>f(v.id,v.type,q))},setData:q=>{if(!r.value)return;const ne=r.value.getSource(s);ne&&"setData"in ne&&ne.setData(q)},setTiles:q=>{if(!r.value)return;const ne=r.value.getSource(s);ne&&"setTiles"in ne&&ne.setTiles(q)},setStyle:u,setFilter:q=>{var Y,D;if(!r.value)return;const ne=r.value.getSource(s);if(ne&&"setTiles"in ne&&((D=(Y=c.source)==null?void 0:Y.tiles)!=null&&D[0])){const v=c.source.tiles[0];ne.setTiles([`${v}${v.includes("?")?"&":"?"}filter=${q}`])}},setFeatureState:(q,ne)=>{r.value&&r.value.setFeatureState({source:s,...q},ne)},removeFeatureState:(q,ne)=>{r.value&&r.value.removeFeatureState({source:s,...q},ne?{key:ne}:void 0)},remove:d,card:c.card,popup:c.popup,opts:c,getSource:()=>{var q;return(q=r.value)==null?void 0:q.getSource(s)},getLayer:()=>{var q;return(q=r.value)==null?void 0:q.getLayer(i)},on:l};eo.set(i,A);const R=()=>{eo.get(i)===A&&eo.delete(i)},Z=A.remove;return A.remove=()=>{R(),Z()},e.getCurrentInstance()&&e.onBeforeUnmount(A.remove),to[t]=A,A}const Ks={class:"flex flex-row gap-x-3 z-10 relative widget"},Xs=["onClick"],Qs=["src","alt"],Wt=e.defineComponent({__name:"BaseMaps",setup(t){var m,h,k;const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o={z:13,x:4790,y:2762};function r(N){if(N)return N.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function a(N,$){let E=N||`layers-${Object.keys($).length}`,w=1;for(;$[E];)E=`${N}-${w}`,w+=1;return E}const i=e.getCurrentInstance(),s=(m=i==null?void 0:i.appContext.config.globalProperties)==null?void 0:m.$settings,c=s==null?void 0:s.map,p=Fe.useRoute(),g=Fe.useRouter();function x(){const N=p==null?void 0:p.query;return!N||typeof N!="object"?null:typeof N.basemap=="string"?N.basemap:null}const l=e.computed(()=>x()),y=e.computed(()=>{const N=Array.isArray(c==null?void 0:c.basemaps)?c==null?void 0:c.basemaps:[];if(!N.length)return{};const $={};return N.forEach((E,w)=>{const S=E.name??E.title??`basemap-${w}`,A=(E.id??S??`basemap-${w}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),R=a(A||`basemap-${w}`,$),Z=E.preview||(E.url?r(E.url):void 0);$[R]={url:E.url,preview:Z,title:S}}),$}),d=e.computed(()=>{const N=y.value;return Object.keys(N).length?N:n}),u=e.ref(l.value??Object.keys(d.value)[0]??"gki"),b=Ue("base",{source:{type:"raster",tiles:(h=d.value[u.value])!=null&&h.url?[(k=d.value[u.value])==null?void 0:k.url]:[]},beforeId:0});function f(N){if(!d.value[N])return;u.value=N;const $=d.value[N];if(!($!=null&&$.url)){b.setVisible(!1);return}b.setVisible(!0),b.setTiles([$.url]),typeof window<"u"&&x()!==N&&g.replace({query:{...p==null?void 0:p.query,basemap:N}}).catch(()=>{})}return e.watch(()=>d.value,N=>{const $=l.value&&N[l.value]?l.value:u.value;N[$]?u.value=$:u.value=Object.keys(N)[0]??$;const E=N[u.value];E!=null&&E.url?(b.setVisible(!0),b.setTiles([E.url])):b.setVisible(!1)},{immediate:!0}),e.watch(()=>[l.value,d.value],([N])=>{if(typeof N!="string"||!d.value[N]||u.value===N)return;u.value=N;const $=d.value[N];if(!($!=null&&$.url)){b.setVisible(!1);return}b.setVisible(!0),b.setTiles([$.url])}),(N,$)=>(e.openBlock(),e.createElementBlock("div",Ks,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(E,w)=>(e.openBlock(),e.createElementBlock("div",{key:w,onClick:S=>f(w)},[w!=="none"&&E.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",u.value===w?"border-blue-500":"border-gray-200"])},[E.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:E.preview,alt:E.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Qs)):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",u.value===w?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(ce.EyeOff),{class:"w-4 h-4 text-gray-500"})],2))],8,Xs))),128))]))}}),Js={class:"mapLayer-info__inner"},ei={class:"mapLayer-info__item-label"},oo=Ce(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 f=b.currentTarget,m=f==null?void 0:f.closest(".mapLayer-info");if(!m){y();return}a.value=m,r.open=!0,e.nextTick(()=>{g(),d(),requestAnimationFrame(()=>{g()})})}function g(){if(!r.open||!a.value||!i.value)return;const b=a.value.getBoundingClientRect(),f=12,m=window.scrollX+f,h=window.scrollX+window.innerWidth-f,k=window.scrollY+f,N=window.scrollY+window.innerHeight-f,$=i.value.offsetWidth||Math.min(300,window.innerWidth-24),E=i.value.offsetHeight||0;let w=b.left+window.scrollX+(b.width-$)/2;w<m&&(w=m),w+$>h&&(w=Math.max(m,h-$)),r.left=w;let S=b.bottom+window.scrollY+f;S+E>N&&(S=b.top+window.scrollY-E-f,S<k&&(S=Math.max(k,N-E))),S<k&&(S=k),S+E>N&&(S=Math.max(k,N-E)),r.top=S,r.transform="none"}function x(b){var m,h;if(!r.open)return;const f=b.target;(m=a.value)!=null&&m.contains(f)||(h=i.value)!=null&&h.contains(f)||y()}function l(b){b.key==="Escape"&&y()}function y(){u(),r.open=!1,a.value=null,i.value=null}function d(){u(),i.value&&(s=new ResizeObserver(()=>{g()}),s.observe(i.value))}function u(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",l),window.addEventListener("scroll",g,!0),window.addEventListener("resize",g)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",l),window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g),u()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>g())},{deep:!0}),n({close:y}),(b,f)=>(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"])},[...f[1]||(f[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:f[0]||(f[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Js,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,m=>(e.openBlock(),e.createElementBlock("div",{key:m.label,class:"mapLayer-info__item"},[e.createElementVNode("div",ei,e.toDisplayString(m.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":m.breakLine}])},e.toDisplayString(m.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),ti={key:0,class:"map-info__title"},ni={class:"map-info__actions"},oi={key:0,class:"map-info__menu"},ri=["href"],li=["innerHTML"],qo=Ce(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});Fe.useRouter();const c=e.ref(!0),p=e.ref(!1),g=e.computed(()=>Array.isArray(n.links)?n.links.filter(N=>(N==null?void 0:N.name)&&(N==null?void 0:N.slug)):[]),x=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 d=e.computed(()=>y(n.content)),u=e.computed(()=>d.value);function b(N){N.stopPropagation(),r.value=!r.value}function f(){const N=a.value;if(!N||!i.value)return;const $=N.getBoundingClientRect(),E=12,w=8,S=window.scrollX+E,A=window.scrollX+window.innerWidth-E,R=window.scrollY+E,Z=window.scrollY+window.innerHeight-E,I=i.value.offsetWidth||160,K=i.value.offsetHeight||0;let q=$.bottom+window.scrollY+w,ne=$.left+window.scrollX;ne+I>A&&(ne=$.right+window.scrollX-I,ne<S&&(ne=S)),ne<S&&(ne=S),q+K>Z&&(q=$.top+window.scrollY-K-w,q<R&&(q=Math.max(R,Z-K))),q<R&&(q=R),q+K>Z&&(q=Math.max(R,Z-K)),s.value={top:q,left:ne}}function m(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(()=>{f(),requestAnimationFrame(()=>{f()}),window.addEventListener("scroll",f,!0),window.addEventListener("resize",f)}):(window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f))});function h(){c.value=!c.value}function k(){p.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",m,!0),k(),u.value?p.value&&(c.value=!1):c.value=!1,window.addEventListener("resize",k)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",m,!0),window.removeEventListener("scroll",f,!0),window.removeEventListener("resize",f),window.removeEventListener("resize",k)}),(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||g.value.length||l.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([d.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",ti,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",ni,[g.value.length?(e.openBlock(),e.createElementBlock("div",oi,[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(x.value),onClick:$[0]||($[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,E=>(e.openBlock(),e.createElementBlock("a",{key:E.slug||E.name,href:`/maps/${E.slug}`,class:"map-info__popover-link"},e.toDisplayString(E.name),9,ri))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),l.value.length?(e.openBlock(),e.createBlock(oo,{key:1,items:l.value},null,8,["items"])):e.createCommentVNode("",!0),u.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),d.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,li)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),bt=e.ref([]);function ai(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 $n(t){return t==null?"":String(t).trim()}function ro(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function si(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function ii(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 lo(t){function n(s,c={},p,g){var k,N;const x=$n(s==null?void 0:s.id),l=((k=s==null?void 0:s.title)==null?void 0:k.trim())||x,y=((N=s==null?void 0:s.url)==null?void 0:N.trim())||"";if(!x||!y)return;const d=ai(y,c);if(!d)return;const u=g??t;if(!u)return;const b=si(u);if(!b)return;const f=bt.value.findIndex($=>$.id===x);f!==-1&&(ro(bt.value[f]),bt.value.splice(f,1));let m=null;const h=s.beforeId??ii(b);try{m=Ue(x,{source:{type:"raster",tiles:[d],tileSize:s.tileSize??256,minzoom:s.minzoom??0,maxzoom:s.maxzoom??19},layer:{id:x,type:"raster",source:x,paint:{"raster-opacity":s.opacity??.85}},beforeId:h},u)}catch($){const E=($==null?void 0:$.message)??"";if(!(typeof E=="string"&&E.includes("Map provider")))throw $;return}bt.value=[...bt.value,{id:x,title:l,originalUrl:y,resolvedUrl:d,owner:p??null,handle:m??null}]}function o(s,c){const p=$n(s);if(!p)return;const g=bt.value.findIndex(l=>l.id===p&&(!c||l.owner===c));if(g===-1)return;const[x]=bt.value.splice(g,1);ro(x)}function r(s,c,p){var l;const g=$n(s);if(!g)return;const x=bt.value.find(y=>y.id===g&&(!p||y.owner===p));(l=x==null?void 0:x.handle)!=null&&l.setOpacity&&x.handle.setOpacity(c)}function a(s){if(!bt.value.length)return;const c=[];bt.value.forEach(p=>{(s?p.owner===s:!0)?ro(p):c.push(p)}),bt.value=c}function i(s,c){const p=$n(s);return p?bt.value.some(g=>g.id===p&&(!c||g.owner===c)):!1}return{temporaryLayers:bt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:a,isTemporaryLayerActive:i}}const ln=e.ref(null);function ci(){ln.value=null}function di(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(ln,s=>{s!==o()&&n.value&&(n.value=!1)});function r(){ln.value=o(),n.value=!0}function a(){ln.value===o()&&(ln.value=null),n.value=!1}function i(){n.value?a():r()}return{isOpen:n,open:r,close:a,toggle:i}}const ui={class:"map-filter"},pi={class:"map-filter__header"},mi={class:"map-filter__title"},fi={"aria-hidden":"true"},ao="#map-filter-popover-host",Sn=Ce(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 V;return((V=o.layer)==null?void 0:V.id)??""}),a=e.computed(()=>`filter-popover-${r.value}`),{isOpen:i,close:s,toggle:c}=di(a),p=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),g=e.ref(null),x=e.ref(null);let l=null;const y=e.ref({}),d=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),u=e.computed(()=>i.value),b=e.computed(()=>{var V;return Array.isArray((V=o.layer)==null?void 0:V.filters)?o.layer.filters:[]}),f=e.computed(()=>b.value.length>0),m=e.computed(()=>{var V;return((V=o.layer)==null?void 0:V.name)??""}),h=e.computed(()=>b.value),k=e.ref(null),N=e.computed(()=>b.value.length),$=e.computed(()=>N.value<=2),E=e.computed(()=>$.value?"body":typeof window>"u"||k.value?ao:"body"),w=e.computed(()=>{if(!u.value||!$.value)return{};const V=typeof window<"u"?window.innerWidth:280,T=Math.max(280,V-16*2);return{position:"absolute",top:`${p.top}px`,left:`${p.left}px`,transform:p.transform,zIndex:1e3,width:"280px",maxWidth:`${T}px`}});function S(){s()}function A(V,_,T=8){const z=window.scrollY+T,Q=window.scrollY+window.innerHeight-T;let se=V;return se+_>Q&&(se=Q-_),se<z&&(se=z),se}function R(){var oe,fe,he;if(!g.value||!$.value)return;const V=g.value.getBoundingClientRect(),_=window.scrollX+8,T=window.scrollX+window.innerWidth-8,z=((oe=x.value)==null?void 0:oe.offsetWidth)||280,Q=((fe=x.value)==null?void 0:fe.offsetHeight)||0;let se=0,te=0;if((he=o.catalogAnchor)!=null&&he.value){const ie=o.catalogAnchor.value.getBoundingClientRect(),Be=ie.top+window.scrollY;se=A(Be,Q,8);const We=ie.right+window.scrollX+12,qe=T-z,Re=_;te=Math.min(Math.max(We,Re),Math.max(Re,qe))}else{const ie=V.bottom+window.scrollY+8;se=A(ie,Q,8);let Be=V.left+window.scrollX;Be<_&&(Be=_),Be+z>T&&(Be=Math.max(_,T-z)),te=Be}p.left=te,p.top=se,p.transform="none"}function Z(){$.value||F(),c(),i.value&&$.value&&e.nextTick(()=>{R(),D(),requestAnimationFrame(()=>R())})}function I(){o.disabled||Z()}e.watch(u,V=>{V&&$.value?e.nextTick(()=>{R(),D(),requestAnimationFrame(()=>R())}):(v(),$.value||F())}),e.watch(h,()=>{!u.value||!$.value||e.nextTick(()=>R())},{deep:!0}),e.watch($,V=>{u.value&&(V?e.nextTick(()=>{R(),D()}):(v(),F()))}),e.watch(()=>o.disabled,V=>{V&&(s(),y.value={})});function K(){!u.value||!$.value||R()}function q(V){const _=r.value;if(!_)return;const T=Ue(_);if(!(T!=null&&T.setFilter))return;y.value=V;const z=Object.entries(V).map(([Q,se])=>`${Q}=${se}`).join("|");T.setFilter(z)}function ne(V){if(!o.disabled)return;const _=V.currentTarget;if(!_)return;const T=_.getBoundingClientRect();d.left=T.left+T.width/2+window.scrollX,d.top=T.bottom+8+window.scrollY,d.visible=!0}function Y(){d.visible=!1}e.onMounted(()=>{F(),window.addEventListener("resize",K),window.addEventListener("scroll",K,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",K),window.removeEventListener("scroll",K,!0),v()});function D(){v(),!(!x.value||!$.value)&&(l=new ResizeObserver(()=>{!u.value||!$.value||R()}),l.observe(x.value))}function v(){l&&(l.disconnect(),l=null)}function F(){typeof window>"u"||typeof document>"u"||(k.value=document.querySelector(ao))}return(V,_)=>f.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:g},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(I,["prevent","stop"]),onMouseenter:ne,onMouseleave:Y,onFocus:ne,onBlur:Y},[..._[2]||(_[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),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:E.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!$.value}]),style:e.normalizeStyle(w.value),ref_key:"panel",ref:x,onClick:_[1]||(_[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",ui,[e.createElementVNode("div",pi,[e.createElementVNode("h3",mi,e.toDisplayString(m.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:S},[e.createElementVNode("span",fi,[e.createVNode(e.unref(ce.X),{class:"h-4 w-4"})]),_[3]||(_[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:h.value,value:y.value,limit:10,onChange:_[0]||(_[0]=T=>q(T.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-32948852"]]),gi={class:"opacity-popover__content"},yi={class:"opacity-popover__value"},Ho=Ce(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(),d=260,u=a.value.offsetHeight||60,b=8,f=12,m=window.innerWidth,h=window.innerHeight;let k=y.bottom+b+window.scrollY,N=y.left+window.scrollX;N+d>m-f&&(N=m-d-f+window.scrollX),N<f+window.scrollX&&(N=f+window.scrollX),k+u>h+window.scrollY-f&&(k=y.top-u-b+window.scrollY,k<f+window.scrollY&&(k=h-u-f+window.scrollY)),s.top=k,s.left=N}function p(){o.value=!o.value,o.value&&e.nextTick(c)}function g(){var u;const l=Ue(n.layerId),y=(r.value??100)/100;if(l!=null&&l.setOpacity){l.setOpacity(y);return}const d=(u=l==null?void 0:l.getLayer)==null?void 0:u.call(l);if(d)switch(d.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 x(l){var d,u;if(!o.value)return;const y=l.target;(d=a.value)!=null&&d.contains(y)||(u=i.value)!=null&&u.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",x),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x),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",gi,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=d=>r.value=d),class:"opacity-popover__range",onInput:g},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",yi,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),hi={class:"layers-panel"},xi={class:"layers-panel__header"},bi={class:"layers-panel__heading"},ki={class:"layers-panel__heading-title"},wi={class:"layers-panel__count"},_i={class:"layers-panel__bulk-actions"},Ei={class:"layers-panel__header-actions"},Ci={class:"layers-panel__header-controls"},Ni={class:"layers-panel__label"},Vi={class:"layers-panel__label-row"},Bi=["checked","onChange"],$i={class:"layers-panel__title-block"},Si={class:"layers-panel__name"},vi={class:"layers-panel__meta text-slate-500"},Li=["onClick"],Ai={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Ti={key:0,class:"layers-panel__actions"},Mi=["innerHTML","onClick"],Wo="map:temporary-layer-request",Fi="#5763ba",Yo=Ce(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=tt(),{temporaryLayers:c,activateTemporaryLayer:p,deactivateTemporaryLayer:g,clearTemporaryLayers:x}=lo(s.map),l=e.computed(()=>{const V=o.layers.map(T=>({...T,isTemporary:!1,owner:null,visible:T.visible!==!1})),_=c.value.map(T=>({id:T.id,name:T.title,visible:r.value[T.id]??!0,actions:[],filters:null,isTemporary:!0,owner:T.owner??null,handle:T.handle??null,card:T.card??null,popup:T.popup??null,style:T.style??null,group_name:null,count:null,holder:null}));return[...V,..._]}),y=e.computed(()=>l.value.length),d=e.computed(()=>l.value.filter(V=>N(V.id)).length),u=e.computed(()=>y.value>0&&d.value===y.value),b=e.computed(()=>c.value.length>0),f=n;function m(){var V;for(let _=0;_<o.layers.length;_++){const T=o.layers[_],z=h(T);if(!z)continue;const Q=Ue(T.id,z),se=T.visible!==!1;r.value[T.id]=se,se||(V=Q==null?void 0:Q.setVisible)==null||V.call(Q,!1)}}function h(V){const _=V.id;if(!_)return null;const T=(V.type||V.service_type||V.service||"").toString().toLowerCase(),z=V.service_url||V.url||null;if(!!z&&(T==="tms"||T==="wmts"||T==="wms"||T==="ogc")){const te=k(z);return te?{sourceId:_,service:T,source:{type:"raster",tiles:[te],tileSize:V.tileSize||256,minzoom:V.minzoom??0,maxzoom:V.maxzoom??22,scheme:V.scheme||"xyz"},layer:{id:_,type:"raster",source:_},card:V.card,popup:V.popup}:null}if(T==="cartocss"){const te=V.url?k(V.url):`${location.origin}/api/gis-rtile/${_}/{z}/{x}/{y}.png`;return te?{sourceId:_,service:T,source:{type:"raster",tiles:[te],tileSize:V.tileSize||256,minzoom:V.minzoom??0,maxzoom:V.maxzoom??22},layer:{id:_,type:"raster",source:_},card:V.card,popup:V.popup}:null}if(T==="raster"){const te=V.url?k(V.url):`${location.origin}/api/gis-rtile/${_}/{z}/{x}/{y}.png`;return te?{sourceId:_,service:T,source:{type:"raster",tiles:[te],tileSize:V.tileSize||256,minzoom:V.minzoom??0,maxzoom:V.maxzoom??22},layer:{id:_,type:"raster",source:_},card:V.card,popup:V.popup}:null}const se=`${location.origin}/api/vtile/${_}/ua/{z}/{x}/{y}.vmt`;return{sourceId:_,service:T,source:{type:"vector",tiles:[se],minZoom:4,maxZoom:14},layer:{id:_,source:_,"source-layer":_,style:V.style},card:V.card,popup:V.popup}}function k(V){return V?/^https?:\/\//i.test(V)?V:V.startsWith("//")?`${window.location.protocol}${V}`:V.startsWith("/")?`${location.origin}${V}`:`${location.origin}/${V}`:null}function N(V){const _=r.value[V];return _??!0}function $(V){var z,Q;if(!(V!=null&&V.id))return null;const _=(z=V.title)==null?void 0:z.trim(),T=(Q=V.url)==null?void 0:Q.trim();return!_||!T?null:{id:V.id,title:_,url:T,tileSize:V.tileSize,minzoom:V.minzoom,maxzoom:V.maxzoom,opacity:V.opacity}}function E(V){if(!V)return;const _=V.owner;if(V.action==="clear"){const z=c.value.filter(Q=>!_||Q.owner===_).map(Q=>Q.id);x(_),z.forEach(Q=>{Q in r.value&&delete r.value[Q]});return}const T=$(V.spec);if(T){if(V.action==="activate"){p(T,V.context||{},_),r.value[T.id]=!0;return}V.action==="deactivate"&&(g(T.id,_),delete r.value[T.id])}}function w(V){V instanceof CustomEvent&&E(V.detail)}e.watch(()=>c.value.map(V=>V.id),(V,_)=>{const T=new Set(_||[]),z=new Set(V);V.forEach(Q=>{Q in r.value||(r.value[Q]=!0)}),T.forEach(Q=>{z.has(Q)||delete r.value[Q]})},{immediate:!0});function S(V,_){var z,Q,se;if(V.isTemporary){if(!_){g(V.id,V.owner||void 0),delete r.value[V.id];return}r.value[V.id]=!0;const te=V.handle||((z=c.value.find(oe=>oe.id===V.id))==null?void 0:z.handle);(Q=te==null?void 0:te.setVisible)==null||Q.call(te,!0);return}r.value[V.id]=_;const T=Ue(V.id);(se=T==null?void 0:T.setVisible)==null||se.call(T,_)}function A(V,_){const T=_.target;S(V,T.checked)}function R(V){l.value.forEach(_=>S(_,V))}function Z(){R(!u.value)}function I(V){return V.isTemporary?[{label:"Назва",value:V.name??null},{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 K(V){const _=V.trim();return _?!!(/^#[\da-fA-F]{3,8}$/.test(_)||/^rgb\s*\(/.test(_)||/^rgba\s*\(/.test(_)||/^hsl\s*\(/.test(_)||/^hsla\s*\(/.test(_)||/^[a-zA-Z]+$/.test(_)&&_.length<25):!1}function q(V){var _,T,z,Q,se,te;if(!V)return null;if(typeof V=="string"){const oe=V.trim();return!oe||!K(oe)?null:oe}if(Array.isArray(V)){for(const oe of V){const fe=q(oe);if(fe)return fe}return null}if(typeof V=="object"){const oe=V;return q(oe.color??oe.fill??oe.stroke??oe.lineColor??oe.fillColor??((_=oe.paint)==null?void 0:_["fill-color"])??((T=oe.paint)==null?void 0:T["line-color"])??((z=oe.paint)==null?void 0:z["circle-color"])??((Q=oe.paint)==null?void 0:Q.color)??((se=oe.paint)==null?void 0:se.lineColor)??((te=oe.paint)==null?void 0:te.fillColor)??oe.paint??oe.value)}return null}function ne(V){const _=Array.isArray(V==null?void 0:V.legend)?V.legend[0]:V==null?void 0:V.legend,T=q(_);return T||q(V==null?void 0:V.style)||Fi}function Y(V){return{"--layers-panel-checkbox-color":ne(V)}}function D(){if(!c.value.length)return;const V=c.value.map(_=>_.id);x(),V.forEach(_=>delete r.value[_])}function v(){a.value=!a.value}function F(){i.value=window.innerWidth<=768}return e.onMounted(()=>{m(),window.addEventListener(Wo,w),F(),i.value&&(a.value=!1),window.addEventListener("resize",F)}),e.watch(()=>{var V;return((V=o.layers)==null?void 0:V.length)??0},(V,_)=>{V>0&&_===0&&m()}),e.onBeforeUnmount(()=>{window.removeEventListener(Wo,w),window.removeEventListener("resize",F)}),(V,_)=>(e.openBlock(),e.createElementBlock("div",hi,[e.createElementVNode("div",xi,[e.createElementVNode("div",bi,[e.createElementVNode("div",ki,[_[0]||(_[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",wi," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(y.value)+") ",1),e.createElementVNode("div",_i,[l.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:Z},e.toDisplayString(u.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Ei,[e.createElementVNode("div",Ci,[l.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:v,"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})},[..._[1]||(_[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),b.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:D}," Очистити тимчасові шари ")):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(l.value,T=>{var z;return e.openBlock(),e.createElementBlock("div",{key:T.id,class:"layers-panel__item"},[e.createElementVNode("label",Ni,[e.createElementVNode("div",Vi,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:N(T.id),style:e.normalizeStyle(Y(T)),onChange:Q=>A(T,Q)},null,44,Bi),e.createElementVNode("div",$i,[e.createElementVNode("span",Si,e.toDisplayString(T.name),1)]),e.createElementVNode("div",vi,[N(T.id)&&!T.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(Ho,{"layer-id":T.id,class:"flex"},{trigger:e.withCtx(({toggle:Q})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(Q,["prevent","stop"])},[e.createElementVNode("div",Ai,[e.createVNode(e.unref(ce.Contrast))])],8,Li)]),_:1},8,["layer-id"]),e.createVNode(Sn,{count:Array.isArray(T.filters)?T.filters.length:0,layer:T},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(oo,{items:I(T)},null,8,["items"])])])]),(z=T.actions)!=null&&z.length?(e.openBlock(),e.createElementBlock("div",Ti,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.actions,Q=>(e.openBlock(),e.createElementBlock("button",{key:Q.widget||Q.id||Q.icon,type:"button",class:"layers-panel__action",innerHTML:Q.icon,onClick:se=>f("action",{layerId:Q.widget})},null,8,Mi))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-4706ee79"]]);function Di(){const{map:t,ready:n}=tt(),o=e.ref(null),r=e.ref(null),a=e.ref(null),i=e.ref(null);let s=[];function c(){s.forEach(d=>d()),s=[]}const p=d=>{const u=(d==null?void 0:d.properties)||{};return!!(u.cluster||u.point_count||u.point_count_abbreviated)},g=d=>{var m,h;o.value=[d.point.x,d.point.y];const u=t.value.queryRenderedFeatures(d.point);if(!(u!=null&&u.length)){x();return}const b=u.find(k=>!p(k));if(!b){x();return}const f=Ue(b.source)||Ue((m=b.layer)==null?void 0:m.id);f!=null&&f.popup&&(r.value=((h=f.popup)==null?void 0:h.fields)||f.popup,i.value=b.properties)},x=()=>{r.value=null,i.value=null,o.value=null};async function l(){await n(),t.value&&(c(),t.value.on("mousemove",g),t.value.on("mouseleave",x))}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 zi={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Ii={class:"space-y-1.5"},Pi={class:"font-bold text-slate-700"},ji={class:"text-slate-700"},Zo=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:a}=Di(),{map:i}=tt(),s=e.ref(null),c=e.ref({left:"-9999px",top:"-9999px"}),p=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function g(b,f){if(f==null||f==="")return f;if((b==null?void 0:b.type)==="number"){const m=typeof f=="number"?f:Number(f);if(Number.isFinite(m))return p.format(m)}return f}function x(b,f,m){const h=b.name||b.label||b.title||`field-${m}`,k=b.label||b.title||b.name||h,N=b.name?f[b.name]:void 0,E=(b.name?f[`${b.name}_text`]:void 0)??N??b.value??null;return{key:h,label:k,value:g(b,E)}}const l=e.computed(()=>{const b=o.value||[],f=r.value||{};return b.filter(m=>(m==null?void 0:m.meta)!=="title").map((m,h)=>x(m,f,h)).filter(m=>m.label)}),y=e.computed(()=>{const b=o.value||[],f=r.value||{},m=b.find(h=>(h==null?void 0:h.meta)==="title");return m?x(m,f,0):null}),d=e.computed(()=>{var f;const b=l.value;return(f=y.value)!=null&&f.value?[{...y.value,key:`${y.value.key}-title`,label:"Назва"},...b]:b});function u(){var v,F;if(!d.value.length||!n.value||!s.value){c.value={left:"-9999px",top:"-9999px"};return}const b=s.value,f=b.offsetParent||null,m=(f==null?void 0:f.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},h=((F=(v=i.value)==null?void 0:v.getContainer)==null?void 0:F.call(v))||void 0,k=(h==null?void 0:h.getBoundingClientRect())??m,N=k.left-m.left,$=k.top-m.top,E=b.offsetWidth||0,w=b.offsetHeight||0,S=12,A=8,[R,Z]=n.value;let I=N+R+S,K=$+Z+S;I+E+A>m.width&&(I=N+R-E-S),K+w+A>m.height&&(K=$+Z-w-S);const q=A,ne=A,Y=Math.max(A,m.width-E-A),D=Math.max(A,m.height-w-A);I=Math.min(Math.max(I,q),Y),K=Math.min(Math.max(K,ne),D),c.value={left:`${I}px`,top:`${K}px`}}return e.watch([n,d],()=>{e.nextTick(()=>u())}),e.onMounted(()=>{window.addEventListener("resize",u)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",u),a()}),(b,f)=>d.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",zi,[e.createElementVNode("div",Ii,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.key,class:"flex flex-col"},[e.createElementVNode("span",Pi,e.toDisplayString(m.label),1),e.createElementVNode("span",ji,e.toDisplayString(m.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Ri(){const t=Fe.useRoute(),n=Fe.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),g=e.computed(()=>i.value||!!o.value||!!a.value);let x=!1;function l(){o.value=null,r.value=null,a.value=null,i.value=!1,s.value=[],c.value=0}function y(w,S=0){if(!w.length){l(),$(null);return}s.value=w,d(S)}function d(w){const S=s.value[w];if(!S)return;c.value=w;const A=Ue(S.source);f(S,A==null?void 0:A.card)}function u(){c.value>=s.value.length-1||d(c.value+1)}function b(){c.value<=0||d(c.value-1)}async function f(w,S){var Z,I,K,q,ne;if(!((Z=w==null?void 0:w.properties)!=null&&Z.id))return;const A=new URLSearchParams;A.set("layer",w.source),A.set("id",String((I=w.properties)==null?void 0:I.id));const R=Array.isArray(S)&&S.length>0;i.value=R,a.value=null,o.value=null,r.value=w||null;try{const Y=await fetch(`/api/map-format?${A.toString()}`);if(!Y.ok)throw new Error(`Failed (${Y.status})`);const D=await Y.json(),v=Array.isArray(D.columns)?D.columns:[],F=Array.isArray(S)?S:[];if(!v.length&&!F.length){console.error("Configure layer in admin"),m();return}const V=D.rows??D.data??{};o.value={rows:V,fields:F,columns:v,html:D.html||null},x||$(r.value);const _=((K=D.rows)==null?void 0:K.geom)??((q=D.data)==null?void 0:q.geom);if(_){const T=typeof _=="string"?JSON.parse(_):_;T&&(r.value={...r.value,geometry:T,properties:{...((ne=r.value)==null?void 0:ne.properties)||{},geom:T,geom_4326:T}})}}catch(Y){console.error("Failed to load feature card:",Y),m()}finally{i.value=!1}}function m(){l(),$(null)}function h(){l()}E(k()),e.onBeforeUnmount(()=>h());function k(){const w=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof w!="string")return null;const S=w.trim();return S.startsWith("external:")?null:S||null}function N(w){var Z,I;const S=(w==null?void 0:w.source)??((Z=w==null?void 0:w.layer)==null?void 0:Z.id),A=(I=w==null?void 0:w.properties)==null?void 0:I.id;return!S||A===void 0||A===null?null:`${S},${A}`.trim()||null}function $(w){const S=N(w),A=k();if(S===A)return;const R={...t.query};S?R.info=S:delete R.info,n.push({query:R}).catch(()=>{})}async function E(w){if(!w){l();return}if(w===N(r.value))return;const[S,A]=w.split(","),R=S==null?void 0:S.trim(),Z=A==null?void 0:A.trim();if(!R||!Z){l(),$(null);return}x=!0;try{y([{source:R,properties:{id:Z}}],0)}finally{x=!1}}return e.watch(()=>k(),w=>{w!==N(r.value)&&(x=!0,E(w).finally(()=>{x=!1}))}),{card:o,cardFeature:r,cardError:a,cardLoading:i,isOpen:g,close:m,openFeature:w=>y(w?[w]:[],0),openFeatures:y,next:u,prev:b,count:p,index:c}}function Oi(){const{map:t,ready:n}=tt(),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),g=e.ref([]),x=e.computed(()=>o.value[a.value]||null),l=e.computed(()=>o.value.length>0);let y=null;const d=()=>{y==null||y.remove(),y=null},u=S=>S?S.type==="FeatureCollection"?S:S.type==="Feature"?{type:"FeatureCollection",features:[S]}:S.type&&Array.isArray(S.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:S,properties:{}}]}:Array.isArray(S.features)?{type:"FeatureCollection",features:S.features}:S.geometry?u(S.geometry):null:null,b=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),f=S=>Number(S.toFixed(5)),m=async S=>{if(await n(),!t.value)return;const A=u(S);A&&(d(),y=Ue("feature-highlight",{source:{type:"geojson",data:A},style:b()},t))},h=async(S,A,R)=>{var K,q;const[Z,I]=[f(S),f(A)];p.value={x:Z,y:I},g.value=R,i.value=!0,s.value=null,o.value=[],c.value={},a.value=0;try{const ne=R.map(async V=>{const _=`/api/map-info-point?x=${Z}&y=${I}&layers=${V}`,T=await fetch(_);if(!T.ok)return null;const z=await T.json();if(!z.count)return null;const se=await(await fetch(`${_}&index=0`)).json();return{layerId:V,data:se,count:z.count}}),D=(await Promise.all(ne)).filter(Boolean);if(D.length===0){r.value=0;return}o.value=D.map(V=>V.data);const[v]=o.value;r.value=D.reduce((V,_)=>V+(_.count||0),0),c.value[0]=v;const F=((K=v==null?void 0:v.data)==null?void 0:K.geom_4326)??((q=v==null?void 0:v.data)==null?void 0:q.geom);await m(F)}catch(ne){s.value=ne.message}finally{i.value=!1}},k=async S=>{if(!p.value||!g.value.length)return;if(c.value[S]){o.value[S]=c.value[S];return}const{x:A,y:R}=p.value,Z=g.value.join(","),I=`/api/map-info-point?x=${A}&y=${R}&index=${S}&layers=${Z}`;try{i.value=!0;const K=await fetch(I);if(!K.ok)throw new Error("Failed to fetch feature by index");const q=await K.json();o.value[S]=q,c.value[S]=q}catch(K){s.value=K.message}finally{i.value=!1}},N=async()=>{a.value<r.value-1&&(a.value+=1,c.value[a.value]||await k(a.value))},$=async()=>{a.value>0&&(a.value-=1,c.value[a.value]||await k(a.value))},E=()=>{o.value=[],r.value=0,a.value=0,c.value={},p.value=null,g.value=[],d()};e.watch(a,async()=>{var A,R;const S=x.value;if(S){const Z=((A=S==null?void 0:S.data)==null?void 0:A.geom_4326)??((R=S==null?void 0:S.data)==null?void 0:R.geom);await m(Z)}});let w=null;return e.onMounted(async()=>{await n(),t.value&&(w=async S=>{const{lng:A,lat:R}=S.lngLat,Z=Ue(),K=Object.entries(Z).map(([q,ne])=>{var Y,D,v,F;return{id:q,service:((Y=ne==null?void 0:ne.opts)==null?void 0:Y.service)??((v=(D=ne==null?void 0:ne.opts)==null?void 0:D.source)==null?void 0:v.service)??null,count:((F=ne==null?void 0:ne.opts)==null?void 0:F.count)??null,visible:(()=>{var V;try{return((V=t.value)==null?void 0:V.getLayer(q))?t.value.getLayoutProperty(q,"visibility")!=="none":!0}catch{return!0}})()}}).filter(q=>q.service==="ogc"&&q.visible).map(q=>q.id);K.length>0&&await h(A,R,K)},t.value.on("dblclick",w))}),e.onBeforeUnmount(()=>{t.value&&w&&t.value.off("dblclick",w),d()}),{features:o,count:r,index:a,current:x,loading:i,error:s,active:l,next:N,prev:$,close:E}}const Go=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function a(g){const x=g.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(x)return x;const l=Array.from(g).map(y=>y.charCodeAt(0).toString(16)).join("").slice(0,8);return l?`layer-${l}`:"layer-temp"}const i=e.computed(()=>{var g;return((g=o.id)==null?void 0:g.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(g,x)=>(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(g.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(s.value),1)])]))}}),so="map-card:external-payload",vn="map-card:click-results",Ko=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,Ui={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},qi={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Hi={class:"min-w-0 flex-1"},Wi={class:"text-base font-semibold text-slate-900 truncate"},Yi={key:0,class:"flex gap-1 mt-1"},Zi=["disabled"],Gi=["disabled"],Ki={key:1,class:"flex gap-1 mt-1"},Xi=["disabled"],Qi=["disabled"],Ji={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},ec={key:0,class:"text-center text-xs text-slate-500"},tc={key:1,class:"text-center text-xs text-red-500"},nc={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},oc={class:"divide-y divide-gray-100 py-[5px]"},rc={class:"text-gray-900 font-normal"},lc={key:0,class:"flex gap-1 flex-wrap"},ac={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},sc=["innerHTML"],ic=["innerHTML"],cc={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},dc={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},uc={class:"text-xs tracking-[0.02em] leading-none"},pc={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},mc={class:"space-y-1"},fc={class:"flex items-center cursor-pointer gap-2 flex-1"},gc=["checked","onChange"],yc={class:"text-[13px] text-gray-600"},hc={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},xc={key:5,class:"text-center text-xs text-slate-400"},bc="map:temporary-layer-request",Xo="cardHideEmpty",kc=14,io=Ce(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Ri(),r=Oi(),a=Fe.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}),g=e.computed(()=>i.value.length>0),x=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 d(C){if(!C)return null;if(typeof C=="string")try{return JSON.parse(C)}catch{return null}return C}function u(){const C=Array.isArray(ne.query.info)?ne.query.info[0]:ne.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),[U,re]=L.split(","),me=U==null?void 0:U.trim(),Ee=re==null?void 0:re.trim();return!me||!Ee?null:{layer:me,id:Ee,token:`external:${me},${Ee}`}}function f(C){const L=u(),U=(C==null?void 0:C.trim())||null;if(L===U)return;const re={...ne.query};if(U)re.info=U;else if(L!=null&&L.startsWith("external:"))delete re.info;else return;a.push({query:re}).catch(()=>{})}function m(C){var U;const L=i.value[C];if(!L){y(),o.close(),nt();return}if(s.value=C,L.type==="feature"){o.openFeature(L.feature);return}o.close(),f(L.infoToken??null),(U=L.html)!=null&&U.trim()?N():nt()}function h(C,L=0){if(r.close(),i.value=C.map(U=>({type:"external",...U})),!i.value.length){o.close(),f(null),nt();return}m(Math.min(Math.max(L,0),i.value.length-1))}function k(C){r.close();const L=Array.isArray(C==null?void 0:C.features)?C.features.filter(Boolean):[],U=Array.isArray(C==null?void 0:C.externalItems)?C.externalItems.filter(re=>typeof(re==null?void 0:re.html)=="string"&&re.html.trim()):[];if(i.value=[...L.map(re=>({type:"feature",feature:re})),...U.map(re=>({type:"external",...re}))],!i.value.length){o.close(),f(null),nt();return}m(0)}function N(){return x.value?l.value?(vl(l.value),!0):(nt(),!0):(nt(),!1)}const $=C=>{var re,me,Ee,Ve;const L=C,U=Array.isArray((re=L.detail)==null?void 0:re.items)?(me=L.detail)==null?void 0:me.items.filter(Ie=>typeof(Ie==null?void 0:Ie.html)=="string"&&Ie.html.trim()):[];U.length?h(U,Number(((Ee=L.detail)==null?void 0:Ee.index)??0)):typeof((Ve=L.detail)==null?void 0:Ve.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(),f(null),nt())},E=C=>{k(C.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(vn,E),window.addEventListener(so,$))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(vn,E),window.removeEventListener(so,$))});const w=e.computed(()=>r.active.value),S=e.computed(()=>w.value||o.isOpen.value||x.value),A=e.computed(()=>w.value?r.loading.value:o.cardLoading.value),R=e.computed(()=>w.value?r.error.value:o.cardError.value),Z=e.computed(()=>{var C,L,U;return w.value?((C=r.current.value)==null?void 0:C.html)||null:x.value?((L=p.value)==null?void 0:L.html)||null:((U=o.card.value)==null?void 0:U.html)||null}),I=tt(),K=Xn(),q=e.computed(()=>{var C,L;return((L=(C=K.value)==null?void 0:C.map)==null?void 0:L.cardHideEmpty)??null}),ne=Fe.useRoute(),{activateTemporaryLayer:Y,deactivateTemporaryLayer:D,clearTemporaryLayers:v,isTemporaryLayerActive:F}=lo(I.map);function V(C){window.dispatchEvent(new CustomEvent(bc,{detail:C}))}const _=e.computed(()=>{var C;return((C=o.cardFeature.value)==null?void 0:C.source)??null}),T=e.computed(()=>_.value?`map-card:${_.value}`:"map-card"),z=e.computed(()=>{var re,me;const C=o.cardFeature.value,L=(C==null?void 0:C.source)||((re=C==null?void 0:C.layer)==null?void 0:re.id),U=((me=C==null?void 0:C.properties)==null?void 0:me.id)??(C==null?void 0:C.id);return L&&U!=null?`${L}:${U}`:null}),Q=e.ref(null),se=e.ref([]),te=e.ref(0),oe=new Map;function fe(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const he=e.computed(()=>{const C=typeof n.mapId=="string"?n.mapId.trim():"";if(C.length)return C;const L=typeof ne.params.slug=="string"?ne.params.slug.trim():"";if(L.length)return L;const U=typeof ne.query.slug=="string"?ne.query.slug.trim():"";return U.length?U:fe()}),ie=e.ref(null),Be=e.ref(null),We=new Map;function qe(C){const L=C.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const U=Array.from(C).map(re=>re.charCodeAt(0).toString(16)).join("").slice(0,8);return U?`layer-${U}`:`layer-${Math.random().toString(36).slice(2,8)}`}function Re(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 U=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?U?`${U}${L}`:L:U?`${U}/${L}`:L}function Ge(C){if(C==null)return[];if(Array.isArray(C))return C.flatMap(L=>Ge(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(U=>Number(U)).filter(U=>Number.isFinite(U))}return[]}function Ke(C){const L=Ge(C);if(L.length<4)return null;const[U,re,me,Ee]=L;return[U,re,me,Ee].every(Ve=>Number.isFinite(Ve))?[U,re,me,Ee]:null}function wt(C){if(!C)return null;const L=C.trim();if(!L.length)return null;try{const me=JSON.parse(L),Ee=Ke(me);if(Ee)return Ee}catch{}const U=L.match(/-?\d+(?:\.\d+)?/g);if(!U||U.length<4)return null;const re=U.slice(0,4).map(me=>Number(me));return re.every(me=>Number.isFinite(me))?[re[0],re[1],re[2],re[3]]:null}function G(C){const L={},U=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let re;for(;(re=U.exec(C))!==null;){const me=re[1],Ee=re[2]??re[3]??re[4]??"";me&&(L[me]=Ee)}return L}function ee(C,L){for(const U of L)if(C[U]!=null&&String(C[U]).trim().length)return String(C[U]).trim();return""}function be(C){if(!(C!=null&&C.length))return;const L=Number(C);return Number.isFinite(L)?L:void 0}function Pe(C){if(typeof C!="string"||!C.length)return[];const L=[],U=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let re=0,me;const Ee=new Set,Ve=Ie=>{let Qe=Ie,at=2;for(;Ee.has(Qe);)Qe=`${Ie}-${at}`,at+=1;return Ee.add(Qe),Qe};for(;(me=U.exec(C))!==null;){const[Ie,Qe="",at=""]=me,Ze=me.index;if(Ze>re){const Tl=C.slice(re,Ze);Tl.trim().length&&L.push({type:"html",content:Tl})}const ct=G(Qe),xt=ee(ct,["title"])||"Тимчасовий шар",Dt=Re(ee(ct,["url"]));if(!Dt){L.push({type:"html",content:Ie}),re=Ze+Ie.length;continue}const Cn=ee(ct,["id"]),To=ee(ct,["button-text","buttonText","show","show-label","showLabel"]),C_=be(ee(ct,["tile-size","tileSize"])),N_=be(ee(ct,["minzoom","minZoom"])),V_=be(ee(ct,["maxzoom","maxZoom"])),B_=be(ee(ct,["opacity"])),$_=wt(ee(ct,["bounds","data-bounds","bbox"])),S_=Cn||qe(`${xt}-${Dt}`)||qe(xt),Ll=Ve(S_||`layer-${L.length+1}`),Mo=at.trim(),Al=/<[^>]+>/.test(Mo),v_=Al?Mo:null,Fo=Al?null:Mo,L_=To&&To.trim().length?To.trim():Fo&&Fo.trim().length?Fo.trim():void 0;L.push({type:"layer",spec:{id:Ll,title:xt,url:Dt,tileSize:C_,minzoom:N_,maxzoom:V_,opacity:B_,bounds:$_},componentProps:{title:xt,url:Dt,id:Ll,buttonText:L_},slotText:v_}),re=Ze+Ie.length}if(re<C.length){const Ie=C.slice(re);Ie.trim().length&&L.push({type:"html",content:Ie})}return!L.length&&C.trim().length&&L.push({type:"html",content:C}),L}function Te(C){if(!C)return null;const L=typeof C.id=="string"?C.id.trim():"",U=typeof C.title=="string"?C.title.trim():"",re=Re(typeof C.url=="string"?C.url:"");return!L||!re?null:{id:L,title:U||L,url:re,tileSize:C.tileSize,minzoom:C.minzoom,maxzoom:C.maxzoom,opacity:C.opacity,bounds:C.bounds}}const ke=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)??{}}),He=e.computed(()=>{if(w.value&&r.current.value){const re=r.current.value,me=Array.isArray(re.columns)?re.columns:[];return me.length?me:re.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:[]}),ve=e.computed(()=>{const C=He.value;if(!C.length)return[];const L=ke.value;return C.map(U=>({key:U.name,label:U.ua||U.label||U.title||U.name,value:M(L[U.name],U.format||"text"),format:U.format||"text"}))}),lt=new Set(["—","-","–","−"]);function W(C){const L=C.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return C;const[,U,re,me]=L;return`${me}.${re}.${U}`}function B(C){return Number.isFinite(C)?new Intl.NumberFormat("uk-UA").format(C):"—"}function M(C,L){if(C==null)return"—";if(L==="tags")return C;if(Array.isArray(C))return C.length?C.map(U=>M(U,"text")).join(", "):"—";if(typeof C=="boolean")return C?"так":"ні";if(typeof C=="number")return B(C);if(typeof C=="string"){const U=C.trim();if(!U.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(U))return W(U);if(/^-?\d+(?:\.\d+)?$/.test(U)){const re=Number(U);return Number.isFinite(re)?B(re):U}return U}return String(C)}function X(C){if(C==null)return!0;if(typeof C=="string"){const L=C.trim();return L.length?lt.has(L):!0}return!1}function le(C){if(!C)return[];if(Array.isArray(C))return C;if(typeof C=="string"){const L=C.trim();if(L.startsWith("{")&&L.endsWith("}")){const re=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return re?re.map(me=>me.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const de=e.ref(!1),xe=e.ref(!0),P=()=>{var C,L;return typeof window>"u"?null:((L=(C=window.localStorage)==null?void 0:C.getItem)==null?void 0:L.call(C,Xo))??null},O=e.ref(P()),H=C=>{const L=typeof C=="string"&&C.toLowerCase()==="true";de.value=L,xe.value=!L},ae=C=>{O.value=C};if(typeof window<"u"){const C=L=>{L.key===Xo&&ae(L.newValue)};window.addEventListener("storage",C),e.onBeforeUnmount(()=>{window.removeEventListener("storage",C)})}const ge=e.computed(()=>typeof O.value=="string");e.watch(O,C=>{H(typeof C=="string"?C:q.value)},{immediate:!0}),e.watch(q,C=>{ge.value||H(C)},{immediate:!0});const Ne=e.computed(()=>ve.value.filter(C=>X(C.value)).length),Le=e.computed(()=>de.value&&!xe.value?ve.value.filter(C=>!X(C.value)):ve.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 re=new DOMParser().parseFromString(L,"text/html");let me=0;return re.querySelectorAll("dd").forEach(Ee=>{var Qe;const Ve=((Qe=Ee.textContent)==null?void 0:Qe.trim())??"",Ie=Ee.closest("div");if(X(Ve)){me+=1,Ie?Ie.remove():Ee.remove();return}}),{sanitized:re.body.innerHTML,hiddenCount:me}}const ft=e.computed(()=>Se(Z.value)),_t=e.computed(()=>Z.value?ft.value.hiddenCount:0),yt=e.computed(()=>Ne.value+_t.value),vt=e.computed(()=>{var C;return de.value&&!xe.value&&!!((C=Z.value)!=null&&C.trim())}),nn=e.computed(()=>de.value&&yt.value>0),vo=e.computed(()=>xe.value?"Приховати пусті значення":"Показати пусті значення"),Lo=e.computed(()=>xe.value?ce.ChevronUp:ce.ChevronDown);function wn(){xe.value=!xe.value}const Rt=e.computed(()=>{const C=vt.value?ft.value.sanitized:Z.value??"";return Pe(C)}),Lt=e.computed(()=>Rt.value.filter(C=>C.type==="layer"));function on(C){return Array.isArray(C)?C.map((L,U)=>{const re=Re(typeof(L==null?void 0:L.url)=="string"?L.url:""),me=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",Ee=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${U+1}`).toString(),Ve=(L==null?void 0:L.id)!=null?String(L.id):qe(`${Ee}-${U+1}`),Ie=(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,at=re||Re(me)||"";if(!at)return null;const Ze={id:Ve,title:Ee,url:at,subtitle:Qe,buttonText:Ie||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Ze.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Ze.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Ze.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Ze.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Ze.opacity=L.opacity);const ct=Ke((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return ct&&(Ze.bounds=ct),Ze}).filter(Boolean):[]}const Ot=e.computed(()=>{var re,me;const C=o.card.value,L=r.current.value,U=[(re=C==null?void 0:C.rows)==null?void 0:re.layers,C==null?void 0:C.layers,(me=L==null?void 0:L.data)==null?void 0:me.layers,L==null?void 0:L.layers];for(const Ee of U){const Ve=on(Ee);if(Ve.length)return Ve}return[]}),Hn=e.computed(()=>Rt.value.length>0||ve.value.length>0||Ot.value.length>0),_n=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function Wn(){const C={},L=ie.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([U,re])=>{typeof re=="string"&&(C[U]=re)}),_.value&&(C.layer=_.value),!C.geohub){const U=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,re=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,me=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;C.geohub=U||re||me||C.layer||""}return C}async function Yn(){const C=_.value;if(!C)return ie.value=null,Be.value=null,null;if(Be.value===C&&ie.value)return ie.value;if(We.has(C)){const L=We.get(C);return ie.value=L,Be.value=C,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(C)}`);if(!L.ok)return null;const U=await L.json();return We.set(C,U),ie.value=U,Be.value=C,U}catch{return null}}async function j(C){if(!(C!=null&&C.id))return;await Yn();const L=Wn(),U=Lt.value.find(Ie=>Ie.spec.id===C.id),re=Ot.value.find(Ie=>Ie.id===C.id),me=(U==null?void 0:U.spec)||Te(re)||Te(C),Ee=(U==null?void 0:U.spec.bounds)??(re==null?void 0:re.bounds);if(!me||F(me.id,T.value))return;const Ve=T.value||void 0;Q.value=Ve??null,Y(me,L,Ve),V({action:"activate",owner:Ve,spec:me,context:L}),J(Ee)}async function J(C){var Ee;if(!(C!=null&&C.length))return;const[L,U,re,me]=C;[L,U,re,me].every(Ve=>Number.isFinite(Ve))&&typeof I.fitBounds=="function"&&(await((Ee=I.ready)==null?void 0:Ee.call(I)),I.fitBounds([[L,U],[re,me]],{padding:48,maxZoom:18}))}function _e(C){if(!C)return;const L=De()||void 0;D(C,L),V({action:"deactivate",owner:L,spec:{id:C}})}function $e(C){return F(C,De())}function ue(C,L){const U=L.target;!!(U!=null&&U.checked)?j(C):_e(C.id)}function De(){return Q.value||T.value||null}e.watch(_,(C,L)=>{C!==L&&(ie.value=null,Be.value=null)});const{next:Ae,prev:pe,count:Me,index:je}=r,ze=e.computed(()=>o.count.value),Xe=e.computed(()=>o.index.value),ut=e.computed(()=>w.value?!1:g.value?i.value.length>1:ze.value>1),Oe=e.computed(()=>w.value?Me.value:g.value?i.value.length:ze.value),it=e.computed(()=>w.value?je.value:g.value?s.value:Xe.value),Je=()=>{if(g.value){if(s.value>=i.value.length-1)return;m(s.value+1);return}o.next()},et=()=>{if(g.value){if(s.value<=0)return;m(s.value-1);return}o.prev()};function pt(){const C=De();C&&(v(C),V({action:"clear",owner:C}),Q.value=null)}function Zn(){y(),o.close(),r.close(),pt(),f(null)}e.watch(S,(C,L)=>{!C&&L&&(pt(),nt())});function $l(){!o.isOpen.value&&!r.active.value&&pt()}e.watch(()=>o.isOpen.value,()=>{$l()}),e.watch(()=>r.active.value,()=>{$l()}),e.watch(_,(C,L)=>{C&&L&&C!==L&&pt()}),e.watch(je,(C,L)=>{C!==L&&pt()}),e.watch(z,(C,L)=>{C&&L&&C!==L&&pt()});function y_(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 nt(){se.value.length&&(se.value.forEach((C,L)=>{var U;(U=C==null?void 0:C.remove)==null||U.call(C,L===0)}),se.value=[])}function h_(C){var U,re,me;const L=(C==null?void 0:C.type)||((me=(re=(U=C==null?void 0:C.features)==null?void 0:U[0])==null?void 0:re.geometry)==null?void 0:me.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 Ao=null;function Sl(){return u()}function x_(C){var me,Ee;if(!C)return null;const L=(C==null?void 0:C.source)??((me=C==null?void 0:C.layer)==null?void 0:me.id),U=((Ee=C==null?void 0:C.properties)==null?void 0:Ee.id)??(C==null?void 0:C.id);return!L||U===void 0||U===null?null:`${L},${U}`.trim()||null}function Gn(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(U=>Gn(U,L));return}typeof C=="object"&&(Array.isArray(C.coordinates)&&Gn(C.coordinates,L),Array.isArray(C.features)&&C.features.forEach(U=>Gn(U==null?void 0:U.geometry,L)))}}function b_(C){var Ie,Qe;if(!C)return null;const L=C.type==="FeatureCollection"?(Qe=(Ie=C.features)==null?void 0:Ie[0])==null?void 0:Qe.geometry:C.type==="Feature"?C.geometry:C,U=[];if(Gn(L,U),!U.length)return null;let re=U[0][0],me=U[0][0],Ee=U[0][1],Ve=U[0][1];return U.forEach(([at,Ze])=>{at<re&&(re=at),at>me&&(me=at),Ze<Ee&&(Ee=Ze),Ze>Ve&&(Ve=Ze)}),[(re+me)/2,(Ee+Ve)/2]}async function k_(C,L){var Ee;const U=Sl();if(!U||U.startsWith("external:"))return;const re=x_(C);if(!re||re!==U||Ao===U)return;const me=b_(L);me&&(await((Ee=I.ready)==null?void 0:Ee.call(I)),I.flyTo({center:me,zoom:kc}),Ao=U)}function vl(C){var me;if(!C){nt();return}const L=(me=I.map)==null?void 0:me.value,U={type:"FeatureCollection",features:[{type:"Feature",geometry:C,properties:{}}]};nt();const re=h_(C);if(se.value=re.map((Ee,Ve)=>Ue(`feature-card-highlight${Ve||""}`,{...Ve===0?{source:{type:"geojson",data:U}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Ve||""}`,type:Ee.type,source:"feature-card-highlight",paint:Ee.paint}},I.map)),L!=null&&L.moveLayer){const Ee=()=>{try{se.value.forEach(at=>{var ct;const Ze=(ct=at==null?void 0:at.ids)==null?void 0:ct.layerId;Ze&&L.moveLayer(Ze)})}catch{}},Ve=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Ee)}):setTimeout(Ee,0)};Ve();const Ie=()=>Ve();L.once("styledata",Ie);const Qe=()=>{Ve(),L.off("styledata",Ie),L.off("idle",Qe)};L.on("idle",Qe)}}function w_(C){var re,me;const L=(C==null?void 0:C.source)||((re=C==null?void 0:C.layer)==null?void 0:re.id)||"unknown",U=((me=C==null?void 0:C.properties)==null?void 0:me.id)??(C==null?void 0:C.id)??"unknown";return`${L}:${U}`}async function __(C){var Ee,Ve,Ie,Qe,at;if(!C)return null;const L=y_(C);if(L)return L;const U=((Ee=C==null?void 0:C.properties)==null?void 0:Ee.id)??(C==null?void 0:C.id);if(!U)return null;const re=w_(C);if(oe.has(re))return oe.get(re);const me=[he.value,C==null?void 0:C.source,(Ve=C==null?void 0:C.layer)==null?void 0:Ve.id].map(Ze=>typeof Ze=="string"?Ze.trim():"").filter(Boolean);for(const Ze of me)try{const ct=await fetch(`/api/map-features/${encodeURIComponent(Ze)}/${encodeURIComponent(String(U))}`);if(!ct.ok)continue;const xt=await ct.json(),Dt=((Ie=xt==null?void 0:xt.data)==null?void 0:Ie.geom)||((Qe=xt==null?void 0:xt.data)==null?void 0:Qe.geometry)||((at=xt==null?void 0:xt.data)==null?void 0:at.geom_4326)||null,Cn=typeof Dt=="string"?JSON.parse(Dt):Dt;if(Cn)return oe.set(re,Cn),Cn}catch{continue}return null}async function En(C){te.value+=1;const L=te.value;if(N())return;if(!C||w.value){nt();return}if(!_n.value){nt();return}const U=await __(C);if(L===te.value){if(!U){nt();return}vl(U),k_(C,U)}}async function E_(C){var U,re,me;const L=b(C);if(!L){(U=u())!=null&&U.startsWith("external:")&&(y(),nt());return}if(((re=p.value)==null?void 0:re.infoToken)===L.token){N();return}try{const Ee=await fetch(`/api/map-format?layer=${encodeURIComponent(L.layer)}&id=${encodeURIComponent(L.id)}`);if(!Ee.ok)throw new Error(`Failed (${Ee.status})`);const Ve=await Ee.json(),Ie=typeof(Ve==null?void 0:Ve.html)=="string"?Ve.html:null,Qe=d(((me=Ve==null?void 0:Ve.data)==null?void 0:me.geom)??(Ve==null?void 0:Ve.geom)??null);if(!Ie&&!Qe){y(),nt();return}h([{html:Ie,geometry:Qe,infoToken:L.token}],0)}catch{y(),nt()}}return e.watch(()=>o.cardFeature.value,C=>{En(C)},{immediate:!0}),e.watch(()=>o.index.value,()=>{w.value||En(o.cardFeature.value)}),e.watch(w,C=>{if(C){x.value||nt();return}if(x.value){N();return}En(o.cardFeature.value)}),e.watch(he,()=>{if(x.value){N();return}!w.value&&o.cardFeature.value&&En(o.cardFeature.value)}),e.watch(_n,C=>{N()||(C?En(o.cardFeature.value):nt())}),e.watch(()=>Sl(),C=>{if(Ao=null,C!=null&&C.startsWith("external:")){E_(C);return}p.value&&(y(),nt())},{immediate:!0}),e.watch(p,C=>{var L;if(!((L=C==null?void 0:C.html)!=null&&L.trim())){nt();return}N()}),e.onBeforeUnmount(()=>{pt(),nt()}),(C,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[S.value?(e.openBlock(),e.createElementBlock("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("div",Hi,[e.createElementVNode("p",Wi,[w.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(it.value+1)+" / "+e.toDisplayString(Oe.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[ut.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(it.value+1)+" / "+e.toDisplayString(Oe.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),w.value&&e.unref(Me)>1?(e.openBlock(),e.createElementBlock("div",Yi,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...U)=>e.unref(pe)&&e.unref(pe)(...U)),disabled:e.unref(je)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ce.ArrowLeft),{class:"h-4 w-4"})],8,Zi),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...U)=>e.unref(Ae)&&e.unref(Ae)(...U)),disabled:e.unref(je)===e.unref(Me)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ce.ArrowRight),{class:"h-4 w-4"})],8,Gi)])):!w.value&&ut.value?(e.openBlock(),e.createElementBlock("div",Ki,[e.createElementVNode("button",{onClick:et,disabled:it.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ce.ArrowLeft),{class:"h-4 w-4"})],8,Xi),e.createElementVNode("button",{onClick:Je,disabled:it.value>=Oe.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ce.ArrowRight),{class:"h-4 w-4"})],8,Qi)])):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:Zn}," ✕ ")]),e.createElementVNode("div",Ji,[A.value?(e.openBlock(),e.createElementBlock("div",ec," Завантаження даних… ")):R.value?(e.openBlock(),e.createElementBlock("div",tc,e.toDisplayString(R.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[ve.value.length?(e.openBlock(),e.createElementBlock("div",nc,[e.createElementVNode("dl",oc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Le.value,U=>(e.openBlock(),e.createElementBlock("div",{key:U.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",rc,e.toDisplayString(U.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",U.format==="badge"?"font-semibold text-yellow-800":""])},[U.format==="tags"?(e.openBlock(),e.createElementBlock("div",lc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(le(U.value),(re,me)=>(e.openBlock(),e.createElementBlock("span",{key:me,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(re),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(U.value),1)],64))],2)]))),128))])])):Rt.value.length?(e.openBlock(),e.createElementBlock("div",ac,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Rt.value,(U,re)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:re},[U.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:U.content},null,8,sc)):(e.openBlock(),e.createBlock(Go,{key:1,title:U.componentProps.title,url:U.componentProps.url,id:U.componentProps.id,"button-text":U.componentProps.buttonText,onActivate:j},e.createSlots({_:2},[U.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:U.slotText},null,8,ic)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),Lt.value.length?(e.openBlock(),e.createElementBlock("div",cc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Lt.value,U=>(e.openBlock(),e.createBlock(Go,{key:U.spec.id,title:U.componentProps.title,url:U.componentProps.url,id:U.spec.id,"button-text":U.componentProps.buttonText,onActivate:j},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),nn.value?(e.openBlock(),e.createElementBlock("div",dc,[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:wn},[e.createElementVNode("span",uc,e.toDisplayString(vo.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Lo.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),Ot.value.length?(e.openBlock(),e.createElementBlock("div",pc,[L[3]||(L[3]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",mc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ot.value,U=>(e.openBlock(),e.createElementBlock("div",{key:U.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",fc,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:$e(U.id),onChange:re=>ue(U,re)},null,40,gc),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",yc,e.toDisplayString(U.title),1)]),U.subtitle?(e.openBlock(),e.createElementBlock("div",hc,e.toDisplayString(U.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Hn.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",xc," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-3a3cb28b"]]),wc={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%"}},_c={class:"flex flex-col gap-1 p-5"},Ec={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},co=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=tt(),a=e.ref([]);let i=null;function s(x){return x?x.map((l,y)=>{var b;const d=(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}`,u=(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:`${d}-${y}`,label:d,color:u}}):[]}function c(x){return x!=null&&x.layers?x.layers.filter(l=>{const y=l.paint||{};return y["fill-color"]||y["line-color"]||y["circle-color"]}).map((l,y)=>{var b;const d=l.paint||{},u=d["fill-color"]||d["line-color"]||d["circle-color"]||"#3388ff";return{id:l.id||`layer-${y}`,label:((b=l.metadata)==null?void 0:b.title)||l.id||`Layer ${y+1}`,color:u}}):[]}async function p(){var y;await r();const x=o.value;if(!x)return;const l=(y=x.getStyle)==null?void 0:y.call(x);a.value=c(l)}function g(){o.value&&(i==null||i())}return e.watch(()=>n.items,async x=>{x!=null?(a.value=s(x),i==null||i()):(await r(),g(),p())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),g(),p())}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(x,l)=>a.value.length?(e.openBlock(),e.createElementBlock("div",wc,[e.createElementVNode("div",_c,[(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",Ec,[e.createElementVNode("span",null,e.toDisplayString(y.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Cc={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"},uo=Ce(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",Cc,[e.createVNode(Sn,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),Nc={class:"catalog-tab__search relative mt-[10px]"},Vc={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%)"}},Bc={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},$c={key:0,class:"text-sm text-gray-400 text-center mt-6"},Sc=["onClick"],vc={class:"flex items-center gap-x-3"},Lc={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Ac={class:"text-xs opacity-60 text-[#4b5563]"},Tc={class:"flex items-center cursor-pointer gap-2 flex-1"},Mc=["checked","onChange"],Fc={class:"text-[13px] text-gray-600 max-w-[260px]"},Dc={class:"flex items-center gap-2"},zc=Ce(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 m=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const k=h.layers.filter(N=>{const $=b(N);return $?m?$.toLowerCase().includes(m):!0:!1}).sort((N,$)=>c.compare(b(N),b($)));return{...h,layers:k}}).filter(h=>h.layers.length>0).sort((h,k)=>c.compare(h.name,k.name))}),g=e.computed({get:()=>o.search,set:m=>r("update:search",m)});function x(m){a[m]=!a[m],ci()}function l(m){return!!a[m]}function y(m,h){if(o.selected.includes(h)){s.visible=!1,s.layerId=null;return}const k=m.currentTarget;if(!k)return;const N=k.getBoundingClientRect(),$=typeof window<"u"?window.scrollX:0,E=typeof window<"u"?window.scrollY:0;s.left=N.left+N.width/2+$,s.top=N.bottom+8+E,s.layerId=h,s.visible=!0}function d(){s.visible=!1,s.layerId=null}function u(m){return[{label:"Назва",value:f(m.name)},{label:"Сервіс",value:f(m.service)},{label:"Посилання",value:f(m.url),breakLine:!0}]}function b(m){return typeof(m==null?void 0:m.name)=="string"?m.name.trim():""}function f(m){return m==null||m===""?null:String(m)}return e.watch(()=>o.selected?o.selected.slice():[],m=>{!s.visible||!s.layerId||m.includes(s.layerId)&&(s.visible=!1,s.layerId=null)}),(m,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:i,class:"catalog-tab"},[e.createElementVNode("div",Nc,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=k=>g.value=k),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,g.value]]),(e.openBlock(),e.createElementBlock("svg",Vc,[...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",Bc,[p.value.length===0?(e.openBlock(),e.createElementBlock("div",$c," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,k=>(e.openBlock(),e.createElementBlock("div",{key:k.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=>x(k.id)},[e.createElementVNode("div",vc,[(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(k.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",Lc,e.toDisplayString(k.name),1)]),e.createElementVNode("div",Ac,e.toDisplayString(k.layers.length),1)],8,Sc),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(k.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",Tc,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(N.id),onChange:$=>m.$emit("toggle-layer",N.id,$.target.checked,N)},null,40,Mc),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",Fc,e.toDisplayString(N.name),1)]),e.createElementVNode("div",Dc,[Array.isArray(N.filters)&&N.filters.length?(e.openBlock(),e.createBlock(Sn,{key:0,count:N.filters.length,layer:N,disabled:!t.selected.includes(N.id),onMouseenter:$=>y($,N.id),onMouseleave:d,onFocus:$=>y($,N.id),onBlur:d},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(oo,{items:u(N)},null,8,["items"])])]))),128))],512),[[e.vShow,l(k.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"]]),Ic={class:"flex flex-col gap-0"},Pc={class:"text-xs text-slate-600 font-semibold"},jc=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(()=>{g(),d(),requestAnimationFrame(()=>{g()})})}function g(){if(!r.open||!a.value||!i.value)return;const b=a.value.getBoundingClientRect(),f=12,m=window.scrollX+f,h=window.scrollX+window.innerWidth-f,k=window.scrollY+f,N=window.scrollY+window.innerHeight-f,$=i.value.offsetWidth||Math.min(460,window.innerWidth-24),E=i.value.offsetHeight||0;let w=b.left+window.scrollX+(b.width-$)/2;w<m&&(w=m),w+$>h&&(w=Math.max(m,h-$)),r.left=w;let S=b.bottom+window.scrollY+f;S+E>N&&(S=b.top+window.scrollY-E-f,S<k&&(S=Math.max(k,N-E))),S<k&&(S=k),S+E>N&&(S=Math.max(k,N-E)),r.top=S,r.transform="none"}function x(b){var m,h;if(!r.open)return;const f=b.target;(m=a.value)!=null&&m.contains(f)||(h=i.value)!=null&&h.contains(f)||y()}function l(b){b.key==="Escape"&&y()}function y(){u(),r.open=!1,a.value=null,i.value=null}function d(){u(),i.value&&(s=new ResizeObserver(()=>{g()}),s.observe(i.value))}function u(){s&&(s.disconnect(),s=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",l),window.addEventListener("scroll",g,!0),window.addEventListener("resize",g)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",l),window.removeEventListener("scroll",g,!0),window.removeEventListener("resize",g),u()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>g())},{deep:!0}),n({close:y}),(b,f)=>(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:f[0]||(f[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ic,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,m=>(e.openBlock(),e.createElementBlock("div",{key:m.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",Pc,e.toDisplayString(m.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":m.breakLine}])},e.toDisplayString(m.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Rc={class:"selected-tab"},Oc={class:"selected-tab__actions"},Uc={key:0,class:"selected-tab__scroll"},qc=["onDragstart","onDragover","onDrop"],Hc={class:"selected-tab__item-header"},Wc={class:"selected-tab__item-info"},Yc=["checked","onChange"],Zc={class:"selected-tab__item-name"},Gc={class:"selected-tab__item-controls"},Kc=["onClick"],Xc={class:"selected-tab__menu-inner"},Qc=Ce(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},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}),g=e.ref(null),x=e.reactive({top:0,left:0}),l=e.ref(null),y=new Map,d=e.reactive({});function u(v){var F;for(const V of((F=o.catalog)==null?void 0:F.groups)??[]){const _=V.layers.find(T=>T.id===v);if(_)return _}return null}e.watch(()=>o.selected,v=>{v.forEach(F=>{a[F]==null&&(a[F]=100)})},{immediate:!0});function b(){if(!i.value)return;const v=c.get(i.value);if(!v)return;const F=v.getBoundingClientRect();p.top=F.bottom+8+window.scrollY,p.left=F.left+window.scrollX}e.watch(()=>o.selected,v=>{v.forEach(F=>{d[F]==null&&(d[F]=!0)})},{immediate:!0});function f(v,F){d[v]=F;const V=Ue(v);V&&V.setVisible(F)}function m(v,F){F?y.set(v,F):y.delete(v)}function h(v){g.value=g.value===v?null:v,g.value&&e.nextTick(()=>{k(v),requestAnimationFrame(()=>{k(v)})})}function k(v){const F=y.get(v);if(!F||!l.value)return;const V=F.getBoundingClientRect(),_=12,T=6,z=window.scrollX+_,Q=window.scrollX+window.innerWidth-_,se=window.scrollY+_,te=window.scrollY+window.innerHeight-_,oe=l.value.offsetWidth||190,fe=l.value.offsetHeight||0;let he=V.bottom+window.scrollY+T,ie=V.left+window.scrollX;ie+oe>Q&&(ie=V.right+window.scrollX-oe,ie<z&&(ie=z)),ie<z&&(ie=z),he+fe>te&&(he=V.top+window.scrollY-fe-T,he<se&&(he=Math.max(se,te-fe))),he<se&&(he=se),he+fe>te&&(he=Math.max(se,te-fe)),x.top=he,x.left=ie}function N(v){const F=Ue(v);F&&F.remove(),r("remove",v),g.value=null}function $(v){const F=v.target,V=i.value,_=g.value;if(V){const T=s.value,z=c.get(V);if(T&&T.contains(F)||z&&z.contains(F))return;i.value=null}if(_){const T=l.value,z=y.get(_);if(T&&T.contains(F)||z&&z.contains(F))return;g.value=null}}function E(){i.value&&b(),g.value&&k(g.value)}e.onMounted(()=>{document.addEventListener("click",$),window.addEventListener("resize",E),window.addEventListener("scroll",E,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",$),window.removeEventListener("resize",E),window.removeEventListener("scroll",E,!0)});const{map:w}=tt();function S(v){var T,z,Q;if(!v)return;const F=Ue(v),V=u(v);if(!F&&!V)return;if(((T=V==null?void 0:V.extent)==null?void 0:T.length)===4&&((z=w.value)!=null&&z.fitBounds)){const se=V.extent.map(te=>Number(te));if(se.every(te=>Number.isFinite(te))){const[te,oe,fe,he]=se;w.value.fitBounds([[te,oe],[fe,he]],{padding:40}),g.value=null;return}}(Q=F==null?void 0:F.getSource)!=null&&Q.call(F)&&(g.value=null)}const A=e.ref(null),R=e.ref(null);function Z(v,F){A.value=F,R.value=F,v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(F)))}function I(v){R.value=v}function K(v,F){if(v.preventDefault(),A.value===null||A.value===F){A.value=null,R.value=null;return}const _=[...o.selected],[T]=_.splice(A.value,1);_.splice(F,0,T),r("reorder",_),A.value=null,R.value=null}function q(){A.value=null,R.value=null}function ne(v){return v==null||v===""?null:String(v)}function Y(v,F){return!Array.isArray(v)||v.length===0?null:`${v.length} ${F}`}function D(v){var he,ie,Be,We,qe,Re;const F=Ue(v),V=u(v);if(!F&&!V)return[];const _=(V==null?void 0:V.name)||((ie=(he=F==null?void 0:F.opts)==null?void 0:he.layer)==null?void 0:ie.name)||null,T=(V==null?void 0:V.service)||((Be=F==null?void 0:F.opts)==null?void 0:Be.service)||null,z=(We=F==null?void 0:F.getSource)==null?void 0:We.call(F),Q=z&&"tiles"in z?(qe=z.tiles)==null?void 0:qe[0]:(V==null?void 0:V.url)||null,se=(V==null?void 0:V.source_path)||null,te=(F==null?void 0:F.popup)||(V==null?void 0:V.popup),oe=(F==null?void 0:F.card)||(V==null?void 0:V.card),fe=(V==null?void 0:V.filters)||((Re=F==null?void 0:F.opts)==null?void 0:Re.filters);return[{label:"Назва",value:ne(_)},{label:"Сервіс",value:ne(T)},{label:"Посилання",value:ne(Q),breakLine:!0},{label:"Джерело",value:ne(se),breakLine:!0},{label:"Popup",value:Y(te,"полів")},{label:"Картка",value:Y(oe,"полів")},{label:"Фільтри",value:Y(fe,"фільтрів")}]}return(v,F)=>(e.openBlock(),e.createElementBlock("div",Rc,[e.createElementVNode("div",Oc,[e.createElementVNode("button",{class:"selected-tab__add",onClick:F[0]||(F[0]=V=>r("select-layer"))},[...F[3]||(F[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),t.selected.length?(e.openBlock(),e.createElementBlock("div",Uc,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(V,_)=>{var T;return e.openBlock(),e.createElementBlock("div",{key:V,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":A.value===_,"selected-tab__item--over":R.value===_}]),draggable:"true",onDragstart:z=>Z(z,_),onDragover:e.withModifiers(z=>I(_),["prevent"]),onDrop:z=>K(z,_),onDragend:q},[e.createElementVNode("div",Hc,[e.createElementVNode("div",Wc,[F[4]||(F[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:d[V]??!0,onChange:z=>f(V,z.target.checked)},null,40,Yc),e.createElementVNode("span",Zc,e.toDisplayString(((T=u(V))==null?void 0:T.name)||"Шар"),1)]),e.createElementVNode("div",Gc,[e.createVNode(Ho,{"layer-id":V},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:z=>m(V,z),onClick:e.withModifiers(z=>h(V),["stop"])},[...F[5]||(F[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,Kc)])])],42,qc)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[g.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:l,class:"selected-tab__menu",style:e.normalizeStyle({top:x.top+"px",left:x.left+"px"})},[e.createElementVNode("div",Xc,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:F[1]||(F[1]=V=>S(g.value))},[...F[6]||(F[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),e.createVNode(jc,{items:D(g.value)},{default:e.withCtx(()=>[...F[7]||(F[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)])]),_:1},8,["items"]),F[9]||(F[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:F[2]||(F[2]=V=>N(g.value))},[...F[8]||(F[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-1566770c"]]),Jc={class:"filter-tab"},ed={key:0,class:"filter-tab__header"},td={class:"filter-tab__title"},nd={key:1,class:"filter-tab__content rounded-md"},od={class:"filter-tab__scroll"},rd={key:2,class:"filter-tab__empty"},ld=Ce(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,g)=>(e.openBlock(),e.createElementBlock("div",Jc,[t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",ed,[e.createElementVNode("div",null,[e.createElementVNode("p",td,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&s.value?(e.openBlock(),e.createElementBlock("div",nd,[e.createElementVNode("div",od,[e.createVNode(e.unref(o),{view:"vertical",schema:i.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:g[0]||(g[0]=x=>c(x))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",rd,[...g[1]||(g[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),ad={class:"flex items-center justify-between mb-1"},sd={class:"flex items-center gap-2"},id={class:"text-lg font-semibold text-gray-800"},cd={key:0},dd={key:1,class:"block text-sm font-normal text-gray-500"},ud={class:"flex items-center gap-2"},pd={class:"flex mb-4 border-b border-gray-200"},md={class:"map-catalog-widget__body"},Qo=Ce(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=Fe.useRoute(),o=Fe.useRouter();function r(){const D=n.query["catalog-tab"];return(Array.isArray(D)?D[0]:D)==="selected"?"selected":"catalog"}const a=e.ref(r()),i=e.ref({groups:[]}),s=e.ref([]),c=e.ref(""),{map:p}=tt(),g=e.reactive({}),x=e.ref(null),l=e.ref(!0),y=e.ref(!1);function d(D){return i.value.groups.map(v=>v.layers.find(F=>F.id===D)).find(Boolean)||null}function u(D){return typeof(D==null?void 0:D.name)=="string"&&D.name.trim().length>0}function b(){const D=x.value;if(!D)return;delete g[D];const v=Ue(D);v!=null&&v.setFilter&&v.setFilter("")}function f(D,v){const F=Ue(D);if(g[D]={...v},!(F!=null&&F.setFilter))return;const V=Object.entries(v).filter(([,_])=>_!=null&&_!=="").map(([_,T])=>`${_}=${T}`);F.setFilter(V.join("|"))}function m(D){const v=x.value;v&&f(v,D)}function h(D){const v=D.url;let F=null;if(v&&(F=v.startsWith("http")?v:`${window.location.origin}${v}`),!F)return null;const V=(D.service||"").toString().toLowerCase(),_=D.count??null;return V&&V!=="vtile"?{service:V,count:_,source:{type:"raster",tiles:[F],tileSize:256,minzoom:0,maxzoom:20}}:{service:V,count:_,source:{type:"vector",tiles:[F],minzoom:0,maxzoom:14},layer:{style:D.style},card:D.card,popup:D.popup}}function k(D,v,F){var z;const V=F??d(D);if(!V)return;const _=h(V);if(!_)return;const T=Ue(V.id,_,p);if(T)if(T.setVisible(v),v){if(!s.value.includes(D)&&(s.value.push(D),(z=p.value)!=null&&z.getLayer(D)))try{p.value.moveLayer(D)}catch(Q){console.warn("Cannot move new layer",D,Q)}}else s.value=s.value.filter(Q=>Q!==D),x.value===D&&(b(),x.value=null)}function N(){s.value.forEach(D=>{const v=Ue(D);v&&v.setVisible(!1)}),s.value=[]}function $(D){s.value=[...D],e.nextTick(()=>{var _;if(!p.value)return;const v=((_=p.value.getStyle())==null?void 0:_.layers)??[];let F;const V=T=>v.filter(z=>{var Q,se;return(z==null?void 0:z.source)===T||(z==null?void 0:z.id)===T||((se=(Q=z==null?void 0:z.id)==null?void 0:Q.startsWith)==null?void 0:se.call(Q,`${T}`))}).map(z=>z.id);for(let T=D.length-1;T>=0;T-=1){const z=D[T],Q=V(z);Q.length&&(Q.forEach(se=>{var te;if((te=p.value)!=null&&te.getLayer(se))try{p.value.moveLayer(se,F)}catch(oe){console.warn("Cannot move layer",se,oe)}}),F=Q[0])}})}function E(D){!D||!Array.isArray(D.filters)||D.filters.length===0||s.value.includes(D.id)&&(x.value=D.id,g[D.id]||(g[D.id]={}),a.value="filter")}function w(){a.value="catalog"}const S=e.computed(()=>x.value?d(x.value):null),A=e.computed(()=>{const D=x.value;return D?g[D]??{}:{}}),R=e.computed(()=>i.value.groups.reduce((D,v)=>D+v.layers.filter(u).length,0)),Z=e.computed(()=>a.value==="selected"?"Вибрані шари":a.value==="filter"?"Фільтр шарів":"Каталог"),I=e.computed(()=>a.value==="selected"?s.value.length:a.value==="catalog"?R.value:null),K=e.computed(()=>{var D;return a.value==="filter"?((D=S.value)==null?void 0:D.name)??"":""});async function q(){const v=await(await fetch("/api/gis-layer-list")).json(),F=new Map;v.forEach(T=>{const z=T.group_id??"other";F.has(z)||F.set(z,{id:z,name:T.group_name||"Інші шари",layers:[]}),F.get(z).layers.push(T)}),i.value={groups:Array.from(F.values())};const V=n.query.layers;if(!V)return;const _=Array.isArray(V)?V[0]:V;typeof _=="string"&&_.split(",").forEach(T=>{const z=T.trim();if(!z)return;const Q=d(z);Q&&k(z,!0,Q)})}e.watch(x,D=>{!D&&a.value==="filter"&&(a.value="catalog")}),e.watch(S,D=>{!D&&x.value&&(x.value=null)}),e.watch(s,D=>{const v={...n.query};D.length?v.layers=D.join(","):delete v.layers,o.replace({query:v}).catch(()=>{})},{deep:!0});function ne(){l.value=!l.value}function Y(){y.value=window.innerWidth<=768}return e.onMounted(()=>{q(),Y(),y.value&&(l.value=!1),window.addEventListener("resize",Y)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",Y)}),(D,v)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",l.value&&(a.value==="selected"||I.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",ad,[e.createElementVNode("div",sd,[v[5]||(v[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",id,[e.createTextVNode(e.toDisplayString(Z.value)+" ",1),I.value!==null?(e.openBlock(),e.createElementBlock("span",cd,"("+e.toDisplayString(I.value)+")",1)):e.createCommentVNode("",!0),K.value?(e.openBlock(),e.createElementBlock("span",dd,e.toDisplayString(K.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",ud,[e.createElementVNode("button",{onClick:N,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...v[6]||(v[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-a5b24fc9><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-a5b24fc9></path><path d="M21 3v5h-5" data-v-a5b24fc9></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-a5b24fc9></path><path d="M8 16H3v5" data-v-a5b24fc9></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:ne,"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":l.value})},[...v[7]||(v[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!l.value}])},[e.createElementVNode("div",pd,[e.createElementVNode("button",{onClick:v[0]||(v[0]=F=>a.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",a.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:v[1]||(v[1]=F=>a.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",a.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",md,[a.value==="catalog"?(e.openBlock(),e.createBlock(zc,{key:0,class:"map-catalog-widget__scroll",catalog:i.value,selected:s.value,search:c.value,"onUpdate:search":v[2]||(v[2]=F=>c.value=F),onToggleLayer:k,onOpenFilter:E},null,8,["catalog","selected","search"])):a.value==="selected"?(e.openBlock(),e.createBlock(Qc,{key:1,catalog:i.value,selected:s.value,onToggleLayer:k,onSelectLayer:v[3]||(v[3]=F=>a.value="catalog"),onReorder:$,onRemove:v[4]||(v[4]=F=>s.value=s.value.filter(V=>V!==F))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(ld,{key:2,layer:S.value,value:A.value,onChange:m,onClose:w},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-a5b24fc9"]]),fd={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},gd={class:"flex items-start justify-between gap-3 p-5 pb-3"},yd={class:"inline-block text-xl font-semibold text-gray-800"},hd={key:0,class:"mt-1 text-sm text-gray-500"},xd={class:"flex items-center gap-[6px]"},bd={class:"px-5 pb-5 space-y-6"},kd={key:0,class:"space-y-2"},wd={class:"flex flex-wrap gap-4"},_d=["value"],Ed={key:1,class:"text-sm text-gray-500"},Cd={key:2,class:"text-sm text-gray-500"},Nd={class:"text-4xl font-medium text-gray-800"},Vd={class:"space-y-[14px]"},Bd={class:"flex items-center gap-[10px] text-gray-600"},$d={class:"font-medium text-gray-700"},Sd={class:"flex items-center justify-end text-end gap-3"},vd={class:"font-medium text-gray-800"},Ld={class:"min-w-[40px] font-medium text-[#3C3C4399]"},Jo=Ce(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),g=e.ref(null),x=e.ref(null),l=e.ref({}),y=e.ref(null);function d(Y){return Y&&JSON.parse(JSON.stringify(Y))}const u=e.computed(()=>{const Y=o.config.layer;if(typeof Y!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const D=Y.trim();if(!D)throw new Error("MapAttributeWidget: `layer` must be non-empty");return D}),b=e.computed(()=>{const{list:Y,attribute:D}=o.config;if(Array.isArray(Y)&&Y.length)return Y.map(v=>({id:(v==null?void 0:v.id)!=null?String(v.id).trim():"",text:(v==null?void 0:v.text)!=null&&String(v.text).trim()||null})).filter(v=>v.id.length);if(Array.isArray(D))return D.map(v=>v!=null?String(v).trim():"").filter(v=>v.length).map(v=>({id:v,text:null}));if(typeof D=="string"){const v=D.trim();if(!v)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:v,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),f=e.computed(()=>b.value.map(Y=>({id:Y.id,label:Y.text||l.value[Y.id]||Y.id})));e.watch(b,Y=>{if(!Y.length){y.value=null,i.value=[];return}(!y.value||!Y.some(D=>D.id===y.value))&&(y.value=Y[0].id)},{immediate:!0});const m=e.computed(()=>{var Y;return y.value||((Y=b.value[0])==null?void 0:Y.id)||null});e.watch(u,()=>{var Y,D;(D=(Y=c.value)==null?void 0:Y.remove)==null||D.call(Y),c.value=null,p.value=null,g.value=null,x.value=null,l.value={}});const h=e.computed(()=>{var Y;return(Y=g.value)!=null&&Y.length?{id:u.value,name:p.value,filters:g.value}:null}),k=e.computed(()=>{var Y,D;return((D=(Y=h.value)==null?void 0:Y.filters)==null?void 0:D.length)||0});async function N(Y){var F;const D=await fetch(`/api/gis-service/${encodeURIComponent(Y)}`);if(!D.ok){let V="Не вдалося завантажити налаштування шару";try{const _=await D.json();V=((F=_==null?void 0:_.message)==null?void 0:F.error)||(_==null?void 0:_.message)||V}catch{}throw new Error(V)}const v=await D.json();return p.value=(v==null?void 0:v.name)||null,g.value=Array.isArray(v==null?void 0:v.filters)?v.filters:null,x.value=d((v==null?void 0:v.style)||{}),l.value=((v==null?void 0:v.attributes)||[]).reduce((V,_)=>{const T=typeof(_==null?void 0:_.name)=="string"?_.name.trim():"",z=typeof(_==null?void 0:_.ua)=="string"?_.ua.trim():"";return T&&(V[T]=z||T),V},{}),v}function $(Y,D){let v=Ue(Y);if(!v){const F=`${location.origin}/api/vtile/${Y}/ua/{z}/{x}/{y}.vmt`;v=Ue(Y,{source:{type:"vector",tiles:[F],minzoom:0,maxzoom:14},layer:{id:Y,source:Y,"source-layer":Y,style:(D==null?void 0:D.style)||{}},card:D==null?void 0:D.card,popup:D==null?void 0:D.popup})}return c.value=v,v}async function E(Y,D){var V;const v=`/api/gis-service/${encodeURIComponent(Y)}/${encodeURIComponent(D)}`,F=await fetch(v);if(!F.ok){let _="Не вдалося отримати статистику";try{const T=await F.json();_=((V=T==null?void 0:T.message)==null?void 0:V.error)||(T==null?void 0:T.message)||_}catch{}throw new Error(_)}return F.json()}function w(Y){const D=new Map;return Y&&(Y.rules||[]).forEach(F=>{const V=(F==null?void 0:F.value)??(F==null?void 0:F.id);V!=null&&D.set(String(V),F)}),D}function S(Y,D,v,F,V){if(typeof(D==null?void 0:D.color)=="string"&&D.color.trim())return D.color.trim();const _=o.config.colors||{};if(_[Y])return _[Y];const z=w(v==null?void 0:v.style).get(Y);return typeof(z==null?void 0:z.color)=="string"&&z.color.trim()?z.color.trim():n[V%n.length]}function A(Y,D,v,F){var V;return(D==null?void 0:D.text)||(D==null?void 0:D.label)||(D==null?void 0:D.name)||(D==null?void 0:D[`${F}_text`])||((V=w(v==null?void 0:v.style).get(Y))==null?void 0:V.label)||Y}function R(Y,D,v,F){if(!Y)return;const V=d((D==null?void 0:D.style)||x.value)||{},_=F.trim();if(!_)return;const T={...V.colors||{},...o.config.colors||{}};_===F&&v.forEach(z=>{z.color.trim()&&(T[z.id]=z.color)}),Y.setStyle({...V,type:V.type||"polygon",colorAttr:_,opacity:.8,colors:T})}async function Z(){var _,T;i.value=[],s.value=null;const Y=u.value,D=m.value;if(!D)return;a.value=!0;const v=await N(Y);$(Y,v);const F=await E(Y,D),V=Array.isArray(F==null?void 0:F.rows)?F.rows.map((z,Q)=>{const se=(z==null?void 0:z.id)??(z==null?void 0:z.value),te=se!=null?String(se):"";if(!te)return null;const oe=A(te,z,v,D),fe=Number((z==null?void 0:z.count)??0)||0,he=S(te,z,v,D,Q);return{id:te,label:oe,count:fe,color:he}}).filter(Boolean):[];i.value=V,s.value=((_=F==null?void 0:F.field)==null?void 0:_.label)||((T=F==null?void 0:F.field)==null?void 0:T.name)||null,R(c.value,v,V,D),a.value=!1}e.watch(()=>[u.value,m.value],()=>{Z()},{immediate:!0});const I=e.computed(()=>"Набори даних"),K=e.computed(()=>i.value.reduce((Y,D)=>Y+D.count,0)),q=e.computed(()=>{var v;const Y=m.value;return((v=f.value.find(F=>F.id===Y))==null?void 0:v.label)||null||s.value||Y||null});function ne(Y){return K.value?`${(Y/K.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var Y,D;(D=(Y=c.value)==null?void 0:Y.remove)==null||D.call(Y)}),(Y,D)=>r.value?(e.openBlock(),e.createElementBlock("div",fd,[e.createElementVNode("div",gd,[e.createElementVNode("div",null,[e.createElementVNode("h2",yd,e.toDisplayString(I.value),1),q.value&&f.value.length===1?(e.openBlock(),e.createElementBlock("p",hd,e.toDisplayString(q.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",xd,[h.value?(e.openBlock(),e.createBlock(Sn,{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:k.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:D[1]||(D[1]=v=>r.value=!1)},[...D[3]||(D[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",bd,[f.value.length>1?(e.openBlock(),e.createElementBlock("div",kd,[e.createElementVNode("div",wd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,v=>(e.openBlock(),e.createElementBlock("label",{key:v.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:v.id,"onUpdate:modelValue":D[2]||(D[2]=F=>y.value=F)},null,8,_d),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(v.label),1)]))),128))])])):e.createCommentVNode("",!0),a.value?(e.openBlock(),e.createElementBlock("div",Ed,"Завантаження…")):i.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Nd,e.toDisplayString(K.value),1),e.createElementVNode("ul",Vd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,v=>(e.openBlock(),e.createElementBlock("li",{key:v.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Bd,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:v.color})},null,4),e.createElementVNode("span",$d,e.toDisplayString(v.label),1)]),e.createElementVNode("div",Sd,[e.createElementVNode("span",vd,e.toDisplayString(v.count),1),e.createElementVNode("span",Ld,e.toDisplayString(ne(v.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Cd,"Дані відсутні"))])])):(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:D[0]||(D[0]=v=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Ad=["title"],Td={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"},Md=["onClick"],Fd=["placeholder"],Dd={class:"absolute inset-y-0 right-2 flex items-center gap-1"},zd={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},Id={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},Pd={class:"max-h-[60vh] overflow-auto"},jd={key:0,class:"divide-y divide-gray-100"},Rd=["onClick"],Od={key:1,class:"px-3 py-3 text-xs text-gray-500"},er="mapSearchAddressHistory",an="search-geom-source",sn="search-geom-layer-fill",Ln="search-geom-layer-line",Ud=12,qd="https://data.softpro.ua/api-user/gis-url-proxy",Hd="https://geo.rv.ua/api-user/dzk.api",Wd="https://nominatim.openstreetmap.org/search",tr=Ce(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(P,O){if(typeof document>"u")return;let H=null;const ae=8,ge=()=>{const Le=String((O==null?void 0:O.value)??"");if(!Le)return;H=document.createElement("div"),H.textContent=Le,Object.assign(H.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(H);const Se=P.getBoundingClientRect();H.style.left=`${Se.right+window.scrollX+ae}px`,H.style.top=`${Se.top+window.scrollY+(Se.height-H.offsetHeight)/2}px`},Ne=()=>{H!=null&&H.parentNode&&H.parentNode.removeChild(H),H=null};P.addEventListener("mouseenter",ge),P.addEventListener("mouseleave",Ne),Object.assign(P,{tooltipRightHandlers:{show:ge,hide:Ne}})},unmounted(P){if(typeof document>"u")return;const O=P.tooltipRightHandlers;O&&(P.removeEventListener("mouseenter",O.show),P.removeEventListener("mouseleave",O.hide))}},o=t,r=tt(),a=e.getCurrentInstance();function i(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function s(){var ae,ge,Ne;const P=(ae=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:ae.$settings,O=(ge=P==null?void 0:P.map)==null?void 0:ge.searchViewbox;if(O)return O;const H=i();return(Ne=H==null?void 0:H.map)==null?void 0:Ne.searchViewbox}function c(){var ge,Ne,Le;const P=(ge=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:ge.$settings,O=(Ne=P==null?void 0:P.map)==null?void 0:Ne.addressSuggest;if(typeof O=="string"&&O.trim())return O.trim();const H=i(),ae=(Le=H==null?void 0:H.map)==null?void 0:Le.addressSuggest;if(typeof ae=="string"&&ae.trim())return ae.trim()}const p=!!c(),g=!!s(),x=e.computed(()=>{const P=["xy","parcel"];return p&&P.push("address"),g&&P.push("nominatim"),P}),l=e.computed(()=>{var H,ae;const P=x.value,O=(ae=(H=o.config)==null?void 0:H.tools)==null?void 0:ae.filter(ge=>P.includes(ge));return O&&O.length?O:P}),y=e.computed(()=>{var P,O;return((O=(P=o.config)==null?void 0:P.placeholder)==null?void 0:O.trim())||"Пошук…"}),d=e.ref(l.value[0]);e.watch(l,P=>{P.includes(d.value)||(d.value=P[0])});const u=e.ref(""),b=e.ref(!1),f=e.ref(null),m=e.ref(null),h=e.ref(null),k=e.ref(null),N=e.ref([]),$=e.ref(null),E=e.ref(!1),w=e.ref([]),S=e.computed(()=>(d.value==="address"||d.value==="nominatim")&&E.value),A=e.computed(()=>{var P;return((P=o.config)==null?void 0:P.addressDebounceMs)??1e3});let R=null;const Z=e.ref(!1),I=e.computed(()=>u.value.trim().length>0?N.value:w.value),K=e.computed(()=>u.value.trim().length?`Знайдено ${N.value.length}`:"Історія пошуку"),q=e.computed(()=>u.value.trim().length?"Нічого не знайдено":"Історія порожня");function ne(){var P,O;if(typeof window>"u")return[];try{const H=(O=(P=window.localStorage)==null?void 0:P.getItem)==null?void 0:O.call(P,er);if(!H)return[];const ae=JSON.parse(H);return Array.isArray(ae)?ae:[]}catch{return[]}}function Y(P){var O,H;typeof window>"u"||(H=(O=window.localStorage)==null?void 0:O.setItem)==null||H.call(O,er,JSON.stringify(P))}function D(P){const H=[P,...w.value.filter(ae=>ae.id!==P.id)].slice(0,10);w.value=H,Y(H)}let v=null;function F(){v&&(v.remove(),v=null)}function V(){var O;const P=(O=r.map)==null?void 0:O.value;P&&(P.getLayer(sn)&&P.removeLayer(sn),P.getLayer(Ln)&&P.removeLayer(Ln),P.getSource(an)&&P.removeSource(an))}function _(P){var ge,Ne,Le,Se;if(!((ge=o.config)!=null&&ge.showMarker)||!P)return;const O=(Ne=r.map)==null?void 0:Ne.value;if(!O)return;V(),z();const H={type:"Feature",geometry:P,properties:{}};O.addSource(an,{type:"geojson",data:H});const ae=((Le=o.config)==null?void 0:Le.geometryColor)||((Se=o.config)==null?void 0:Se.markerColor)||"#3B82F6";O.addLayer({id:sn,type:"fill",source:an,paint:{"fill-color":ae,"fill-opacity":.3}}),O.addLayer({id:Ln,type:"line",source:an,paint:{"line-color":ae,"line-width":1,"line-opacity":1}}),Q(O)}let T=null;function z(){T&&(cancelAnimationFrame(T),T=null)}function Q(P){const H=performance.now();function ae(ge){if(!P.getLayer(sn))return;const Le=(ge-H)%1200/1200,Se=Math.sin(Le*Math.PI),ft=.2+Se*.3,_t=1+Se*1;P.setPaintProperty(sn,"fill-opacity",ft),P.setPaintProperty(Ln,"line-width",_t),T=requestAnimationFrame(ae)}T=requestAnimationFrame(ae)}function se(P,O){var ge,Ne,Le;if(!((ge=o.config)!=null&&ge.showMarker))return;F(),V();const H=(Ne=r.map)==null?void 0:Ne.value;if(!H)return;if(O){_(O);return}const ae=((Le=o.config)==null?void 0:Le.markerColor)||"#3B82F6";v=new maplibregl.Marker({color:ae}).setLngLat([P.lng,P.lat]).addTo(H)}const te=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function oe(){var Ne;if(!k.value)return;const P=k.value.getBoundingClientRect(),O=(Ne=h.value)==null?void 0:Ne.getBoundingClientRect(),H=(O==null?void 0:O.width)??P.width,ae=((O==null?void 0:O.left)??P.left)+window.scrollX,ge=P.bottom+window.scrollY+Ud;te.left=`${ae}px`,te.top=`${ge}px`,te.width=`${H}px`,te.display="block"}const fe=()=>{S.value&&oe()};function he(){R&&(clearTimeout(R),R=null)}e.watch(d,()=>{u.value="",b.value=!1,N.value=[],E.value=!1,he(),Z.value=!1,F(),V()}),e.watch(S,P=>{P?e.nextTick(()=>{oe()}):te.display="none"}),e.watch(u,P=>{if(d.value!=="address"&&d.value!=="nominatim"){N.value=[],he();return}if(!P.trim()){N.value=[],E.value=w.value.length>0,he();return}he(),E.value=!0,R=window.setTimeout(()=>{B(P).catch(O=>{const H=(O==null?void 0:O.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:H})})},A.value)});function ie(P){var ae;const O=[];m.value&&O.push(m.value),P instanceof HTMLElement&&O.push(P);const H=(ae=f.value)==null?void 0:ae.querySelectorAll("li");H==null||H.forEach(ge=>{O.push(ge)}),O.forEach(ge=>{ge.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function Be(P){b.value&&ie(P.target),b.value=!b.value}function We(P,O){ie(O==null?void 0:O.target),d.value=P}function qe(){u.value="",N.value=[],E.value=!1,Z.value=!1,F(),V()}function Re(P){const O=P.target;if(b.value){const H=f.value;H&&!H.contains(O)&&(ie(O),b.value=!1)}if(S.value){const H=$.value,ae=k.value;H&&!H.contains(O)&&(!ae||!ae.contains(O))&&(E.value=!1)}}e.onMounted(()=>{w.value=ne(),window.addEventListener("click",Re,!0),window.addEventListener("scroll",fe,!0),window.addEventListener("resize",fe)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",Re,!0),window.removeEventListener("scroll",fe,!0),window.removeEventListener("resize",fe),he(),F(),V()});function Ge(P){return P==="xy"?"Координати":P==="parcel"?"Кадастр":P==="nominatim"?"Nominatim":"Адресний"}function Ke(P){switch(P){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 wt(P){const O=P.replace(/[,]+/g," ").trim();if(!O)return null;const H=O.split(/\s+/).filter(Boolean);if(H.length<2)return null;const ae=H.slice(0,2).map(Number);if(!ae.every(yt=>Number.isFinite(yt)))return null;let[ge,Ne]=ae,Le=ge,Se=Ne;const ft=yt=>Math.abs(yt)<=90,_t=yt=>Math.abs(yt)<=180;if(!ft(Le)||!_t(Se))if(ft(Se)&&_t(Le))Le=Ne,Se=ge;else return null;return{lat:Le,lng:Se}}function G(P){return((P==null?void 0:P.items)||[]).map((H,ae)=>{var ge,Ne,Le;return{id:String((H==null?void 0:H.id)??ae),title:(H==null?void 0:H.title)||((ge=H==null?void 0:H.address)==null?void 0:ge.label)||"Знайдений обʼєкт",lat:Number((Ne=H==null?void 0:H.position)==null?void 0:Ne.lat),lng:Number((Le=H==null?void 0:H.position)==null?void 0:Le.lng)}})}function ee(P){const O=(P==null?void 0:P.result)||(P==null?void 0:P.data)||P;if(!O)return[];const H=O.geom_centroid;if(!H||!Array.isArray(H.coordinates))return[];const[ae,ge]=H.coordinates;return!Number.isFinite(ge)||!Number.isFinite(ae)?[]:[{id:"parcel",title:O.cadnum||O.cad_num||"Земельна ділянка",lat:ge,lng:ae,geom:O.geom||null}]}function be(P){return(Array.isArray(P==null?void 0:P.features)?P.features:[]).map((H,ae)=>{var yt,vt,nn;const ge=(yt=H==null?void 0:H.geometry)==null?void 0:yt.coordinates,Ne=Number(ge==null?void 0:ge[0]),Le=Number(ge==null?void 0:ge[1]);if(!Number.isFinite(Le)||!Number.isFinite(Ne))return null;const Se=(H==null?void 0:H.properties)||{},ft=((vt=Se==null?void 0:Se.geocoding)==null?void 0:vt.label)||(Se==null?void 0:Se.display_name)||(Se==null?void 0:Se.label)||"Адреса";return{id:String(((nn=Se==null?void 0:Se.geocoding)==null?void 0:nn.place_id)||(Se==null?void 0:Se.place_id)||ae),title:ft,lat:Le,lng:Ne}}).filter(H=>!!H)}function Pe(P){return Number.isFinite(P.lat)&&Number.isFinite(P.lng)}function Te(P){const O=Number(P);return Number.isFinite(O)?O:null}function ke(P){var ge,Ne,Le,Se,ft,_t;const O=Te(P.lng)??Te(P.lon)??Te(P.longitude)??Te(P.x),H=Te(P.lat)??Te(P.latitude)??Te(P.y);if(O!=null&&H!=null)return{lat:H,lng:O};const ae=((ge=P==null?void 0:P.geometry)==null?void 0:ge.coordinates)??((Ne=P==null?void 0:P.geom_centroid)==null?void 0:Ne.coordinates)??((Le=P==null?void 0:P.centroid)==null?void 0:Le.coordinates)??((ft=(Se=P==null?void 0:P.geojson)==null?void 0:Se.geometry)==null?void 0:ft.coordinates)??((_t=P==null?void 0:P.geom)==null?void 0:_t.coordinates);if(Array.isArray(ae)&&ae.length>=2){const yt=Te(ae[0]),vt=Te(ae[1]);if(yt!=null&&vt!=null)return{lat:vt,lng:yt}}return null}function He(P){return(Array.isArray(P==null?void 0:P.data)?P.data:[]).map((H,ae)=>{const ge=ke(H),Ne=String(H.text??H.title??H.label??H.name??H.address??H.display_name??H.id??"Адреса"),Le=String(H.id??H.code??H.value??ae);return ge?{id:Le,title:Ne,...ge}:{id:Le,title:Ne}}).filter(H=>!!(H!=null&&H.title))}function ve(P){const O=c();if(!O)return null;if(O.includes(":name"))return O.replace(":name",encodeURIComponent(P));try{const H=new URL(O,window.location.origin);return P.trim()&&H.searchParams.set("q",P),H.toString()}catch{return O}}async function lt(P){const O=ve(P);if(!O)return[];const H=await fetch(O);if(!H.ok)throw new Error(`HTTP ${H.status}`);const ae=await H.json();return He(ae)}async function W(P){const O=new URL(Wd);O.searchParams.set("format","geojson"),O.searchParams.set("q",P),O.searchParams.set("addressdetails","1"),O.searchParams.set("bounded","1");const H=s();H&&O.searchParams.set("viewbox",H);const ae=await fetch(O.toString());if(!ae.ok)throw new Error(`HTTP ${ae.status}`);const ge=await ae.json();return be(ge)}async function B(P){if(N.value=[],he(),d.value==="address"){if(!c()){ye.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ae=await lt(P);if(!ae.length){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=ae;return}const O=await W(P);if(!O.length){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=O}async function M(P){if(Pe(P)){de(P),D(P);return}ye.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function X(){d.value!=="address"&&d.value!=="nominatim"||u.value.trim().length||w.value.length&&(E.value=!0,e.nextTick(()=>{oe()}))}function le(P){const H=P.replace(/\s+/g,"").split(":");if(console.log(H),H.length!==4)return!1;const ae=[10,2,3,4];return H.every((ge,Ne)=>ge.length===ae[Ne]&&/^\d+$/.test(ge))}function de(P){var H,ae;const O=((H=o.config)==null?void 0:H.zoom)??17;(ae=r.flyTo)==null||ae.call(r,{center:[P.lng,P.lat],zoom:O}),se(P,P.geom),Z.value=!0}async function xe(){const P=u.value.trim();if(P){if(d.value==="xy"){const O=wt(P);if(!O){ye.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}de(O);return}if(d.value==="address"||d.value==="nominatim"){try{await B(P)}catch(O){const H=(O==null?void 0:O.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:H})}return}try{const O=new URL(d.value==="here"?qd:Hd);if(d.value==="here")O.searchParams.set("searchtext",P);else{if(!le(P)){ye.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}O.searchParams.set("cad_num",P)}const H=await fetch(O.toString());if(!H.ok)throw new Error(`HTTP ${H.status}`);const ae=await H.json(),ge=d.value==="here"?G(ae):ee(ae);if(!ge.length)ye.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const Ne=ge[0];de(Ne)}}catch(O){const H=(O==null?void 0:O.message)||"Помилка пошуку";ye.notify({type:"error",title:"Пошук",message:H})}}}return(P,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(xe,["prevent"])},[l.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:f,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:Be},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:m,class:"block w-full truncate",title:Ge(d.value)},[e.createTextVNode(e.toDisplayString(Ge(d.value)),1)],8,Ad)),[[n,Ke(d.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",Td,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,H=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:H,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ae=>We(H,ae)},[e.createTextVNode(e.toDisplayString(Ge(H)),1)],8,Md)),[[n,Ke(H)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:k,class:"relative flex-1 min-w-[140px]"},[d.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Do.VsInputMask),{key:0,modelValue:u.value,"onUpdate:modelValue":O[0]||(O[0]=H=>u.value=H),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":O[1]||(O[1]=H=>u.value=H),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:X},null,42,Fd)),[[e.vModelText,u.value,void 0,{trim:!0}]]),e.createElementVNode("div",Dd,[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:qe},[...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))]),S.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(te)},[e.createElementVNode("div",zd,[e.createElementVNode("span",Id,e.toDisplayString(K.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:O[2]||(O[2]=H=>E.value=!1)}," ✕ ")]),e.createElementVNode("div",Pd,[I.value.length?(e.openBlock(),e.createElementBlock("ul",jd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(I.value,H=>(e.openBlock(),e.createElementBlock("li",{key:H.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ae=>M(H)},e.toDisplayString(H.title),9,Rd))),128))])):(e.openBlock(),e.createElementBlock("div",Od,e.toDisplayString(q.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-d7cf7dd1"]]),Yd="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Zd="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Gd=Ce(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:a}=tt(),i=e.ref(null),s=e.ref(null),c=e.ref(null),p=e.ref(null);let g=null;function x(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function l(E){if(Array.from(document.styleSheets).some(A=>{var R;return(R=A==null?void 0:A.href)==null?void 0:R.includes(E)}))return;const S=document.createElement("link");S.rel="stylesheet",S.href=E,document.head.appendChild(S)}function y(E){return new Promise((w,S)=>{const A=Array.from(document.scripts).find(Z=>Z.src===E);if(A){if(A._loaded)return w();A.addEventListener("load",()=>w()),A.addEventListener("error",()=>S(new Error(`Failed ${E}`)));return}const R=document.createElement("script");R.src=E,R.async=!0,R.onload=()=>{R._loaded=!0,w()},R.onerror=()=>S(new Error(`Failed ${E}`)),document.head.appendChild(R)})}function d(){var w,S,A;const E=window;return E.MapboxExportControl||((w=E.mapboxgl)==null?void 0:w.MapboxExportControl)||((S=E.mapboxglExport)==null?void 0:S.MapboxExportControl)||((A=E.mapboxglExport)==null?void 0:A.default)||null}function u(){const E=document.createElementNS("http://www.w3.org/2000/svg","svg");return E.setAttribute("xmlns","http://www.w3.org/2000/svg"),E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("width","18"),E.setAttribute("height","18"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","2"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((S,A)=>{const R=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(S).forEach(([Z,I])=>{R.setAttribute(Z,I)}),E.appendChild(R)}),E}function b(){const E=document.createElement("button");E.id="print-btn",E.type="button",E.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),E.setAttribute("aria-label","Друк карти");const w=u(),S=document.createElement("span");return S.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),S.textContent="Друк карти",S.setAttribute("aria-hidden","true"),E.appendChild(w),E.appendChild(S),E.addEventListener("click",A=>{A.stopPropagation(),f()}),p.value=E,E}function f(){if(!c.value)return;c.value.style.display==="block"?h():m()}function m(){var E,w,S;c.value&&(c.value.style.display="block",(E=p.value)==null||E.classList.add("scale-105","shadow-xl"),(w=s.value)==null||w.toggleCrosshair(!0),(S=s.value)==null||S.togglePrintableArea(!0),document.addEventListener("click",k))}function h(){var E,w,S;c.value&&(c.value.style.display="none",(E=p.value)==null||E.classList.remove("scale-105","shadow-xl"),(w=s.value)==null||w.toggleCrosshair(!1),(S=s.value)==null||S.togglePrintableArea(!1),document.removeEventListener("click",k))}function k(E){const w=i.value;w&&(E.target&&w.contains(E.target)||h())}function N(E){const w={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};E.querySelectorAll("label, option").forEach(A=>{var Z;const R=(Z=A.textContent)==null?void 0:Z.trim();R&&w[R]&&(A.textContent=w[R])});const S=E.querySelector("button");S&&(S.textContent="Друкувати")}function $(E){const w=E.querySelector(".mapboxgl-export-list");if(!w||!i.value)return;c.value=w;const S=E.querySelector("button");if(S&&(S.style.display="none"),E.style.display="none",!p.value){const R=b();i.value.appendChild(R)}w.style.display="none";const A="_printControlBound";if(!w[A]){const R=Z=>Z.stopPropagation();w.addEventListener("click",R),w.addEventListener("mousedown",R),w[A]=!0}i.value.appendChild(w),N(w)}return e.onMounted(async()=>{await(o==null?void 0:o());const E=n.value;if(!E)return;l(Yd),x();try{await y(Zd)}catch(A){console.warn("[MapPrintControl] load error",A);return}const w=d();if(!w)return;const S=new w({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(s.value=S,typeof S.onAdd=="function"){const A=S.onAdd.bind(S);S.onAdd=R=>{const Z=A(R);return setTimeout(()=>Z&&$(Z),50),Z}}r?r(S,"top-right"):E.addControl(S,"top-right"),g=A=>{A.key==="Escape"&&h()},document.addEventListener("keyup",g)}),e.onBeforeUnmount(()=>{h(),g&&(document.removeEventListener("keyup",g),g=null);const E=n.value;if(s.value)try{a?a(s.value):E==null||E.removeControl(s.value)}catch{}s.value=null}),(E,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),Kd={class:"map-center-control"},Xd=["aria-label"],Qd={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"},It=Ce(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=tt(),a=e.ref(null),i=e.ref(null),s=e.ref(null),c=e.ref(null),p=Xn(),g=e.computed(()=>{var h;return((h=p.value)==null?void 0:h.map)??null});function x(h){if(Array.isArray(h)&&h.length>=2){const[k,N]=h.slice(0,2).map($=>Number($));return Number.isNaN(k)||Number.isNaN(N)?null:[k,N]}if(h&&typeof h=="object"){const k=h,N=k.lng??k.lon??k.long??k.x,$=k.lat??k.y;if(N!=null&&$!=null){const E=Number(N),w=Number($);if(!Number.isNaN(E)&&!Number.isNaN(w))return[E,w]}}if(typeof h=="string"){const k=h.split(",").map(N=>Number(N.trim()));if(k.length>=2&&k.every(N=>!Number.isNaN(N)))return[k[0],k[1]]}return null}function l(h){const k=x(h);k&&(a.value=k)}function y(h){const k=Number(h);Number.isNaN(k)||(i.value=k)}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=x(h)},{immediate:!0}),e.watch(()=>n.targetZoom,h=>{const k=Number(h);c.value=Number.isNaN(k)?null:k},{immediate:!0}),e.watch(()=>{var h;return(h=g.value)==null?void 0:h.center},h=>{l(h)},{immediate:!0}),e.watch(()=>{var h;return(h=g.value)==null?void 0:h.zoom},h=>{y(h)},{immediate:!0});const d=e.computed(()=>{var h;return((h=n.targetLabel)==null?void 0:h.trim())||"Точка"}),u=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 k=h.getCenter();a.value=[k.lng,k.lat]}i.value==null&&(i.value=h.getZoom())}});function f(){const h=o.value;if(!h)return;const k=a.value||(()=>{const $=h.getCenter();return[$.lng,$.lat]})(),N=i.value??h.getZoom();h.flyTo({center:k,zoom:N})}function m(){const h=o.value;if(!h||!s.value)return;const k=c.value??i.value??h.getZoom();h.flyTo({center:s.value,zoom:k})}return(h,k)=>(e.openBlock(),e.createElementBlock("div",Kd,[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(f,["stop"])},[k[0]||(k[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(ce.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":u.value,onClick:e.withModifiers(m,["stop"])},[e.createElementVNode("span",Qd,e.toDisplayString(d.value),1),e.createVNode(e.unref(ce.MapPin),{class:"w-4 h-4"})],8,Xd)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),Jd={class:"cursor-coordinates"},eu={class:"cursor-coordinates__text"},tu=Ce(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Jd,[e.createElementVNode("span",eu,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),nu={class:"minimap__wrapper"},An="minimap-viewport",ou="minimap-viewport-layer",ru=Ce(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var k,N,$,E;const n=t,o=((N=(k=e.getCurrentInstance())==null?void 0:k.appContext.config.globalProperties)==null?void 0:N.$settings)||null,r=zt(($=o==null?void 0:o.map)==null?void 0:$.center)||[30,50],a=e.ref(null),i=e.shallowRef(null),s=(E=n.options)==null?void 0:E.active,c=e.ref(s===void 0?!1:!!s);function p(w,S){return typeof w=="number"&&Number.isFinite(w)?w:S}const g=e.computed(()=>{var Z,I;const w=(Z=n.options)==null?void 0:Z.width,S=(I=n.options)==null?void 0:I.height,A=p(n.width??w,210),R=p(n.height??S,150);return{width:`${A}px`,height:`${R}px`}});function x(){var S,A;const w=(A=(S=n.mapContext)==null?void 0:S.map)==null?void 0:A.value;if(!w||typeof w.getStyle!="function")return null;try{const R=w.getStyle();return R?JSON.parse(JSON.stringify(R)):null}catch{return null}}let l=null;function y(){var Z;if(typeof window>"u"||i.value||!a.value)return;const w=x(),S=r,A={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:S,zoom:((Z=n.options)==null?void 0:Z.zoom)??3,interactive:!1,attributionControl:!1},R={...A,...n.options??{}};R.container=A.container,i.value=new maplibregl.Map(R),i.value.on("load",()=>{u(),f()})}function d(){if(!i.value)return;const w=x();w&&(i.value.once("styledata",()=>{u(),f()}),i.value.setStyle(w))}function u(){if(i.value){if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{u(),f()});return}i.value.getSource(An)||(i.value.addSource(An,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),i.value.addLayer({id:ou,type:"fill",source:An,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 f(){var K,q;const w=(q=(K=n.mapContext)==null?void 0:K.map)==null?void 0:q.value;if(!i.value||!w||!w.getBounds)return;if(typeof i.value.isStyleLoaded=="function"&&!i.value.isStyleLoaded()){i.value.once("styledata",()=>{f()});return}const S=w.getBounds();if(!S)return;const A=S.getNorthEast(),R=S.getSouthWest();if(!A||!R)return;const Z=[[R.lng,A.lat],[A.lng,A.lat],[A.lng,R.lat],[R.lng,R.lat],[R.lng,A.lat]],I=i.value.getSource(An);if(!I){u();return}I.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[Z]},properties:{}})}function m(){var A;const w=n.mapContext,S=(A=w==null?void 0:w.map)==null?void 0:A.value;!(w!=null&&w.on)||!S||(l==null||l(),l=w.on("move",f),f())}async function h(){const w=n.mapContext;if(w){if(typeof w.ready=="function")try{await w.ready()}catch{return}m()}}return e.onMounted(()=>{y(),h()}),e.watch(()=>n.mapContext,()=>{h(),f()}),e.watch(()=>{var w,S;return(S=(w=n.mapContext)==null?void 0:w.map)==null?void 0:S.value},()=>{i.value&&(d(),h())}),e.watch(g,()=>{i.value&&e.nextTick(()=>{var w;return(w=i.value)==null?void 0:w.resize()})}),e.watch(()=>n.options,()=>{var S;l==null||l(),l=null,i.value&&(i.value.remove(),i.value=null);const w=(S=n.options)==null?void 0:S.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,S)=>(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(ce.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",nu,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:a,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(g.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,c.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),lu={class:"pt-1 border-t border-gray-100"},au={class:"space-y-1"},su=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),a=e.ref(null),i=(p,g,x)=>Math.min(Math.max(p,g),x),s=()=>{if(r.value===null||a.value===null||!Number.isFinite(r.value)||!Number.isFinite(a.value))return;const p=i(r.value,-90,90),g=i(a.value,-180,180);o("submit",{lat:p,lng:g}),r.value=null,a.value=null},c=()=>{r.value=null,a.value=null,o("cancel")};return(p,g)=>(e.openBlock(),e.createElementBlock("div",lu,[g[2]||(g[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",au,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":g[0]||(g[0]=x=>r.value=x),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":g[1]||(g[1]=x=>a.value=x),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}," Скасувати ")])])]))}}),iu=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(ce.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),cu=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(ce.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),du=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(ce.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),uu=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Pt(t){return uu.format(t)}function nr(t){return t>=1e3?`${Pt(t/1e3)} км`:`${Pt(t)} м`}const pu={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},mu={key:0,class:"flex-1 flex gap-1"},fu={key:1,class:"flex-1 font-mono text-gray-700"},gu=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,d,u)=>Math.min(Math.max(y,d),u),g=()=>{i.value=!0},x=()=>{if(!Number.isFinite(s.value)||!Number.isFinite(c.value))return;const y=p(s.value,-90,90),d=p(c.value,-180,180);r("update",{id:o.id,coords:{lat:y,lng:d}}),i.value=!1},l=()=>{r("delete",o.id)};return(y,d)=>(e.openBlock(),e.createElementBlock("div",pu,[e.createVNode(e.unref(ce.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),i.value?(e.openBlock(),e.createElementBlock("div",mu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=u=>s.value=u),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":d[1]||(d[1]=u=>c.value=u),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:x}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",fu,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:g}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:l}," ✕ ")]))}}),yu={class:"ruler-control px-3 py-2.5 space-y-2"},hu={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},xu={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"},bu={class:"text-sm font-semibold text-slate-700"},ku={class:"ruler-row"},wu={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},_u={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"},Eu={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},Cu=["onClick"],Nu={class:"flex items-center gap-2 mt-0.5 pl-7"},Vu={key:0,class:"text-base font-semibold text-green-600"},Bu={key:1,class:"text-xs text-gray-400"},$u={class:"ruler-row flex items-center gap-2 cursor-pointer"},Su={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"},vu={class:"text-xs font-medium text-gray-600 flex-1"},Lu={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},Au=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=(u,b)=>{const f=A=>A*Math.PI/180,m=f(b.lat-u.lat),h=f(b.lng-u.lng),k=f(u.lat),N=f(b.lat),$=Math.sin(m/2),E=Math.sin(h/2);return 6371e3*(2*Math.asin(Math.sqrt($*$+Math.cos(k)*Math.cos(N)*E*E)))},c=e.computed(()=>{if(n.points.length<2)return 0;let u=0;for(let b=1;b<n.points.length;b+=1)u+=s(n.points[b-1].coords,n.points[b].coords);return n.isShapeClosed&&n.points.length>=2&&(u+=s(n.points[n.points.length-1].coords,n.points[0].coords)),u}),p=e.computed(()=>c.value>=1e3?`${Pt(c.value/1e3)} км`:`${Pt(c.value)} м`);function g(u){if(u.length<3)return 0;const b=u[0].lat,f=u[0].lng,m=(k,N)=>{const $=(k-b)*110574;return{x:(N-f)*111320*Math.cos(b*Math.PI/180),y:$}};let h=0;for(let k=0;k<u.length;k++){const N=(k+1)%u.length,$=m(u[k].lat,u[k].lng),E=m(u[N].lat,u[N].lng);h+=$.x*E.y-$.y*E.x}return Math.abs(h)*.5}const x=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const u=n.points.map(b=>b.coords);return g(u)}),l=e.computed(()=>x.value>0),y=e.computed(()=>{const u=x.value;if(u===0)return"—";if(r.value==="km2"){const f=u/1e6;return`${Pt(f)} км²`}if(r.value==="ha"){const f=u/1e4;return`${Pt(f)} га`}const b=u>=1?Math.round(u):u;return`${Pt(b)} м²`}),d=e.computed(()=>{const u=n.points.length;return u===1?"1 точка":u>=2&&u<=4?`${u} точки`:`${u} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(u,b)=>(e.openBlock(),e.createElementBlock("div",yu,[e.createElementVNode("button",hu,[e.createElementVNode("span",xu,[e.createVNode(e.unref(ce.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",bu,e.toDisplayString(p.value),1)]),e.createElementVNode("div",ku,[e.createElementVNode("button",wu,[e.createElementVNode("span",_u,[e.createVNode(e.unref(ce.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",Eu,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,(f,m)=>e.createElementVNode("button",{key:f.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",m===0&&"rounded-l-md",m===a.length-1&&"rounded-r-md",r.value===f.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(h=>r.value=f.id,["stop"])},e.toDisplayString(f.label),11,Cu)),64))])]),e.createElementVNode("div",Nu,[l.value?(e.openBlock(),e.createElementBlock("span",Vu,e.toDisplayString(y.value),1)):(e.openBlock(),e.createElementBlock("span",Bu,"—"))])]),e.createElementVNode("div",$u,[e.createElementVNode("span",Su,[e.createVNode(e.unref(ce.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",vu,e.toDisplayString(d.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",Lu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(f,m)=>(e.openBlock(),e.createBlock(gu,{key:f.id,id:f.id,index:m+1,coords:f.coords,onUpdate:b[0]||(b[0]=h=>u.$emit("update-point",h)),onDelete:h=>u.$emit("delete-point",f.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),Tu={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},Mu={class:"flex items-start gap-2"},Fu=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Tu,[e.createElementVNode("div",Mu,[e.createVNode(e.unref(ce.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))])]))}}),Du={class:"space-y-1.5"},zu={class:"space-y-1 max-h-40 overflow-y-auto"},Iu={class:"text-gray-700"},Pu={class:"font-semibold text-slate-800"},ju=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(i,s){const c=d=>d*Math.PI/180,p=c(s.lat-i.lat),g=c(s.lng-i.lng),x=c(i.lat),l=c(s.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(p/2)**2+Math.cos(x)*Math.cos(l)*Math.sin(g/2)**2)))}function r(i){return nr(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 g=o(s[c].coords,s[p].coords);i.push({from:c+1,to:p+1,label:r(g)})}return i});return(i,s)=>(e.openBlock(),e.createElementBlock("div",Du,[s[0]||(s[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",zu,[(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",Iu,"Точка "+e.toDisplayString(c.from)+" → Точка "+e.toDisplayString(c.to),1),e.createElementVNode("span",Pu,e.toDisplayString(c.label),1)]))),128))])]))}}),Ru={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Ou={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Uu={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},qu={class:"flex items-center gap-2"},Hu={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Wu={class:"flex border-b border-gray-200"},Yu={key:1,class:"px-3 py-2.5"},Zu={key:1,class:"text-xs text-gray-500"},Gu={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Ku={class:"flex gap-1.5"},Xu=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 g(Z){p.value=Z,r("tab-change",Z)}e.onMounted(()=>{r("tab-change",p.value)});const x=e.computed(()=>a.value.length>=3&&!c.value);let l=1;const y=()=>a.value.map(Z=>({id:Z.id,coords:{...Z.coords}})),d=()=>{a.value.length<3&&c.value&&(c.value=!1,r("shape-closed-change",!1)),r("points-change",y())},u=()=>{const Z=l;return l+=1,Z},b=Z=>{a.value=[...a.value,{id:u(),coords:{lat:Z.lat,lng:Z.lng}}],d()},f=({id:Z,coords:I})=>{const K=a.value.findIndex(ne=>ne.id===Z);if(K===-1)return;const q=[...a.value];q[K]={id:Z,coords:{...I}},a.value=q,d()},m=Z=>{a.value=a.value.filter(I=>I.id!==Z),d()},h=()=>{a.value=[],c.value&&(c.value=!1,r("shape-closed-change",!1)),d()},k=Z=>{f(Z)},N=Z=>{m(Z)},$=()=>{s.value=!0,r("add-request")},E=Z=>{b(Z),s.value=!1},w=()=>{s.value=!1},S=()=>{x.value&&(c.value=!0,r("complete"),r("shape-closed-change",!0))},A=Z=>{const I=(Z??[]).map(K=>({id:K.id??u(),coords:{...K.coords}}));a.value=I,I.length===0?l=1:l=Math.max(...I.map(K=>K.id))+1,d()},R=()=>{h(),s.value=!1,r("close")};return n({addPoint:b,setPoints:A,clearPoints:h}),(Z,I)=>(e.openBlock(),e.createElementBlock("div",Ru,[e.createElementVNode("div",Ou,[e.createElementVNode("div",Uu,[e.createElementVNode("div",qu,[e.createElementVNode("div",Hu,[e.createVNode(e.unref(ce.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),I[2]||(I[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:R},[e.createVNode(e.unref(ce.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Wu,[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:I[0]||(I[0]=K=>g("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:I[1]||(I[1]=K=>g("topoint"))}," До точки ",2)]),p.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[i.value?(e.openBlock(),e.createBlock(Au,{key:1,points:a.value,"is-shape-closed":c.value,onUpdatePoint:k,onDeletePoint:N},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(Fu,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",Yu,[i.value?(e.openBlock(),e.createBlock(ju,{key:0,points:a.value,"is-shape-closed":c.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",Zu,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",Gu,[e.createElementVNode("div",Ku,[s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(iu,{key:0,onClick:$})),x.value?(e.openBlock(),e.createBlock(du,{key:1,onClick:S})):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createBlock(su,{key:0,onSubmit:E,onCancel:w})):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createBlock(cu,{key:1,onClick:h})):e.createCommentVNode("",!0)])])]))}}),kt="ruler-points",Ct="ruler-line",Nt="ruler-polygon",Vt="ruler-segments",Qu=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(f,m){const h=S=>S*Math.PI/180,k=h(m.lat-f.lat),N=h(m.lng-f.lng),$=h(f.lat),E=h(m.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(k/2)**2+Math.cos($)*Math.cos(E)*Math.sin(N/2)**2)))}function o(f){return nr(f)}const r=t,{map:a,ready:i}=tt();function s(){return{type:"FeatureCollection",features:[]}}function c(f,m,h){const k=h??"general",N=[];let $=0;N.push(0);for(let E=1;E<f.length;E++)$+=n(f[E-1].coords,f[E].coords),N.push($);return m&&f.length>=2&&($+=n(f[f.length-1].coords,f[0].coords)),{type:"FeatureCollection",features:f.map((E,w)=>{const S=k==="general"?w===0?"0":o(N[w]):w===0?"0":o(n(f[w-1].coords,f[w].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[E.coords.lng,E.coords.lat]},properties:{id:E.id,index:w+1,label:S}}})}}function p(f,m){if(f.length<2)return s();const h=[];for(let k=0;k<f.length;k++){const N=k===f.length-1&&m?0:k+1;if(N>=f.length)break;const $=f[k].coords,E=f[N].coords,w=n($,E);h.push({type:"Feature",geometry:{type:"LineString",coordinates:[[$.lng,$.lat],[E.lng,E.lat]]},properties:{distance:o(w)}})}return{type:"FeatureCollection",features:h}}function g(f,m){if(f.length<2)return s();const h=f.map(k=>[k.coords.lng,k.coords.lat]);return m&&h.push(h[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:h},properties:{}}]}}function x(f){if(f.length<3)return s();const m=f.map(h=>[h.coords.lng,h.coords.lat]);return m.push(m[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[m]},properties:{}}]}}let l=!1;function y(f){f.getSource(kt)||(f.addSource(kt,{type:"geojson",data:s()}),f.addLayer({id:`${kt}-circle`,type:"circle",source:kt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),f.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}})),f.getSource(Vt)||(f.addSource(Vt,{type:"geojson",data:s()}),f.addLayer({id:`${Vt}-labels`,type:"symbol",source:Vt,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}})),f.getSource(Ct)||(f.addSource(Ct,{type:"geojson",data:s()}),f.addLayer({id:`${Ct}-layer`,type:"line",source:Ct,paint:{"line-color":"#3b82f6","line-width":2}})),f.getSource(Nt)||(f.addSource(Nt,{type:"geojson",data:s()}),f.addLayer({id:`${Nt}-layer`,type:"fill",source:Nt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),l=!0}function d(f){if(f){try{f.getLayer(`${Nt}-layer`)&&f.removeLayer(`${Nt}-layer`),f.getSource(Nt)&&f.removeSource(Nt),f.getLayer(`${Ct}-layer`)&&f.removeLayer(`${Ct}-layer`),f.getSource(Ct)&&f.removeSource(Ct),f.getLayer(`${Vt}-labels`)&&f.removeLayer(`${Vt}-labels`),f.getSource(Vt)&&f.removeSource(Vt),f.getLayer(`${kt}-labels`)&&f.removeLayer(`${kt}-labels`),f.getLayer(`${kt}-circle`)&&f.removeLayer(`${kt}-circle`),f.getSource(kt)&&f.removeSource(kt)}catch{}l=!1}}function u(f){if(!f)return;const m=f.getSource(kt),h=f.getSource(Ct),k=f.getSource(Nt),N=f.getSource(Vt),$=r.points,E=r.labelMode??"general";m&&m.setData(c($,r.isShapeClosed,E)),h&&h.setData(g($,r.isShapeClosed)),k&&k.setData(x($)),N&&N.setData(E==="topoint"?p($,r.isShapeClosed):s())}function b(){i().then(()=>{const f=a.value;f&&(l||y(f),u(f))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>b(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{i().then(()=>d(a.value))}),(f,m)=>null}}),Ju={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},ep={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},tp={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},np={class:"flex items-center gap-2"},op=["disabled"],rp={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},lp={class:"text-sm font-mono text-slate-700"},ap={class:"flex items-center gap-2 shrink-0"},sp={key:0,class:"text-xs font-[100] text-gray-500"},ip=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 g(){r("close")}function x(){o.position!=null&&r("recenter")}return(l,y)=>(e.openBlock(),e.createElementBlock("div",Ju,[e.createElementVNode("div",ep,[e.createElementVNode("div",tp,[e.createElementVNode("div",np,[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:x},[e.createVNode(e.unref(ce.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,op),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:g},[e.createVNode(e.unref(ce.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",rp,[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",lp,[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",ap,[s.value?(e.openBlock(),e.createElementBlock("span",sp," Скопійовано! ")):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(ce.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),Bt="geolocation-marker",cp=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=tt();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(Bt)||(l.addSource(Bt,{type:"geojson",data:i()}),l.addLayer({id:`${Bt}-circle`,type:"circle",source:Bt,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),a=!0)}function p(l){try{l.getLayer(`${Bt}-circle`)&&l.removeLayer(`${Bt}-circle`),l.getSource(Bt)&&l.removeSource(Bt)}catch{}a=!1}function g(l){const y=l.getSource(Bt);if(y){if(n.position==null){y.setData(i());return}y.setData({type:"FeatureCollection",features:[s(n.position)]})}}function x(){r().then(()=>{const l=o.value;if(l){if(n.position==null){a&&p(l);return}a||c(l),g(l)}})}return e.watch(()=>n.position,()=>x(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>p(o.value))}),(l,y)=>null}}),dp={class:"animate-slide-up"},up={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},pp={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},mp={class:"flex items-center gap-2"},fp={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},gp={class:"px-3 py-2.5 border-b border-gray-200"},yp={class:"flex gap-1 flex-nowrap"},hp=["title","onClick"],xp={class:"px-3 py-2.5 border-b border-gray-200"},bp={class:"flex items-center gap-4"},kp={class:"flex items-center gap-2 cursor-pointer shrink-0"},wp={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},_p={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Ep={class:"flex items-center gap-1.5"},Cp=Ce(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:ce.Pen,title:"Олівець"},{id:"line",icon:ce.Minus,title:"Лінія"},{id:"rect",icon:ce.Square,title:"Прямокутник"},{id:"circle",icon:ce.Circle,title:"Коло"},{id:"polygon",icon:ce.Pentagon,title:"Полігон"},{id:"paint",icon:ce.PaintBucket,title:"Балончик"},{id:"eraser",icon:ce.Eraser,title:"Стирачка"}],i=e.ref("pen"),s=e.ref("#2563eb"),c=e.ref(3),p=()=>r("update:stroke-color",s.value),g=()=>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 x(){r("close")}function l(){r("undo")}function y(){r("finish-polygon")}function d(){r("clear")}function u(){r("download")}return n({tool:i,strokeColor:s,strokeWidth:c}),(b,f)=>(e.openBlock(),e.createElementBlock("div",dp,[e.createElementVNode("div",up,[e.createElementVNode("div",pp,[e.createElementVNode("div",mp,[e.createElementVNode("div",fp,[e.createVNode(e.unref(ce.Pen),{size:14,"stroke-width":2,class:"text-white"})]),f[2]||(f[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:x},[e.createVNode(e.unref(ce.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",gp,[f[3]||(f[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",yp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(a,m=>e.createElementVNode("button",{key:m.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",i.value===m.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:m.title,onClick:h=>i.value=m.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(m.icon),{size:16,"stroke-width":2}))],10,hp)),64))])]),e.createElementVNode("section",xp,[f[6]||(f[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",bp,[e.createElementVNode("label",kp,[f[4]||(f[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[0]||(f[0]=m=>s.value=m),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",wp,[f[5]||(f[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":f[1]||(f[1]=m=>c.value=m),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:g},null,544),[[e.vModelText,c.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",_p,[e.createElementVNode("div",Ep,[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(ce.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:d},[e.createVNode(e.unref(ce.Trash2),{size:14,"stroke-width":2}),f[7]||(f[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(ce.Pentagon),{size:14,"stroke-width":2}),f[8]||(f[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:u},[e.createVNode(e.unref(ce.Download),{size:14,"stroke-width":2}),f[9]||(f[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),Np=Ce(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)),g=e.computed(()=>{const _=p.value*2;return{width:`${_}px`,height:`${_}px`,left:`${i.value.x}px`,top:`${i.value.y}px`,marginLeft:`-${p.value}px`,marginTop:`-${p.value}px`}}),{ready:x}=tt(),l=e.ref(!1),y=e.ref([]),d=e.ref([]);let u=0,b=0,f=0,m=0,h=null;function k(){const _=r.value,T=a.value,z=o.value;if(!_||!z)return;const Q=z.parentElement;if(!Q)return;const se=Q.clientWidth,te=Q.clientHeight;if(se<=0||te<=0)return;const oe=window.devicePixelRatio||1;_.width=se*oe,_.height=te*oe,_.style.width=`${se}px`,_.style.height=`${te}px`;const fe=_.getContext("2d");if(fe&&fe.scale(oe,oe),T){T.width=se*oe,T.height=te*oe,T.style.width=`${se}px`,T.style.height=`${te}px`;const he=T.getContext("2d");he&&he.scale(oe,oe)}}function N(_){const T=r.value;if(!T)return{x:0,y:0};const z=T.getBoundingClientRect();return{x:_.clientX-z.left,y:_.clientY-z.top}}function $(){const _=r.value;return _?_.getContext("2d"):null}function E(){const _=a.value;return _?_.getContext("2d"):null}function w(){const _=a.value;if(!_)return;const T=window.devicePixelRatio||1,z=_.getContext("2d");z&&z.clearRect(0,0,_.width/T,_.height/T)}function S(){const _=E();if(_){if(w(),_.globalCompositeOperation="source-over",_.strokeStyle=c.strokeColor,_.lineWidth=c.strokeWidth,_.lineCap="round",_.lineJoin="round",c.tool==="line")_.beginPath(),_.moveTo(u,b),_.lineTo(f,m),_.stroke();else if(c.tool==="rect"){const T=Math.min(u,f),z=Math.min(b,m),Q=Math.abs(f-u),se=Math.abs(m-b);_.strokeRect(T,z,Q,se)}else if(c.tool==="circle"){const T=Math.sqrt((f-u)**2+(m-b)**2);_.beginPath(),_.arc(u,b,Math.max(T,1),0,2*Math.PI),_.stroke()}else if(c.tool==="polygon"&&y.value.length>0){const T=y.value;_.beginPath(),_.moveTo(T[0].x,T[0].y);for(let z=1;z<T.length;z++)_.lineTo(T[z].x,T[z].y);_.lineTo(f,m),_.stroke()}}}function A(_){_.strokeStyle=c.strokeColor,_.lineWidth=c.strokeWidth,_.lineCap="round",_.lineJoin="round"}function R(){const _=r.value;if(!_)return;const T=_.getContext("2d");if(!T)return;const z=T.getImageData(0,0,_.width,_.height);d.value=[...d.value.slice(-19),z]}function Z(_){if(!r.value)return;const{x:T,y:z}=N(_);u=T,b=z,f=T,m=z;const Q=$();if(Q){if(c.tool==="pen"||c.tool==="eraser"){R(),l.value=!0,c.tool==="eraser"?(Q.globalCompositeOperation="destination-out",Q.lineWidth=Math.max(c.strokeWidth*3,12)):(Q.globalCompositeOperation="source-over",A(Q)),Q.beginPath(),Q.moveTo(T,z);return}if(c.tool==="paint"){R(),l.value=!0,Q.globalCompositeOperation="source-over",Q.fillStyle=c.strokeColor,ne(Q,T,z);return}if(c.tool==="line"||c.tool==="rect"||c.tool==="circle"){R(),l.value=!0;return}if(c.tool==="polygon"){y.value=[...y.value,{x:T,y:z}],f=T,m=z,S();return}}}function I(_){const{x:T,y:z}=N(_);f=T,m=z,c.tool==="eraser"&&(i.value={x:_.clientX,y:_.clientY},s.value=!0);const Q=$();if(Q){if(c.tool==="pen"&&l.value){Q.globalCompositeOperation="source-over",A(Q),Q.lineTo(T,z),Q.stroke();return}if(c.tool==="eraser"&&l.value){Q.globalCompositeOperation="destination-out",Q.lineWidth=Math.max(c.strokeWidth*3,12),Q.lineTo(T,z),Q.stroke();return}if(c.tool==="paint"&&l.value){Q.globalCompositeOperation="source-over",Q.fillStyle=c.strokeColor,ne(Q,T,z);return}l.value&&(c.tool==="line"||c.tool==="rect"||c.tool==="circle")&&S(),c.tool==="polygon"&&y.value.length>0&&S()}}function K(){s.value=!1}function q(){c.tool==="polygon"&&D()}function ne(_,T,z){const Q=Math.max(c.strokeWidth*2.5,8),se=12+Math.floor(c.strokeWidth);for(let te=0;te<se;te++){const oe=Math.random()*2*Math.PI,fe=Q*Math.random(),he=T+Math.cos(oe)*fe,ie=z+Math.sin(oe)*fe,Be=1+Math.random()*2;_.beginPath(),_.arc(he,ie,Be,0,2*Math.PI),_.fill()}}function Y(){if(!l.value)return;const _=$();if(!_){l.value=!1;return}if(c.tool==="paint"){w(),l.value=!1,_.globalCompositeOperation="source-over";return}if(c.tool==="line")_.globalCompositeOperation="source-over",A(_),_.beginPath(),_.moveTo(u,b),_.lineTo(f,m),_.stroke();else if(c.tool==="rect"){_.globalCompositeOperation="source-over",A(_);const T=Math.min(u,f),z=Math.min(b,m),Q=Math.abs(f-u),se=Math.abs(m-b);_.strokeRect(T,z,Q,se)}else if(c.tool==="circle"){_.globalCompositeOperation="source-over",A(_);const T=Math.sqrt((f-u)**2+(m-b)**2);_.beginPath(),_.arc(u,b,Math.max(T,1),0,2*Math.PI),_.stroke()}w(),l.value=!1,_.globalCompositeOperation="source-over"}function D(){const _=$(),T=y.value;if(!_||T.length<2){y.value=[],w();return}R(),_.globalCompositeOperation="source-over",A(_),_.beginPath(),_.moveTo(T[0].x,T[0].y);for(let z=1;z<T.length;z++)_.lineTo(T[z].x,T[z].y);_.closePath(),_.stroke(),y.value=[],w(),_.globalCompositeOperation="source-over"}function v(){const _=r.value;if(!_||d.value.length===0)return;const T=_.getContext("2d");if(!T)return;const z=d.value[d.value.length-1];d.value=d.value.slice(0,-1),T.putImageData(z,0,0)}function F(){const _=r.value;if(!_)return;const T=_.getContext("2d");if(!T)return;const z=window.devicePixelRatio||1;T.clearRect(0,0,_.width/z,_.height/z),y.value=[],d.value=[],w()}function V(){return r.value}return e.watch(()=>c.tool,(_,T)=>{T==="polygon"&&_!=="polygon"&&(y.value=[],w())}),e.onMounted(()=>{x().then(()=>{var T;k();const _=(T=o.value)==null?void 0:T.parentElement;_&&typeof ResizeObserver<"u"&&(h=new ResizeObserver(k),h.observe(_))})}),e.onBeforeUnmount(()=>{h==null||h.disconnect(),h=null}),n({clear:F,getCanvas:V,finishPolygon:D,undo:v,canUndo:()=>d.value.length>0}),(_,T)=>(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:I,onMouseup:Y,onDblclick:q,onMouseleave:T[0]||(T[0]=()=>{K(),Y()})},[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(g.value)},null,4),[[e.vShow,t.tool==="eraser"&&s.value]])],34))}}),[["__scopeId","data-v-ed2688bc"]]),or=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var y,d;const n=t,o=((d=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:d.$settings)||null,{map:r,ready:a}=tt();let i=null;function s(){i==null||i.remove(),i=null}function c(u){if(!u)return null;if(typeof u=="string")try{u=JSON.parse(u)}catch{return null}return u.type==="FeatureCollection"?u:u.type==="Feature"?{type:"FeatureCollection",features:[u]}:u.type&&Array.isArray(u.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:u,properties:{}}]}:Array.isArray(u.features)?{type:"FeatureCollection",features:u.features}:u.geometry?c(u.geometry):null}function p(u){var m,h,k;return{type:"line",color:"#8e4484",width:2,opacity:((((k=(h=(m=u==null?void 0:u.features)==null?void 0:m[0])==null?void 0:h.geometry)==null?void 0:k.type)||"").includes("Polygon"),.95)}}async function g(u){const b=await fetch(u);if(!b.ok)throw new Error(String(b.status));return b.json()}async function x(u,b){if(u){const f=/^https?:\/\//.test(u)?u:new URL(u,location.origin).toString(),m=await g(f).catch(()=>null),h=c(m);if(h)return h}if(b){const f=await g(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(b)}`).catch(()=>null),m=c(f);if(m)return m}return null}async function l(){var m,h,k,N;if(!n.layerId||!r.value){s();return}typeof a=="function"&&await a().catch(()=>{});const u=n.boundary??((m=n.settingsMap)==null?void 0:m.boundary)??((h=o==null?void 0:o.map)==null?void 0:h.boundary)??null,b=n.katottg??((k=n.settingsMap)==null?void 0:k.katottg)??((N=o==null?void 0:o.map)==null?void 0:N.katottg)??null;if(!u&&!b){s();return}const f=await x(u,b);if(!f){s();return}s(),i=Ue(`${n.layerId}-boundary`,{source:{type:"geojson",data:f},style:p(f)},r)}return e.watch(()=>{var u,b;return[n.layerId,n.boundary,n.katottg,(u=n.settingsMap)==null?void 0:u.boundary,(b=n.settingsMap)==null?void 0:b.katottg,r.value]},()=>{l()},{immediate:!0}),e.onBeforeUnmount(s),(u,b)=>null}}),Vp={key:2,class:"absolute bottom-16 right-4 z-[100] pointer-events-auto"},Bp={key:3,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},$p={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Sp=["aria-label","disabled"],vp={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"},Lp=["aria-label"],Ap={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"},Tp=["aria-label"],Mp={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"},Fp={class:"map-widget__overlay-grid"},Dp={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},zp={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Ip={class:"map-widget__stack"},Pp={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},jp={class:"map-widget__stack map-widget__stack--bottom"},Rp={key:0,class:"map-widget__state"},Op={key:1,class:"map-widget__state map-widget__state--error"},Tn=Ce(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var Hn,_n,Wn,Yn;const n=t,o=Fe.useRoute(),r=Fe.useRouter(),a=e.ref(null),i=e.ref({}),s=e.ref(null),c=e.ref(!1),p=e.ref(null),g=e.ref(!1),x=e.ref([]),l=e.ref(null),y=e.computed(()=>l.value==="ruler"),d=e.computed(()=>l.value==="draw"),u=e.computed(()=>l.value==="geolocation"),b=e.ref("general"),f=e.ref(null),m=e.ref(null),h=e.ref(null),k=e.ref("pen"),N=e.ref("#2563eb"),$=e.ref(3),E=e.ref([]),w=e.ref(!1),S=e.ref(null),A=e.ref(!1),R=e.ref(null),Z=e.computed(()=>n.id||"main"),I=e.computed(()=>{var j,J;return{height:((j=n.height)==null?void 0:j.trim())||((J=i.value)==null?void 0:J.height)||"calc(100vh - 65px)"}}),K=e.computed(()=>{var j;return((j=i.value)==null?void 0:j.name)??null}),q=e.computed(()=>{var j;return((j=i.value)==null?void 0:j.description)??null}),ne=e.computed(()=>{var j;return he((j=i.value)==null?void 0:j.maps)}),Y=e.computed(()=>{var J,_e;const j=((J=i.value)==null?void 0:J.minZoom)??((_e=i.value)==null?void 0:_e.minzoom)??null;return typeof j=="number"?j:null}),D=e.computed(()=>{var J,_e;const j=((J=i.value)==null?void 0:J.maxZoom)??((_e=i.value)==null?void 0:_e.maxzoom)??null;return typeof j=="number"?j:typeof n.maxZoom=="number"?n.maxZoom:20}),v=e.ref(null),F=e.computed(()=>{if(!v.value)return null;const{lng:j,lat:J}=v.value;return`${J.toFixed(6)}, ${j.toFixed(6)}`}),V=e.computed(()=>{var j;return((j=a.value)==null?void 0:j.ctx)??null}),_=e.computed(()=>{var j;return((j=i.value)==null?void 0:j.minimap)??null});function T(j){if(!j||typeof j!="object")return j;const J=zt(j.center);return J?{...j,center:J}:j}const z=((_n=(Hn=e.getCurrentInstance())==null?void 0:Hn.appContext.config.globalProperties)==null?void 0:_n.$settings)||null;function Q(j){if(j==null)return null;const J=Number(typeof j=="string"?j.trim():j);return Number.isFinite(J)?J:null}const se=zt((Wn=z==null?void 0:z.map)==null?void 0:Wn.center),te=Q((Yn=z==null?void 0:z.map)==null?void 0:Yn.zoom),oe=e.computed(()=>{const j=(z==null?void 0:z.map)||null,J=(j==null?void 0:j.boundary)??null,_e=(j==null?void 0:j.katottg)??null;return!J&&!_e?null:{boundary:J,katottg:_e}});function fe(j){return typeof j=="string"&&j.trim()?j.trim().toLowerCase():"top-left"}function he(j){return Array.isArray(j)?j:j&&typeof j=="object"?Object.values(j).filter(Boolean):[]}const ie=e.computed(()=>{var j;return he((j=i.value)==null?void 0:j.widgets)}),Be=e.computed(()=>ie.value.some(j=>(j==null?void 0:j.type)==="basemaps")),We=["left","right"],qe=e.computed(()=>{const j={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},J={"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 ie.value.forEach(_e=>{const $e=fe(_e.position),ue=J[$e]??{side:"left",align:"top"};j[ue.side][ue.align].push(_e)}),j});function Re(j){return Array.isArray(j)?j[0]??null:typeof j=="string"?j:null}async function Ge(){var J;await e.nextTick();const j=(J=a.value)==null?void 0:J.ctx;return j?(j.ready&&await j.ready(),j):null}function Ke(){var j,J,_e;return((_e=(J=(j=a.value)==null?void 0:j.ctx)==null?void 0:J.map)==null?void 0:_e.value)??null}function wt(){const j=Ke();if(!j)return null;const J=j.getCenter();return{z:j.getZoom().toFixed(2),x:J.lng.toFixed(5),y:J.lat.toFixed(5)}}async function G(){var _e;const j=await Ge(),J=(_e=j==null?void 0:j.map)==null?void 0:_e.value;J&&(typeof Y.value=="number"&&J.setMinZoom(Y.value),typeof D.value=="number"&&J.setMaxZoom(D.value))}async function ee(){var ue;if(s.value)return;const j=await Ge(),J=(ue=j==null?void 0:j.map)==null?void 0:ue.value;if(!J)return;const _e=J.getCenter(),$e=J.getZoom();s.value={center:[_e.lng,_e.lat],zoom:$e}}function be(){if(ve.value)return;const j=wt();if(!j)return;const J=Re(o.query.x),_e=Re(o.query.y),$e=Re(o.query.z);J===j.x&&_e===j.y&&$e===j.z||(lt.value=j,r.replace({query:{...o.query,...j}}).catch(()=>{}))}function Pe(j,J,_e=1e-6){return Math.abs(j-J)<=_e}async function Te(){var je;if(W())return;const j=await Ge(),J=(je=j==null?void 0:j.map)==null?void 0:je.value;if(!j||!J)return;const _e=parseFloat(Re(o.query.x)??""),$e=parseFloat(Re(o.query.y)??""),ue=parseFloat(Re(o.query.z)??""),De=!Number.isNaN(_e),Ae=!Number.isNaN($e),pe=!Number.isNaN(ue);let Me=!1;ve.value=!0;try{if(De&&Ae){const ze=J.getCenter();(!Pe(ze.lng,_e)||!Pe(ze.lat,$e))&&(J.setCenter([_e,$e]),Me=!0)}if(pe){const ze=J.getZoom();Pe(ze,ue,.001)||(J.setZoom(ue),Me=!0)}(!De||!Ae||!pe||Me)&&be()}finally{ve.value=!1}}let ke=null,He=null;const ve=e.ref(!1),lt=e.ref(null);function W(){const j=lt.value;if(!j)return!1;const J=Re(o.query.x),_e=Re(o.query.y),$e=Re(o.query.z);return J===j.x&&_e===j.y&&$e===j.z?(lt.value=null,!0):!1}function B(j){const J=j==null?void 0:j.lngLat;J&&(v.value={lng:J.lng,lat:J.lat})}let M=null;function X(j){typeof window>"u"||window.dispatchEvent(new CustomEvent(vn,{detail:j}))}function le(j){if(!j)return null;if(typeof j=="string")try{return JSON.parse(j)}catch{return null}return j}async function de(j){const J=await fetch(`/api/map-format?${j.toString()}`);if(!J.ok)throw new Error(`API returned ${J.status}`);return J.json()}function xe(){const j=Ke();return j?Object.entries(Ue()).filter(([,J])=>{var ze,Xe,ut,Oe,it,Je,et;const _e=(Xe=(ze=J==null?void 0:J.opts)==null?void 0:ze.source)==null?void 0:Xe.type,$e=(Oe=(ut=J==null?void 0:J.opts)==null?void 0:ut.layer)==null?void 0:Oe.type,ue=(((it=J==null?void 0:J.opts)==null?void 0:it.service)||"").toString().toLowerCase(),De=Array.isArray(J==null?void 0:J.card)?J.card.length>0:!!(J!=null&&J.card),Ae=Array.isArray(J==null?void 0:J.popup)?J.popup.length>0:!!(J!=null&&J.popup),pe=(Je=J==null?void 0:J.ids)==null?void 0:Je.sourceId;if(_e!=="raster"&&$e!=="raster"||ue!=="cartocss"&&!De&&!Ae||!pe||!j.getSource(pe))return!1;const je=(((et=j.getStyle())==null?void 0:et.layers)||[]).filter(pt=>pt.source===pe);return je.length?je.some(pt=>{try{return j.getLayoutProperty(pt.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([J])=>J):[]}function P(j){const J=Ke();return J?(J.queryRenderedFeatures(j==null?void 0:j.point)||[]).filter($e=>{var pe,Me,je,ze,Xe;if(!((pe=$e==null?void 0:$e.properties)!=null&&pe.id))return!1;const ue=Ue($e.source);if(!ue)return!1;const De=(je=(Me=ue==null?void 0:ue.opts)==null?void 0:Me.source)==null?void 0:je.type,Ae=(Xe=(ze=ue==null?void 0:ue.opts)==null?void 0:ze.layer)==null?void 0:Xe.type;return De!=="raster"&&Ae!=="raster"}):[]}async function O(j){var De,Ae,pe,Me,je;const J=(De=j==null?void 0:j.lngLat)==null?void 0:De.lng,_e=(Ae=j==null?void 0:j.lngLat)==null?void 0:Ae.lat;if(typeof J!="number"||typeof _e!="number")return[];const $e=xe();if(!$e.length)return[];const ue=[];for(let ze=0;ze<$e.length;ze+=1){const Xe=$e[ze],ut=new URLSearchParams({layer:Xe,lat:_e.toFixed(6),lng:J.toFixed(6)});try{const Oe=await de(ut),it=le(((pe=Oe==null?void 0:Oe.data)==null?void 0:pe.geom)??(Oe==null?void 0:Oe.geom)??null),Je=((Me=Oe==null?void 0:Oe.data)==null?void 0:Me.id)??(Oe==null?void 0:Oe.id);if(Je!=null){const et=await de(new URLSearchParams({layer:Xe,id:String(Je)})),pt=typeof(et==null?void 0:et.html)=="string"?et.html:null,Zn=le(((je=et==null?void 0:et.data)==null?void 0:je.geom)??(et==null?void 0:et.geom)??null);if(pt||Zn){ue.push({html:pt,geometry:Zn??it,infoToken:`external:${Xe},${String(Je)}`});continue}}Ko({html:Oe==null?void 0:Oe.html})&&ue.push({html:Oe.html,geometry:it,infoToken:null})}catch{}}return ue}async function H(j){var ue;const J=j==null?void 0:j.lngLat;x.value.includes("ruler")&&y.value&&J&&((ue=f.value)==null||ue.addPoint({lat:J.lat,lng:J.lng}));const _e=P(j),$e=await O(j).catch(()=>[]);X({features:_e,externalItems:$e})}function ae(){var j;l.value==="ruler"?(E.value=[],w.value=!1,(j=f.value)==null||j.clearPoints(),l.value=null):(S.value=null,R.value=null,l.value="ruler")}function ge(){l.value=null,E.value=[],w.value=!1}function Ne(){l.value==="draw"?l.value=null:(S.value=null,R.value=null,l.value="draw")}function Le(){if(l.value==="geolocation"&&S.value!=null){ft();return}if(R.value=null,A.value=!0,!navigator.geolocation){R.value="Геолокація не підтримується браузером",A.value=!1;return}navigator.geolocation.getCurrentPosition(j=>{const J=j.coords.latitude,_e=j.coords.longitude;S.value={lat:J,lng:_e},R.value=null,A.value=!1,l.value="geolocation",Ge().then($e=>{$e!=null&&$e.flyTo&&$e.flyTo({center:[_e,J],zoom:15})})},()=>{R.value="Не вдалося визначити місце розташування",A.value=!1},{enableHighAccuracy:!0})}function Se(){l.value=null,S.value=null,R.value=null}function ft(){const j=S.value;j!=null&&Ge().then(J=>{J!=null&&J.flyTo&&J.flyTo({center:[j.lng,j.lat],zoom:15})})}function _t(j){E.value=j}function yt(){var j;(j=h.value)==null||j.clear()}function vt(){var j;(j=h.value)==null||j.finishPolygon()}function nn(){var j;(j=h.value)==null||j.undo()}function vo(){var ue,De,Ae,pe;const j=(Ae=(De=(ue=a.value)==null?void 0:ue.ctx)==null?void 0:De.map)==null?void 0:Ae.value,J=(pe=h.value)==null?void 0:pe.getCanvas();if(!j||!J)return;const _e=(Me,je)=>{const ze=document.createElement("a");ze.download=je,ze.rel="noopener",typeof Me=="string"?ze.href=Me:(ze.href=URL.createObjectURL(Me),setTimeout(()=>URL.revokeObjectURL(ze.href),100)),document.body.appendChild(ze),ze.click(),document.body.removeChild(ze)},$e=()=>{const Me=j.getCanvas();if(!Me)return;const je=Me.width,ze=Me.height;if(je<=0||ze<=0)return;const Xe=document.createElement("canvas");Xe.width=je,Xe.height=ze;const ut=Xe.getContext("2d");if(!ut)return;ut.drawImage(Me,0,0),ut.drawImage(J,0,0,J.width,J.height,0,0,je,ze);const Oe=`map-drawing-${Date.now()}.png`;Xe.toBlob(it=>{if(it){_e(it,Oe);return}try{const Je=Xe.toDataURL("image/png");_e(Je,Oe)}catch{const Je=document.createElement("canvas");Je.width=J.width,Je.height=J.height;const et=Je.getContext("2d");et&&(et.drawImage(J,0,0),Je.toBlob(pt=>pt&&_e(pt,Oe),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame($e))}async function Lo(){const j=await Ge();j!=null&&j.on&&(ke==null||ke(),ke=j.on("moveend",be),He==null||He(),He=j.on("mousemove",B),M==null||M(),M=j.on("click",H))}e.onUnmounted(()=>{ke==null||ke(),ke=null,He==null||He(),He=null,M==null||M(),M=null});async function wn(j=!1){var _e,$e;g.value=!1,p.value=null,v.value=null;const J=j||!n.data;c.value=J;try{const ue=J?await(async()=>{const je=await fetch(`/api/gis-map/${encodeURIComponent(Z.value)}`);if(!je.ok)throw new Error(`Помилка завантаження (${je.status})`);return je.json()})():n.data;J||(g.value=!0);const De=zt(ue.center)??se,Ae=he(ue.layers).map(je=>T(je)),pe=Q(ue.zoom)??te;i.value={...ue,center:De??null,zoom:pe??ue.zoom??null,layers:Ae,widgets:ue.widgets},x.value=ue.tools||["home","print","ruler","draw"];const Me=await Ge();Me&&(De&&((_e=Me.setCenter)==null||_e.call(Me,De)),pe!=null&&(($e=Me.setZoom)==null||$e.call(Me,pe)),s.value||await ee()),await G(),await Te(),await Lo(),g.value=!0}catch(ue){p.value=(ue==null?void 0:ue.message)||"Не вдалося завантажити карту"}finally{J&&(c.value=!1)}}const Rt=e.computed(()=>{var $e;const j=new Map;return he(($e=i.value)==null?void 0:$e.layers).forEach(ue=>{if(!(ue!=null&&ue.id))return;const De=T(ue)||ue;j.set(ue.id,{...De})}),ie.value.filter(ue=>(ue==null?void 0:ue.type)==="layers").flatMap(ue=>{var De;return he((De=ue==null?void 0:ue.config)==null?void 0:De.layers)}).forEach(ue=>{if(!(ue!=null&&ue.id))return;const De=j.get(ue.id)||{},Ae=T(ue)||ue;j.set(ue.id,{...De,...Ae,actions:ue.actions||De.actions||null,name:De.name||ue.name||ue.title||De.title||ue.id,title:De.title||ue.title||De.name||null,visible:De.visible??ue.visible??!0})}),Array.from(j.values())}),Lt=e.ref([]);function on(j){Lt.value.includes(j)?Lt.value=Lt.value.filter(J=>J!==j):Lt.value.push(j)}const Ot=e.computed(()=>j=>Lt.value.includes(j.id));return e.watch([Y,D],()=>{G()},{immediate:!0}),e.watch(Z,()=>{wn(!0)}),e.watch(()=>n.data,j=>{j&&wn()}),e.onMounted(()=>{wn()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{Te()}),(j,J)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(I.value)},[J[8]||(J[8]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Bn,{ref_key:"mapViewRef",ref:a,class:"map-widget__view"},{default:e.withCtx(()=>{var _e,$e,ue,De;return[Be.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Wt,{key:0,class:"hidden"})),oe.value?(e.openBlock(),e.createBlock(or,{key:1,"layer-id":"app-boundary",boundary:oe.value.boundary,katottg:oe.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),V.value&&x.value.includes("draw")&&d.value?(e.openBlock(),e.createElementBlock("div",Vp,[e.createVNode(Cp,{ref_key:"drawingPanelRef",ref:m,onClose:J[0]||(J[0]=Ae=>l.value=null),onClear:yt,onDownload:vo,onFinishPolygon:vt,onUndo:nn,"onUpdate:tool":J[1]||(J[1]=Ae=>k.value=Ae),"onUpdate:strokeColor":J[2]||(J[2]=Ae=>N.value=Ae),"onUpdate:strokeWidth":J[3]||(J[3]=Ae=>$.value=Ae)},null,512)])):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("div",Bp,[F.value?(e.openBlock(),e.createBlock(tu,{key:0,coordinates:F.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(ru,{"map-context":V.value,options:_.value},null,8,["map-context","options"]),x.value.includes("ruler")&&y.value?(e.openBlock(),e.createBlock(Xu,{key:1,ref_key:"rulerPanelRef",ref:f,onClose:ge,onTabChange:J[4]||(J[4]=Ae=>b.value=Ae),onPointsChange:_t,onShapeClosedChange:J[5]||(J[5]=Ae=>w.value=Ae)},null,512)):e.createCommentVNode("",!0),x.value.includes("geolocation")&&u.value?(e.openBlock(),e.createBlock(ip,{key:2,position:S.value,onClose:Se,onRecenter:ft},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",$p,[x.value.includes("home")?(e.openBlock(),e.createBlock(It,{key:0,center:((_e=i.value)==null?void 0:_e.center)||(($e=s.value)==null?void 0:$e.center)||null,zoom:((ue=i.value)==null?void 0:ue.zoom)??((De=s.value)==null?void 0:De.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),x.value.includes("print")?(e.openBlock(),e.createBlock(Gd,{key:1})):e.createCommentVNode("",!0),x.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",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?"Вимкнути геолокацію":"Ваше розташування",disabled:A.value,onClick:e.withModifiers(Le,["stop"])},[e.createElementVNode("span",vp,e.toDisplayString(u.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(ce.MapPin),{class:"w-4 h-4"})],10,Sp)):e.createCommentVNode("",!0),x.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",y.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":y.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(ae,["stop"])},[e.createElementVNode("span",Ap,e.toDisplayString(y.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(ce.Ruler),{class:"w-4 h-4"})],10,Lp)):e.createCommentVNode("",!0),x.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",d.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":d.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(Ne,["stop"])},[e.createElementVNode("span",Mp,e.toDisplayString(d.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(ce.Pen),{class:"w-4 h-4"})],10,Tp)):e.createCommentVNode("",!0)]),g.value&&y.value&&E.value.length>0?(e.openBlock(),e.createBlock(Qu,{key:4,points:E.value,"is-shape-closed":w.value,"label-mode":b.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),g.value&&S.value!=null?(e.openBlock(),e.createBlock(cp,{key:5,position:S.value},null,8,["position"])):e.createCommentVNode("",!0),g.value&&d.value?(e.openBlock(),e.createBlock(Np,{key:6,ref_key:"drawingCanvasRef",ref:h,tool:k.value,"stroke-color":N.value,"stroke-width":$.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),g.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",Fp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(We,Ae=>e.createElementVNode("div",{key:Ae,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Ae}`])},[Ae==="left"?(e.openBlock(),e.createElementBlock("div",Dp)):e.createCommentVNode("",!0),qe.value[Ae].top.length?(e.openBlock(),e.createElementBlock("div",zp,[e.createElementVNode("div",Ip,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(qe.value[Ae].top,pe=>{var Me,je,ze,Xe,ut,Oe,it,Je;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:pe.id||pe.type,class:"map-overlay__item"},[pe.type==="info"?(e.openBlock(),e.createBlock(qo,{key:0,title:((Me=pe.config)==null?void 0:Me.title)||pe.title||null,content:((je=pe.config)==null?void 0:je.content)||"",links:ne.value,"map-name":K.value,"map-description":q.value},null,8,["title","content","links","map-name","map-description"])):pe.type==="catalog"?(e.openBlock(),e.createBlock(Qo,{key:1,api:((ze=pe.config)==null?void 0:ze.api)||null},null,8,["api"])):pe.type==="layers"?(e.openBlock(),e.createBlock(Yo,{key:2,layers:Rt.value,onAction:J[6]||(J[6]=et=>on(et.layerId)),config:pe.config},null,8,["layers","config"])):pe.type==="basemaps"?(e.openBlock(),e.createBlock(Wt,{key:3,layers:((Xe=pe.config)==null?void 0:Xe.layers)||null,"default-layer":((ut=pe.config)==null?void 0:ut.default)||null,title:pe.title||((Oe=pe.config)==null?void 0:Oe.title)||null},null,8,["layers","default-layer","title"])):pe.type==="legend"?(e.openBlock(),e.createBlock(co,{key:4,items:((it=pe.config)==null?void 0:it.items)||[]},null,8,["items"])):pe.type==="filters"&&Ot.value(pe)?(e.openBlock(),e.createBlock(uo,{key:5,"layer-id":(Je=pe.config)==null?void 0:Je.layer,onClose:on},null,8,["layer-id"])):pe.type==="dataset"||pe.type==="attribute"?(e.openBlock(),e.createBlock(Jo,{key:6,config:pe.config},null,8,["config"])):pe.type==="search"?(e.openBlock(),e.createBlock(tr,{key:7,config:pe.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,pe.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),qe.value[Ae].bottom.length?(e.openBlock(),e.createElementBlock("div",Pp,[e.createElementVNode("div",jp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(qe.value[Ae].bottom,pe=>{var Me,je,ze,Xe,ut,Oe,it,Je;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:pe.id||pe.type,class:"map-overlay__item"},[pe.type==="info"?(e.openBlock(),e.createBlock(qo,{key:0,title:((Me=pe.config)==null?void 0:Me.title)||pe.title||null,content:((je=pe.config)==null?void 0:je.content)||"",links:ne.value,"map-name":K.value,"map-description":q.value},null,8,["title","content","links","map-name","map-description"])):pe.type==="catalog"?(e.openBlock(),e.createBlock(Qo,{key:1,api:((ze=pe.config)==null?void 0:ze.api)||null},null,8,["api"])):pe.type==="layers"?(e.openBlock(),e.createBlock(Yo,{key:2,layers:Rt.value,onAction:J[7]||(J[7]=et=>on(et.layerId)),config:pe.config},null,8,["layers","config"])):pe.type==="basemaps"?(e.openBlock(),e.createBlock(Wt,{key:3,layers:((Xe=pe.config)==null?void 0:Xe.layers)||null,"default-layer":((ut=pe.config)==null?void 0:ut.default)||null,title:pe.title||((Oe=pe.config)==null?void 0:Oe.title)||null},null,8,["layers","default-layer","title"])):pe.type==="legend"?(e.openBlock(),e.createBlock(co,{key:4,items:((it=pe.config)==null?void 0:it.items)||[]},null,8,["items"])):pe.type==="filters"&&Ot.value(pe)?(e.openBlock(),e.createBlock(uo,{key:5,"layer-id":(Je=pe.config)==null?void 0:Je.layer,onClose:on},null,8,["layer-id"])):pe.type==="dataset"||pe.type==="attribute"?(e.openBlock(),e.createBlock(Jo,{key:6,config:pe.config},null,8,["config"])):pe.type==="search"?(e.openBlock(),e.createBlock(tr,{key:7,config:pe.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,pe.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(Zo),e.createVNode(io,{"map-id":Z.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),c.value?(e.openBlock(),e.createElementBlock("div",Rp,"Завантаження карти…")):p.value?(e.openBlock(),e.createElementBlock("div",Op,e.toDisplayString(p.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-890fa8c5"]]),Up=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function cn(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=Up[s]||a;let p=`${parseInt(i,10)} ${c} ${r}`;if(o){const g=o.split(".")[0],[x,l,y]=g.split(":");x&&l&&y?p+=`, ${x}:${l}:${y}`:x&&l?p+=`, ${x}:${l}`:x&&(p+=`, ${x}`)}return p}function dn(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 qp={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"},Hp={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"},Wp={class:"flex flex-col gap-2 md:flex-row md:items-center"},Yp={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},Zp={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},Gp={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"},Kp={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Xp={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"},Qp={class:"p-3 md:p-3.5 lg:p-4 pt-2"},Jp={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},em={class:"text-gray-500 shrink-0 md:max-w-[50%]"},tm={class:"font-medium flex flex-wrap gap-1"},nm={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},om=["href"],rm=["href"],rr=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]},g=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},x=(l,y)=>{const d=p(l,n.id_key);return`/map?layers=${y}&info=${y},${d}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var u,b,f;return e.openBlock(),e.createElementBlock("div",{key:d.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",qp,[e.createElementVNode("div",Hp,[e.createElementVNode("div",Wp,[e.createElementVNode("h2",Yp,e.toDisplayString(d[`${(u=a.value)==null?void 0:u.name}_text`]||d[(b=a.value)==null?void 0:b.name]||d[(f=a.value)==null?void 0:f.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Zp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("div",Gp,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Kp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("span",Xp,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Qp,[e.createElementVNode("div",Jp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,m=>{var h;return e.openBlock(),e.createElementBlock("div",{key:m.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",em,e.toDisplayString((m==null?void 0:m.ua)||m.label||m.name)+": ",1),e.createElementVNode("span",tm,[Array.isArray(d[m==null?void 0:m.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name],(k,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(k),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[m.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):m.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=d[(m==null?void 0:m.name)+"_data"])==null?void 0:h.text)||d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",nm,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(d,d==null?void 0:d.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,om)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:g(d),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,rm))])])}),128))}}),lm={class:"p-0"},am={class:"border-l-4 border-l-slate-400"},sm={class:"p-4"},im={class:"flex flex-wrap items-center gap-2 mb-3"},cm={class:"text-lg font-bold"},dm={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"},um={key:1,class:"flex"},pm={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"},mm={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"},fm={class:"text-xs text-gray-500 mb-1"},gm={class:"font-medium"},ym={class:"flex justify-end gap-2 mt-3 border-t pt-3"},hm=["href"],xm=["href"],lr=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]},g=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},x=(l,y)=>{const d=p(l,n.id_key);return`/map?layers=${y}&info=${y},${d}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var u,b,f;return e.openBlock(),e.createElementBlock("div",{key:d.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",lm,[e.createElementVNode("div",am,[e.createElementVNode("div",sm,[e.createElementVNode("div",im,[e.createElementVNode("h2",cm,e.toDisplayString(d[`${(u=a.value)==null?void 0:u.name}_text`]||d[(b=a.value)==null?void 0:b.name]||d[(f=a.value)==null?void 0:f.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("div",dm,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",um,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.name,class:"flex flex-wrap gap-1 ml-2"},[d[m.name]?(e.openBlock(),e.createElementBlock("span",pm,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",mm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,m=>{var h;return e.openBlock(),e.createElementBlock("div",{key:m.name},[e.createElementVNode("p",fm,e.toDisplayString(m.ua),1),e.createElementVNode("p",gm,[Array.isArray(d[m==null?void 0:m.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[m==null?void 0:m.name],(k,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(k),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[m.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):m.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=d[(m==null?void 0:m.name)+"_data"])==null?void 0:h.text)||d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",ym,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(d,d==null?void 0:d.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,hm)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:g(d),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,xm))])])])])])}),128))}}),bm={class:"space-y-4"},km={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},wm={class:"flex-1"},_m={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},Em={class:"col-span-1 lg:col-span-4"},Cm={class:"flex items-start"},Nm={class:"flex flex-col"},Vm={class:"font-bold text-xs lg:text-sm"},Bm={key:0,class:"flex flex-wrap gap-1 mt-1"},$m={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},Sm={key:1,class:"flex flex-wrap gap-1 mt-1"},vm={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"},Lm={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},Am={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},Tm={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},Mm={class:"truncate font-medium text-xs lg:text-sm"},Fm={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},Dm=["href"],zm=["href"],ar=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"),g=(y,d)=>{if(d)return y[d]},x=y=>{const d=g(y,n.id_key);return`${n.path}?id=${d}`},l=(y,d)=>{const u=g(y,n.id_key);return`/map?layers=${d}&info=${d},${u}`};return(y,d)=>(e.openBlock(),e.createElementBlock("div",bm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,u=>{var b,f,m;return e.openBlock(),e.createElementBlock("div",{key:u.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",km,[e.createElementVNode("div",wm,[e.createElementVNode("div",_m,[e.createElementVNode("div",Em,[e.createElementVNode("div",Cm,[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",Nm,[e.createElementVNode("p",Vm,e.toDisplayString(u[`${(b=a.value)==null?void 0:b.name}_text`]||u[(f=a.value)==null?void 0:f.name]||u[(m=a.value)==null?void 0:m.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Bm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.name},[u[h.name]?(e.openBlock(),e.createElementBlock("span",$m,e.toDisplayString(u[`${h.name}_text`]||u[h.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Sm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,h=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:h.name},[u[h.name]?(e.openBlock(),e.createElementBlock("span",vm,e.toDisplayString(u[`${h.name}_text`]||u[h.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Lm,[e.createElementVNode("div",Am,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,h=>{var k;return e.openBlock(),e.createElementBlock("div",{key:h.name},[e.createElementVNode("p",Tm,e.toDisplayString(h.ua),1),e.createElementVNode("p",Mm,[Array.isArray(u[h.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(u[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(dn)(u[h.name])||"Немає даних"),1)],64)):h.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(u[h.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((k=u[h.name+"_data"])==null?void 0:k.text)||u[h.name+"_text"]||u[h.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",Fm,[!t.hideDetailsButton&&r(u)?(e.openBlock(),e.createElementBlock("a",{key:0,href:l(u,u.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"},[...d[0]||(d[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"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,Dm)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:x(u),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"},[...d[1]||(d[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,zm))])])])}),128))]))}}),Im={class:"flex flex-col space-y-1.5 p-6 pb-2"},Pm={class:"flex items-center gap-2 flex-wrap"},jm={class:"tracking-tight text-lg font-medium"},Rm={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"},Om={key:1,class:"flex"},Um={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"},qm={class:"p-6 pt-0 pb-4"},Hm={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},Wm={class:"text-sm text-gray-500"},Ym={class:"font-medium"},Zm={class:"flex items-center p-6 pt-0 gap-2"},Gm=["href"],Km=["href"],sr=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]},g=l=>{const y=p(l,n.id_key);return`${n.path}?id=${y}`},x=(l,y)=>{const d=p(l,n.id_key);return`/map?layers=${y}&info=${y},${d}`};return(l,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var u,b,f;return e.openBlock(),e.createElementBlock("div",{key:d.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",Im,[e.createElementVNode("div",Pm,[e.createElementVNode("h3",jm,e.toDisplayString(d[`${(u=a.value)==null?void 0:u.name}_text`]||d[(b=a.value)==null?void 0:b.name]||d[(f=a.value)==null?void 0:f.label]||"Не вказано"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.name},[d[m.name]?(e.openBlock(),e.createElementBlock("div",Rm,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Om,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock("div",{key:m.name,class:"flex flex-wrap gap-1 ml-2"},[d[m.name]?(e.openBlock(),e.createElementBlock("span",Um,e.toDisplayString(d[`${m.name}_text`]||d[m.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",qm,[e.createElementVNode("div",Hm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,m=>{var h;return e.openBlock(),e.createElementBlock("div",{key:m.name},[e.createElementVNode("p",Wm,e.toDisplayString(m.ua),1),e.createElementVNode("p",Ym,[Array.isArray(d[m==null?void 0:m.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[m==null?void 0:m.name],(k,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(k),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[m.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):m.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(d[m==null?void 0:m.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((h=d[(m==null?void 0:m.name)+"_data"])==null?void 0:h.text)||d[(m==null?void 0:m.name)+"_text"]||d[m==null?void 0:m.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Zm,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(d,d==null?void 0:d.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,Gm)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:g(d),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,Km))])])}),128))}}),Xm={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},Qm={key:0,class:"w-full lg:w-auto lg:col-span-1"},Jm=["src"],ef={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},tf={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},nf={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},of={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},rf={class:"flex flex-wrap gap-2 lg:gap-0"},lf={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"},af={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},sf={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},cf={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},df=["innerHTML"],uf={class:"text-gray-500 font-medium md:font-normal"},pf={class:"text-gray-600 break-words line-clamp-2"},mf={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"},ff={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},gf={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},yf={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"},hf={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"},xf={class:"w-full space-y-2"},bf=["href"],kf=["href"],ir=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=d=>(d==null?void 0:d.service_id)&&(d==null?void 0:d.is_map)&&d[n.id_key]&&(d==null?void 0:d.geom),a=e.computed(()=>n.columns.find(d=>d.meta==="title")),i=e.computed(()=>n.columns.filter(d=>d.meta==="category")),s=e.computed(()=>n.columns.filter(d=>d.meta==="tags")),c=e.computed(()=>n.columns.filter(d=>d.meta!=="title")),p=e.computed(()=>n.columns.find(d=>d.meta==="image")),g=e.computed(()=>n.columns.find(d=>d.meta==="desc")||n.columns.find(d=>d.name==="description")),x=(d,u)=>{if(u)return d[u]},l=d=>{const u=x(d,n.id_key);return`${n.path}?id=${u}`},y=(d,u)=>{const b=x(d,n.id_key);return`/map?layers=${u}&info=${u},${b}`};return(d,u)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,b=>{var f,m,h,k,N,$,E,w,S;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",Xm,[p.value?(e.openBlock(),e.createElementBlock("div",Qm,[b[(f=p.value)==null?void 0:f.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:b[(m=p.value)==null?void 0:m.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,Jm)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",ef,[...u[0]||(u[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",tf,[e.createElementVNode("div",nf,[e.createElementVNode("h3",of,e.toDisplayString(b[`${(h=a.value)==null?void 0:h.name}_text`]||b[(k=a.value)==null?void 0:k.name]||b[(N=a.value)==null?void 0:N.label]||"Не вказано"),1),e.createElementVNode("div",rf,[Array.isArray(i.value)&&i.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,A=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:A.name},[b[A.name]?(e.openBlock(),e.createElementBlock("div",lf,e.toDisplayString(b[`${A.name}_text`]||b[A.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",af,e.toDisplayString(((E=b[(($=g.value)==null?void 0:$.name)+"_data"])==null?void 0:E.text)||b[((w=g.value)==null?void 0:w.name)+"_text"]||b[(S=g.value)==null?void 0:S.name]),1),e.createElementVNode("div",sf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,A=>{var R;return e.openBlock(),e.createElementBlock("div",{key:A.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",cf,[A.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:A.icon},null,8,df)):e.createCommentVNode("",!0),e.createElementVNode("span",uf,e.toDisplayString((A==null?void 0:A.ua)||A.label||A.name)+":",1)]),e.createElementVNode("span",pf,[Array.isArray(b[A==null?void 0:A.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(b[A==null?void 0:A.name],(Z,I)=>(e.openBlock(),e.createElementBlock("span",{key:I,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},[A.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(dn)(b[A==null?void 0:A.name])||"Немає даних"),1)],64)):A.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(cn)(b[A==null?void 0:A.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((R=b[(A==null?void 0:A.name)+"_data"])==null?void 0:R.text)||b[(A==null?void 0:A.name)+"_text"]||b[A==null?void 0:A.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",mf,[e.createElementVNode("p",ff," Теги: "+e.toDisplayString(s.value.length&&b[s.value[0].name]?"":"відсутні"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",gf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,A=>(e.openBlock(),e.createElementBlock("div",{key:A.name,class:"flex flex-wrap gap-1"},[b[A.name]?(e.openBlock(),e.createElementBlock("span",yf,e.toDisplayString(b[`${A.name}_text`]||b[A.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",hf,[e.createElementVNode("div",xf,[!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,bf)):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,kf))])])])])}),128))}});function wf(t){t.component("MapCustom",Tn)}const _f={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},Ef={key:0,class:"flex items-center gap-2 flex-shrink-0"},Cf={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},Yt=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",_f,[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",Ef,[e.renderSlot(a.$slots,"actions")])):e.createCommentVNode("",!0)],2),a.$slots.description?(e.openBlock(),e.createElementBlock("p",Cf,[e.renderSlot(a.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),Nf={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},Vf={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"},Bf={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},$f={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},Sf={class:"p-3 border-b border-gray-200"},vf={class:"flex flex-col sm:flex-row gap-2"},Lf={class:"entity-table-root"},Af={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},Tf={key:0,class:"gap-2 inline-flex"},Mf=["onClick"],Ff={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"},Df={class:"text-sm text-gray-500"},zf={class:"font-medium text-gray-700"},If={class:"font-medium text-gray-700"},Pf={class:"font-medium text-gray-700"},jf={class:"flex items-center justify-end gap-3"},Mn=Object.freeze(Object.defineProperty({__proto__:null,default:Ce(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Fe.useRoute(),r=Fe.useRouter(),a=t,i=e.computed(()=>a.entityKey||String(o.name??"").split("-")[0]),s=e.computed(()=>{var T;let _=(((T=o.matched[o.matched.length-1])==null?void 0:T.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return _.startsWith("/")||(_=`/${_}`),_}),c=e.computed(()=>a.entityBasePath||s.value),p=e.computed(()=>{var _;const V=((_=o.matched[o.matched.length-1])==null?void 0:_.path)||"";return/:id\??/.test(V)&&/:action\??/.test(V)}),g=e.computed(()=>{var _,T;return(_=o.meta)!=null&&_.title?o.meta.title:o.name?o.name:((T=o.path)==null?void 0:T.replace(/^\//,""))||""||"GIS"}),x=e.computed(()=>{var V;return((V=o.meta)==null?void 0:V.description)||""}),l=e.computed(()=>{const V=String(g.value||"").trim();return V?`Пошук ${V}...`:"Пошук..."}),y=e.ref([]),d=e.ref(!0),u=e.ref([]),b=e.ref([]),f=e.ref({}),m=e.ref([]),h=e.ref(String(o.query.search??"")),k=e.ref(Math.max(1,Number(o.query.page)||1)),N=e.ref(15),$=e.ref(0),E=e.computed(()=>$.value>0),w=e.computed(()=>$.value?(k.value-1)*N.value+1:0),S=e.computed(()=>$.value?Math.min(k.value*N.value,$.value):0);function A(V){const _=new URLSearchParams;return Object.entries(V).forEach(([T,z])=>{if(!(z==null||z==="")){if(Array.isArray(z)){z.forEach(Q=>{Q!=null&&Q!==""&&_.append(T,String(Q))});return}_.append(T,String(z))}}),_.toString()}function R(){return p.value?`${c.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function Z(V){if(p.value)return`${c.value}/${V}/edit`;const _=String(o.name??"").split("_")[0];return _==="services"?`/gis.datasets/${V}/edit`:`/gis.${_}/edit/${V}`}const I=async()=>{const V=`/api/data/gis.${i.value}.table`;if(!V){y.value=[],d.value=!1;return}try{d.value=!0;const _=A({...f.value,page:k.value,limit:N.value}),T=await fetch(_?`${V}?${_}`:V);if(!T.ok)throw new Error(`Rows fetch failed: ${T.status}`);const z=await T.json();y.value=z.rows||[],$.value=Number(z.filtered??z.total??z.count??y.value.length)||0,u.value=a.columnsConfig.length?a.columnsConfig:z.columns||[],b.value=z.filters||[],d.value=!1,m.value=z.actions,z.card!==!1&&u.value.length&&(p.value?u.value[0].link=`${c.value}/{id}`:u.value[0].link||(u.value[0].link=`/${o.name}/{id}`))}catch{y.value=[],d.value=!1}};function K(V){f.value=V,k.value=1,F(),I()}e.onMounted(()=>{I(),document.title=g.value}),e.watch(()=>o.name,()=>{k.value=1,h.value="",I(),document.title=g.value}),e.watch(()=>o.query,V=>{const _=Math.max(1,Number(V.page)||1),T=String(V.search??""),z=_!==k.value,Q=T!==h.value;!z&&!Q||(k.value=_,h.value=T,f.value={...f.value,search:T||void 0},I())});async function q(V,_,T){const z=await fetch(`/api/form/gis.${i.value}.table/${V.id}`);if(!z.ok)throw new Error(`Form fetch failed: ${z.status}`);const se=(await z.json()).token,te={[_]:T},oe=await fetch(`/api/table/${se}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(te)});if(!oe.ok)throw ye.notify({type:"error",title:"Помилка збереження",message:`Поле "${_}" не оновлено`}),new Error(`Save failed: ${oe.status}`);ye.notify({title:"Збережено",message:`Поле "${_}" оновлено`})}function ne(V,_){f.value={...f.value,[V]:_},k.value=1,F(),I()}function Y(V){ne((V==null?void 0:V.name)||"search",(V==null?void 0:V.value)??h.value)}function D(V){h.value="",ne(V||"search",void 0)}function v(V){!V||V===k.value||(k.value=V,F(),I())}function F(){const V={...o.query,page:String(k.value),...h.value?{search:h.value}:{}};h.value||delete V.search,r.replace({query:V})}return(V,_)=>(e.openBlock(),e.createElementBlock("div",Nf,[e.createVNode(Yt,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(g.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",Vf,[e.createVNode(e.unref(ce.RefreshCw),{size:16}),_[2]||(_[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:_[0]||(_[0]=T=>e.unref(r).push(R())),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(ce.Plus),{size:16}),_[3]||(_[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[x.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Bf,[e.createElementVNode("div",$f,[e.createElementVNode("div",Sf,[e.createElementVNode("div",vf,[e.createVNode(e.unref(Nn.FilterField),{modelValue:h.value,"onUpdate:modelValue":_[1]||(_[1]=T=>h.value=T),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:Y,onClear:D,placeholder:l.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Nn.Filter),{schema:b.value,value:f.value,onChange:K,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",Lf,[e.createVNode(e.unref(n),{rows:y.value,columns:u.value,loading:d.value,router:e.unref(r),selectable:!1,onCellUpdate:q,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:T,value:z,column:Q})=>[e.renderSlot(V.$slots,"badge",{row:T,value:z,column:Q},()=>[e.createElementVNode("span",Af,e.toDisplayString((z==null?void 0:z.text)||z||"-"),1)],!0)]),action:e.withCtx(({row:T})=>[e.renderSlot(V.$slots,"action",{row:T},()=>[m.value.includes("add")?(e.openBlock(),e.createElementBlock("div",Tf,[e.createElementVNode("button",{onClick:z=>e.unref(r).push(Z(T.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(Vn)],8,Mf)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),E.value?(e.openBlock(),e.createElementBlock("div",Ff,[e.createElementVNode("div",Df,[_[4]||(_[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",zf,e.toDisplayString(w.value),1),_[5]||(_[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",If,e.toDisplayString(S.value),1),_[6]||(_[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",Pf,e.toDisplayString($.value),1)]),e.createElementVNode("div",jf,[e.createVNode(e.unref(ye.VsPagination),{total:$.value,page:k.value,"page-size":N.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":v,onPageChange:v},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),Rf={class:"mx-1"},Of={class:"flex items-center gap-2 mt-[0.4rem]"},Uf={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},qf={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Hf={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"},Wf={class:"vs-form w-full"},un=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=Fe.useRouter(),s=Fe.useRoute(),c=t,p=e.ref({}),g=e.ref(""),x=e.computed(()=>s.path.replace(/\/(add|new)$/,"")),l=e.computed(()=>{var f;return((f=i.resolve(x.value).meta)==null?void 0:f.title)??""}),y=e.computed(()=>l.value?`Додати в ${l.value.toLowerCase()}`:"Додати"),d=e.computed(()=>{var f;return((f=s.meta)==null?void 0:f.description)??""});function u(){i.push(x.value||"/")}async function b(){if(!a.value){ye.notify({type:"error",title:"Error",message:"Create token is missing."});return}const f=p.value.validate();if(f){ye.notify({type:"warning",title:"Validation",message:Object.entries(f).map(([h,k])=>`${h}: ${k}`).join(`
2
+ `)});return}const m=await fetch("/api/table/"+a.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!m.ok){ye.notify({type:"error",title:"Error",message:`Error code: ${m.status}`});return}await m.json(),ye.notify({title:"Success!",message:"Object created."}),i.back()}return e.onMounted(async()=>{const f=c.entityKey||String(s.name??"").split("-")[0],m=await fetch(`/api/form/gis.${f}.table`).then(h=>h.json());a.value=m.token,g.value=m.id,r.value=m.schema,document.title=y.value}),(f,m)=>{const h=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Yt,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[x.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(h,{to:x.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",Rf,[e.createVNode(e.unref(ce.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),m[2]||(m[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Of,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:u,"aria-label":"Назад"},[e.createVNode(e.unref(ce.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:u}," Назад "),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},[d.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Uf,[e.createElementVNode("div",qf,[e.createElementVNode("div",Hf,[e.createElementVNode("div",Wf,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":m[0]||(m[0]=k=>o.value=k),form:p.value,"onUpdate:form":m[1]||(m[1]=k=>p.value=k),schema:r.value,style:{primaryColor:"blue"},formId:g.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Yf={class:"mx-1"},Zf={class:"mx-1"},Gf={class:"flex items-center gap-2 mt-[0.4rem]"},Kf={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},Xf={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Qf={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"},Jf={class:"vs-form w-full"},pn=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=Fe.useRoute(),p=Fe.useRouter(),x=t.entityKey||String(c.name??"").split("-")[0],{id:l}=c.params,y=e.computed(()=>c.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),d=e.computed(()=>l?`${y.value}/${l}`:y.value||"/"),u=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 f(){p.push(y.value||"/")}async function m(){const h=i.value.validate();if(h){ye.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([N,$])=>`${N}: ${$}`).join(`
3
+ `)});return}if(!a.value){ye.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const k=await fetch(`/api/table/${a.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!k.ok){ye.notify({type:"error",title:"Error",message:`Error code: ${k.status}`});return}await k.json(),ye.notify({title:"Success!",message:"Your changes have been saved."}),p.back()}return e.onMounted(async()=>{const h=await fetch(`/api/form/gis.${x}.table/${l}`).then(N=>N.json());o.value=h.data,a.value=h.token,r.value=h.schema;const k=h.data;s.value=(k==null?void 0:k.name)||(k==null?void 0:k.title)||(k==null?void 0:k.register_key)||(k==null?void 0:k.map_key)||""}),(h,k)=>{const N=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Yt,{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(u.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Yf,[e.createVNode(e.unref(ce.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(N,{to:d.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",Zf,[e.createVNode(e.unref(ce.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),k[2]||(k[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Редагування",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Gf,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:f,"aria-label":"Назад"},[e.createVNode(e.unref(ce.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(s.value||u.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:f}," Назад "),e.createElementVNode("button",{onClick:m,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",Kf,[e.createElementVNode("div",Xf,[e.createElementVNode("div",Qf,[e.createElementVNode("div",Jf,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":k[0]||(k[0]=$=>o.value=$),form:i.value,"onUpdate:form":k[1]||(k[1]=$=>i.value=$),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),eg={class:"flex items-center justify-center col-span-3 gap-2"},tg={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},ng=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(x=>x.VsModal)),r=t,a=e.useModel(t,"columns"),i=e.ref(!1),s=e.ref({}),c=e.ref({...r.data||{}});e.watch(()=>r.data,x=>{c.value={...x||{}}},{deep:!0});const p=()=>a.value=a.value.filter((x,l)=>l!==r.index),g=async()=>{const x=s.value.validate();if(x){ye.notify({type:"warning",title:"Validation",message:Object.entries(x).map(([l,y])=>`${l}: ${y}`).join(`
4
+ `)});return}a.value[r.index]=c.value,i.value=!1};return(x,l)=>(e.openBlock(),e.createElementBlock("div",eg,[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(ce.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(ce.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",tg,[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:g}," Зберегти ")])]),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"])]))}}),og={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")})}},rg={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"},cr=t=>rg[t==null?void 0:t.toLowerCase()]||"gray",lg=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],dr=t=>{var n;return lg.includes((n=t||"")==null?void 0:n.toLowerCase())},ag={},sg={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 ig(t,n){return e.openBlock(),e.createElementBlock("svg",sg,[...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 cg=Ce(ag,[["render",ig]]),dg={},ug={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 pg(t,n){return e.openBlock(),e.createElementBlock("svg",ug,[...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 mg=Ce(dg,[["render",pg]]),fg={},gg={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 yg(t,n){return e.openBlock(),e.createElementBlock("svg",gg,[...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 hg=Ce(fg,[["render",yg]]),xg={},bg={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 kg(t,n){return e.openBlock(),e.createElementBlock("svg",bg,[...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 wg=Ce(xg,[["render",kg]]),_g={},Eg={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 Cg(t,n){return e.openBlock(),e.createElementBlock("svg",Eg,[...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 Ng=Ce(_g,[["render",Cg]]),Vg={},Bg={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 $g(t,n){return e.openBlock(),e.createElementBlock("svg",Bg,[...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 Sg=Ce(Vg,[["render",$g]]),vg={},Lg={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 Ag(t,n){return e.openBlock(),e.createElementBlock("svg",Lg,[...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 Tg=Ce(vg,[["render",Ag]]),Mg={},Fg={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 Dg(t,n){return e.openBlock(),e.createElementBlock("svg",Fg,[...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 zg=Ce(Mg,[["render",Dg]]),Ig={},Pg={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 jg(t,n){return e.openBlock(),e.createElementBlock("svg",Pg,[...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 Rg=Ce(Ig,[["render",jg]]),Og={},Ug={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 qg(t,n){return e.openBlock(),e.createElementBlock("svg",Ug,[...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 Hg=Ce(Og,[["render",qg]]),Wg={},Yg={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 Zg(t,n){return e.openBlock(),e.createElementBlock("svg",Yg,[...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 Gg=Ce(Wg,[["render",Zg]]),Kg={},Xg={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 Qg(t,n){return e.openBlock(),e.createElementBlock("svg",Xg,[...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 Jg=Ce(Kg,[["render",Qg]]),ey={},ty={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 ny(t,n){return e.openBlock(),e.createElementBlock("svg",ty,[...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 oy=Ce(ey,[["render",ny]]),ry={},ly={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 ay(t,n){return e.openBlock(),e.createElementBlock("svg",ly,[...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 sy=Ce(ry,[["render",ay]]),iy={},cy={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 dy(t,n){return e.openBlock(),e.createElementBlock("svg",cy,[...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 uy=Ce(iy,[["render",dy]]),py={},my={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function fy(t,n){return e.openBlock(),e.createElementBlock("svg",my,[...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 ur={IconText:cg,IconNumber:mg,IconDate:hg,IconDatetime:wg,IconRichtext:Ng,IconBoolean:Sg,IconFile:Tg,IconImage:zg,IconArray:Rg,IconSelect:Hg,IconSlug:Gg,IconDatalist:Jg,IconReference:oy,IconReferenceList:sy,IconBadge:uy,IconCheck:Ce(py,[["render",fy]])},gy={key:0,class:"flex items-center justify-between mb-6"},yy={class:"flex justify-end w-full"},hy={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},xy={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},by={class:"table-fixed w-full text-[13px]"},ky={class:"bg-gray-50 border-b border-gray-200"},wy={key:0},_y=["onDragstart","onDragover","onDrop"],Ey={key:0,class:"flex w-fit items-center gap-2 text-left"},Cy={class:"flex-1 min-w-0"},Ny={class:"font-medium text-gray-900 truncate"},Vy={class:"text-xs text-gray-500"},By={key:1,class:"flex items-center justify-center"},$y={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"},Sy={key:1,class:"text-gray-500 text-sm"},vy={key:3},Ly={class:"px-6 py-4"},Ay={key:1},Ty=["colspan"],At=Ce(e.defineComponent({__name:"vs-datatable",props:e.mergeModels({columnsScheme:{},formScheme:{},addButton:{type:Boolean,default:!0},mainColWidth:{default:""}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t,{expose:n}){function o(E){return E.charAt(0).toUpperCase()+E.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(E=>E.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=t,c=e.ref({}),p=e.ref(!1),g=e.ref({}),x=e.ref(null),l=e.useSlots(),y=E=>!!(E&&l[E]);n({openCreateDialog:()=>{p.value=!0}});const d=e.computed({get(){return Array.isArray(i.value)?i.value:i.value&&Array.isArray(i.value.columns)?i.value.columns:[]},set(E){Array.isArray(i.value)?i.value=E:i.value&&Array.isArray(i.value.columns)&&(i.value.columns=E)}}),u=e.computed(()=>{const E=s.columnsScheme.map(w=>w.key);return E.includes("name")&&E.includes("label")||E.includes("id")&&E.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,g.value={},x.value=null}async function f(){const E=c.value.validate();if(E){ye.notify({type:"warning",title:"Validation",message:Object.entries(E).map(([w,S])=>`${w}: ${S}`).join(`
5
+ `)});return}if(x.value===null)d.value=[...d.value,{...g.value}];else{const w=[...d.value];w[x.value]={...g.value},d.value=w}b()}const m=e.ref(null),h=e.ref(null),k=E=>{m.value=E},N=E=>{h.value=E},$=E=>{if(m.value===null||m.value===E){m.value=null,h.value=null;return}const w=[...d.value],[S]=w.splice(m.value,1);w.splice(E,0,S),d.value=w,m.value=null,h.value=null};return(E,w)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",gy,[e.createElementVNode("div",yy,[e.createElementVNode("button",{onClick:w[0]||(w[0]=S=>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",hy,[e.createElementVNode("div",xy,[e.createElementVNode("table",by,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,S=>(e.openBlock(),e.createElementBlock("col",{key:S.key,style:e.normalizeStyle(S.type==="main"?`width: ${t.mainColWidth}`:S.width?`width: ${S.width}`:"auto")},null,4))),128)),w[5]||(w[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",ky,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,S=>(e.openBlock(),e.createElementBlock("th",{key:S.key,class:"px-6 py-4"},e.toDisplayString(S.label),1))),128)),w[6]||(w[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),d.value.length?(e.openBlock(),e.createElementBlock("tbody",wy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(S,A)=>(e.openBlock(),e.createElementBlock("tr",{key:S.id||S.name||A,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":m.value===A,"border-t-2 border-b-2 border-blue-500 bg-blue-50":h.value===A}]),draggable:"true",onDragstart:R=>k(A),onDragover:e.withModifiers(R=>N(A),["prevent"]),onDrop:R=>$(A)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,R=>(e.openBlock(),e.createElementBlock("td",{key:R.key,class:"px-6 py-4 align-middle text-center"},[R.type==="main"?(e.openBlock(),e.createElementBlock("div",Ey,[w[7]||(w[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(dr)(S.format==="yes/no"?"check":S.format||S.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(cr)(S.format==="yes/no"?"check":S.format||S.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(S.format==="yes/no"?"icon-check":e.unref(ur)["Icon"+o(S.format||S.type)]||e.unref(ur).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",Cy,[e.withDirectives((e.openBlock(),e.createElementBlock("p",Ny,[e.createTextVNode(e.toDisplayString(S.name||S.id),1)])),[[e.unref(og)]]),e.createElementVNode("p",Vy,e.toDisplayString(S.ua||S.label||S.name||S.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[R.slot&&y(R.slot)?e.renderSlot(E.$slots,R.slot,{key:0,row:S,column:R,value:S[R.key],rowIndex:A},void 0,!0):R.type==="color"?(e.openBlock(),e.createElementBlock("div",By,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${S[R.key]}]`])},null,2)])):["format","type","meta"].includes(R.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[S[R.key]?(e.openBlock(),e.createElementBlock("span",$y,e.toDisplayString(S[R.key]),1)):(e.openBlock(),e.createElementBlock("span",Sy,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",vy,e.toDisplayString(S[R.key]),1))],64))]))),128)),e.createElementVNode("td",Ly,[e.createVNode(ng,{columns:d.value,"onUpdate:columns":w[1]||(w[1]=R=>d.value=R),data:S,index:A,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,_y))),128))])):(e.openBlock(),e.createElementBlock("tr",Ay,[e.createElementVNode("td",{colspan:u.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,Ty)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:p.value,"onUpdate:visible":w[3]||(w[3]=S=>p.value=S)},{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:f,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:g.value,"onUpdate:modelValue":w[2]||(w[2]=S=>g.value=S),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),My={class:"p-4 text-[13px]"},Fy={class:"grid grid-cols-2 gap-x-6 gap-y-2"},Dy=["id","checked","onChange"],zy={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},Iy={class:"font-medium text-gray-900 truncate"},Py={class:"text-xs text-gray-500"},jy={key:0,class:"text-xs text-[#B2C9D6]"},Ry={class:"flex justify-end gap-2 p-4 border-t w-full"},Zt=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(k=>k.VsModal)),c=e.computed(()=>Array.isArray(a.fields)?a.fields.filter(Boolean):[]),p=k=>(k==null?void 0:k.name)??(k==null?void 0:k.id)??(k==null?void 0:k.key)??(k==null?void 0:k.code)??(k==null?void 0:k.field)??(k==null?void 0:k.value)??"",g=k=>String(p(k)??"").trim(),x=k=>(k==null?void 0:k.title)??(k==null?void 0:k.label)??g(k),l=k=>String((k==null?void 0:k.type)??"").trim(),y=e.computed(()=>new Set(r.value.map(k=>String(k??"").trim()))),d=k=>y.value.has(g(k)),u=k=>{const N=g(k);if(!N)return;const $=new Set(y.value);$.has(N)?$.delete(N):$.add(N),r.value=Array.from($)},b=e.computed(()=>a.confirmText||"Імпортувати"),f=e.computed(()=>a.cancelText||"Скасувати"),m=()=>{o.value=!1,i("cancel")},h=()=>{i("confirm"),o.value=!1};return(k,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",Ry,[e.createElementVNode("button",{onClick:m,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(f.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",My,[e.createElementVNode("div",Fy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,$=>(e.openBlock(),e.createElementBlock("label",{key:g($),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${g($)}`,checked:d($),onChange:E=>u($)},null,40,Dy),e.createElementVNode("div",zy,[e.unref(dr)($.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(cr)($.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",Iy,e.toDisplayString(g($)),1),e.createElementVNode("p",Py,e.toDisplayString(x($)),1),l($)?(e.openBlock(),e.createElementBlock("p",jy,e.toDisplayString(l($)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function Gt(t){return t==null?"":String(t).trim()}function Tt(t){return Gt((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 Kt(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=Gt(l);y&&c.add(y)}if(c.size===0)return[];const p=l=>Gt(s(l)),g=[],x=new Set;for(const l of r){const y=p(l);!y||!c.has(y)||(g.push(l),x.add(y))}for(const l of a){const y=p(l);!y||x.has(y)||!c.has(y)||(g.push(l),x.add(y))}return g}const Oy={class:"vs-form"},Uy={class:"vs-form__body auto-rows-max container"},qy={class:"flex flex-wrap"},Hy={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},Wy={class:"h-fit w-full flex flex-wrap"},Yy={class:"w-full"},Zy=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),g=e.ref([]),x=()=>{const h=y.value.map(k=>i(k)).filter(k=>k.length>0);g.value=[...h],p.value=!0},l=e.computed(()=>{var h,k;return((h=n.value)==null?void 0:h.token)||((k=n.value)==null?void 0:k.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:[]}}),d=e.computed({get:()=>n.value||{},set:h=>{var N;const k=Array.isArray((N=n.value)==null?void 0:N.columns)?n.value.columns:[];n.value={...n.value,...h,columns:k}}});e.watch(()=>c.value,h=>{o.value=h||null},{immediate:!0}),e.watch(p,h=>{h||(g.value=[])});const u=()=>{const h=new Set(g.value.map($=>Gt($)).filter($=>$.length>0)),k=Array.isArray(y.value)?[...y.value]:[],N=a.value.filter($=>h.has(i($))).map($=>{const E=i($),w=$.title??$.label??E;return{...$,name:E,label:w,type:$.type||"text",meta:$.meta??"features"}});y.value=Kt(k,N,{selectedKeys:g.value,resolveKey:i}),p.value=!1,g.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}},f=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],m={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,k)=>(e.openBlock(),e.createElementBlock("div",Oy,[e.createElementVNode("div",Uy,[e.createElementVNode("div",qy,[e.createElementVNode("div",Hy,[(e.openBlock(),e.createBlock(e.unref(s),{ref_key:"formEl",ref:c,key:l.value,schema:b,modelValue:d.value,"onUpdate:modelValue":k[0]||(k[0]=N=>d.value=N)},null,8,["modelValue"]))]),e.createElementVNode("div",Wy,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:x,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"},[...k[4]||(k[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",Yy,[e.createVNode(At,{modelValue:y.value,"onUpdate:modelValue":k[1]||(k[1]=N=>y.value=N),"columns-scheme":f,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Zt,{visible:p.value,"onUpdate:visible":k[2]||(k[2]=N=>p.value=N),selection:g.value,"onUpdate:selection":k[3]||(k[3]=N=>g.value=N),fields:a.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:u},null,8,["visible","selection","fields"])]))}}),Gy={class:"vs-form"},Ky={class:"vs-form__body auto-rows-max container"},Xy={class:"flex flex-wrap"},Qy={class:"h-fit w-full flex flex-wrap"},Jy={class:"w-full"},eh=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=d=>Tt(d||{}),s=e.ref(!1),c=e.ref([]),p=()=>{const d=g.value.map(u=>i(u)).filter(u=>u.length>0);c.value=[...d],s.value=!0},g=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:d=>{n.value||(n.value={}),n.value.filters=Array.isArray(d)?d:[]}});e.watch(s,d=>{d||(c.value=[])});const x=()=>{const d=new Set(c.value.map(f=>Gt(f)).filter(f=>f.length>0)),u=Array.isArray(g.value)?[...g.value]:[],b=a.value.filter(f=>d.has(i(f))).map(f=>({name:i(f),label:f.title??f.label??i(f),type:f.type||"text"}));g.value=Kt(u,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}),(d,u)=>(e.openBlock(),e.createElementBlock("div",Gy,[e.createElementVNode("div",Ky,[e.createElementVNode("div",Xy,[u[4]||(u[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",Qy,[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"},[...u[3]||(u[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",Jy,[e.createVNode(At,{modelValue:g.value,"onUpdate:modelValue":u[0]||(u[0]=b=>g.value=b),"columns-scheme":l,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Zt,{visible:s.value,"onUpdate:visible":u[1]||(u[1]=b=>s.value=b),selection:c.value,"onUpdate:selection":u[2]||(u[2]=b=>c.value=b),fields:a.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:x},null,8,["visible","selection","fields"])]))}}),th={class:"vs-form"},nh={class:"vs-form__body auto-rows-max container"},oh={class:"flex flex-wrap"},rh={class:"h-fit w-full flex flex-wrap"},lh={class:"w-full"},ah=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=d=>Tt(d||{}),s=e.ref(!1),c=e.ref([]),p=()=>{const d=g.value.map(u=>i(u)).filter(u=>u.length>0);c.value=[...d],s.value=!0},g=e.computed({get:()=>n.value.card,set:d=>{n.value||(n.value={}),n.value.card=Array.isArray(d)?d:[]}});e.watch(s,d=>{var u;if(d){const b=((u=g.value)==null?void 0:u.map(f=>f.name))||[];c.value=[...b]}});const x=()=>{const d=new Set(c.value.map(f=>Gt(f)).filter(f=>f.length>0)),u=Array.isArray(g.value)?[...g.value]:[],b=a.value.filter(f=>d.has(i(f))).map(f=>{const m=i(f),h=f.title??f.label??m;return{...f,name:m,label:h,format:f.format||f.type||"text",meta:f.meta||"title"}});g.value=Kt(u,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:"text",label:"Класифікатор",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(d,u)=>(e.openBlock(),e.createElementBlock("div",th,[e.createElementVNode("div",nh,[e.createElementVNode("div",oh,[u[4]||(u[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"},[...u[3]||(u[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",lh,[e.createVNode(At,{modelValue:g.value,"onUpdate:modelValue":u[0]||(u[0]=b=>g.value=b),"columns-scheme":l,"form-scheme":y,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Zt,{visible:s.value,"onUpdate:visible":u[1]||(u[1]=b=>s.value=b),selection:c.value,"onUpdate:selection":u[2]||(u[2]=b=>c.value=b),fields:a.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:x},null,8,["visible","selection","fields"])]))}}),pr={template1:rr,template2:lr,template3:ar,template4:sr,template5:ir},sh={class:"space-y-4"},ih={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},ch={class:"text-lg font-semibold mb-4"},dh={class:"bg-white"},uh={key:1,class:"text-gray-400 text-center py-12"},ph={key:2,class:"text-gray-400 text-center py-12"},mh=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 x;return Array.isArray((x=o.value)==null?void 0:x.columns)?o.value.columns:[]}),s=e.computed(()=>{var x;return((x=o.value)==null?void 0:x.view)||"template1"}),c=e.computed(()=>pr[s.value]||pr.template1),p=e.computed(()=>{var y;const x=(y=o.value)==null?void 0:y.view;if(!x)return"template1";const l=r.find(d=>d.id===x);return(l==null?void 0:l.text)||x}),g=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(l=>{var y,d;return{...l,service_id:(y=o.value)==null?void 0:y.service_id,is_map:(d=o.value)==null?void 0:d.is_map}}));return(x,l)=>(e.openBlock(),e.createElementBlock("div",sh,[e.createElementVNode("div",ih,[(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",ch," Превʼю таблиці ("+e.toDisplayString(p.value)+") ",1),e.createElementVNode("div",dh,[c.value&&g.value.length&&i.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value),{items:g.value,columns:i.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:s.value},null,8,["items","columns","hide-details-button"])):g.value.length?(e.openBlock(),e.createElementBlock("div",ph," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",uh," Немає даних для превʼю "))])]))}}),fh={class:"w-full mb-6"},gh={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},yh=["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",fh,[e.createElementVNode("div",gh,[(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,yh))),128))])]))}}),hh={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},xh={class:"mx-1"},bh={class:"text-gray-900 font-semibold"},kh={key:0,class:"text-center py-12 mt-6 px-[24px]"},wh={key:1,class:"px-[24px] overflow-y-auto"},_h={class:"space-y-6"},Eh=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=Fe.useRoute(),o=Fe.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),a=e.computed(()=>{var m;return((m=o.resolve(r.value).meta)==null?void 0:m.title)??""}),i=e.computed(()=>{var m;return((m=y.value)==null?void 0:m.name)||"Налаштування реєстру"}),s=e.ref("list"),c=e.ref(""),p=e.ref(!0),g=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],x={list:Zy,filters:eh,card:ah,preview:mh},l=g.map(m=>m.id),y=e.ref({columns:[],filters:[],card:[],tableData:[]}),d=e.ref([]),u=async()=>{var h;if(!((h=y.value)==null?void 0:h.token)){ye.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const k=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(y.value)});if(!k.ok)throw new Error(`Failed to save content: ${k.status}`);ye.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(k){ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(k)}},b=async m=>{try{const k=await(await fetch(`/api/gis-registry/${m}`)).json(),N=Array.isArray(k==null?void 0:k.rows)?k.rows:[];y.value.tableData=N.slice(0,3)}catch(h){console.error("Помилка завантаження превʼю:",h)}},f=async()=>{var m,h;try{p.value=!0;const N=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),$=((m=N==null?void 0:N.rows)==null?void 0:m[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),d.value=Array.isArray(N==null?void 0:N.fields)?N.fields:[]}catch(k){console.error("Помилка завантаження даних:",k)}finally{p.value=!1}};return e.onMounted(async()=>{const m=n.query.tab;typeof m=="string"&&l.includes(m)&&(s.value=m),await f(),c.value&&await b(c.value)}),e.watch(s,m=>{n.query.tab!==m&&o.replace({query:{...n.query,tab:m}})}),e.watch(()=>n.query.tab,m=>{typeof m=="string"&&l.includes(m)&&s.value!==m&&(s.value=m)}),e.watch(()=>n.params.id,async(m,h)=>{!m||m===h||(await f(),c.value&&await b(c.value))}),(m,h)=>{const k=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",hh,[e.createVNode(Yt,{variant:"form",title:i.value},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(k,{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",xh,[e.createVNode(e.unref(ce.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",bh,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:u,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",kh,[...h[4]||(h[4]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",wh,[e.createVNode(mr,{tabs:g,activeTab:s.value,"onUpdate:activeTab":h[1]||(h[1]=N=>s.value=N)},null,8,["activeTab"]),e.createElementVNode("div",_h,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(x[s.value]),{data:y.value,"onUpdate:data":h[2]||(h[2]=N=>y.value=N),fields:d.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 fr(t){return typeof t>"u"||t===null}function Ch(t){return typeof t=="object"&&t!==null}function Nh(t){return Array.isArray(t)?t:fr(t)?[]:[t]}function Vh(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 Bh(t,n){var o="",r;for(r=0;r<n;r+=1)o+=t;return o}function $h(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var Sh=fr,vh=Ch,Lh=Nh,Ah=Bh,Th=$h,Mh=Vh,st={isNothing:Sh,isObject:vh,toArray:Lh,repeat:Ah,isNegativeZero:Th,extend:Mh};function gr(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+=`
6
6
 
7
- `+t.mark.snippet),r+" "+o):r}function mn(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||""}mn.prototype=Object.create(Error.prototype),mn.prototype.constructor=mn,mn.prototype.toString=function(n){return this.name+": "+fr(this,n)};var st=mn;function uo(t,n,o,r,l){var i="",s="",c=Math.floor(l/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 po(t,n){return Qe.repeat(" ",n-t.length)+t}function Mh(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],l=[],i,s=-1;i=o.exec(t.buffer);)l.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="",f,a,h=Math.min(t.line+n.linesAfter,l.length).toString().length,u=n.maxLength-(n.indent+h+3);for(f=1;f<=n.linesBefore&&!(s-f<0);f++)a=uo(t.buffer,r[s-f],l[s-f],t.position-(r[s]-r[s-f]),u),c=Qe.repeat(" ",n.indent)+po((t.line-f+1).toString(),h)+" | "+a.str+`
8
- `+c;for(a=uo(t.buffer,r[s],l[s],t.position,u),c+=Qe.repeat(" ",n.indent)+po((t.line+1).toString(),h)+" | "+a.str+`
9
- `,c+=Qe.repeat("-",n.indent+h+3+a.pos)+`^
10
- `,f=1;f<=n.linesAfter&&!(s+f>=l.length);f++)a=uo(t.buffer,r[s+f],l[s+f],t.position-(r[s]-r[s+f]),u),c+=Qe.repeat(" ",n.indent)+po((t.line+f+1).toString(),h)+" | "+a.str+`
11
- `;return c.replace(/\n$/,"")}var Fh=Mh,Dh=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],zh=["scalar","sequence","mapping"];function Ih(t){var n={};return t!==null&&Object.keys(t).forEach(function(o){t[o].forEach(function(r){n[String(r)]=o})}),n}function jh(t,n){if(n=n||{},Object.keys(n).forEach(function(o){if(Dh.indexOf(o)===-1)throw new st('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=Ih(n.styleAliases||null),zh.indexOf(this.kind)===-1)throw new st('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var nt=jh;function gr(t,n){var o=[];return t[n].forEach(function(r){var l=o.length;o.forEach(function(i,s){i.tag===r.tag&&i.kind===r.kind&&i.multi===r.multi&&(l=s)}),o[l]=r}),o}function Ph(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,o;function r(l){l.multi?(t.multi[l.kind].push(l),t.multi.fallback.push(l)):t[l.kind][l.tag]=t.fallback[l.tag]=l}for(n=0,o=arguments.length;n<o;n+=1)arguments[n].forEach(r);return t}function mo(t){return this.extend(t)}mo.prototype.extend=function(n){var o=[],r=[];if(n instanceof nt)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 st("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");o.forEach(function(i){if(!(i instanceof nt))throw new st("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(i.loadKind&&i.loadKind!=="scalar")throw new st("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 st("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 nt))throw new st("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create(mo.prototype);return l.implicit=(this.implicit||[]).concat(o),l.explicit=(this.explicit||[]).concat(r),l.compiledImplicit=gr(l,"implicit"),l.compiledExplicit=gr(l,"explicit"),l.compiledTypeMap=Ph(l.compiledImplicit,l.compiledExplicit),l};var yr=mo,hr=new nt("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}}),br=new nt("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}}),xr=new nt("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}}),kr=new yr({explicit:[hr,br,xr]});function Rh(t){if(t===null)return!0;var n=t.length;return n===1&&t==="~"||n===4&&(t==="null"||t==="Null"||t==="NULL")}function Oh(){return null}function Uh(t){return t===null}var wr=new nt("tag:yaml.org,2002:null",{kind:"scalar",resolve:Rh,construct:Oh,predicate:Uh,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function qh(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 Hh(t){return t==="true"||t==="True"||t==="TRUE"}function Wh(t){return Object.prototype.toString.call(t)==="[object Boolean]"}var _r=new nt("tag:yaml.org,2002:bool",{kind:"scalar",resolve:qh,construct:Hh,predicate:Wh,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 Yh(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function Zh(t){return 48<=t&&t<=55}function Gh(t){return 48<=t&&t<=57}function Kh(t){if(t===null)return!1;var n=t.length,o=0,r=!1,l;if(!n)return!1;if(l=t[o],(l==="-"||l==="+")&&(l=t[++o]),l==="0"){if(o+1===n)return!0;if(l=t[++o],l==="b"){for(o++;o<n;o++)if(l=t[o],l!=="_"){if(l!=="0"&&l!=="1")return!1;r=!0}return r&&l!=="_"}if(l==="x"){for(o++;o<n;o++)if(l=t[o],l!=="_"){if(!Yh(t.charCodeAt(o)))return!1;r=!0}return r&&l!=="_"}if(l==="o"){for(o++;o<n;o++)if(l=t[o],l!=="_"){if(!Zh(t.charCodeAt(o)))return!1;r=!0}return r&&l!=="_"}}if(l==="_")return!1;for(;o<n;o++)if(l=t[o],l!=="_"){if(!Gh(t.charCodeAt(o)))return!1;r=!0}return!(!r||l==="_")}function Xh(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 Qh(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!Qe.isNegativeZero(t)}var Er=new nt("tag:yaml.org,2002:int",{kind:"scalar",resolve:Kh,construct:Xh,predicate:Qh,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"]}}),Jh=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function e0(t){return!(t===null||!Jh.test(t)||t[t.length-1]==="_")}function t0(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 n0=/^[-+]?[0-9]+e/;function o0(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(Qe.isNegativeZero(t))return"-0.0";return o=t.toString(10),n0.test(o)?o.replace("e",".e"):o}function r0(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Qe.isNegativeZero(t))}var Cr=new nt("tag:yaml.org,2002:float",{kind:"scalar",resolve:e0,construct:t0,predicate:r0,represent:o0,defaultStyle:"lowercase"}),Nr=kr.extend({implicit:[wr,_r,Er,Cr]}),Vr=Nr,Br=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),$r=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 l0(t){return t===null?!1:Br.exec(t)!==null||$r.exec(t)!==null}function a0(t){var n,o,r,l,i,s,c,f=0,a=null,h,u,y;if(n=Br.exec(t),n===null&&(n=$r.exec(t)),n===null)throw new Error("Date resolve error");if(o=+n[1],r=+n[2]-1,l=+n[3],!n[4])return new Date(Date.UTC(o,r,l));if(i=+n[4],s=+n[5],c=+n[6],n[7]){for(f=n[7].slice(0,3);f.length<3;)f+="0";f=+f}return n[9]&&(h=+n[10],u=+(n[11]||0),a=(h*60+u)*6e4,n[9]==="-"&&(a=-a)),y=new Date(Date.UTC(o,r,l,i,s,c,f)),a&&y.setTime(y.getTime()-a),y}function s0(t){return t.toISOString()}var Sr=new nt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:l0,construct:a0,instanceOf:Date,represent:s0});function i0(t){return t==="<<"||t===null}var vr=new nt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:i0}),fo=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
12
- \r`;function c0(t){if(t===null)return!1;var n,o,r=0,l=t.length,i=fo;for(o=0;o<l;o++)if(n=i.indexOf(t.charAt(o)),!(n>64)){if(n<0)return!1;r+=6}return r%8===0}function d0(t){var n,o,r=t.replace(/[\r\n=]/g,""),l=r.length,i=fo,s=0,c=[];for(n=0;n<l;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=l%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 u0(t){var n="",o=0,r,l,i=t.length,s=fo;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 l=i%3,l===0?(n+=s[o>>18&63],n+=s[o>>12&63],n+=s[o>>6&63],n+=s[o&63]):l===2?(n+=s[o>>10&63],n+=s[o>>4&63],n+=s[o<<2&63],n+=s[64]):l===1&&(n+=s[o>>2&63],n+=s[o<<4&63],n+=s[64],n+=s[64]),n}function p0(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var Lr=new nt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:c0,construct:d0,predicate:p0,represent:u0}),m0=Object.prototype.hasOwnProperty,f0=Object.prototype.toString;function g0(t){if(t===null)return!0;var n=[],o,r,l,i,s,c=t;for(o=0,r=c.length;o<r;o+=1){if(l=c[o],s=!1,f0.call(l)!=="[object Object]")return!1;for(i in l)if(m0.call(l,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 y0(t){return t!==null?t:[]}var Ar=new nt("tag:yaml.org,2002:omap",{kind:"sequence",resolve:g0,construct:y0}),h0=Object.prototype.toString;function b0(t){if(t===null)return!0;var n,o,r,l,i,s=t;for(i=new Array(s.length),n=0,o=s.length;n<o;n+=1){if(r=s[n],h0.call(r)!=="[object Object]"||(l=Object.keys(r),l.length!==1))return!1;i[n]=[l[0],r[l[0]]]}return!0}function x0(t){if(t===null)return[];var n,o,r,l,i,s=t;for(i=new Array(s.length),n=0,o=s.length;n<o;n+=1)r=s[n],l=Object.keys(r),i[n]=[l[0],r[l[0]]];return i}var Tr=new nt("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:b0,construct:x0}),k0=Object.prototype.hasOwnProperty;function w0(t){if(t===null)return!0;var n,o=t;for(n in o)if(k0.call(o,n)&&o[n]!==null)return!1;return!0}function _0(t){return t!==null?t:{}}var Mr=new nt("tag:yaml.org,2002:set",{kind:"mapping",resolve:w0,construct:_0}),go=Vr.extend({implicit:[Sr,vr],explicit:[Lr,Ar,Tr,Mr]}),vt=Object.prototype.hasOwnProperty,Mn=1,Fr=2,Dr=3,Fn=4,yo=1,E0=2,zr=3,C0=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,N0=/[\x85\u2028\u2029]/,V0=/[,\[\]\{\}]/,Ir=/^(?:!|!!|![a-z\-]+!)$/i,jr=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Pr(t){return Object.prototype.toString.call(t)}function bt(t){return t===10||t===13}function Dt(t){return t===9||t===32}function dt(t){return t===9||t===32||t===10||t===13}function Gt(t){return t===44||t===91||t===93||t===123||t===125}function B0(t){var n;return 48<=t&&t<=57?t-48:(n=t|32,97<=n&&n<=102?n-97+10:-1)}function $0(t){return t===120?2:t===117?4:t===85?8:0}function S0(t){return 48<=t&&t<=57?t-48:-1}function Rr(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?`
13
- `: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 v0(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}for(var Or=new Array(256),Ur=new Array(256),Kt=0;Kt<256;Kt++)Or[Kt]=Rr(Kt)?1:0,Ur[Kt]=Rr(Kt);function L0(t,n){this.input=t,this.filename=n.filename||null,this.schema=n.schema||go,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 qr(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=Fh(o),new st(n,o)}function be(t,n){throw qr(t,n)}function Dn(t,n){t.onWarning&&t.onWarning.call(null,qr(t,n))}var Hr={YAML:function(n,o,r){var l,i,s;n.version!==null&&be(n,"duplication of %YAML directive"),r.length!==1&&be(n,"YAML directive accepts exactly one argument"),l=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),l===null&&be(n,"ill-formed argument of the YAML directive"),i=parseInt(l[1],10),s=parseInt(l[2],10),i!==1&&be(n,"unacceptable YAML version of the document"),n.version=r[0],n.checkLineBreaks=s<2,s!==1&&s!==2&&Dn(n,"unsupported YAML version of the document")},TAG:function(n,o,r){var l,i;r.length!==2&&be(n,"TAG directive accepts exactly two arguments"),l=r[0],i=r[1],Ir.test(l)||be(n,"ill-formed tag handle (first argument) of the TAG directive"),vt.call(n.tagMap,l)&&be(n,'there is a previously declared suffix for "'+l+'" tag handle'),jr.test(i)||be(n,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch{be(n,"tag prefix is malformed: "+i)}n.tagMap[l]=i}};function Lt(t,n,o,r){var l,i,s,c;if(n<o){if(c=t.input.slice(n,o),r)for(l=0,i=c.length;l<i;l+=1)s=c.charCodeAt(l),s===9||32<=s&&s<=1114111||be(t,"expected valid JSON character");else C0.test(c)&&be(t,"the stream contains non-printable characters");t.result+=c}}function Wr(t,n,o,r){var l,i,s,c;for(Qe.isObject(o)||be(t,"cannot merge mappings; the provided source object is unacceptable"),l=Object.keys(o),s=0,c=l.length;s<c;s+=1)i=l[s],vt.call(n,i)||(n[i]=o[i],r[i]=!0)}function Xt(t,n,o,r,l,i,s,c,f){var a,h;if(Array.isArray(l))for(l=Array.prototype.slice.call(l),a=0,h=l.length;a<h;a+=1)Array.isArray(l[a])&&be(t,"nested arrays are not supported inside keys"),typeof l=="object"&&Pr(l[a])==="[object Object]"&&(l[a]="[object Object]");if(typeof l=="object"&&Pr(l)==="[object Object]"&&(l="[object Object]"),l=String(l),n===null&&(n={}),r==="tag:yaml.org,2002:merge")if(Array.isArray(i))for(a=0,h=i.length;a<h;a+=1)Wr(t,n,i[a],o);else Wr(t,n,i,o);else!t.json&&!vt.call(o,l)&&vt.call(n,l)&&(t.line=s||t.line,t.lineStart=c||t.lineStart,t.position=f||t.position,be(t,"duplicated mapping key")),l==="__proto__"?Object.defineProperty(n,l,{configurable:!0,enumerable:!0,writable:!0,value:i}):n[l]=i,delete o[l];return n}function ho(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++):be(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Ke(t,n,o){for(var r=0,l=t.input.charCodeAt(t.position);l!==0;){for(;Dt(l);)l===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),l=t.input.charCodeAt(++t.position);if(n&&l===35)do l=t.input.charCodeAt(++t.position);while(l!==10&&l!==13&&l!==0);if(bt(l))for(ho(t),l=t.input.charCodeAt(t.position),r++,t.lineIndent=0;l===32;)t.lineIndent++,l=t.input.charCodeAt(++t.position);else break}return o!==-1&&r!==0&&t.lineIndent<o&&Dn(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||dt(o)))}function bo(t,n){n===1?t.result+=" ":n>1&&(t.result+=Qe.repeat(`
14
- `,n-1))}function A0(t,n,o){var r,l,i,s,c,f,a,h,u=t.kind,y=t.result,d;if(d=t.input.charCodeAt(t.position),dt(d)||Gt(d)||d===35||d===38||d===42||d===33||d===124||d===62||d===39||d===34||d===37||d===64||d===96||(d===63||d===45)&&(l=t.input.charCodeAt(t.position+1),dt(l)||o&&Gt(l)))return!1;for(t.kind="scalar",t.result="",i=s=t.position,c=!1;d!==0;){if(d===58){if(l=t.input.charCodeAt(t.position+1),dt(l)||o&&Gt(l))break}else if(d===35){if(r=t.input.charCodeAt(t.position-1),dt(r))break}else{if(t.position===t.lineStart&&zn(t)||o&&Gt(d))break;if(bt(d))if(f=t.line,a=t.lineStart,h=t.lineIndent,Ke(t,!1,-1),t.lineIndent>=n){c=!0,d=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=f,t.lineStart=a,t.lineIndent=h;break}}c&&(Lt(t,i,s,!1),bo(t,t.line-f),i=s=t.position,c=!1),Dt(d)||(s=t.position+1),d=t.input.charCodeAt(++t.position)}return Lt(t,i,s,!1),t.result?!0:(t.kind=u,t.result=y,!1)}function T0(t,n){var o,r,l;if(o=t.input.charCodeAt(t.position),o!==39)return!1;for(t.kind="scalar",t.result="",t.position++,r=l=t.position;(o=t.input.charCodeAt(t.position))!==0;)if(o===39)if(Lt(t,r,t.position,!0),o=t.input.charCodeAt(++t.position),o===39)r=t.position,t.position++,l=t.position;else return!0;else bt(o)?(Lt(t,r,l,!0),bo(t,Ke(t,!1,n)),r=l=t.position):t.position===t.lineStart&&zn(t)?be(t,"unexpected end of the document within a single quoted scalar"):(t.position++,l=t.position);be(t,"unexpected end of the stream within a single quoted scalar")}function M0(t,n){var o,r,l,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 Lt(t,o,t.position,!0),t.position++,!0;if(c===92){if(Lt(t,o,t.position,!0),c=t.input.charCodeAt(++t.position),bt(c))Ke(t,!1,n);else if(c<256&&Or[c])t.result+=Ur[c],t.position++;else if((s=$0(c))>0){for(l=s,i=0;l>0;l--)c=t.input.charCodeAt(++t.position),(s=B0(c))>=0?i=(i<<4)+s:be(t,"expected hexadecimal character");t.result+=v0(i),t.position++}else be(t,"unknown escape sequence");o=r=t.position}else bt(c)?(Lt(t,o,r,!0),bo(t,Ke(t,!1,n)),o=r=t.position):t.position===t.lineStart&&zn(t)?be(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}be(t,"unexpected end of the stream within a double quoted scalar")}function F0(t,n){var o=!0,r,l,i,s=t.tag,c,f=t.anchor,a,h,u,y,d,p=Object.create(null),x,g,m,b;if(b=t.input.charCodeAt(t.position),b===91)h=93,d=!1,c=[];else if(b===123)h=125,d=!0,c={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=c),b=t.input.charCodeAt(++t.position);b!==0;){if(Ke(t,!0,n),b=t.input.charCodeAt(t.position),b===h)return t.position++,t.tag=s,t.anchor=f,t.kind=d?"mapping":"sequence",t.result=c,!0;o?b===44&&be(t,"expected the node content, but found ','"):be(t,"missed comma between flow collection entries"),g=x=m=null,u=y=!1,b===63&&(a=t.input.charCodeAt(t.position+1),dt(a)&&(u=y=!0,t.position++,Ke(t,!0,n))),r=t.line,l=t.lineStart,i=t.position,Qt(t,n,Mn,!1,!0),g=t.tag,x=t.result,Ke(t,!0,n),b=t.input.charCodeAt(t.position),(y||t.line===r)&&b===58&&(u=!0,b=t.input.charCodeAt(++t.position),Ke(t,!0,n),Qt(t,n,Mn,!1,!0),m=t.result),d?Xt(t,c,p,g,x,m,r,l,i):u?c.push(Xt(t,null,p,g,x,m,r,l,i)):c.push(x),Ke(t,!0,n),b=t.input.charCodeAt(t.position),b===44?(o=!0,b=t.input.charCodeAt(++t.position)):o=!1}be(t,"unexpected end of the stream within a flow collection")}function D0(t,n){var o,r,l=yo,i=!1,s=!1,c=n,f=0,a=!1,h,u;if(u=t.input.charCodeAt(t.position),u===124)r=!1;else if(u===62)r=!0;else return!1;for(t.kind="scalar",t.result="";u!==0;)if(u=t.input.charCodeAt(++t.position),u===43||u===45)yo===l?l=u===43?zr:E0:be(t,"repeat of a chomping mode identifier");else if((h=S0(u))>=0)h===0?be(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?be(t,"repeat of an indentation width identifier"):(c=n+h-1,s=!0);else break;if(Dt(u)){do u=t.input.charCodeAt(++t.position);while(Dt(u));if(u===35)do u=t.input.charCodeAt(++t.position);while(!bt(u)&&u!==0)}for(;u!==0;){for(ho(t),t.lineIndent=0,u=t.input.charCodeAt(t.position);(!s||t.lineIndent<c)&&u===32;)t.lineIndent++,u=t.input.charCodeAt(++t.position);if(!s&&t.lineIndent>c&&(c=t.lineIndent),bt(u)){f++;continue}if(t.lineIndent<c){l===zr?t.result+=Qe.repeat(`
15
- `,i?1+f:f):l===yo&&i&&(t.result+=`
16
- `);break}for(r?Dt(u)?(a=!0,t.result+=Qe.repeat(`
17
- `,i?1+f:f)):a?(a=!1,t.result+=Qe.repeat(`
18
- `,f+1)):f===0?i&&(t.result+=" "):t.result+=Qe.repeat(`
19
- `,f):t.result+=Qe.repeat(`
20
- `,i?1+f:f),i=!0,s=!0,f=0,o=t.position;!bt(u)&&u!==0;)u=t.input.charCodeAt(++t.position);Lt(t,o,t.position,!1)}return!0}function Yr(t,n){var o,r=t.tag,l=t.anchor,i=[],s,c=!1,f;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=i),f=t.input.charCodeAt(t.position);f!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,be(t,"tab characters must not be used in indentation")),!(f!==45||(s=t.input.charCodeAt(t.position+1),!dt(s))));){if(c=!0,t.position++,Ke(t,!0,-1)&&t.lineIndent<=n){i.push(null),f=t.input.charCodeAt(t.position);continue}if(o=t.line,Qt(t,n,Dr,!1,!0),i.push(t.result),Ke(t,!0,-1),f=t.input.charCodeAt(t.position),(t.line===o||t.lineIndent>n)&&f!==0)be(t,"bad indentation of a sequence entry");else if(t.lineIndent<n)break}return c?(t.tag=r,t.anchor=l,t.kind="sequence",t.result=i,!0):!1}function z0(t,n,o){var r,l,i,s,c,f,a=t.tag,h=t.anchor,u={},y=Object.create(null),d=null,p=null,x=null,g=!1,m=!1,b;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=u),b=t.input.charCodeAt(t.position);b!==0;){if(!g&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,be(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),i=t.line,(b===63||b===58)&&dt(r))b===63?(g&&(Xt(t,u,y,d,p,null,s,c,f),d=p=x=null),m=!0,g=!0,l=!0):g?(g=!1,l=!0):be(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,b=r;else{if(s=t.line,c=t.lineStart,f=t.position,!Qt(t,o,Fr,!1,!0))break;if(t.line===i){for(b=t.input.charCodeAt(t.position);Dt(b);)b=t.input.charCodeAt(++t.position);if(b===58)b=t.input.charCodeAt(++t.position),dt(b)||be(t,"a whitespace character is expected after the key-value separator within a block mapping"),g&&(Xt(t,u,y,d,p,null,s,c,f),d=p=x=null),m=!0,g=!1,l=!1,d=t.tag,p=t.result;else if(m)be(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=a,t.anchor=h,!0}else if(m)be(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=a,t.anchor=h,!0}if((t.line===i||t.lineIndent>n)&&(g&&(s=t.line,c=t.lineStart,f=t.position),Qt(t,n,Fn,!0,l)&&(g?p=t.result:x=t.result),g||(Xt(t,u,y,d,p,x,s,c,f),d=p=x=null),Ke(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===i||t.lineIndent>n)&&b!==0)be(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return g&&Xt(t,u,y,d,p,null,s,c,f),m&&(t.tag=a,t.anchor=h,t.kind="mapping",t.result=u),m}function I0(t){var n,o=!1,r=!1,l,i,s;if(s=t.input.charCodeAt(t.position),s!==33)return!1;if(t.tag!==null&&be(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,l="!!",s=t.input.charCodeAt(++t.position)):l="!",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)):be(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!dt(s);)s===33&&(r?be(t,"tag suffix cannot contain exclamation marks"):(l=t.input.slice(n-1,t.position+1),Ir.test(l)||be(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),V0.test(i)&&be(t,"tag suffix cannot contain flow indicator characters")}i&&!jr.test(i)&&be(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch{be(t,"tag name is malformed: "+i)}return o?t.tag=i:vt.call(t.tagMap,l)?t.tag=t.tagMap[l]+i:l==="!"?t.tag="!"+i:l==="!!"?t.tag="tag:yaml.org,2002:"+i:be(t,'undeclared tag handle "'+l+'"'),!0}function j0(t){var n,o;if(o=t.input.charCodeAt(t.position),o!==38)return!1;for(t.anchor!==null&&be(t,"duplication of an anchor property"),o=t.input.charCodeAt(++t.position),n=t.position;o!==0&&!dt(o)&&!Gt(o);)o=t.input.charCodeAt(++t.position);return t.position===n&&be(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(n,t.position),!0}function P0(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&&!dt(r)&&!Gt(r);)r=t.input.charCodeAt(++t.position);return t.position===n&&be(t,"name of an alias node must contain at least one character"),o=t.input.slice(n,t.position),vt.call(t.anchorMap,o)||be(t,'unidentified alias "'+o+'"'),t.result=t.anchorMap[o],Ke(t,!0,-1),!0}function Qt(t,n,o,r,l){var i,s,c,f=1,a=!1,h=!1,u,y,d,p,x,g;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,i=s=c=Fn===o||Dr===o,r&&Ke(t,!0,-1)&&(a=!0,t.lineIndent>n?f=1:t.lineIndent===n?f=0:t.lineIndent<n&&(f=-1)),f===1)for(;I0(t)||j0(t);)Ke(t,!0,-1)?(a=!0,c=i,t.lineIndent>n?f=1:t.lineIndent===n?f=0:t.lineIndent<n&&(f=-1)):c=!1;if(c&&(c=a||l),(f===1||Fn===o)&&(Mn===o||Fr===o?x=n:x=n+1,g=t.position-t.lineStart,f===1?c&&(Yr(t,g)||z0(t,g,x))||F0(t,x)?h=!0:(s&&D0(t,x)||T0(t,x)||M0(t,x)?h=!0:P0(t)?(h=!0,(t.tag!==null||t.anchor!==null)&&be(t,"alias node should not have any properties")):A0(t,x,Mn===o)&&(h=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):f===0&&(h=c&&Yr(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"&&be(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),u=0,y=t.implicitTypes.length;u<y;u+=1)if(p=t.implicitTypes[u],p.resolve(t.result)){t.result=p.construct(t.result),t.tag=p.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(vt.call(t.typeMap[t.kind||"fallback"],t.tag))p=t.typeMap[t.kind||"fallback"][t.tag];else for(p=null,d=t.typeMap.multi[t.kind||"fallback"],u=0,y=d.length;u<y;u+=1)if(t.tag.slice(0,d[u].tag.length)===d[u].tag){p=d[u];break}p||be(t,"unknown tag !<"+t.tag+">"),t.result!==null&&p.kind!==t.kind&&be(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+p.kind+'", not "'+t.kind+'"'),p.resolve(t.result,t.tag)?(t.result=p.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):be(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||h}function R0(t){var n=t.position,o,r,l,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&&(Ke(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&&!dt(s);)s=t.input.charCodeAt(++t.position);for(r=t.input.slice(o,t.position),l=[],r.length<1&&be(t,"directive name must not be less than one character in length");s!==0;){for(;Dt(s);)s=t.input.charCodeAt(++t.position);if(s===35){do s=t.input.charCodeAt(++t.position);while(s!==0&&!bt(s));break}if(bt(s))break;for(o=t.position;s!==0&&!dt(s);)s=t.input.charCodeAt(++t.position);l.push(t.input.slice(o,t.position))}s!==0&&ho(t),vt.call(Hr,r)?Hr[r](t,r,l):Dn(t,'unknown document directive "'+r+'"')}if(Ke(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,Ke(t,!0,-1)):i&&be(t,"directives end mark is expected"),Qt(t,t.lineIndent-1,Fn,!1,!0),Ke(t,!0,-1),t.checkLineBreaks&&N0.test(t.input.slice(n,t.position))&&Dn(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,Ke(t,!0,-1));return}if(t.position<t.length-1)be(t,"end of the stream or a document separator is expected");else return}function Zr(t,n){t=String(t),n=n||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
21
- `),t.charCodeAt(0)===65279&&(t=t.slice(1)));var o=new L0(t,n),r=t.indexOf("\0");for(r!==-1&&(o.position=r,be(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;)R0(o);return o.documents}function O0(t,n,o){n!==null&&typeof n=="object"&&typeof o>"u"&&(o=n,n=null);var r=Zr(t,o);if(typeof n!="function")return r;for(var l=0,i=r.length;l<i;l+=1)n(r[l])}function U0(t,n){var o=Zr(t,n);if(o.length!==0){if(o.length===1)return o[0];throw new st("expected a single document in the stream, but found more")}}var q0=O0,H0=U0,Gr={loadAll:q0,load:H0},Kr=Object.prototype.toString,Xr=Object.prototype.hasOwnProperty,xo=65279,W0=9,fn=10,Y0=13,Z0=32,G0=33,K0=34,ko=35,X0=37,Q0=38,J0=39,eb=42,Qr=44,tb=45,In=58,nb=61,ob=62,rb=63,lb=64,Jr=91,el=93,ab=96,tl=123,sb=124,nl=125,at={};at[0]="\\0",at[7]="\\a",at[8]="\\b",at[9]="\\t",at[10]="\\n",at[11]="\\v",at[12]="\\f",at[13]="\\r",at[27]="\\e",at[34]='\\"',at[92]="\\\\",at[133]="\\N",at[160]="\\_",at[8232]="\\L",at[8233]="\\P";var ib=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],cb=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function db(t,n){var o,r,l,i,s,c,f;if(n===null)return{};for(o={},r=Object.keys(n),l=0,i=r.length;l<i;l+=1)s=r[l],c=String(n[s]),s.slice(0,2)==="!!"&&(s="tag:yaml.org,2002:"+s.slice(2)),f=t.compiledTypeMap.fallback[s],f&&Xr.call(f.styleAliases,c)&&(c=f.styleAliases[c]),o[s]=c;return o}function ub(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 st("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+o+Qe.repeat("0",r-n.length)+n}var pb=1,gn=2;function mb(t){this.schema=t.schema||go,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=Qe.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=db(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==='"'?gn:pb,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 ol(t,n){for(var o=Qe.repeat(" ",n),r=0,l=-1,i="",s,c=t.length;r<c;)l=t.indexOf(`
22
- `,r),l===-1?(s=t.slice(r),r=c):(s=t.slice(r,l+1),r=l+1),s.length&&s!==`
23
- `&&(i+=o),i+=s;return i}function wo(t,n){return`
24
- `+Qe.repeat(" ",t.indent*n)}function fb(t,n){var o,r,l;for(o=0,r=t.implicitTypes.length;o<r;o+=1)if(l=t.implicitTypes[o],l.resolve(n))return!0;return!1}function jn(t){return t===Z0||t===W0}function yn(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==xo||65536<=t&&t<=1114111}function rl(t){return yn(t)&&t!==xo&&t!==Y0&&t!==fn}function ll(t,n,o){var r=rl(t),l=r&&!jn(t);return(o?r:r&&t!==Qr&&t!==Jr&&t!==el&&t!==tl&&t!==nl)&&t!==ko&&!(n===In&&!l)||rl(n)&&!jn(n)&&t===ko||n===In&&l}function gb(t){return yn(t)&&t!==xo&&!jn(t)&&t!==tb&&t!==rb&&t!==In&&t!==Qr&&t!==Jr&&t!==el&&t!==tl&&t!==nl&&t!==ko&&t!==Q0&&t!==eb&&t!==G0&&t!==sb&&t!==nb&&t!==ob&&t!==J0&&t!==K0&&t!==X0&&t!==lb&&t!==ab}function yb(t){return!jn(t)&&t!==In}function hn(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 al(t){var n=/^\n* /;return n.test(t)}var sl=1,_o=2,il=3,cl=4,Jt=5;function hb(t,n,o,r,l,i,s,c){var f,a=0,h=null,u=!1,y=!1,d=r!==-1,p=-1,x=gb(hn(t,0))&&yb(hn(t,t.length-1));if(n||s)for(f=0;f<t.length;a>=65536?f+=2:f++){if(a=hn(t,f),!yn(a))return Jt;x=x&&ll(a,h,c),h=a}else{for(f=0;f<t.length;a>=65536?f+=2:f++){if(a=hn(t,f),a===fn)u=!0,d&&(y=y||f-p-1>r&&t[p+1]!==" ",p=f);else if(!yn(a))return Jt;x=x&&ll(a,h,c),h=a}y=y||d&&f-p-1>r&&t[p+1]!==" "}return!u&&!y?x&&!s&&!l(t)?sl:i===gn?Jt:_o:o>9&&al(t)?Jt:s?i===gn?Jt:_o:y?cl:il}function bb(t,n,o,r,l){t.dump=(function(){if(n.length===0)return t.quotingType===gn?'""':"''";if(!t.noCompatMode&&(ib.indexOf(n)!==-1||cb.test(n)))return t.quotingType===gn?'"'+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 f(a){return fb(t,a)}switch(hb(n,c,t.indent,s,f,t.quotingType,t.forceQuotes&&!r,l)){case sl:return n;case _o:return"'"+n.replace(/'/g,"''")+"'";case il:return"|"+dl(n,t.indent)+ul(ol(n,i));case cl:return">"+dl(n,t.indent)+ul(ol(xb(n,s),i));case Jt:return'"'+kb(n)+'"';default:throw new st("impossible error: invalid scalar style")}})()}function dl(t,n){var o=al(t)?String(n):"",r=t[t.length-1]===`
25
- `,l=r&&(t[t.length-2]===`
7
+ `+t.mark.snippet),r+" "+o):r}function mn(t,n){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=n,this.message=gr(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}mn.prototype=Object.create(Error.prototype),mn.prototype.constructor=mn,mn.prototype.toString=function(n){return this.name+": "+gr(this,n)};var gt=mn;function po(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 mo(t,n){return st.repeat(" ",n-t.length)+t}function Fh(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,g,x=Math.min(t.line+n.linesAfter,a.length).toString().length,l=n.maxLength-(n.indent+x+3);for(p=1;p<=n.linesBefore&&!(s-p<0);p++)g=po(t.buffer,r[s-p],a[s-p],t.position-(r[s]-r[s-p]),l),c=st.repeat(" ",n.indent)+mo((t.line-p+1).toString(),x)+" | "+g.str+`
8
+ `+c;for(g=po(t.buffer,r[s],a[s],t.position,l),c+=st.repeat(" ",n.indent)+mo((t.line+1).toString(),x)+" | "+g.str+`
9
+ `,c+=st.repeat("-",n.indent+x+3+g.pos)+`^
10
+ `,p=1;p<=n.linesAfter&&!(s+p>=a.length);p++)g=po(t.buffer,r[s+p],a[s+p],t.position-(r[s]-r[s+p]),l),c+=st.repeat(" ",n.indent)+mo((t.line+p+1).toString(),x)+" | "+g.str+`
11
+ `;return c.replace(/\n$/,"")}var Dh=Fh,zh=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Ih=["scalar","sequence","mapping"];function Ph(t){var n={};return t!==null&&Object.keys(t).forEach(function(o){t[o].forEach(function(r){n[String(r)]=o})}),n}function jh(t,n){if(n=n||{},Object.keys(n).forEach(function(o){if(zh.indexOf(o)===-1)throw new gt('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=Ph(n.styleAliases||null),Ih.indexOf(this.kind)===-1)throw new gt('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var dt=jh;function yr(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 Rh(){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 fo(t){return this.extend(t)}fo.prototype.extend=function(n){var o=[],r=[];if(n instanceof dt)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 gt("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");o.forEach(function(i){if(!(i instanceof dt))throw new gt("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(i.loadKind&&i.loadKind!=="scalar")throw new gt("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 gt("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 dt))throw new gt("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var a=Object.create(fo.prototype);return a.implicit=(this.implicit||[]).concat(o),a.explicit=(this.explicit||[]).concat(r),a.compiledImplicit=yr(a,"implicit"),a.compiledExplicit=yr(a,"explicit"),a.compiledTypeMap=Rh(a.compiledImplicit,a.compiledExplicit),a};var hr=fo,xr=new dt("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}}),br=new dt("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}}),kr=new dt("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}}),wr=new hr({explicit:[xr,br,kr]});function Oh(t){if(t===null)return!0;var n=t.length;return n===1&&t==="~"||n===4&&(t==="null"||t==="Null"||t==="NULL")}function Uh(){return null}function qh(t){return t===null}var _r=new dt("tag:yaml.org,2002:null",{kind:"scalar",resolve:Oh,construct:Uh,predicate:qh,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function Hh(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 Wh(t){return t==="true"||t==="True"||t==="TRUE"}function Yh(t){return Object.prototype.toString.call(t)==="[object Boolean]"}var Er=new dt("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Hh,construct:Wh,predicate:Yh,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 Zh(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function Gh(t){return 48<=t&&t<=55}function Kh(t){return 48<=t&&t<=57}function Xh(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(!Zh(t.charCodeAt(o)))return!1;r=!0}return r&&a!=="_"}if(a==="o"){for(o++;o<n;o++)if(a=t[o],a!=="_"){if(!Gh(t.charCodeAt(o)))return!1;r=!0}return r&&a!=="_"}}if(a==="_")return!1;for(;o<n;o++)if(a=t[o],a!=="_"){if(!Kh(t.charCodeAt(o)))return!1;r=!0}return!(!r||a==="_")}function Qh(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 Jh(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!st.isNegativeZero(t)}var Cr=new dt("tag:yaml.org,2002:int",{kind:"scalar",resolve:Xh,construct:Qh,predicate:Jh,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"]}}),e0=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function t0(t){return!(t===null||!e0.test(t)||t[t.length-1]==="_")}function n0(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 o0=/^[-+]?[0-9]+e/;function r0(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(st.isNegativeZero(t))return"-0.0";return o=t.toString(10),o0.test(o)?o.replace("e",".e"):o}function l0(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||st.isNegativeZero(t))}var Nr=new dt("tag:yaml.org,2002:float",{kind:"scalar",resolve:t0,construct:n0,predicate:l0,represent:r0,defaultStyle:"lowercase"}),Vr=wr.extend({implicit:[_r,Er,Cr,Nr]}),Br=Vr,$r=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Sr=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 a0(t){return t===null?!1:$r.exec(t)!==null||Sr.exec(t)!==null}function s0(t){var n,o,r,a,i,s,c,p=0,g=null,x,l,y;if(n=$r.exec(t),n===null&&(n=Sr.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]&&(x=+n[10],l=+(n[11]||0),g=(x*60+l)*6e4,n[9]==="-"&&(g=-g)),y=new Date(Date.UTC(o,r,a,i,s,c,p)),g&&y.setTime(y.getTime()-g),y}function i0(t){return t.toISOString()}var vr=new dt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:a0,construct:s0,instanceOf:Date,represent:i0});function c0(t){return t==="<<"||t===null}var Lr=new dt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:c0}),go=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
12
+ \r`;function d0(t){if(t===null)return!1;var n,o,r=0,a=t.length,i=go;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 u0(t){var n,o,r=t.replace(/[\r\n=]/g,""),a=r.length,i=go,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 p0(t){var n="",o=0,r,a,i=t.length,s=go;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 m0(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var Ar=new dt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:d0,construct:u0,predicate:m0,represent:p0}),f0=Object.prototype.hasOwnProperty,g0=Object.prototype.toString;function y0(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,g0.call(a)!=="[object Object]")return!1;for(i in a)if(f0.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 h0(t){return t!==null?t:[]}var Tr=new dt("tag:yaml.org,2002:omap",{kind:"sequence",resolve:y0,construct:h0}),x0=Object.prototype.toString;function b0(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],x0.call(r)!=="[object Object]"||(a=Object.keys(r),a.length!==1))return!1;i[n]=[a[0],r[a[0]]]}return!0}function k0(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 Mr=new dt("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:b0,construct:k0}),w0=Object.prototype.hasOwnProperty;function _0(t){if(t===null)return!0;var n,o=t;for(n in o)if(w0.call(o,n)&&o[n]!==null)return!1;return!0}function E0(t){return t!==null?t:{}}var Fr=new dt("tag:yaml.org,2002:set",{kind:"mapping",resolve:_0,construct:E0}),yo=Br.extend({implicit:[vr,Lr],explicit:[Ar,Tr,Mr,Fr]}),Mt=Object.prototype.hasOwnProperty,Fn=1,Dr=2,zr=3,Dn=4,ho=1,C0=2,Ir=3,N0=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,V0=/[\x85\u2028\u2029]/,B0=/[,\[\]\{\}]/,Pr=/^(?:!|!!|![a-z\-]+!)$/i,jr=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function Rr(t){return Object.prototype.toString.call(t)}function Et(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 Xt(t){return t===44||t===91||t===93||t===123||t===125}function $0(t){var n;return 48<=t&&t<=57?t-48:(n=t|32,97<=n&&n<=102?n-97+10:-1)}function S0(t){return t===120?2:t===117?4:t===85?8:0}function v0(t){return 48<=t&&t<=57?t-48:-1}function Or(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?`
13
+ `: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 L0(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function Ur(t,n,o){n==="__proto__"?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):t[n]=o}for(var qr=new Array(256),Hr=new Array(256),Qt=0;Qt<256;Qt++)qr[Qt]=Or(Qt)?1:0,Hr[Qt]=Or(Qt);function A0(t,n){this.input=t,this.filename=n.filename||null,this.schema=n.schema||yo,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 Wr(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=Dh(o),new gt(n,o)}function we(t,n){throw Wr(t,n)}function zn(t,n){t.onWarning&&t.onWarning.call(null,Wr(t,n))}var Yr={YAML:function(n,o,r){var a,i,s;n.version!==null&&we(n,"duplication of %YAML directive"),r.length!==1&&we(n,"YAML directive accepts exactly one argument"),a=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),a===null&&we(n,"ill-formed argument of the YAML directive"),i=parseInt(a[1],10),s=parseInt(a[2],10),i!==1&&we(n,"unacceptable YAML version of the document"),n.version=r[0],n.checkLineBreaks=s<2,s!==1&&s!==2&&zn(n,"unsupported YAML version of the document")},TAG:function(n,o,r){var a,i;r.length!==2&&we(n,"TAG directive accepts exactly two arguments"),a=r[0],i=r[1],Pr.test(a)||we(n,"ill-formed tag handle (first argument) of the TAG directive"),Mt.call(n.tagMap,a)&&we(n,'there is a previously declared suffix for "'+a+'" tag handle'),jr.test(i)||we(n,"ill-formed tag prefix (second argument) of the TAG directive");try{i=decodeURIComponent(i)}catch{we(n,"tag prefix is malformed: "+i)}n.tagMap[a]=i}};function Ft(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||we(t,"expected valid JSON character");else N0.test(c)&&we(t,"the stream contains non-printable characters");t.result+=c}}function Zr(t,n,o,r){var a,i,s,c;for(st.isObject(o)||we(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],Mt.call(n,i)||(Ur(n,i,o[i]),r[i]=!0)}function Jt(t,n,o,r,a,i,s,c,p){var g,x;if(Array.isArray(a))for(a=Array.prototype.slice.call(a),g=0,x=a.length;g<x;g+=1)Array.isArray(a[g])&&we(t,"nested arrays are not supported inside keys"),typeof a=="object"&&Rr(a[g])==="[object Object]"&&(a[g]="[object Object]");if(typeof a=="object"&&Rr(a)==="[object Object]"&&(a="[object Object]"),a=String(a),n===null&&(n={}),r==="tag:yaml.org,2002:merge")if(Array.isArray(i))for(g=0,x=i.length;g<x;g+=1)Zr(t,n,i[g],o);else Zr(t,n,i,o);else!t.json&&!Mt.call(o,a)&&Mt.call(n,a)&&(t.line=s||t.line,t.lineStart=c||t.lineStart,t.position=p||t.position,we(t,"duplicated mapping key")),Ur(n,a,i),delete o[a];return n}function xo(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++):we(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function rt(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(Et(a))for(xo(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&&zn(t,"deficient indentation"),r}function In(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 bo(t,n){n===1?t.result+=" ":n>1&&(t.result+=st.repeat(`
14
+ `,n-1))}function T0(t,n,o){var r,a,i,s,c,p,g,x,l=t.kind,y=t.result,d;if(d=t.input.charCodeAt(t.position),ht(d)||Xt(d)||d===35||d===38||d===42||d===33||d===124||d===62||d===39||d===34||d===37||d===64||d===96||(d===63||d===45)&&(a=t.input.charCodeAt(t.position+1),ht(a)||o&&Xt(a)))return!1;for(t.kind="scalar",t.result="",i=s=t.position,c=!1;d!==0;){if(d===58){if(a=t.input.charCodeAt(t.position+1),ht(a)||o&&Xt(a))break}else if(d===35){if(r=t.input.charCodeAt(t.position-1),ht(r))break}else{if(t.position===t.lineStart&&In(t)||o&&Xt(d))break;if(Et(d))if(p=t.line,g=t.lineStart,x=t.lineIndent,rt(t,!1,-1),t.lineIndent>=n){c=!0,d=t.input.charCodeAt(t.position);continue}else{t.position=s,t.line=p,t.lineStart=g,t.lineIndent=x;break}}c&&(Ft(t,i,s,!1),bo(t,t.line-p),i=s=t.position,c=!1),jt(d)||(s=t.position+1),d=t.input.charCodeAt(++t.position)}return Ft(t,i,s,!1),t.result?!0:(t.kind=l,t.result=y,!1)}function M0(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(Ft(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 Et(o)?(Ft(t,r,a,!0),bo(t,rt(t,!1,n)),r=a=t.position):t.position===t.lineStart&&In(t)?we(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);we(t,"unexpected end of the stream within a single quoted scalar")}function F0(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 Ft(t,o,t.position,!0),t.position++,!0;if(c===92){if(Ft(t,o,t.position,!0),c=t.input.charCodeAt(++t.position),Et(c))rt(t,!1,n);else if(c<256&&qr[c])t.result+=Hr[c],t.position++;else if((s=S0(c))>0){for(a=s,i=0;a>0;a--)c=t.input.charCodeAt(++t.position),(s=$0(c))>=0?i=(i<<4)+s:we(t,"expected hexadecimal character");t.result+=L0(i),t.position++}else we(t,"unknown escape sequence");o=r=t.position}else Et(c)?(Ft(t,o,r,!0),bo(t,rt(t,!1,n)),o=r=t.position):t.position===t.lineStart&&In(t)?we(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}we(t,"unexpected end of the stream within a double quoted scalar")}function D0(t,n){var o=!0,r,a,i,s=t.tag,c,p=t.anchor,g,x,l,y,d,u=Object.create(null),b,f,m,h;if(h=t.input.charCodeAt(t.position),h===91)x=93,d=!1,c=[];else if(h===123)x=125,d=!0,c={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=c),h=t.input.charCodeAt(++t.position);h!==0;){if(rt(t,!0,n),h=t.input.charCodeAt(t.position),h===x)return t.position++,t.tag=s,t.anchor=p,t.kind=d?"mapping":"sequence",t.result=c,!0;o?h===44&&we(t,"expected the node content, but found ','"):we(t,"missed comma between flow collection entries"),f=b=m=null,l=y=!1,h===63&&(g=t.input.charCodeAt(t.position+1),ht(g)&&(l=y=!0,t.position++,rt(t,!0,n))),r=t.line,a=t.lineStart,i=t.position,en(t,n,Fn,!1,!0),f=t.tag,b=t.result,rt(t,!0,n),h=t.input.charCodeAt(t.position),(y||t.line===r)&&h===58&&(l=!0,h=t.input.charCodeAt(++t.position),rt(t,!0,n),en(t,n,Fn,!1,!0),m=t.result),d?Jt(t,c,u,f,b,m,r,a,i):l?c.push(Jt(t,null,u,f,b,m,r,a,i)):c.push(b),rt(t,!0,n),h=t.input.charCodeAt(t.position),h===44?(o=!0,h=t.input.charCodeAt(++t.position)):o=!1}we(t,"unexpected end of the stream within a flow collection")}function z0(t,n){var o,r,a=ho,i=!1,s=!1,c=n,p=0,g=!1,x,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)ho===a?a=l===43?Ir:C0:we(t,"repeat of a chomping mode identifier");else if((x=v0(l))>=0)x===0?we(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):s?we(t,"repeat of an indentation width identifier"):(c=n+x-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(!Et(l)&&l!==0)}for(;l!==0;){for(xo(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),Et(l)){p++;continue}if(t.lineIndent<c){a===Ir?t.result+=st.repeat(`
15
+ `,i?1+p:p):a===ho&&i&&(t.result+=`
16
+ `);break}for(r?jt(l)?(g=!0,t.result+=st.repeat(`
17
+ `,i?1+p:p)):g?(g=!1,t.result+=st.repeat(`
18
+ `,p+1)):p===0?i&&(t.result+=" "):t.result+=st.repeat(`
19
+ `,p):t.result+=st.repeat(`
20
+ `,i?1+p:p),i=!0,s=!0,p=0,o=t.position;!Et(l)&&l!==0;)l=t.input.charCodeAt(++t.position);Ft(t,o,t.position,!1)}return!0}function Gr(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,we(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++,rt(t,!0,-1)&&t.lineIndent<=n){i.push(null),p=t.input.charCodeAt(t.position);continue}if(o=t.line,en(t,n,zr,!1,!0),i.push(t.result),rt(t,!0,-1),p=t.input.charCodeAt(t.position),(t.line===o||t.lineIndent>n)&&p!==0)we(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 I0(t,n,o){var r,a,i,s,c,p,g=t.tag,x=t.anchor,l={},y=Object.create(null),d=null,u=null,b=null,f=!1,m=!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(!f&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,we(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?(f&&(Jt(t,l,y,d,u,null,s,c,p),d=u=b=null),m=!0,f=!0,a=!0):f?(f=!1,a=!0):we(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,!en(t,o,Dr,!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)||we(t,"a whitespace character is expected after the key-value separator within a block mapping"),f&&(Jt(t,l,y,d,u,null,s,c,p),d=u=b=null),m=!0,f=!1,a=!1,d=t.tag,u=t.result;else if(m)we(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=g,t.anchor=x,!0}else if(m)we(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=g,t.anchor=x,!0}if((t.line===i||t.lineIndent>n)&&(f&&(s=t.line,c=t.lineStart,p=t.position),en(t,n,Dn,!0,a)&&(f?u=t.result:b=t.result),f||(Jt(t,l,y,d,u,b,s,c,p),d=u=b=null),rt(t,!0,-1),h=t.input.charCodeAt(t.position)),(t.line===i||t.lineIndent>n)&&h!==0)we(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return f&&Jt(t,l,y,d,u,null,s,c,p),m&&(t.tag=g,t.anchor=x,t.kind="mapping",t.result=l),m}function P0(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&&we(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)):we(t,"unexpected end of the stream within a verbatim tag")}else{for(;s!==0&&!ht(s);)s===33&&(r?we(t,"tag suffix cannot contain exclamation marks"):(a=t.input.slice(n-1,t.position+1),Pr.test(a)||we(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),B0.test(i)&&we(t,"tag suffix cannot contain flow indicator characters")}i&&!jr.test(i)&&we(t,"tag name cannot contain such characters: "+i);try{i=decodeURIComponent(i)}catch{we(t,"tag name is malformed: "+i)}return o?t.tag=i:Mt.call(t.tagMap,a)?t.tag=t.tagMap[a]+i:a==="!"?t.tag="!"+i:a==="!!"?t.tag="tag:yaml.org,2002:"+i:we(t,'undeclared tag handle "'+a+'"'),!0}function j0(t){var n,o;if(o=t.input.charCodeAt(t.position),o!==38)return!1;for(t.anchor!==null&&we(t,"duplication of an anchor property"),o=t.input.charCodeAt(++t.position),n=t.position;o!==0&&!ht(o)&&!Xt(o);)o=t.input.charCodeAt(++t.position);return t.position===n&&we(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(n,t.position),!0}function R0(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)&&!Xt(r);)r=t.input.charCodeAt(++t.position);return t.position===n&&we(t,"name of an alias node must contain at least one character"),o=t.input.slice(n,t.position),Mt.call(t.anchorMap,o)||we(t,'unidentified alias "'+o+'"'),t.result=t.anchorMap[o],rt(t,!0,-1),!0}function en(t,n,o,r,a){var i,s,c,p=1,g=!1,x=!1,l,y,d,u,b,f;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,i=s=c=Dn===o||zr===o,r&&rt(t,!0,-1)&&(g=!0,t.lineIndent>n?p=1:t.lineIndent===n?p=0:t.lineIndent<n&&(p=-1)),p===1)for(;P0(t)||j0(t);)rt(t,!0,-1)?(g=!0,c=i,t.lineIndent>n?p=1:t.lineIndent===n?p=0:t.lineIndent<n&&(p=-1)):c=!1;if(c&&(c=g||a),(p===1||Dn===o)&&(Fn===o||Dr===o?b=n:b=n+1,f=t.position-t.lineStart,p===1?c&&(Gr(t,f)||I0(t,f,b))||D0(t,b)?x=!0:(s&&z0(t,b)||M0(t,b)||F0(t,b)?x=!0:R0(t)?(x=!0,(t.tag!==null||t.anchor!==null)&&we(t,"alias node should not have any properties")):T0(t,b,Fn===o)&&(x=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):p===0&&(x=c&&Gr(t,f))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&we(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,y=t.implicitTypes.length;l<y;l+=1)if(u=t.implicitTypes[l],u.resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(Mt.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,d=t.typeMap.multi[t.kind||"fallback"],l=0,y=d.length;l<y;l+=1)if(t.tag.slice(0,d[l].tag.length)===d[l].tag){u=d[l];break}u||we(t,"unknown tag !<"+t.tag+">"),t.result!==null&&u.kind!==t.kind&&we(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):we(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||x}function O0(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&&(rt(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&&we(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&&!Et(s));break}if(Et(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&&xo(t),Mt.call(Yr,r)?Yr[r](t,r,a):zn(t,'unknown document directive "'+r+'"')}if(rt(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,rt(t,!0,-1)):i&&we(t,"directives end mark is expected"),en(t,t.lineIndent-1,Dn,!1,!0),rt(t,!0,-1),t.checkLineBreaks&&V0.test(t.input.slice(n,t.position))&&zn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&In(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,rt(t,!0,-1));return}if(t.position<t.length-1)we(t,"end of the stream or a document separator is expected");else return}function Kr(t,n){t=String(t),n=n||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
21
+ `),t.charCodeAt(0)===65279&&(t=t.slice(1)));var o=new A0(t,n),r=t.indexOf("\0");for(r!==-1&&(o.position=r,we(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;)O0(o);return o.documents}function U0(t,n,o){n!==null&&typeof n=="object"&&typeof o>"u"&&(o=n,n=null);var r=Kr(t,o);if(typeof n!="function")return r;for(var a=0,i=r.length;a<i;a+=1)n(r[a])}function q0(t,n){var o=Kr(t,n);if(o.length!==0){if(o.length===1)return o[0];throw new gt("expected a single document in the stream, but found more")}}var H0=U0,W0=q0,Xr={loadAll:H0,load:W0},Qr=Object.prototype.toString,Jr=Object.prototype.hasOwnProperty,ko=65279,Y0=9,fn=10,Z0=13,G0=32,K0=33,X0=34,wo=35,Q0=37,J0=38,ex=39,tx=42,el=44,nx=45,Pn=58,ox=61,rx=62,lx=63,ax=64,tl=91,nl=93,sx=96,ol=123,ix=124,rl=125,mt={};mt[0]="\\0",mt[7]="\\a",mt[8]="\\b",mt[9]="\\t",mt[10]="\\n",mt[11]="\\v",mt[12]="\\f",mt[13]="\\r",mt[27]="\\e",mt[34]='\\"',mt[92]="\\\\",mt[133]="\\N",mt[160]="\\_",mt[8232]="\\L",mt[8233]="\\P";var cx=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],dx=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function ux(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&&Jr.call(p.styleAliases,c)&&(c=p.styleAliases[c]),o[s]=c;return o}function px(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 gt("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+o+st.repeat("0",r-n.length)+n}var mx=1,gn=2;function fx(t){this.schema=t.schema||yo,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=st.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=ux(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==='"'?gn:mx,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 ll(t,n){for(var o=st.repeat(" ",n),r=0,a=-1,i="",s,c=t.length;r<c;)a=t.indexOf(`
22
+ `,r),a===-1?(s=t.slice(r),r=c):(s=t.slice(r,a+1),r=a+1),s.length&&s!==`
23
+ `&&(i+=o),i+=s;return i}function _o(t,n){return`
24
+ `+st.repeat(" ",t.indent*n)}function gx(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 jn(t){return t===G0||t===Y0}function yn(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==ko||65536<=t&&t<=1114111}function al(t){return yn(t)&&t!==ko&&t!==Z0&&t!==fn}function sl(t,n,o){var r=al(t),a=r&&!jn(t);return(o?r:r&&t!==el&&t!==tl&&t!==nl&&t!==ol&&t!==rl)&&t!==wo&&!(n===Pn&&!a)||al(n)&&!jn(n)&&t===wo||n===Pn&&a}function yx(t){return yn(t)&&t!==ko&&!jn(t)&&t!==nx&&t!==lx&&t!==Pn&&t!==el&&t!==tl&&t!==nl&&t!==ol&&t!==rl&&t!==wo&&t!==J0&&t!==tx&&t!==K0&&t!==ix&&t!==ox&&t!==rx&&t!==ex&&t!==X0&&t!==Q0&&t!==ax&&t!==sx}function hx(t){return!jn(t)&&t!==Pn}function hn(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 il(t){var n=/^\n* /;return n.test(t)}var cl=1,Eo=2,dl=3,ul=4,tn=5;function xx(t,n,o,r,a,i,s,c){var p,g=0,x=null,l=!1,y=!1,d=r!==-1,u=-1,b=yx(hn(t,0))&&hx(hn(t,t.length-1));if(n||s)for(p=0;p<t.length;g>=65536?p+=2:p++){if(g=hn(t,p),!yn(g))return tn;b=b&&sl(g,x,c),x=g}else{for(p=0;p<t.length;g>=65536?p+=2:p++){if(g=hn(t,p),g===fn)l=!0,d&&(y=y||p-u-1>r&&t[u+1]!==" ",u=p);else if(!yn(g))return tn;b=b&&sl(g,x,c),x=g}y=y||d&&p-u-1>r&&t[u+1]!==" "}return!l&&!y?b&&!s&&!a(t)?cl:i===gn?tn:Eo:o>9&&il(t)?tn:s?i===gn?tn:Eo:y?ul:dl}function bx(t,n,o,r,a){t.dump=(function(){if(n.length===0)return t.quotingType===gn?'""':"''";if(!t.noCompatMode&&(cx.indexOf(n)!==-1||dx.test(n)))return t.quotingType===gn?'"'+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(g){return gx(t,g)}switch(xx(n,c,t.indent,s,p,t.quotingType,t.forceQuotes&&!r,a)){case cl:return n;case Eo:return"'"+n.replace(/'/g,"''")+"'";case dl:return"|"+pl(n,t.indent)+ml(ll(n,i));case ul:return">"+pl(n,t.indent)+ml(ll(kx(n,s),i));case tn:return'"'+wx(n)+'"';default:throw new gt("impossible error: invalid scalar style")}})()}function pl(t,n){var o=il(t)?String(n):"",r=t[t.length-1]===`
25
+ `,a=r&&(t[t.length-2]===`
26
26
  `||t===`
27
- `),i=l?"+":r?"":"-";return o+i+`
28
- `}function ul(t){return t[t.length-1]===`
29
- `?t.slice(0,-1):t}function xb(t,n){for(var o=/(\n+)([^\n]*)/g,r=(function(){var a=t.indexOf(`
30
- `);return a=a!==-1?a:t.length,o.lastIndex=a,pl(t.slice(0,a),n)})(),l=t[0]===`
31
- `||t[0]===" ",i,s;s=o.exec(t);){var c=s[1],f=s[2];i=f[0]===" ",r+=c+(!l&&!i&&f!==""?`
32
- `:"")+pl(f,n),l=i}return r}function pl(t,n){if(t===""||t[0]===" ")return t;for(var o=/ [^ ]/g,r,l=0,i,s=0,c=0,f="";r=o.exec(t);)c=r.index,c-l>n&&(i=s>l?s:c,f+=`
33
- `+t.slice(l,i),l=i+1),s=c;return f+=`
34
- `,t.length-l>n&&s>l?f+=t.slice(l,s)+`
35
- `+t.slice(s+1):f+=t.slice(l),f.slice(1)}function kb(t){for(var n="",o=0,r,l=0;l<t.length;o>=65536?l+=2:l++)o=hn(t,l),r=at[o],!r&&yn(o)?(n+=t[l],o>=65536&&(n+=t[l+1])):n+=r||ub(o);return n}function wb(t,n,o){var r="",l=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)),(Ct(t,n,c,!1,!1)||typeof c>"u"&&Ct(t,n,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=l,t.dump="["+r+"]"}function ml(t,n,o,r){var l="",i=t.tag,s,c,f;for(s=0,c=o.length;s<c;s+=1)f=o[s],t.replacer&&(f=t.replacer.call(o,String(s),f)),(Ct(t,n+1,f,!0,!0,!1,!0)||typeof f>"u"&&Ct(t,n+1,null,!0,!0,!1,!0))&&((!r||l!=="")&&(l+=wo(t,n)),t.dump&&fn===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=i,t.dump=l||"[]"}function _b(t,n,o){var r="",l=t.tag,i=Object.keys(o),s,c,f,a,h;for(s=0,c=i.length;s<c;s+=1)h="",r!==""&&(h+=", "),t.condenseFlow&&(h+='"'),f=i[s],a=o[f],t.replacer&&(a=t.replacer.call(o,f,a)),Ct(t,n,f,!1,!1)&&(t.dump.length>1024&&(h+="? "),h+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Ct(t,n,a,!1,!1)&&(h+=t.dump,r+=h));t.tag=l,t.dump="{"+r+"}"}function Eb(t,n,o,r){var l="",i=t.tag,s=Object.keys(o),c,f,a,h,u,y;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new st("sortKeys must be a boolean or a function");for(c=0,f=s.length;c<f;c+=1)y="",(!r||l!=="")&&(y+=wo(t,n)),a=s[c],h=o[a],t.replacer&&(h=t.replacer.call(o,a,h)),Ct(t,n+1,a,!0,!0,!0)&&(u=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,u&&(t.dump&&fn===t.dump.charCodeAt(0)?y+="?":y+="? "),y+=t.dump,u&&(y+=wo(t,n)),Ct(t,n+1,h,!0,u)&&(t.dump&&fn===t.dump.charCodeAt(0)?y+=":":y+=": ",y+=t.dump,l+=y));t.tag=i,t.dump=l||"{}"}function fl(t,n,o){var r,l,i,s,c,f;for(l=o?t.explicitTypes:t.implicitTypes,i=0,s=l.length;i<s;i+=1)if(c=l[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(f=t.styleMap[c.tag]||c.defaultStyle,Kr.call(c.represent)==="[object Function]")r=c.represent(n,f);else if(Xr.call(c.represent,f))r=c.represent[f](n,f);else throw new st("!<"+c.tag+'> tag resolver accepts not "'+f+'" style');t.dump=r}return!0}return!1}function Ct(t,n,o,r,l,i,s){t.tag=null,t.dump=o,fl(t,o,!1)||fl(t,o,!0);var c=Kr.call(t.dump),f=r,a;r&&(r=t.flowLevel<0||t.flowLevel>n);var h=c==="[object Object]"||c==="[object Array]",u,y;if(h&&(u=t.duplicates.indexOf(o),y=u!==-1),(t.tag!==null&&t.tag!=="?"||y||t.indent!==2&&n>0)&&(l=!1),y&&t.usedDuplicates[u])t.dump="*ref_"+u;else{if(h&&y&&!t.usedDuplicates[u]&&(t.usedDuplicates[u]=!0),c==="[object Object]")r&&Object.keys(t.dump).length!==0?(Eb(t,n,t.dump,l),y&&(t.dump="&ref_"+u+t.dump)):(_b(t,n,t.dump),y&&(t.dump="&ref_"+u+" "+t.dump));else if(c==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!s&&n>0?ml(t,n-1,t.dump,l):ml(t,n,t.dump,l),y&&(t.dump="&ref_"+u+t.dump)):(wb(t,n,t.dump),y&&(t.dump="&ref_"+u+" "+t.dump));else if(c==="[object String]")t.tag!=="?"&&bb(t,t.dump,n,i,f);else{if(c==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new st("unacceptable kind of an object to dump "+c)}t.tag!==null&&t.tag!=="?"&&(a=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?a="!"+a:a.slice(0,18)==="tag:yaml.org,2002:"?a="!!"+a.slice(18):a="!<"+a+">",t.dump=a+" "+t.dump)}return!0}function Cb(t,n){var o=[],r=[],l,i;for(Eo(t,o,r),l=0,i=r.length;l<i;l+=1)n.duplicates.push(o[r[l]]);n.usedDuplicates=new Array(i)}function Eo(t,n,o){var r,l,i;if(t!==null&&typeof t=="object")if(l=n.indexOf(t),l!==-1)o.indexOf(l)===-1&&o.push(l);else if(n.push(t),Array.isArray(t))for(l=0,i=t.length;l<i;l+=1)Eo(t[l],n,o);else for(r=Object.keys(t),l=0,i=r.length;l<i;l+=1)Eo(t[r[l]],n,o)}function Nb(t,n){n=n||{};var o=new mb(n);o.noRefs||Cb(t,o);var r=t;return o.replacer&&(r=o.replacer.call({"":r},"",r)),Ct(o,0,r,!0,!0)?o.dump+`
36
- `:""}var Vb=Nb,Bb={dump:Vb};function Co(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 $b=nt,Sb=yr,vb=kr,Lb=Nr,Ab=Vr,Tb=go,gl=Gr.load,Mb=Gr.loadAll,yl=Bb.dump,Fb=st,Db={binary:Lr,float:Cr,map:xr,null:wr,pairs:Tr,set:Mr,timestamp:Sr,bool:_r,int:Er,merge:vr,omap:Ar,seq:br,str:hr},zb=Co("safeLoad","load"),Ib=Co("safeLoadAll","loadAll"),jb=Co("safeDump","dump"),hl={Type:$b,Schema:Sb,FAILSAFE_SCHEMA:vb,JSON_SCHEMA:Lb,CORE_SCHEMA:Ab,DEFAULT_SCHEMA:Tb,load:gl,loadAll:Mb,dump:yl,YAMLException:Fb,types:Db,safeLoad:zb,safeLoadAll:Ib,safeDump:jb};const Pb={},Rb={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 Ob(t,n){return e.openBlock(),e.createElementBlock("svg",Rb,[...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 Ub=we(Pb,[["render",Ob]]),qb=["aria-label"],No=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(Ub,{class:"h-3 w-3"})],10,qb))}}),Hb={},Wb={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 Yb(t,n){return e.openBlock(),e.createElementBlock("svg",Wb,[...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 bl=we(Hb,[["render",Yb]]),Zb={},Gb={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers"};function Kb(t,n){return e.openBlock(),e.createElementBlock("svg",Gb,[...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 Xb=we(Zb,[["render",Kb]]),Qb={},Jb={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-eye"};function ex(t,n){return e.openBlock(),e.createElementBlock("svg",Jb,[...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 xl=we(Qb,[["render",ex]]),tx={},nx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map"};function ox(t,n){return e.openBlock(),e.createElementBlock("svg",nx,[...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 rx=we(tx,[["render",ox]]),lx={},ax={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-filter"};function sx(t,n){return e.openBlock(),e.createElementBlock("svg",ax,[...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 ix=we(lx,[["render",sx]]),Vo=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(ae.Settings),{size:16,class:"lucide lucide-settings"}))}});function cx(t){const n=[{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"}],o=(a,h)=>{const u=Array.isArray(a==null?void 0:a.config)?a.config[0]:null;return t.normalizeValue(u==null?void 0:u[h])},r=a=>!Array.isArray(a==null?void 0:a.bounds)||a.bounds.length<4?"":a.bounds.map(h=>String(h)).join(", "),l=a=>!Array.isArray(a==null?void 0:a.bounds)||a.bounds.length<4?"":a.bounds.map(h=>String(h)).join(", "),i=a=>!Array.isArray(a==null?void 0:a.bands)||!a.bands.length?"":a.bands.join(", "),s=a=>typeof a!="boolean"?"":a?"Так":"Ні",c=[{label:"Група",value:a=>t.normalizeValue((a==null?void 0:a.group_name)??t.resolvedGroupName??(a==null?void 0:a.group_id))},{label:"Статус",value:a=>t.normalizeValue(t.statusLabel(a))},{label:"Видимість",value:a=>t.normalizeValue(t.visibilityLabel(a))},{label:"Тип сервісу",value:a=>t.normalizeValue(a==null?void 0:a.service_type)},{label:"Тип джерела",value:a=>t.normalizeValue(a==null?void 0:a.source_type)},{label:"Шлях до джерела",value:a=>t.normalizeValue(a==null?void 0:a.source_path)},{label:"Тип геометрії",value:a=>t.normalizeValue(a==null?void 0:a.geom_type)},{label:"Геометрична колонка",value:a=>t.normalizeValue(a==null?void 0:a.geometry_column)},{label:"SRID",value:a=>t.normalizeValue(a==null?void 0:a.srid)},{label:"Кількість обʼєктів",value:a=>t.normalizeValue(a==null?void 0:a.count)},{label:"Створено",value:a=>a!=null&&a.created_at?t.formatDate(a.created_at):""},{label:"Оновлено",value:a=>a!=null&&a.updated_at?t.formatDate(a.updated_at):""}],f=[{label:"Ключ сервісу",value:a=>t.normalizeValue(a==null?void 0:a.service_key)},{label:"Виробник",value:a=>t.normalizeValue((a==null?void 0:a.holder)??(a==null?void 0:a.producer))},{label:"Категорія",value:a=>t.normalizeValue(a==null?void 0:a.category)},{label:"Ліцензія",value:a=>t.normalizeValue(a==null?void 0:a.license)},{label:"Рік",value:a=>t.normalizeValue(a==null?void 0:a.year)},{label:"Ключові слова",value:a=>t.normalizeValue(a==null?void 0:a.keywords)},{label:"URL сервісу",value:a=>t.normalizeValue(a==null?void 0:a.service_url)},{label:"Metadata URL",value:a=>t.normalizeValue(a==null?void 0:a.metadata_url)},{label:"Thumbnail URL",value:a=>t.normalizeValue(a==null?void 0:a.thumbnail_url)},{label:"SQL / Query",value:a=>t.normalizeValue(a==null?void 0:a.query)}];return{service:{general:c,meta:f,edit:[...n,{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:c,meta:f,edit:[...n,{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:a=>t.normalizeValue(t.statusLabel(a))},{label:"Видимість",value:a=>t.normalizeValue(t.visibilityLabel(a))},{label:"Формат",value:a=>t.normalizeValue(a==null?void 0:a.extension)},{label:"SRID",value:a=>t.normalizeValue(a==null?void 0:a.srid)},{label:"Файл джерела",value:a=>t.normalizeValue(a==null?void 0:a.source_path)},{label:"Кеш",value:a=>s(a==null?void 0:a.cache)},{label:"XML",value:a=>s(a==null?void 0:a.xml)}],meta:[{label:"Tile URL",value:a=>t.normalizeValue(a==null?void 0:a.url)},{label:"Extent",value:a=>l(a)},{label:"Розмір",value:a=>t.normalizeValue(a==null?void 0:a.total_size)},{label:"Ширина",value:a=>t.normalizeValue(a==null?void 0:a.width)},{label:"Висота",value:a=>t.normalizeValue(a==null?void 0:a.height)},{label:"Кількість каналів",value:a=>t.normalizeValue(a==null?void 0:a.bands_count)},{label:"Канали",value:a=>i(a)},{label:"Роздільна здатність",value:a=>t.normalizeValue(a==null?void 0:a.resolution)},{label:"Глибина кольору",value:a=>t.normalizeValue(a==null?void 0:a.color_depth)},{label:"Стиснення",value:a=>t.normalizeValue(a==null?void 0:a.compression)},{label:"Proj4",value:a=>t.normalizeValue(a==null?void 0:a.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:a=>t.normalizeValue((a==null?void 0:a.group_name)??t.resolvedGroupName??(a==null?void 0:a.group_id))},{label:"Статус",value:a=>t.normalizeValue(t.statusLabel(a))},{label:"Видимість",value:a=>t.normalizeValue(t.visibilityLabel(a))},{label:"Ключ CartoCSS",value:a=>t.normalizeValue(a==null?void 0:a.cartocss_key)},{label:"Таблиця джерела",value:a=>o(a,"table")||t.normalizeValue(a==null?void 0:a.source_path)},{label:"Ключ набору",value:a=>o(a,"key")},{label:"Авто-картка",value:a=>s(a==null?void 0:a.card_auto)},{label:"Інфо по кліку",value:a=>s(a==null?void 0:a.info)},{label:"Статичний",value:a=>s(a==null?void 0:a.is_static)}],meta:[{label:"Tile URL",value:a=>t.normalizeValue(a==null?void 0:a.url)},{label:"Bounds",value:a=>r(a)},{label:"SRID",value:a=>o(a,"srid")},{label:"Таблиця картки",value:a=>t.normalizeValue(a==null?void 0:a.card_table)},{label:"Min zoom",value:a=>o(a,"minzoom")},{label:"Max zoom",value:a=>o(a,"maxzoom")}],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 dx={class:"flex-1 overflow-y-auto p-4"},ux={class:"space-y-4"},px={class:"border border-gray-200 rounded-lg p-4"},mx={key:0,class:"grid grid-cols-2 gap-2"},fx={class:"text-xs text-gray-500 mb-1"},gx={class:"text-sm font-semibold text-gray-900"},yx={key:1,class:"text-sm text-gray-700 leading-relaxed"},hx={class:"border border-gray-200 rounded-lg p-4"},bx={class:"text-sm text-gray-700 leading-relaxed"},xx={class:"border border-gray-200 rounded-lg p-4"},kx={key:0,class:"grid grid-cols-2 gap-2"},wx={class:"text-xs text-gray-500 mb-1"},_x={class:"text-sm font-semibold text-gray-900"},Ex={key:1,class:"text-sm text-gray-700 leading-relaxed"},Cx={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Nx=["disabled"],Vx=["disabled"],Nt="-",Bo=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(w=>w.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),l=t,i=n,s=e.ref(null);async function c(w){var $;try{const D=await fetch("/api/suggest/gis.group_list");if(!D.ok)return null;const Q=($=(await D.json()).data)==null?void 0:$.find(oe=>String(oe.id)===String(w));return(Q==null?void 0:Q.text)??null}catch{return null}}e.watch(()=>l.data,async w=>{if(s.value=null,(w==null?void 0:w.group_id)!=null){const $=await c(String(w.group_id));s.value=$}},{immediate:!0});function f(w){if(!w||typeof w!="string")return Nt;try{const $=new Date(w);return Number.isNaN($.getTime())?Nt:$.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return Nt}}function a(w){return typeof(w==null?void 0:w.is_active)=="boolean"?w.is_active?"Активний":"Неактивний":typeof(w==null?void 0:w.enabled)=="boolean"?w.enabled?"Активний":"Неактивний":Nt}function h(w){return typeof(w==null?void 0:w.is_public)!="boolean"?Nt:w.is_public?"Публічний":"Приватний"}function u(w){if(w==null)return"";if(Array.isArray(w))return w.filter(Boolean).join(", ");if(typeof w=="boolean")return w?"Так":"Ні";if(typeof w=="object")return"";const $=String(w).trim();return $===""?"":$}function y(w,$){return $.map(D=>({label:D.label,value:D.value(w)})).filter(D=>D.value&&D.value!==Nt)}const d=e.computed(()=>y(l.data,V().general)),p=e.computed(()=>{var $;const w=($=l.data)==null?void 0:$.description;return w!=null&&w!==""?w:Nt}),x=e.computed(()=>y(l.data,V().meta)),g=e.ref(!1),m=e.ref({}),b=e.ref(null),k=e.ref(!1);function V(){const w=cx({resolvedGroupName:s.value,normalizeValue:u,statusLabel:a,visibilityLabel:h,formatDate:f});return w[l.entityType||"service"]||w.service}const S=e.computed(()=>V().edit);function C(){const w=l.data,$={};for(const D of V().edit)switch(D.name){case"group_id":$.group_id=(w==null?void 0:w.group_id)!=null?String(w.group_id):"";break;case"producer":$.producer=(w==null?void 0:w.holder)??(w==null?void 0:w.producer)??"";break;case"keywords":$.keywords=Array.isArray(w==null?void 0:w.keywords)?[...w.keywords]:[];break;case"is_public":$.is_public=(w==null?void 0:w.is_public)??!1;break;case"is_active":$.is_active=typeof(w==null?void 0:w.is_active)=="boolean"?w.is_active:(w==null?void 0:w.enabled)??!1;break;case"enabled":$.enabled=(w==null?void 0:w.enabled)??(w==null?void 0:w.is_active)??!1;break;case"info":$.info=(w==null?void 0:w.info)??!1;break;case"is_static":$.is_static=(w==null?void 0:w.is_static)??!1;break;case"card_auto":$.card_auto=(w==null?void 0:w.card_auto)??!1;break;default:$[D.name]=(w==null?void 0:w[D.name])??"";break}m.value=$,b.value=null,g.value=!0}async function _(){var w,$;if(!(!l.entityId||!l.entityType)){if(b.value){const D=($=(w=b.value).validate)==null?void 0:$.call(w);if(D){fe.notify({type:"warning",title:"Валідація",message:Object.entries(D).map(([q,Q])=>`${q}: ${Q}`).join(`
37
- `)});return}}k.value=!0;try{const D=new Set(S.value.map(Z=>Z.name)),q=Object.fromEntries(Object.entries(m.value).filter(([Z])=>D.has(Z))),Q=l.entityType==="css"?{url:`/api/gis-css/${encodeURIComponent(l.entityId)}`,method:"POST"}:{url:`/api/gis-metadata/${encodeURIComponent(l.entityType)}/${encodeURIComponent(l.entityId)}`,method:"POST"},oe=await fetch(Q.url,{method:Q.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(q)});if(!oe.ok)throw new Error(`Failed to save metadata: ${oe.status}`);fe.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),g.value=!1,i("saved")}catch(D){console.error("Failed to save metadata",D),fe.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{k.value=!1}}}return(w,$)=>(e.openBlock(),e.createElementBlock("div",dx,[e.createElementVNode("div",ux,[e.createElementVNode("div",px,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[$[5]||($[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:C,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"},[...$[4]||($[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)])])]),d.value.length?(e.openBlock(),e.createElementBlock("div",mx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,D=>(e.openBlock(),e.createElementBlock("div",{key:D.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",fx,e.toDisplayString(D.label),1),e.createElementVNode("p",gx,e.toDisplayString(D.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",yx,e.toDisplayString(Nt)))]),e.createElementVNode("div",hx,[$[6]||($[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",bx,e.toDisplayString(p.value),1)]),e.createElementVNode("div",xx,[$[7]||($[7]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Метадані ",-1)),x.value.length?(e.openBlock(),e.createElementBlock("div",kx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,D=>(e.openBlock(),e.createElementBlock("div",{key:D.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",wx,e.toDisplayString(D.label),1),e.createElementVNode("p",_x,e.toDisplayString(D.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",Ex,e.toDisplayString(Nt)))])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:g.value,"onUpdate:visible":$[3]||($[3]=D=>g.value=D),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Cx,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:k.value,onClick:$[2]||($[2]=D=>g.value=!1)}," Скасувати ",8,Nx),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:k.value,onClick:_},e.toDisplayString(k.value?"Збереження…":"Зберегти"),9,Vx)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:m.value,"onUpdate:values":$[0]||($[0]=D=>m.value=D),form:b.value,"onUpdate:form":$[1]||($[1]=D=>b.value=D),schema:S.value},null,8,["values","form","schema"])]),_:1},8,["visible"])]))}}),Bx=["href"],$x=["href"],Sx=["href"],vx={key:0,class:"py-6 px-4 text-sm text-gray-500"},Lx={key:1,class:"py-6 px-4 text-sm text-red-600"},Ax={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Tx=["disabled"],Mx=["disabled"],Fx=192,kl=8,bn=8,$o=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,l=e.defineAsyncComponent(()=>import("@opengis/core").then(J=>J.VsModal)),i=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.ref(!1),c=e.ref(null),f=e.ref(null),a=e.ref(null),h=e.ref(null),u=e.computed(()=>h.value?{position:"fixed",top:`${h.value.top}px`,left:`${h.value.left}px`}:{});e.watch(s,J=>{J&&e.nextTick(N)});const y=e.ref(!1),d=e.ref(null),p=e.ref({}),x=e.ref(null),g=e.ref(""),m=e.ref(!1),b=e.ref(!1),k=e.ref(null),V=e.computed(()=>o.entityId||""),S=(J,ne)=>J?typeof J=="function"?J(ne):typeof J!="string"?"":J.includes(":id")?ne?J.replace(":id",encodeURIComponent(ne)):"":J:"",C=e.computed(()=>{var J;return(J=o.table)==null?void 0:J.trim()}),_=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(C.value)return J=>`/api/form/${C.value}/${J}`}),w=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(C.value)return J=>`/api/table/${J}`}),$=e.computed(()=>S(_.value,V.value)),D=e.computed(()=>o.saveEndpoint?S(o.saveEndpoint,V.value):k.value?`/api/table/${encodeURIComponent(k.value)}`:S(w.value,V.value)),q=e.computed(()=>S("/api/gis-clear-rtile/:id",V.value)),Q=e.computed(()=>S("/api/gis-xml/:id",V.value)),oe=e.computed(()=>S("/api/gis-pretile/:id?zoom=10&max=12",V.value)),Z=e.computed(()=>{var me,pe,de;const J=(pe=(me=o.entityInfo)==null?void 0:me.name)==null?void 0:pe.trim();if(J)return`Редагування ${J}`;const ne=(de=o.entityLabel)==null?void 0:de.trim();return ne?`Редагування ${ne}`:"Редагування"}),ee=e.computed(()=>o.editButtonText||"Редагувати"),H=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function z(){s.value||N(),s.value=!s.value}function v(){s.value=!1}async function M(){const J=o.clearTilesHandler;!J||!V.value||(v(),await J(V.value))}function N(){var F;if(typeof window>"u"||!f.value)return;const J=f.value.getBoundingClientRect(),ne=window.innerWidth,me=window.innerHeight,pe=J.left,de=Math.max(ne-Fx-bn,bn),Ve=Math.min(Math.max(pe,bn),de),Y=((F=a.value)==null?void 0:F.offsetHeight)??0,T=J.bottom+kl;let j=T;if(Y&&T+Y>me-bn){const P=J.top-kl-Y;j=Math.max(P,bn)}h.value={top:j,left:Ve}}function E(J){var me,pe;if(!c.value&&!a.value)return;const ne=J.target;ne&&((me=c.value)!=null&&me.contains(ne)||(pe=a.value)!=null&&pe.contains(ne))||(s.value=!1)}function A(){s.value&&N()}e.onMounted(()=>{window.addEventListener("click",E),window.addEventListener("resize",A),window.addEventListener("scroll",A,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",E),window.removeEventListener("resize",A),window.removeEventListener("scroll",A,!0)});async function I(){var J,ne,me;if(!(!V.value||!$.value)){v(),y.value=!0,m.value=!0,g.value="",d.value=null,p.value={},k.value=null;try{const pe=await fetch($.value);if(!pe.ok)throw new Error(`Failed to load form: ${pe.status}`);const de=await pe.json();p.value=(de==null?void 0:de.data)||{},d.value=(de==null?void 0:de.schema)||null;const Ve=typeof(de==null?void 0:de.token)=="string"&&de.token||typeof((J=de==null?void 0:de.tokens)==null?void 0:J.edit)=="string"&&de.tokens.edit||typeof((ne=de==null?void 0:de.tokens)==null?void 0:ne.edit_token)=="string"&&de.tokens.edit_token||typeof((me=de==null?void 0:de.data)==null?void 0:me.token)=="string"&&de.data.token||null;k.value=Ve,x.value=null}catch(pe){console.error("Failed to load edit form",pe),g.value="Не вдалося завантажити форму редагування"}finally{m.value=!1}}}function K(){y.value=!1,d.value=null,g.value="",k.value=null}async function re(){var J,ne;if(!(!V.value||!D.value)){if(x.value){const me=(ne=(J=x.value).validate)==null?void 0:ne.call(J);if(me){fe.notify({type:"warning",title:"Validation",message:Object.entries(me).map(([pe,de])=>`${pe}: ${de}`).join(`
38
- `)});return}}b.value=!0;try{const me=await fetch(D.value,{method:H.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(p.value)});if(!me.ok)throw new Error(`Failed to save: ${me.status}`);fe.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",p.value),K()}catch(me){console.error("Failed to save edit form",me),fe.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(J,ne)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:c,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:f,type:"button",onClick:e.withModifiers(z,["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":"Дії"},[...ne[3]||(ne[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:a,style:e.normalizeStyle(u.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]"},[q.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:M},[e.createVNode(e.unref(ae.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),ne[4]||(ne[4]=e.createElementVNode("span",null,"Очистити тайли",-1))])):(e.openBlock(),e.createElementBlock("a",{key:1,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:v},[e.createVNode(e.unref(ae.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),ne[5]||(ne[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,Bx))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,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:v},[e.createVNode(e.unref(ae.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),ne[6]||(ne[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,$x)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:2,href:oe.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:v},[e.createVNode(e.unref(ae.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),ne[7]||(ne[7]=e.createElementVNode("span",null,"Pretile",-1))],8,Sx)):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:I},[e.createVNode(e.unref(ae.Pencil),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(ee.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(l),{teleport:"#modal",visible:y.value,"onUpdate:visible":ne[2]||(ne[2]=me=>y.value=me),title:Z.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Ax,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:K,disabled:b.value}," Скасувати ",8,Tx),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:re,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,Mx)])]),default:e.withCtx(()=>[m.value?(e.openBlock(),e.createElementBlock("div",vx," Завантаження форми редагування… ")):g.value?(e.openBlock(),e.createElementBlock("div",Lx,e.toDisplayString(g.value),1)):(e.openBlock(),e.createBlock(e.unref(i),{key:2,values:p.value,"onUpdate:values":ne[0]||(ne[0]=me=>p.value=me),form:x.value,"onUpdate:form":ne[1]||(ne[1]=me=>x.value=me),schema:d.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),xn="cartocss",Dx={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"]]}},zx={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:"'"}]},wl=["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"],Ix={"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 _l=!1;function jx(t,n){if(n<1)return null;const r=t.substring(0,n-1).match(/[a-zA-Z_-]+$/);if(!r)return null;const l=r[0],i=n-l.length;return{prefix:l,startColumn:i,endColumn:n}}function Px(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const l=r[0].replace(/\s*:$/,"").trim(),i=r.index+1,s=r.index+r[0].length,f=t.substring(s).indexOf(";"),a=f>=0?s+f+1:t.length+1;if(n>=i&&n<=a)return wl.includes(l)?l:null}return null}function Rx(t){_l||(_l=!0,t.languages.register({id:xn}),t.languages.setMonarchTokensProvider(xn,Dx),t.languages.setLanguageConfiguration(xn,zx),t.languages.registerCompletionItemProvider(xn,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),l=jx(r,o.column),i=((l==null?void 0:l.prefix)??"").toLowerCase(),s=l&&l.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:l.startColumn,endLineNumber:o.lineNumber,endColumn:l.endColumn}:void 0;return{suggestions:wl.filter(f=>!i||f.toLowerCase().includes(i)||f.toLowerCase().startsWith(i)).map(f=>({label:f,kind:t.languages.CompletionItemKind.Property,insertText:f+": ",...s&&{range:s}}))}}}),t.languages.registerHoverProvider(xn,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),l=Px(r,o.column);if(!l)return;const i=Ix[l];return{contents:[{value:`**${l}**
27
+ `),i=a?"+":r?"":"-";return o+i+`
28
+ `}function ml(t){return t[t.length-1]===`
29
+ `?t.slice(0,-1):t}function kx(t,n){for(var o=/(\n+)([^\n]*)/g,r=(function(){var g=t.indexOf(`
30
+ `);return g=g!==-1?g:t.length,o.lastIndex=g,fl(t.slice(0,g),n)})(),a=t[0]===`
31
+ `||t[0]===" ",i,s;s=o.exec(t);){var c=s[1],p=s[2];i=p[0]===" ",r+=c+(!a&&!i&&p!==""?`
32
+ `:"")+fl(p,n),a=i}return r}function fl(t,n){if(t===""||t[0]===" ")return t;for(var o=/ [^ ]/g,r,a=0,i,s=0,c=0,p="";r=o.exec(t);)c=r.index,c-a>n&&(i=s>a?s:c,p+=`
33
+ `+t.slice(a,i),a=i+1),s=c;return p+=`
34
+ `,t.length-a>n&&s>a?p+=t.slice(a,s)+`
35
+ `+t.slice(s+1):p+=t.slice(a),p.slice(1)}function wx(t){for(var n="",o=0,r,a=0;a<t.length;o>=65536?a+=2:a++)o=hn(t,a),r=mt[o],!r&&yn(o)?(n+=t[a],o>=65536&&(n+=t[a+1])):n+=r||px(o);return n}function _x(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)),($t(t,n,c,!1,!1)||typeof c>"u"&&$t(t,n,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=a,t.dump="["+r+"]"}function gl(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)),($t(t,n+1,p,!0,!0,!1,!0)||typeof p>"u"&&$t(t,n+1,null,!0,!0,!1,!0))&&((!r||a!=="")&&(a+=_o(t,n)),t.dump&&fn===t.dump.charCodeAt(0)?a+="-":a+="- ",a+=t.dump);t.tag=i,t.dump=a||"[]"}function Ex(t,n,o){var r="",a=t.tag,i=Object.keys(o),s,c,p,g,x;for(s=0,c=i.length;s<c;s+=1)x="",r!==""&&(x+=", "),t.condenseFlow&&(x+='"'),p=i[s],g=o[p],t.replacer&&(g=t.replacer.call(o,p,g)),$t(t,n,p,!1,!1)&&(t.dump.length>1024&&(x+="? "),x+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),$t(t,n,g,!1,!1)&&(x+=t.dump,r+=x));t.tag=a,t.dump="{"+r+"}"}function Cx(t,n,o,r){var a="",i=t.tag,s=Object.keys(o),c,p,g,x,l,y;if(t.sortKeys===!0)s.sort();else if(typeof t.sortKeys=="function")s.sort(t.sortKeys);else if(t.sortKeys)throw new gt("sortKeys must be a boolean or a function");for(c=0,p=s.length;c<p;c+=1)y="",(!r||a!=="")&&(y+=_o(t,n)),g=s[c],x=o[g],t.replacer&&(x=t.replacer.call(o,g,x)),$t(t,n+1,g,!0,!0,!0)&&(l=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,l&&(t.dump&&fn===t.dump.charCodeAt(0)?y+="?":y+="? "),y+=t.dump,l&&(y+=_o(t,n)),$t(t,n+1,x,!0,l)&&(t.dump&&fn===t.dump.charCodeAt(0)?y+=":":y+=": ",y+=t.dump,a+=y));t.tag=i,t.dump=a||"{}"}function yl(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,Qr.call(c.represent)==="[object Function]")r=c.represent(n,p);else if(Jr.call(c.represent,p))r=c.represent[p](n,p);else throw new gt("!<"+c.tag+'> tag resolver accepts not "'+p+'" style');t.dump=r}return!0}return!1}function $t(t,n,o,r,a,i,s){t.tag=null,t.dump=o,yl(t,o,!1)||yl(t,o,!0);var c=Qr.call(t.dump),p=r,g;r&&(r=t.flowLevel<0||t.flowLevel>n);var x=c==="[object Object]"||c==="[object Array]",l,y;if(x&&(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(x&&y&&!t.usedDuplicates[l]&&(t.usedDuplicates[l]=!0),c==="[object Object]")r&&Object.keys(t.dump).length!==0?(Cx(t,n,t.dump,a),y&&(t.dump="&ref_"+l+t.dump)):(Ex(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?gl(t,n-1,t.dump,a):gl(t,n,t.dump,a),y&&(t.dump="&ref_"+l+t.dump)):(_x(t,n,t.dump),y&&(t.dump="&ref_"+l+" "+t.dump));else if(c==="[object String]")t.tag!=="?"&&bx(t,t.dump,n,i,p);else{if(c==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new gt("unacceptable kind of an object to dump "+c)}t.tag!==null&&t.tag!=="?"&&(g=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?g="!"+g:g.slice(0,18)==="tag:yaml.org,2002:"?g="!!"+g.slice(18):g="!<"+g+">",t.dump=g+" "+t.dump)}return!0}function Nx(t,n){var o=[],r=[],a,i;for(Co(t,o,r),a=0,i=r.length;a<i;a+=1)n.duplicates.push(o[r[a]]);n.usedDuplicates=new Array(i)}function Co(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)Co(t[a],n,o);else for(r=Object.keys(t),a=0,i=r.length;a<i;a+=1)Co(t[r[a]],n,o)}function Vx(t,n){n=n||{};var o=new fx(n);o.noRefs||Nx(t,o);var r=t;return o.replacer&&(r=o.replacer.call({"":r},"",r)),$t(o,0,r,!0,!0)?o.dump+`
36
+ `:""}var Bx=Vx,$x={dump:Bx};function No(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 Sx=dt,vx=hr,Lx=wr,Ax=Vr,Tx=Br,Mx=yo,hl=Xr.load,Fx=Xr.loadAll,xl=$x.dump,Dx=gt,zx={binary:Ar,float:Nr,map:kr,null:_r,pairs:Mr,set:Fr,timestamp:vr,bool:Er,int:Cr,merge:Lr,omap:Tr,seq:br,str:xr},Ix=No("safeLoad","load"),Px=No("safeLoadAll","loadAll"),jx=No("safeDump","dump"),bl={Type:Sx,Schema:vx,FAILSAFE_SCHEMA:Lx,JSON_SCHEMA:Ax,CORE_SCHEMA:Tx,DEFAULT_SCHEMA:Mx,load:hl,loadAll:Fx,dump:xl,YAMLException:Dx,types:zx,safeLoad:Ix,safeLoadAll:Px,safeDump:jx};const Rx={},Ox={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 Ux(t,n){return e.openBlock(),e.createElementBlock("svg",Ox,[...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 qx=Ce(Rx,[["render",Ux]]),Hx=["aria-label"],Vo=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(qx,{class:"h-3 w-3"})],10,Hx))}}),Wx={},Yx={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 Zx(t,n){return e.openBlock(),e.createElementBlock("svg",Yx,[...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 kl=Ce(Wx,[["render",Zx]]),Gx={},Kx={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 Xx(t,n){return e.openBlock(),e.createElementBlock("svg",Kx,[...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 Qx=Ce(Gx,[["render",Xx]]),Jx={},eb={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 tb(t,n){return e.openBlock(),e.createElementBlock("svg",eb,[...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 wl=Ce(Jx,[["render",tb]]),nb={},ob={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 rb(t,n){return e.openBlock(),e.createElementBlock("svg",ob,[...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 lb=Ce(nb,[["render",rb]]),ab={},sb={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 ib(t,n){return e.openBlock(),e.createElementBlock("svg",sb,[...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 cb=Ce(ab,[["render",ib]]),Bo=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(ce.Settings),{size:16,class:"lucide lucide-settings"}))}});function db(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 d=Array.isArray(l==null?void 0:l.config)?l.config[0]:null;return t.normalizeValue(d==null?void 0:d[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?"Так":"Ні",g=[{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):""}],x=[{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:g,meta:x,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:g,meta:x,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 ub={class:"flex-1 overflow-y-auto p-4"},pb={class:"space-y-4"},mb={class:"border border-gray-200 rounded-lg p-4"},fb={key:0,class:"grid grid-cols-2 gap-2"},gb={class:"text-xs text-gray-500 mb-1"},yb={class:"text-sm font-semibold text-gray-900"},hb={key:1,class:"text-sm text-gray-700 leading-relaxed"},xb={class:"border border-gray-200 rounded-lg p-4"},bb={class:"text-sm text-gray-700 leading-relaxed"},kb={class:"border border-gray-200 rounded-lg p-4"},wb={class:"flex items-center justify-between mb-3"},_b={class:"text-xs text-gray-500 mb-1"},Eb={class:"text-sm font-semibold text-gray-900"},Cb={key:1,class:"text-sm text-gray-700 leading-relaxed"},Nb={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Vb=["disabled"],Bb=["disabled"],St="-",$o=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved","editCssBounds"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(I=>I.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),a=t,i=n,s=e.ref(null);async function c(I){var K;try{const q=await fetch("/api/suggest/gis.group_list");if(!q.ok)return null;const Y=(K=(await q.json()).data)==null?void 0:K.find(D=>String(D.id)===String(I));return(Y==null?void 0:Y.text)??null}catch{return null}}e.watch(()=>a.data,async I=>{if(s.value=null,(I==null?void 0:I.group_id)!=null){const K=await c(String(I.group_id));s.value=K}},{immediate:!0});function p(I){if(!I||typeof I!="string")return St;try{const K=new Date(I);return Number.isNaN(K.getTime())?St:K.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return St}}function g(I){return typeof(I==null?void 0:I.is_active)=="boolean"?I.is_active?"Активний":"Неактивний":typeof(I==null?void 0:I.enabled)=="boolean"?I.enabled?"Активний":"Неактивний":St}function x(I){return typeof(I==null?void 0:I.is_public)!="boolean"?St:I.is_public?"Публічний":"Приватний"}function l(I){if(I==null)return"";if(Array.isArray(I))return I.filter(Boolean).join(", ");if(typeof I=="boolean")return I?"Так":"Ні";if(typeof I=="object")return"";const K=String(I).trim();return K===""?"":K}function y(I,K){return K.map(q=>({label:q.label,value:q.value(I)})).filter(q=>q.value&&q.value!==St)}const d=e.computed(()=>y(a.data,E().general)),u=e.computed(()=>{var K;const I=(K=a.data)==null?void 0:K.description;return I!=null&&I!==""?I:St}),b=e.computed(()=>y(a.data,E().meta)),f=e.computed(()=>b.value.length===1?"grid-cols-1":"grid-cols-2"),m=e.computed(()=>a.entityType==="css"||a.entityType==="raster"),h=e.ref(!1),k=e.ref({}),N=e.ref(null),$=e.ref(!1);function E(){const I=db({resolvedGroupName:s.value,normalizeValue:l,statusLabel:g,visibilityLabel:x,formatDate:p});return I[a.entityType||"service"]||I.service}const w=e.computed(()=>E().edit);function S(){const I=a.data,K={};E().edit.forEach(q=>{switch(q.name){case"group_id":K.group_id=(I==null?void 0:I.group_id)!=null?String(I.group_id):"";break;case"producer":K.producer=(I==null?void 0:I.holder)??(I==null?void 0:I.producer)??"";break;case"keywords":K.keywords=Array.isArray(I==null?void 0:I.keywords)?[...I.keywords]:[];break;case"is_public":K.is_public=(I==null?void 0:I.is_public)??!1;break;case"is_active":K.is_active=typeof(I==null?void 0:I.is_active)=="boolean"?I.is_active:(I==null?void 0:I.enabled)??!1;break;case"enabled":K.enabled=(I==null?void 0:I.enabled)??(I==null?void 0:I.is_active)??!1;break;case"info":K.info=(I==null?void 0:I.info)??!1;break;case"is_static":K.is_static=(I==null?void 0:I.is_static)??!1;break;case"card_auto":K.card_auto=(I==null?void 0:I.card_auto)??!1;break;default:K[q.name]=(I==null?void 0:I[q.name])??"";break}}),k.value=K,N.value=null,h.value=!0}function A(){i("editCssBounds")}function R(I){return a.entityType==="raster"&&I==="Bounds"}async function Z(){var I,K;if(!(!a.entityId||!a.entityType)){if(N.value){const q=(K=(I=N.value).validate)==null?void 0:K.call(I);if(q){ye.notify({type:"warning",title:"Валідація",message:Object.entries(q).map(([ne,Y])=>`${ne}: ${Y}`).join(`
37
+ `)});return}}$.value=!0;try{const q=new Set(w.value.map(v=>v.name)),ne=Object.fromEntries(Object.entries(k.value).filter(([v])=>q.has(v))),Y=a.entityType==="css"?{url:`/api/gis-css/${encodeURIComponent(a.entityId)}`,method:"POST"}:{url:`/api/gis-metadata/${encodeURIComponent(a.entityType)}/${encodeURIComponent(a.entityId)}`,method:"POST"},D=await fetch(Y.url,{method:Y.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(ne)});if(!D.ok)throw new Error(`Failed to save metadata: ${D.status}`);ye.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),h.value=!1,i("saved")}catch(q){console.error("Failed to save metadata",q),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{$.value=!1}}}return(I,K)=>(e.openBlock(),e.createElementBlock("div",ub,[e.createElementVNode("div",pb,[e.createElementVNode("div",mb,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[K[5]||(K[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:S,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"},[...K[4]||(K[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)])])]),d.value.length?(e.openBlock(),e.createElementBlock("div",fb,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,q=>(e.openBlock(),e.createElementBlock("div",{key:q.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",gb,e.toDisplayString(q.label),1),e.createElementVNode("p",yb,e.toDisplayString(q.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",hb,e.toDisplayString(St)))]),e.createElementVNode("div",xb,[K[6]||(K[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",bb,e.toDisplayString(u.value),1)]),e.createElementVNode("div",kb,[e.createElementVNode("div",wb,[K[8]||(K[8]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Метадані ",-1)),m.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:A},[...K[7]||(K[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([f.value,"grid gap-2"])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value,q=>(e.openBlock(),e.createElementBlock("div",{key:q.label,class:e.normalizeClass(["bg-gray-50 rounded-md p-2 border border-gray-100",{"col-span-2":R(q.label)}])},[e.createElementVNode("p",_b,e.toDisplayString(q.label),1),e.createElementVNode("p",Eb,e.toDisplayString(q.value),1)],2))),128))],2)):(e.openBlock(),e.createElementBlock("p",Cb,e.toDisplayString(St)))])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:h.value,"onUpdate:visible":K[3]||(K[3]=q=>h.value=q),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Nb,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:$.value,onClick:K[2]||(K[2]=q=>h.value=!1)}," Скасувати ",8,Vb),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,Bb)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:k.value,"onUpdate:values":K[0]||(K[0]=q=>k.value=q),form:N.value,"onUpdate:form":K[1]||(K[1]=q=>N.value=q),schema:w.value},null,8,["values","form","schema"])]),_:1},8,["visible"])]))}}),$b=["href"],Sb=["href"],vb=["href"],Lb={key:0,class:"py-6 px-4 text-sm text-gray-500"},Ab={key:1,class:"py-6 px-4 text-sm text-red-600"},Tb={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Mb=["disabled"],Fb=["disabled"],Db=192,_l=8,xn=8,So=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(te=>te.VsModal)),i=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.ref(!1),c=e.ref(null),p=e.ref(null),g=e.ref(null),x=e.ref(null),l=e.computed(()=>x.value?{position:"fixed",top:`${x.value.top}px`,left:`${x.value.left}px`}:{});e.watch(s,te=>{te&&e.nextTick(V)});const y=e.ref(!1),d=e.ref(null),u=e.ref({}),b=e.ref(null),f=e.ref(""),m=e.ref(!1),h=e.ref(!1),k=e.ref(null),N=e.computed(()=>o.entityId||""),$=(te,oe)=>te?typeof te=="function"?te(oe):typeof te!="string"?"":te.includes(":id")?oe?te.replace(":id",encodeURIComponent(oe)):"":te:"",E=e.computed(()=>{var te;return(te=o.table)==null?void 0:te.trim()}),w=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(E.value)return te=>`/api/form/${E.value}/${te}`}),S=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(E.value)return te=>`/api/table/${te}`}),A=e.computed(()=>$(w.value,N.value)),R=e.computed(()=>o.saveEndpoint?$(o.saveEndpoint,N.value):k.value?`/api/table/${encodeURIComponent(k.value)}`:$(S.value,N.value)),Z=e.computed(()=>$("/api/gis-clear-rtile/:id",N.value)),I=e.computed(()=>$("/api/gis-xml/:id",N.value)),K=e.computed(()=>$("/api/gis-pretile/:id?zoom=10&max=12",N.value)),q=e.computed(()=>{var fe,he,ie;const te=(he=(fe=o.entityInfo)==null?void 0:fe.name)==null?void 0:he.trim();if(te)return`Редагування ${te}`;const oe=(ie=o.entityLabel)==null?void 0:ie.trim();return oe?`Редагування ${oe}`:"Редагування"}),ne=e.computed(()=>o.editButtonText||"Редагувати"),Y=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function D(){s.value||V(),s.value=!s.value}function v(){s.value=!1}async function F(){const te=o.clearTilesHandler;!te||!N.value||(v(),await te(N.value))}function V(){var Ge;if(typeof window>"u"||!p.value)return;const te=p.value.getBoundingClientRect(),oe=window.innerWidth,fe=window.innerHeight,he=te.left,ie=Math.max(oe-Db-xn,xn),Be=Math.min(Math.max(he,xn),ie),We=((Ge=g.value)==null?void 0:Ge.offsetHeight)??0,qe=te.bottom+_l;let Re=qe;if(We&&qe+We>fe-xn){const Ke=te.top-_l-We;Re=Math.max(Ke,xn)}x.value={top:Re,left:Be}}function _(te){var fe,he;if(!c.value&&!g.value)return;const oe=te.target;oe&&((fe=c.value)!=null&&fe.contains(oe)||(he=g.value)!=null&&he.contains(oe))||(s.value=!1)}function T(){s.value&&V()}e.onMounted(()=>{window.addEventListener("click",_),window.addEventListener("resize",T),window.addEventListener("scroll",T,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",_),window.removeEventListener("resize",T),window.removeEventListener("scroll",T,!0)});async function z(){var te,oe,fe;if(!(!N.value||!A.value)){v(),y.value=!0,m.value=!0,f.value="",d.value=null,u.value={},k.value=null;try{const he=await fetch(A.value);if(!he.ok)throw new Error(`Failed to load form: ${he.status}`);const ie=await he.json();u.value=(ie==null?void 0:ie.data)||{},d.value=(ie==null?void 0:ie.schema)||null;const Be=typeof(ie==null?void 0:ie.token)=="string"&&ie.token||typeof((te=ie==null?void 0:ie.tokens)==null?void 0:te.edit)=="string"&&ie.tokens.edit||typeof((oe=ie==null?void 0:ie.tokens)==null?void 0:oe.edit_token)=="string"&&ie.tokens.edit_token||typeof((fe=ie==null?void 0:ie.data)==null?void 0:fe.token)=="string"&&ie.data.token||null;k.value=Be,b.value=null}catch(he){console.error("Failed to load edit form",he),f.value="Не вдалося завантажити форму редагування"}finally{m.value=!1}}}function Q(){y.value=!1,d.value=null,f.value="",k.value=null}async function se(){var te,oe;if(!(!N.value||!R.value)){if(b.value){const fe=(oe=(te=b.value).validate)==null?void 0:oe.call(te);if(fe){ye.notify({type:"warning",title:"Validation",message:Object.entries(fe).map(([he,ie])=>`${he}: ${ie}`).join(`
38
+ `)});return}}h.value=!0;try{const fe=await fetch(R.value,{method:Y.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(u.value)});if(!fe.ok)throw new Error(`Failed to save: ${fe.status}`);ye.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",u.value),Q()}catch(fe){console.error("Failed to save edit form",fe),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{h.value=!1}}}return(te,oe)=>(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(D,["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":"Дії"},[...oe[3]||(oe[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:g,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:F},[e.createVNode(e.unref(ce.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),oe[4]||(oe[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:v},[e.createVNode(e.unref(ce.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),oe[5]||(oe[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,$b))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,href:I.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:v},[e.createVNode(e.unref(ce.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),oe[6]||(oe[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,Sb)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:2,href:K.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:v},[e.createVNode(e.unref(ce.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),oe[7]||(oe[7]=e.createElementVNode("span",null,"Pretile",-1))],8,vb)):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:z},[e.createVNode(e.unref(ce.Pencil),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(ne.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(a),{teleport:"#modal",visible:y.value,"onUpdate:visible":oe[2]||(oe[2]=fe=>y.value=fe),title:q.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Tb,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:Q,disabled:h.value}," Скасувати ",8,Mb),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:se,disabled:h.value},e.toDisplayString(h.value?"Зберігається…":"Зберегти"),9,Fb)])]),default:e.withCtx(()=>[m.value?(e.openBlock(),e.createElementBlock("div",Lb," Завантаження форми редагування… ")):f.value?(e.openBlock(),e.createElementBlock("div",Ab,e.toDisplayString(f.value),1)):(e.openBlock(),e.createBlock(e.unref(i),{key:2,values:u.value,"onUpdate:values":oe[0]||(oe[0]=fe=>u.value=fe),form:b.value,"onUpdate:form":oe[1]||(oe[1]=fe=>b.value=fe),schema:d.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),bn="cartocss",zb={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"]]}},Ib={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:"'"}]},El=["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"],Pb={"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 Cl=!1;function jb(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 Rb(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(";"),g=p>=0?s+p+1:t.length+1;if(n>=i&&n<=g)return El.includes(a)?a:null}return null}function Ob(t){Cl||(Cl=!0,t.languages.register({id:bn}),t.languages.setMonarchTokensProvider(bn,zb),t.languages.setLanguageConfiguration(bn,Ib),t.languages.registerCompletionItemProvider(bn,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),a=jb(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:El.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(bn,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),a=Rb(r,o.column);if(!a)return;const i=Pb[a];return{contents:[{value:`**${a}**
39
39
 
40
- ${i??"CartoCSS property (Mapnik)."}`}]}}}))}const kn=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(null);let i=null,s=null,c=!1;function f(){return new Promise((h,u)=>{if(s)return h(s);if(window.monaco)return s=window.monaco,h(s);const y=p=>{if([...document.styleSheets].some(g=>{var m;return(m=g==null?void 0:g.href)==null?void 0:m.includes(p)}))return;const x=document.createElement("link");x.rel="stylesheet",x.href=p,document.head.appendChild(x)},d=p=>new Promise((x,g)=>{const m=document.createElement("script");m.src=p,m.onload=()=>x(!0),m.onerror=g,document.body.appendChild(m)});y("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),d("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,h(s)})}).catch(u)})}function a(){var p,x;if(!l.value||!s)return;i&&i.dispose();const h=o.language||"yaml",u=s.editor.createModel(o.modelValue||"",h),y=h==="cartocss"?{acceptSuggestionOnCommitCharacter:!1,acceptSuggestionOnEnter:"off",snippetSuggestions:"none",tabCompletion:"off",wordBasedSuggestions:"off"}:{};i=s.editor.create(l.value,{model:u,theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1},...y});const d=h;s.editor.setModelLanguage(u,d),d==="css"&&((x=(p=s.languages)==null?void 0:p.css)!=null&&x.cssDefaults)&&s.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),i.onDidChangeModelContent(()=>{c||r("update:modelValue",i.getValue())})}return e.watch(()=>o.modelValue,h=>{if(!i)return;const u=i.getModel();if(!u)return;const y=u.getValue();if(h!==y){const d=i.getPosition(),p=i.getSelection(),x=i.getScrollTop(),g=i.getScrollLeft();c=!0,i.executeEdits("external-model-sync",[{range:u.getFullModelRange(),text:h||"",forceMoveMarkers:!0}]),p&&i.setSelection(p),d&&i.setPosition(d),i.setScrollTop(x),i.setScrollLeft(g),c=!1}}),e.watch(()=>o.language,h=>{i&&s&&s.editor.setModelLanguage(i.getModel(),h||"yaml")}),e.watch(()=>o.theme,h=>{i&&s&&s.editor.setTheme(h||"vs-light")}),e.onMounted(async()=>{await f(),Rx(s),a()}),e.onBeforeUnmount(()=>{i&&i.dispose()}),(h,u)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),Ox={class:"flex flex-col flex-1 overflow-hidden"},Ux={class:"flex justify-end gap-2"},qx=["href"],Hx={class:"flex flex-col flex-1 overflow-hidden"},Wx={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Yx={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Zx=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,l=e.ref("");e.watch(()=>o.styleText,f=>{const a=f??"";l.value!==a&&(l.value=a)},{immediate:!0}),e.watch(l,async f=>{var h,u;const a=f??"";o.styleText!==a&&r("update:style-text",a);try{const y=f?gl(f):null;if((h=y==null?void 0:y.colorAttr)!=null&&h.length&&((u=o.styleYaml)==null?void 0:u.colorAttr)!==y.colorAttr){const d=await i(y.colorAttr);y.colors=d.reduce((x,g,m)=>({...x,[g.id.toString()]:s[m]}),{});const p=yl(y);p!==l.value&&(l.value=p)}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(f){return(await fetch(`/api/gis-service/${o.token}/${f}`).then(h=>h.json())).rows}const s=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],c=async()=>{const f=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:f})}),r("update"),fe.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(a){fe.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(a)}};return(f,a)=>(e.openBlock(),e.createElementBlock("div",Ox,[e.createElementVNode("div",Ux,[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,qx),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"},[...a[1]||(a[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",Hx,[e.createElementVNode("div",Wx,[a[2]||(a[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",Yx,[e.createVNode(kn,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=h=>l.value=h),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),Gx={class:"flex flex-col flex-1 min-h-0"},Kx={class:"flex flex-col flex-1 min-h-0"},Xx=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,p=>l.value=p||[],{immediate:!0}),e.watch(l,p=>{const x=Ie(o.token);x&&(x.popup=p),r("update:columns",p)});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),f=[{key:"name",label:"Назва",type:"main"}],a={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:"text",label:"Data"}};function h(){c.value=l.value.map(p=>p.name||p.id),s.value=!0}function u(){var m;const p=[...l.value],x=((m=o.fields)==null?void 0:m.filter(b=>c.value.includes(b.name)))||[],g=Zt(p,x,{selectedKeys:c.value,resolveKey:b=>St(b)});l.value=g,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function d(){let p=[];i.value==="all"?p=o.fields||[]:i.value==="none"?p=[]:p=l.value,p.filter(x=>!x.label).forEach(x=>x.label=x.ua),r("save",p)}return(p,x)=>(e.openBlock(),e.createElementBlock("div",Gx,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:h,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Kx,[i.value==="list"?(e.openBlock(),e.createBlock($t,{key:0,modelValue:l.value,"onUpdate:modelValue":x[0]||(x[0]=g=>l.value=g),"columns-scheme":f,"form-scheme":a,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":x[1]||(x[1]=g=>s.value=g),selection:c.value,"onUpdate:selection":x[2]||(x[2]=g=>c.value=g),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:u,onCancel:y},null,8,["visible","selection","fields"])]))}}),Qx={class:"flex flex-col flex-1 min-h-0"},Jx={class:"flex justify-between mb-3 gap-2"},e1={class:"p-4 space-y-4 text-sm"},t1={class:"space-y-1"},n1={class:"space-y-1"},o1={class:"flex items-center gap-3"},r1={class:"flex justify-end gap-2 p-4 border-t"},l1=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,p=>{l.value=p||[]}),e.watch(l,p=>{r("update:columns",p)});const i=e.ref(!1),s=e.ref({name:"",color:"#2E86DE"}),c=e.defineAsyncComponent(()=>import("@opengis/core").then(p=>p.VsModal)),f=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],a={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function h(p){p&&u(),i.value=p}function u(){s.value={name:"",color:"#2E86DE"}}function y(){var m,b;const p=(m=s.value.name)==null?void 0:m.trim();if(!p){fe.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const x=((b=s.value.color)==null?void 0:b.trim())||"#2E86DE";if(l.value.some(k=>St(k)===St({name:p}))){fe.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:p,color:x}],u(),i.value=!1}function d(){r("save",l.value)}return(p,x)=>(e.openBlock(),e.createElementBlock("div",Qx,[e.createElementVNode("div",Jx,[e.createElementVNode("button",{onClick:x[0]||(x[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:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode($t,{modelValue:l.value,"onUpdate:modelValue":x[1]||(x[1]=g=>l.value=g),"columns-scheme":f,"form-scheme":a,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(c),{teleport:"#modal",visible:i.value,title:"Новий елемент легенди","onUpdate:visible":h},{footer:e.withCtx(()=>[e.createElementVNode("div",r1,[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:x[5]||(x[5]=g=>h(!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",e1,[e.createElementVNode("div",t1,[x[6]||(x[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":x[2]||(x[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",n1,[x[7]||(x[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",o1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":x[3]||(x[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":x[4]||(x[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"])]))}}),a1={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},s1=["onClick"],i1=["aria-checked","value"],c1={key:0},d1=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=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",a1,[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),f=>(e.openBlock(),e.createElementBlock("div",{key:f.value,onClick:a=>l(f.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===f.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===f.value,value:f.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===f.value?(e.openBlock(),e.createElementBlock("span",c1,[...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,i1),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===f.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(f.label),3)],10,s1))),128))],2)]))}}),u1={class:"flex flex-col flex-1 min-h-0"},p1={class:"flex flex-col flex-1 min-h-0"},m1=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,g=>l.value=g||[],{immediate:!0}),e.watch(l,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),f=e.ref([]),a=[{key:"name",label:"Name",type:"main"}],h={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:"text",label:"Data"}};function u(){f.value=i.value==="html"?[]:l.value.map(g=>g.name||g.id),c.value=!0}function y(){var k;const g=[...l.value],m=((k=o.fields)==null?void 0:k.filter(V=>f.value.includes(V.name)).map(V=>{const{type:S,format:C,..._}=V;return{..._,format:C??S??"text"}}))||[],b=Zt(g,m,{selectedKeys:f.value,resolveKey:V=>St(V)});if(l.value=b,i.value==="html"&&m.length){const V=m.map(_=>{const w=_.label??"",$=_.name??_.id??"";return`<dd>${w}</dd>
41
- <dt>{{ ${$} }}</dt>`}).join(`
42
- `),C=(s.value??"").trimEnd();s.value=C?`${C}
43
- ${V}`:V}c.value=!1,f.value=[]}function d(){c.value=!1,f.value=[]}function p(){const g=i.value==="html"?"html":"list",m={card_mode:g};g==="html"?m.html=s.value:g==="list"&&(m.list=l.value),r("save","card",m)}const x=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(g,m)=>(e.openBlock(),e.createElementBlock("div",u1,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[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("button",{onClick:p,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(d1,{modelValue:i.value,"onUpdate:modelValue":m[0]||(m[0]=b=>i.value=b),options:x},null,8,["modelValue"]),e.createElementVNode("div",p1,[i.value==="list"?(e.openBlock(),e.createBlock($t,{key:0,modelValue:l.value,"onUpdate:modelValue":m[1]||(m[1]=b=>l.value=b),"columns-scheme":a,"form-scheme":h,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):i.value==="html"?(e.openBlock(),e.createBlock(kn,{key:1,modelValue:s.value,"onUpdate:modelValue":m[2]||(m[2]=b=>s.value=b),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":m[3]||(m[3]=b=>c.value=b),selection:f.value,"onUpdate:selection":m[4]||(m[4]=b=>f.value=b),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:y,onCancel:d},null,8,["visible","selection","fields"])]))}}),f1={class:"flex flex-col flex-1 min-h-0"},g1=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const l=e.ref(o.columns||[]);e.watch(()=>o.columns,p=>l.value=p||[],{immediate:!0}),e.watch(l,p=>r("update:columns",p),{deep:!0,immediate:!0});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),f=[{key:"id",label:"Name"},{key:"label",label:"UA"}],a={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:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function h(){c.value=l.value.map(p=>p.name||p.id),s.value=!0}function u(){var m;const p=[...l.value],x=((m=o.fields)==null?void 0:m.filter(b=>c.value.includes(b.name)))||[],g=Zt(p,x,{selectedKeys:c.value,resolveKey:b=>St(b)});l.value=g,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function d(){let p=[];i.value==="all"?p=o.fields||[]:i.value==="none"?p=[]:p=l.value,r("save",p)}return(p,x)=>(e.openBlock(),e.createElementBlock("div",f1,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:h,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),i.value==="list"?(e.openBlock(),e.createBlock($t,{key:0,modelValue:l.value,"onUpdate:modelValue":x[0]||(x[0]=g=>l.value=g),"columns-scheme":f,"form-scheme":a,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(Wt,{visible:s.value,"onUpdate:visible":x[1]||(x[1]=g=>s.value=g),selection:c.value,"onUpdate:selection":x[2]||(x[2]=g=>c.value=g),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:u,onCancel:y},null,8,["visible","selection","fields"])]))}}),y1=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var p,x,g,m;const{map:o,flyTo:r,setZoom:l}=We(),i=((x=(p=e.getCurrentInstance())==null?void 0:p.appContext.config.globalProperties)==null?void 0:x.$settings)||null,s=t,c=s.id;String(s.id);const f=`${location.origin}/api/vtile/${s.id}/ua/{z}/{x}/{y}.vmt?all=1`,a=Ie(c,{source:{type:"vector",tiles:[f],minzoom:0,maxzoom:14},popup:s.layer.popup,layer:{style:(g=s.layer)==null?void 0:g.style}});n({layerHandle:a}),(s.autoCenter??!0)&&r({center:s.layer.center||((m=i==null?void 0:i.map)==null?void 0:m.center)||[30,50],animate:!1});let h=null;function u(){if(!(a!=null&&a.setTiles))return;const b=f.includes("?")?"&":"?",k=`${f}${b}_=${Date.now()}`;a.setTiles([k])}function y(){h&&clearTimeout(h),h=setTimeout(()=>{h=null,d().catch(b=>console.error("Failed to update map layer",b))},300)}async function d(){o.value&&(u(),a.setStyle(s.styleSpec??null))}return e.watch(()=>s.styleSpec,y,{deep:!0}),e.onBeforeUnmount(()=>{a.remove()}),(b,k)=>null}}),h1={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},b1={class:"flex-1 relative overflow-hidden"},x1={class:"absolute top-0 left-0 w-full z-20"},k1={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},w1={class:"flex items-start justify-between gap-4"},_1={class:"flex-1 min-w-0"},E1={class:"flex items-center text-sm text-gray-500 mb-3"},C1={class:"text-gray-900 font-medium truncate max-w-xs"},N1={class:"flex items-center justify-between gap-4"},V1={class:"flex-1 min-w-0"},B1={class:"flex items-center gap-3 mb-1"},$1={class:"text-base font-semibold text-gray-900 truncate"},S1={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},v1={class:"text-xs font-medium text-green-700"},L1=["title"],A1={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]"},T1={class:"relative w-full h-full"},M1={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},F1={class:"absolute top-4 left-4 z-20"},D1={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},z1={class:"absolute bottom-4 left-4 z-20"},I1={class:"flex-1 flex flex-col h-full"},j1={class:"px-3 pt-3 pb-2 border-b border-gray-100"},P1={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"},R1=["aria-selected","onClick"],O1={class:"leading-none"},U1={class:"flex flex-col flex-1 overflow-y-hidden p-3"},q1="OpenGIS",El=2,Pn=5,H1=1e3,W1=Object.freeze(Object.defineProperty({__proto__:null,default:we(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var T,j;const n=t,o=e.toRef(n,"hideServiceKey"),r=ve.useRoute(),l=ve.useRouter(),{id:i}=r.params,s=e.ref(null),c=e.ref(null),f=e.ref({}),a=e.ref(null),h=((j=(T=e.getCurrentInstance())==null?void 0:T.appContext.config.globalProperties)==null?void 0:j.$settings)||null;function u(F){typeof document>"u"||(document.title=F?`${F} — Сервіс`:q1)}let y=null;const d=e.ref(!1);function p(){var F;return(F=s.value)==null?void 0:F.ctx}function x(F){if(Array.isArray(F))return x(F[0]);if(typeof F!="string"&&typeof F!="number")return null;const P=typeof F=="number"?F:Number(F.trim());return Number.isFinite(P)?P:null}function g(F,P){return F.toFixed(P)}function m(F,P,le){const ye=.5*10**-le;return Math.abs(F-P)>ye}function b(){var ze,Ye,tt,ot;const F=(Ye=(ze=p())==null?void 0:ze.map)==null?void 0:Ye.value;if(!F)return;const P=x(r.query.z),le=x(r.query.x),ye=x(r.query.y);if(P==null||le==null||ye==null)return;const Ee=(tt=F.getCenter)==null?void 0:tt.call(F),ge=(ot=F.getZoom)==null?void 0:ot.call(F);(!Ee||m(Ee.lng,le,Pn)||m(Ee.lat,ye,Pn)||m(ge??0,P,El))&&(d.value=!0,F.jumpTo({center:[le,ye],zoom:P}),d.value=!1)}function k(){var Ee,ge,Ue,ze;if(d.value)return;const F=(ge=(Ee=p())==null?void 0:Ee.map)==null?void 0:ge.value;if(!F)return;const P=(Ue=F.getCenter)==null?void 0:Ue.call(F),le=(ze=F.getZoom)==null?void 0:ze.call(F);if(!P||le==null)return;const ye={...r.query,z:g(le,El),x:g(P.lng,Pn),y:g(P.lat,Pn)};r.query.z===ye.z&&r.query.x===ye.x&&r.query.y===ye.y||l.replace({query:ye})}const V=e.ref(null),S=e.ref(""),C=e.ref([]),_=e.ref([]),w=e.ref([]),$=e.ref("list"),D=e.ref(""),q=e.ref([]),Q=e.ref(!0);let oe=null;const Z=e.computed(()=>{var F,P;return((F=a.value)==null?void 0:F.id)??((P=a.value)==null?void 0:P.service_id)??null}),ee=e.computed(()=>{const F=(h==null?void 0:h.map)||null,P=(F==null?void 0:F.boundary)??null,le=(F==null?void 0:F.katottg)??null;return!P&&!le?null:{boundary:P,katottg:le}}),H=e.computed(()=>{const F=a.value;if(!F)return"";const P=[];!o.value&&F.service_key&&P.push(`Сервіс: ${F.service_key}`),F.description&&P.push(F.description);const le=F.group_name||F.group_id;return le&&P.push(`Група: ${le}`),typeof F.is_public<"u"&&P.push(F.is_public?"Публічний":"Не публічний"),typeof F.is_active<"u"&&P.push(F.is_active?"Активний":"Неактивний"),P.join(", ")}),z=e.computed(()=>{const F=a.value,P=(F==null?void 0:F.group_name)||(F==null?void 0:F.group_id);return P?String(P).toUpperCase():""}),v=[{key:"style",label:"Стиль",icon:bl},{key:"popup",label:"Попап",icon:rx},{key:"filter",label:"Фільтр",icon:ix},{key:"legend",label:"Легенда",icon:Xb},{key:"card",label:"Картка",icon:xl},{key:"metadata",label:"Метадані",icon:Vo}],M=v.map(F=>F.key),N=e.ref("style");e.onMounted(async()=>{const F=r.query.tab;F&&M.includes(F)&&(N.value=F),await ne(),E()});async function E(){var ye;const F=p();if(!(F!=null&&F.ready))return;await F.ready(),b();const P=(ye=F.map)==null?void 0:ye.value;if(!P)return;const le=()=>k();P.on("moveend",le),P.on("zoomend",le),y=()=>{P.off("moveend",le),P.off("zoomend",le)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{b()}),e.watch(N,F=>{r.query.tab!==F&&l.replace({query:{...r.query,tab:F}})}),e.watch(()=>r.query.tab,F=>{F&&M.includes(F)&&N.value!==F&&(N.value=F)}),e.watch(()=>{var F;return(F=a.value)==null?void 0:F.name},F=>u(F),{immediate:!0});function A(F){if(!F)return null;try{return JSON.parse(JSON.stringify(F))}catch(P){return console.warn("Failed to clone style",P),null}}function I(F){if(!F)return null;if(typeof F=="string")try{return Xn(hl.load(F)||null)}catch(P){return console.warn("Failed to parse style yaml",P),null}return Xn(A(F))}function K(F,P){try{return JSON.stringify(F)===JSON.stringify(P)}catch{return!1}}function re(){var P;if(!a.value)return;const F=I(V.value);K(F,((P=a.value)==null?void 0:P.style)??null)||(a.value={...a.value,style:F})}function J(){oe&&clearTimeout(oe),oe=setTimeout(()=>{oe=null,re()},H1)}const ne=async()=>{try{const F=await fetch(`/api/gis-service/${i}`);if(!F.ok)throw new Error(`${F.status}`);const P=await F.json();f.value=P||{},c.value=i;const le=I(P.style);a.value=P?{...P,style:A(le)}:null,V.value=le,S.value=typeof(P==null?void 0:P.style)=="string"?P.style:le?hl.dump(le):"",_.value=(P==null?void 0:P.popup)||[],$.value=P.card_mode==="html"?"html":"list",w.value=P.card,D.value=P.html,C.value=(P==null?void 0:P.legend)||[],q.value=(P==null?void 0:P.filters)||[]}catch(F){console.error("Failed to fetch map info",F)}};e.watch(()=>{var F;return(F=a.value)==null?void 0:F.style},F=>{V.value=I(F)},{deep:!0}),e.watch(()=>V.value,()=>{J()},{deep:!0}),e.onBeforeUnmount(()=>{oe&&(clearTimeout(oe),oe=null),y==null||y(),y=null});async function me(F){try{const P=await fetch(`/api/gis-clear-vtile/${F}`),{message:le,error:ye,code:Ee}=await P.json();if(Ee===200)return fe.notify({type:"success",title:"Успіх",message:le});fe.notify({type:"error",title:"Помилка",message:ye})}catch(P){fe.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(P)}}async function pe(F,P){await Ve({[F]:P},F)}function de(){const F=A(V.value);a.value=a.value?{...a.value,style:F}:a.value}async function Ve(F,P){if(a.value={...a.value||{},...F},typeof F.html<"u"&&(f.value={...f.value||{},html:F.html}),!!Z.value)try{if(!(await fetch(`/api/gis-service/${Z.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(F)})).ok)throw new Error("Save failed");fe.notify({type:"success",title:"Успіх",message:`${P} saved`}),await ne()}catch(le){fe.notify({type:"error",title:"Помилка",message:`Failed to save ${P}`}),console.error(le)}}async function Y(F,P){if(F!=="card"){await pe(F,P);return}const le=(P==null?void 0:P.card_mode)==="html"?"html":"list",ye=le==="html"&&typeof(P==null?void 0:P.html)=="string"?P.html:"",Ee=(le==="html"?[]:null)||(Array.isArray(P==null?void 0:P.list)?P.list:[]);w.value=Ee,$.value=le,D.value=ye;const ge={card_mode:le};le==="html"&&(ge.html=ye),le==="list"&&(ge.card=Ee),await Ve(ge,"card")}return(F,P)=>{var le,ye,Ee;return e.openBlock(),e.createElementBlock("div",h1,[e.createElementVNode("div",b1,[e.createElementVNode("div",x1,[e.createElementVNode("div",k1,[e.createElementVNode("div",w1,[e.createElementVNode("div",_1,[e.createElementVNode("div",E1,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:P[0]||(P[0]=ge=>e.unref(l).push("/gis.datasets"))}," Datasets "),P[11]||(P[11]=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",C1,e.toDisplayString(((le=a.value)==null?void 0:le.name)||"Dataset"),1)]),e.createElementVNode("div",N1,[e.createElementVNode("div",V1,[e.createElementVNode("div",B1,[e.createElementVNode("h1",$1,e.toDisplayString(((ye=a.value)==null?void 0:ye.name)||"Dataset"),1),z.value?(e.openBlock(),e.createElementBlock("div",S1,[e.createElementVNode("span",v1,e.toDisplayString(z.value),1)])):e.createCommentVNode("",!0)]),H.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:H.value},e.toDisplayString(H.value),9,L1)):e.createCommentVNode("",!0)])])]),Z.value?(e.openBlock(),e.createBlock($o,{key:0,class:"flex-shrink-0","entity-id":Z.value,"entity-info":{name:(Ee=a.value)==null?void 0:Ee.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":me,onSaved:ne},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",A1,[e.createElementVNode("div",T1,[e.createVNode(Bn,{ref_key:"mapViewRef",ref:s},{default:e.withCtx(()=>{var ge,Ue,ze,Ye,tt,ot,xt;return[(ge=a.value)!=null&&ge.service_id?(e.openBlock(),e.createBlock(y1,{key:0,id:(Ue=a.value)==null?void 0:Ue.service_id,layer:a.value,"style-spec":((ze=a.value)==null?void 0:ze.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),Z.value?(e.openBlock(),e.createBlock(nr,{key:1,"layer-id":Z.value,boundary:((Ye=a.value)==null?void 0:Ye.boundary)||((tt=ee.value)==null?void 0:tt.boundary)||null,katottg:((ot=a.value)==null?void 0:ot.katottg)||((xt=ee.value)==null?void 0:xt.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",M1,[Z.value?(e.openBlock(),e.createBlock(co,{key:0,"layer-id":Z.value,filters:q.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),P[12]||(P[12]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",F1,[e.createVNode(qt)]),e.createElementVNode("div",D1,[e.createVNode(Mt),f.value.center?(e.openBlock(),e.createBlock(Mt,{key:0,targetCenter:f.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",z1,[e.createVNode(io,{items:C.value||null},null,8,["items"])]),e.createVNode(Yo),e.createVNode(so,{html:f.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(No,{open:Q.value,onToggle:P[1]||(P[1]=ge=>Q.value=!Q.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",Q.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",I1,[e.createElementVNode("div",j1,[e.createElementVNode("div",P1,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(v,ge=>e.createElementVNode("button",{key:ge.key,type:"button",role:"tab","aria-selected":N.value===ge.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",N.value===ge.key?"bg-white shadow-sm text-gray-700":""]),onClick:Ue=>N.value=ge.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ge.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",O1,e.toDisplayString(ge.label),1)],10,R1)),64))])]),e.createElementVNode("div",U1,[N.value==="style"?(e.openBlock(),e.createBlock(Zx,{key:0,token:Z.value,"style-text":S.value,"style-yaml":V.value,"onUpdate:styleYaml":P[2]||(P[2]=ge=>V.value=ge),"onUpdate:styleText":P[3]||(P[3]=ge=>S.value=ge),onUpdate:de},null,8,["token","style-text","style-yaml"])):N.value==="legend"?(e.openBlock(),e.createBlock(l1,{key:1,token:Z.value,columns:C.value,"onUpdate:columns":P[4]||(P[4]=ge=>C.value=ge),onSave:P[5]||(P[5]=ge=>pe("legend",ge))},null,8,["token","columns"])):N.value==="popup"?(e.openBlock(),e.createBlock(Xx,{key:2,token:Z.value,columns:_.value,fields:f.value.fields,"onUpdate:columns":P[6]||(P[6]=ge=>_.value=ge),onSave:P[7]||(P[7]=ge=>pe("popup",ge))},null,8,["token","columns","fields"])):N.value==="card"?(e.openBlock(),e.createBlock(m1,{key:3,token:Z.value,columns:w.value,fields:f.value.fields,"view-mode":$.value,html:D.value,"onUpdate:columns":P[8]||(P[8]=ge=>w.value=ge),onSave:Y},null,8,["token","columns","fields","view-mode","html"])):N.value==="filter"?(e.openBlock(),e.createBlock(g1,{key:4,token:Z.value,fields:f.value.fields,columns:q.value,"onUpdate:columns":P[9]||(P[9]=ge=>q.value=ge),onSave:P[10]||(P[10]=ge=>pe("filters",ge))},null,8,["token","fields","columns"])):N.value==="metadata"?(e.openBlock(),e.createBlock(Bo,{key:5,data:a.value,"entity-id":String(e.unref(i)),"entity-type":"service",onSaved:ne},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-68374a9b"]])},Symbol.toStringTag,{value:"Module"})),Y1={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},Z1={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"},G1={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},K1={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},X1={class:"p-3 border-b border-gray-200"},Q1={class:"flex flex-col sm:flex-row gap-2"},J1={class:"entity-table-root"},ek={class:"gap-2 inline-flex"},tk=["onClick"],nk={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"},ok={class:"text-sm text-gray-500"},rk={class:"font-medium text-gray-700"},lk={class:"font-medium text-gray-700"},ak={class:"font-medium text-gray-700"},sk={class:"flex items-center justify-end gap-3"},ik=Object.freeze(Object.defineProperty({__proto__:null,default:we(e.defineComponent({__name:"RastersTablePage",props:{entityKey:{default:"rasters"},entityBasePath:{default:"/gis.rasters"},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=ve.useRoute(),r=ve.useRouter(),l=t,i=e.computed(()=>{var v;return String(((v=o.meta)==null?void 0:v.title)||"Растри")}),s=e.computed(()=>{var v;return String(((v=o.meta)==null?void 0:v.description)||"")}),c=e.computed(()=>`Пошук ${String(i.value).trim()}...`),f=e.computed(()=>l.entityKey||"rasters"),a=e.computed(()=>l.entityBasePath||"/gis.rasters"),h=e.ref([]),u=e.ref(!0),y=e.ref([]),d=e.ref([]),p=e.ref({}),x=e.ref([]),g=e.ref(String(o.query.search??"")),m=e.ref(Math.max(1,Number(o.query.page)||1)),b=e.ref(15),k=e.ref(0),V=e.computed(()=>k.value>0),S=e.computed(()=>k.value?(m.value-1)*b.value+1:0),C=e.computed(()=>k.value?Math.min(m.value*b.value,k.value):0);function _(v){const M=new URLSearchParams;return Object.entries(v).forEach(([N,E])=>{if(!(E==null||E==="")){if(Array.isArray(E)){E.forEach(A=>{A!=null&&A!==""&&M.append(N,String(A))});return}M.append(N,String(E))}}),M.toString()}function w(){return`${a.value}/new`}function $(v){return`${a.value}/${v}/edit`}async function D(){try{u.value=!0;const v=`/api/data/gis.${f.value}.table`,M=_({...p.value,page:m.value,limit:b.value}),N=await fetch(M?`${v}?${M}`:v);if(!N.ok)throw new Error(`Rows fetch failed: ${N.status}`);const E=await N.json();h.value=E.rows||[],k.value=Number(E.filtered??E.total??E.count??h.value.length)||0,y.value=l.columnsConfig.length?l.columnsConfig:E.columns||[],d.value=E.filters||[],x.value=E.actions||[],y.value.length&&!y.value[0].link?y.value[0].link=`${a.value}/{id}`:y.value.length&&(y.value[0].link=`${a.value}/{id}`)}catch{h.value=[],k.value=0}finally{u.value=!1}}function q(v){p.value=v,m.value=1,z(),D()}async function Q(v,M,N){const E=await fetch(`/api/form/gis.${f.value}.table/${v.id}`);if(!E.ok)throw new Error(`Form fetch failed: ${E.status}`);const I=(await E.json()).token,K=await fetch(`/api/table/${I}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({[M]:N})});if(!K.ok)throw fe.notify({type:"error",title:"Помилка збереження",message:`Поле "${M}" не оновлено`}),new Error(`Save failed: ${K.status}`);fe.notify({title:"Збережено",message:`Поле "${M}" оновлено`})}function oe(v,M){p.value={...p.value,[v]:M},m.value=1,z(),D()}function Z(v){oe((v==null?void 0:v.name)||"search",(v==null?void 0:v.value)??g.value)}function ee(v){g.value="",oe(v||"search",void 0)}function H(v){!v||v===m.value||(m.value=v,z(),D())}function z(){const v={...o.query,page:String(m.value),...g.value?{search:g.value}:{}};g.value||delete v.search,delete v.view,r.replace({query:v})}return e.onMounted(()=>{D(),document.title=i.value}),e.watch(()=>o.name,()=>{m.value=1,g.value="",D(),document.title=i.value}),e.watch(()=>o.query,v=>{const M=Math.max(1,Number(v.page)||1),N=String(v.search??""),E=M!==m.value,A=N!==g.value;!E&&!A||(m.value=M,g.value=N,p.value={...p.value,search:N||void 0},D())}),(v,M)=>(e.openBlock(),e.createElementBlock("div",Y1,[e.createVNode(Ht,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),actions:e.withCtx(()=>[e.createElementVNode("a",Z1,[e.createVNode(e.unref(ae.RefreshCw),{size:16}),M[2]||(M[2]=e.createTextVNode(" Оновити растри ",-1))]),e.createElementVNode("a",{onClick:M[0]||(M[0]=N=>e.unref(r).push(w())),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(ae.Plus),{size:16}),M[3]||(M[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",G1,[e.createElementVNode("div",K1,[e.createElementVNode("div",X1,[e.createElementVNode("div",Q1,[e.createVNode(e.unref(Nn.FilterField),{modelValue:g.value,"onUpdate:modelValue":M[1]||(M[1]=N=>g.value=N),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:Z,onClear:ee,placeholder:c.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Nn.Filter),{schema:d.value,value:p.value,onChange:q,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",J1,[e.createVNode(e.unref(n),{rows:h.value,columns:y.value,loading:u.value,router:e.unref(r),selectable:!1,onCellUpdate:Q,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:N})=>[e.createElementVNode("div",ek,[e.createElementVNode("button",{onClick:E=>e.unref(r).push($(N.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(Vn)],8,tk)])]),_:1},8,["rows","columns","loading","router"])]),V.value?(e.openBlock(),e.createElementBlock("div",nk,[e.createElementVNode("div",ok,[M[4]||(M[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",rk,e.toDisplayString(S.value),1),M[5]||(M[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",lk,e.toDisplayString(C.value),1),M[6]||(M[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",ak,e.toDisplayString(k.value),1)]),e.createElementVNode("div",sk,[e.createVNode(e.unref(fe.VsPagination),{total:k.value,page:m.value,"page-size":b.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":H,onPageChange:H},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-63309b89"]])},Symbol.toStringTag,{value:"Module"})),ck={class:"flex-1 overflow-y-auto p-4 sm:p-6"},dk={class:"space-y-3"},uk={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},pk={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},mk={class:"text-xs text-gray-500 mb-1"},fk={key:0,class:"text-base text-md font-semibold text-gray-900"},gk={key:1,class:"text-base text-md font-semibold text-gray-900"},yk={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},hk={class:"space-y-2"},bk={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},xk={class:"text-sm font-semibold text-gray-900"},kk={class:"text-xs text-gray-600 mt-1"},wk={class:"grid grid-cols-2 gap-3"},_k={class:"text-xs text-gray-500 mb-1"},Ek={class:"text-sm font-semibold text-gray-900"},Ck={class:"bg-gray-50 p-4 rounded-lg"},Nk={class:"grid grid-cols-2 gap-4"},Vk={class:"text-xs text-gray-500 mb-1"},Bk={class:"text-sm font-semibold text-gray-900"},$k=e.defineComponent({directives:{tooltip:fe.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",ck,[e.createElementVNode("div",dk,[e.createElementVNode("div",uk,[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",pk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",mk,e.toDisplayString(l.label),1),l.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",fk,[e.createTextVNode(e.toDisplayString(l.value),1)])),[[r,l.tooltip]]):(e.openBlock(),e.createElementBlock("p",gk,e.toDisplayString(l.value),1))]))),128))])]),e.createElementVNode("div",yk,[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",hk,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",bk,[e.createElementVNode("p",xk,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",kk,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",wk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",_k,e.toDisplayString(l.label),1),e.createElementVNode("p",Ek,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Ck,[e.createElementVNode("div",Nk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",Vk,e.toDisplayString(l.label),1),e.createElementVNode("p",Bk,e.toDisplayString(l.value),1)]))),128))])])])])])])}}}),Sk={class:"flex-1 overflow-y-auto space-y-3 pr-1"},vk={class:"font-medium text-sm text-gray-800"},Lk={class:"text-xs text-gray-500"},Ak=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Sk,[(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",vk,e.toDisplayString(r.name),1),e.createElementVNode("p",Lk,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))]))}}),Tk={},Mk={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 Fk(t,n){return e.openBlock(),e.createElementBlock("svg",Mk,[...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 Dk=we(Tk,[["render",Fk]]),zk={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},Ik={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},jk={class:"flex items-center gap-2"},Pk={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},Rk={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},Ok=["checked"],Uk=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`,l=n.extent&&n.extent.length===4?[...n.extent]:void 0,i=Ie(o,{sourceId:r,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...l?{bounds:l}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":1}},beforeId:n.beforeId??null}),{fitBounds:s}=We(),c=e.ref(1);e.watch(()=>n.tileUrl,u=>{if(!u){i.setVisible(!1);return}i.setVisible(!0),i.setTiles([u])},{immediate:!0}),e.watch(()=>c.value,u=>{i.setOpacity(u)},{immediate:!0});let f=null,a=!1;e.watch(()=>n.extent,u=>{if(!u||u.length!==4)return;const y=u.join(",");if(y!==f){if(f=y,!a){a=!0;return}s==null||s([[u[0],u[1]],[u[2],u[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const h=e.computed(()=>`${Math.round(c.value*100)}%`);return(u,y)=>(e.openBlock(),e.createElementBlock("div",zk,[e.createElementVNode("div",Ik,[e.createElementVNode("div",jk,[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]=d=>c.value=d),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(h.value),1)])]),e.createElementVNode("div",Pk,[e.createElementVNode("label",Rk,[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]=d=>u.$emit("toggle-extent",d.target.checked))},null,40,Ok),y[3]||(y[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),Cl=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,l=e.computed(()=>{const c=n.extent;if(!c||c.length!==4)return null;const[f,a,h,u]=c;return[f,a,h,u].some(y=>typeof y!="number"||Number.isNaN(y))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[f,a],[h,a],[h,u],[f,u],[f,a]]]}}]}}),i=We(),s=Ie(o,{sourceId:r,source:{type:"geojson",data:l.value||{type:"FeatureCollection",features:[]}},layer:{id:o,type:"line",paint:{"line-color":"#ef4444","line-width":2}},beforeId:n.beforeId??null});return e.watch(()=>l.value,c=>{var a;if(!c){s.setVisible(!1),s.setData({type:"FeatureCollection",features:[]});return}s.setVisible(!0),s.setData(c);const f=(a=i.map)==null?void 0:a.value;f!=null&&f.moveLayer&&f.getLayer(o)&&f.moveLayer(o)},{immediate:!0}),(c,f)=>e.createCommentVNode("",!0)}}),qk={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},Hk={class:"flex-1 relative overflow-hidden"},Wk={class:"absolute top-0 left-0 w-full z-20"},Yk={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},Zk={class:"flex items-start justify-between gap-4"},Gk={class:"flex-1 min-w-0"},Kk={class:"flex items-center text-sm text-gray-500 mb-3"},Xk={class:"text-gray-900 font-medium truncate max-w-xs"},Qk={class:"flex items-center justify-between gap-4"},Jk={class:"flex-1 min-w-0"},ew={class:"flex items-center gap-3 mb-1"},tw={class:"text-base font-semibold text-gray-900 truncate"},nw=["title"],ow={class:"flex items-center gap-4 min-w-0"},rw={class:"flex-1 min-w-0"},lw=["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-[105px]"},sw={class:"relative w-full h-full"},iw={class:"absolute top-4 left-4 z-20"},cw={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},dw={class:"flex-1 flex flex-col h-full"},uw={class:"px-3 pt-3 pb-2 border-b border-gray-100"},pw={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"},mw=["aria-selected","onClick"],fw={class:"leading-none"},gw={class:"flex flex-col flex-1 overflow-y-hidden p-3"},yw={key:0,class:"mb-3 text-xs text-slate-500"},hw={key:1,class:"mb-3 text-xs text-rose-600"},bw="OpenGIS",Nl=2,Rn=5,xw=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=ve.useRouter(),r=ve.useRoute(),l=e.ref(null),i=e.computed(()=>{var j;const T=(j=r.params)==null?void 0:j.id;return typeof T=="string"?T:void 0}),s=e.ref(null),c=e.ref(!1),f=e.ref(!1),a=e.ref(null),h=e.ref(!0);let u=null;const y=e.ref(!1);function d(T){if(Array.isArray(T))return d(T[0]);if(typeof T!="string"&&typeof T!="number")return null;const j=typeof T=="number"?T:Number(T.trim());return Number.isFinite(j)?j:null}function p(T,j){return T.toFixed(j)}function x(T,j,F){const P=.5*10**-F;return Math.abs(T-j)>P}function g(){var T;return(T=l.value)==null?void 0:T.ctx}function m(){var ge,Ue,ze,Ye;const T=(Ue=(ge=g())==null?void 0:ge.map)==null?void 0:Ue.value;if(!T)return;const j=d(r.query.z),F=d(r.query.x),P=d(r.query.y);if(j==null||F==null||P==null)return;const le=(ze=T.getCenter)==null?void 0:ze.call(T),ye=(Ye=T.getZoom)==null?void 0:Ye.call(T);(!le||x(le.lng,F,Rn)||x(le.lat,P,Rn)||x(ye??0,j,Nl))&&(y.value=!0,T.jumpTo({center:[F,P],zoom:j}),y.value=!1)}function b(){var le,ye,Ee,ge;if(y.value)return;const T=(ye=(le=g())==null?void 0:le.map)==null?void 0:ye.value;if(!T)return;const j=(Ee=T.getCenter)==null?void 0:Ee.call(T),F=(ge=T.getZoom)==null?void 0:ge.call(T);if(!j||F==null)return;const P={...r.query,z:p(F,Nl),x:p(j.lng,Rn),y:p(j.lat,Rn)};r.query.z===P.z&&r.query.x===P.x&&r.query.y===P.y||o.replace({query:P})}function k(){var j;if(typeof document>"u")return;const T=(j=q.value)==null?void 0:j.name;document.title=T?`${T} — Растер`:bw}const V=e.computed(()=>{var j;const T=(j=s.value)==null?void 0:j.url;return T?/^https?:\/\//i.test(T)||typeof window>"u"||typeof location>"u"?T:`${location.origin}${T}`:""}),S=e.computed(()=>{var T;return((T=s.value)==null?void 0:T.extent)??null}),C=e.computed(()=>i.value?`raster-${i.value}`:void 0),_=e.computed(()=>i.value?`raster-extent-${i.value}`:"raster-extent"),w=e.computed(()=>{const T=C.value??"raster",j=S.value&&S.value.length===4?S.value.join(","):"no-extent";return`${T}-${j}`}),$=e.computed(()=>!!V.value),D=e.computed(()=>{const T=S.value;if(!T||T.length!==4)return null;const[j,F,P,le]=T;return[j,F,P,le].some(ye=>typeof ye!="number"||Number.isNaN(ye))?null:[(j+P)/2,(F+le)/2]}),q=e.computed(()=>{var ye,Ee;const T=s.value,j=T==null?void 0:T.extent,P=i.value??"—",le=[T!=null&&T.extension?`Формат ${String(T.extension).toUpperCase()}`:null,(T==null?void 0:T.resolution)||null].filter(Boolean).join(", ");return{id:P,name:(T==null?void 0:T.name)||((Ee=(ye=T==null?void 0:T.files)==null?void 0:ye[0])==null?void 0:Ee.name),description:(T==null?void 0:T.description)||le||"Попередній перегляд растрового шару.",coverage:j&&j.length===4?`${Y(j[0])}, ${Y(j[1])} → ${Y(j[2])}, ${Y(j[3])}`:"Покриття уточнюється",crs:T!=null&&T.srid?`EPSG:${T.srid}`:"EPSG:4326",source:T!=null&&T.proj4?T.proj4:"Джерело: Mapnik",updatedAt:T!=null&&T.cache?"Дані кешовано":"Нові дані"}}),Q=e.computed(()=>{const T=s.value;return T?[T.source_path,T.srid?`SRID: ${T.srid}`:null,T.is_public?"Публічна":"Не публічна",T.is_active?"Активна":"Неактивна",T.cache?"Кешовано":null].filter(j=>j).join(", "):""}),oe=[{key:"info",label:"Інформація",icon:Dk},{key:"files",label:"Файли",icon:Vn},{key:"metadata",label:"Метадані",icon:Vo}],Z=oe.map(T=>T.key),ee=e.ref(Z.includes(r.query.tab)?r.query.tab:"info"),H=e.ref(!0);e.watch(()=>r.query.tab,T=>{T&&Z.includes(T)&&ee.value!==T&&(ee.value=T)}),e.watch(ee,T=>{r.query.tab!==T&&o.replace({query:{...r.query,tab:T}})});const z=e.computed(()=>I(s.value)),v=e.computed(()=>re(s.value));e.watch(()=>s.value,()=>{k()},{immediate:!0});async function M(){var P;const T=g();if(!(T!=null&&T.ready))return;await T.ready(),m();const j=(P=T.map)==null?void 0:P.value;if(!j)return;const F=()=>b();j.on("moveend",F),j.on("zoomend",F),u=()=>{j.off("moveend",F),j.off("zoomend",F)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{m()}),e.onMounted(()=>{M()}),e.onBeforeUnmount(()=>{u==null||u(),u=null}),e.watch(i,()=>{E()},{immediate:!0});async function N(T){var j;E(),((j=s.value)==null?void 0:j.srid)!==T.srid&&(fe.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await A(`/api/gis-xml/${encodeURIComponent(i.value)}`),fe.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function E(){const T=i.value;if(!T){s.value=null,a.value=null;return}c.value=!0,a.value=null;try{const j=await fetch(`/api/gis-raster/${encodeURIComponent(T)}`);if(!j.ok)throw new Error(`HTTP ${j.status}`);const F=await j.json();F.xml&&(f.value=!0),s.value=F,F.xml||(fe.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await A(`/api/gis-xml/${encodeURIComponent(T)}`),fe.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(T)}?nocache=1`),f.value=!0)}catch(j){console.error("Failed to load raster info",j),s.value=null,a.value=j instanceof Error?j.message:String(j)}finally{c.value=!1}}function A(T){return new Promise((j,F)=>{const P=new EventSource(T),le=[];P.onmessage=ye=>{le.push(ye.data),console.log("Received:",ye.data)},P.addEventListener("end",()=>{P.close(),j(le)}),P.onerror=ye=>{P.close(),j(ye)}})}function I(T){var j;return(j=T==null?void 0:T.files)!=null&&j.length?T.files.map(F=>({name:F.name,resolution:K(F.name,T),size:F.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function K(T,j){const F=T.toLowerCase();return F.endsWith(".tfw")?"Georeference":F.endsWith(".xml")?"Опис":F.endsWith(".tif")||F.endsWith(".tiff")?j!=null&&j.resolution?j.resolution:"Растер":(j==null?void 0:j.resolution)??"Файл"}function re(T){return T?{baseParams:ne(T),spatial:{crs:{code:T.srid?`EPSG:${T.srid}`:"EPSG:4326",description:T.proj4||"WGS 84 — World Geodetic System 1984"},bounds:me(T.extent),resolution:pe(T)},statistics:de(T),technical:Ve(T)}:null}function J(T){return T!=null&&T.length?T.map(F=>{var le;if(!F)return"";const P=F.trim().split(/\s+/)[0];return((le=P==null?void 0:P[0])==null?void 0:le.toUpperCase())||""}).filter(Boolean).join(""):""}function ne(T){var ye,Ee;const j=T.bands_count??((ye=T.bands)==null?void 0:ye.length)??"—",F=J(T.bands),P=(T.bands??[]).map(ge=>ge.trim()).filter(ge=>ge.length>0),le=P.length?P.join(", "):void 0;return[{label:"Розмір растру, px",value:T.width&&T.height?`${T.width}×${T.height}`:"—"},{label:"Формат файлу",value:((Ee=T.extension)==null?void 0:Ee.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:T.total_size?`${T.total_size}`:"—"},{label:"Кількість каналів",value:typeof j=="number"?`${j}${F?` (${F})`:""}`:`${j}${F?` (${F})`:""}`,tooltip:le},{label:"Глибина кольору",value:T.color_depth?`${T.color_depth} біт/канал`:"—"},{label:"Стиснення",value:T.compression||"—"}]}function me(T){return!T||T.length!==4?[]:[{label:"Північ",value:Y(T[3],"N")},{label:"Схід",value:Y(T[2],"E")},{label:"Південь",value:Y(T[1],"S")},{label:"Захід",value:Y(T[0],"W")}]}function pe(T){const j=[{label:"Роздільна здатність",value:T.resolution||"—"}];return T.width&&T.height&&j.push({label:"Розмір пікселя",value:`${T.width} × ${T.height} px`}),j}function de(T){var j;return(j=T.bands)!=null&&j.length?T.bands.map((F,P)=>{const le=n[P%n.length];return{label:`Канал ${P+1}${F?` (${F})`:""}`,cardClass:le.cardClass,titleClass:le.titleClass,metrics:[{label:"Назва",value:F||`Канал ${P+1}`},{label:"Глибина",value:T.color_depth?`${T.color_depth} біт`:"—"},{label:"Статус",value:T.cache?"Кешовано":"Готово"}]}}):[]}function Ve(T){var j;return[{label:"Тип даних",value:T.color_depth?`Unsigned Integer ${T.color_depth}-bit`:"—"},{label:"Компресія",value:T.compression||"—"},{label:"Кольорова інтерпретація",value:((j=T.bands)==null?void 0:j.join(", "))||"—"},{label:"SRID",value:T.srid?`EPSG:${T.srid}`:"—"},{label:"Проекція (proj4)",value:T.proj4||"—"},{label:"URL тайла",value:T.url||"—"}]}function Y(T,j){if(T==null||Number.isNaN(T))return"—";const F=`${T.toFixed(5)}°`;return j?`${F} ${j}`:F}return(T,j)=>(e.openBlock(),e.createElementBlock("div",qk,[e.createElementVNode("div",Hk,[e.createElementVNode("div",Wk,[e.createElementVNode("div",Yk,[e.createElementVNode("div",Zk,[e.createElementVNode("div",Gk,[e.createElementVNode("div",Kk,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:j[0]||(j[0]=F=>e.unref(o).push("/gis.rasters"))}," Растри "),j[3]||(j[3]=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",Xk,e.toDisplayString(q.value.name||"Растер"),1)]),e.createElementVNode("div",Qk,[e.createElementVNode("div",Jk,[e.createElementVNode("div",ew,[e.createElementVNode("h1",tw,e.toDisplayString(q.value.name||"Растер"),1)]),Q.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:Q.value},e.toDisplayString(Q.value),9,nw)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",ow,[e.createElementVNode("div",rw,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:q.value.description},e.toDisplayString(q.value.description),9,lw)]),e.createVNode($o,{"entity-id":i.value||"","entity-info":{name:q.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:N},null,8,["entity-id","entity-info"])])])])]),e.createElementVNode("div",aw,[e.createElementVNode("div",sw,[e.createVNode(Bn,{ref_key:"mapViewRef",ref:l},{default:e.withCtx(()=>[$.value&&f.value?(e.openBlock(),e.createBlock(Uk,{key:w.value,"tile-url":V.value,extent:S.value,"layer-id":C.value,"show-raster-extent":h.value,onToggleExtent:j[1]||(j[1]=F=>h.value=F)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(Cl,{extent:h.value?S.value:null,"layer-id":_.value},null,8,["extent","layer-id"]),e.createElementVNode("div",iw,[e.createVNode(qt)]),e.createElementVNode("div",cw,[e.createVNode(Mt),D.value?(e.openBlock(),e.createBlock(Mt,{key:0,targetCenter:D.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1},512)])]),e.createVNode(No,{open:H.value,onToggle:j[2]||(j[2]=F=>H.value=!H.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",H.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",dw,[e.createElementVNode("div",uw,[e.createElementVNode("div",pw,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(oe,F=>e.createElementVNode("button",{key:F.key,type:"button",role:"tab","aria-selected":ee.value===F.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",ee.value===F.key?"bg-white shadow-sm text-gray-700":""]),onClick:P=>ee.value=F.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(F.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",fw,e.toDisplayString(F.label),1)],10,mw)),64))])]),e.createElementVNode("div",gw,[c.value?(e.openBlock(),e.createElementBlock("div",yw," Завантаження метаданих растру… ")):a.value?(e.openBlock(),e.createElementBlock("div",hw," Не вдалося отримати дані: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),ee.value==="files"?(e.openBlock(),e.createBlock(Ak,{key:2,files:z.value},null,8,["files"])):ee.value==="metadata"?(e.openBlock(),e.createBlock(Bo,{key:3,data:s.value,"entity-id":i.value,"entity-type":"raster",onSaved:E},null,8,["data","entity-id"])):v.value?(e.openBlock(),e.createBlock($k,{key:4,details:v.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}})},Symbol.toStringTag,{value:"Module"})),kw={},ww={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 _w(t,n){return e.openBlock(),e.createElementBlock("svg",ww,[...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 Ew=we(kw,[["render",_w]]),Cw={class:"flex flex-col h-full"},Nw={class:"flex justify-end mb-3 gap-2"},Vw=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.modelValue,set:i=>r("update:modelValue",i)});return(i,s)=>(e.openBlock(),e.createElementBlock("div",Cw,[e.createElementVNode("div",Nw,[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(kn,{modelValue:l.value,"onUpdate:modelValue":s[1]||(s[1]=c=>l.value=c),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),Bw={class:"flex flex-col flex-1 min-h-0"},$w={class:"flex justify-between mb-3 gap-2"},Sw={class:"text-left"},vw={class:"font-medium text-gray-900"},Lw={class:"text-xs text-gray-500"},Aw={class:"flex justify-center gap-2"},Tw=["checked","onChange"],Mw={class:"text-sm font-medium text-gray-900"},Fw=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(p=>p.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.useModel(t,"modelValue"),s=n,c=e.ref(!1),f=e.ref({table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),a={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function h(){f.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},c.value=!0}function u(){c.value=!1}function y(){var g,m;const p=(g=f.value.table)==null?void 0:g.trim(),x=(m=f.value.key)==null?void 0:m.trim();if(!p||!x){fe.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...f.value,table:p,key:x}],c.value=!1}function d(p,x){var m;const g=((m=x==null?void 0:x.target)==null?void 0:m.checked)??!1;p.active=g,i.value=Array.isArray(i.value)?[...i.value]:[]}return(p,x)=>(e.openBlock(),e.createElementBlock("div",Bw,[e.createElementVNode("div",$w,[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:h}," Додати таблицю "),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:x[0]||(x[0]=g=>s("save"))}," Зберегти ")]),e.createVNode($t,{modelValue:i.value,"onUpdate:modelValue":x[1]||(x[1]=g=>i.value=g),"columns-scheme":o,"form-scheme":a,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:g})=>[e.createElementVNode("div",Sw,[e.createElementVNode("div",vw,e.toDisplayString(g.table),1),e.createElementVNode("div",Lw,e.toDisplayString(g.key),1)])]),activeCell:e.withCtx(({row:g})=>[e.createElementVNode("label",Aw,[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:m=>d(g,m)},null,40,Tw)])]),zoomCell:e.withCtx(({row:g})=>[e.createElementVNode("div",Mw,e.toDisplayString(g.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:c.value,"onUpdate:visible":x[3]||(x[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:u}," Скасувати "),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(l),{values:f.value,"onUpdate:values":x[2]||(x[2]=g=>f.value=g),schema:a},null,8,["values"])]),_:1},8,["visible"])]))}}),Dw={class:"flex flex-col flex-1 min-h-0 gap-4"},zw={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},Iw=e.defineComponent({__name:"cartocss-card-tab",props:{card:{},table:{}},emits:["save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.table),i=e.ref(o.card),s=e.defineAsyncComponent(()=>import("@opengis/form").then(f=>f.VsInputText));function c(){r("save",{card_html:i.value,card_table:l.value})}return(f,a)=>(e.openBlock(),e.createElementBlock("div",Dw,[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},[...a[2]||(a[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:l.value,"onUpdate:modelValue":a[0]||(a[0]=h=>l.value=h)},null,8,["modelValue"])]),e.createElementVNode("div",zw,[e.createVNode(kn,{modelValue:i.value,"onUpdate:modelValue":a[1]||(a[1]=h=>i.value=h),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),jw=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=We(),{activateTemporaryLayer:r,deactivateTemporaryLayer:l,setTemporaryLayerOpacity:i}=oo(o.map),s=e.computed(()=>{var u;const h=`${(u=n==null?void 0:n.tileUrl)==null?void 0:u.trim()}`;return h?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(h)?h:h.startsWith("//")?`${window.location.protocol}${h}`:h.startsWith("/")?`${location.origin}${h}`:`${location.origin}/${h}`:""});let c="",f="";function a(){const h=n.active&&!!s.value;c&&(!h||c!==n.layerId)&&(l(c,f||void 0),c="",f=""),h&&(r({id:n.layerId,title:n.title||n.layerId,url:s.value,opacity:n.opacity},{},n.owner),c=n.layerId,f=n.owner||"")}return e.watch(()=>[n.layerId,s.value,n.active,n.owner],a,{immediate:!0}),e.watch(()=>n.opacity,h=>{!c||!n.active||i(c,h,f||void 0)},{immediate:!0}),e.onUnmounted(()=>{c&&(l(c,f||void 0),c="",f="")}),(h,u)=>e.createCommentVNode("",!0)}}),Pw=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:l,ready:i}=We(),s=d=>{!d||typeof window>"u"||window.dispatchEvent(new CustomEvent(lo,{detail:d}))},c=async d=>{const p=await fetch(`/api/map-format?${d.toString()}`);if(!p.ok)throw new Error(`API returned ${p.status}`);return p.json()};let f=null,a=null;const h=d=>{if(!d)return null;if(typeof d=="string")try{return JSON.parse(d)}catch{return null}return d},u=async(d,p)=>{var m;const x=o.value?`external:${o.value},${String(d)}`:null,g=new URLSearchParams({layer:o.value??"",id:String(d)});try{const b=await c(g),k=typeof b.html=="string"?b.html:null,V=h(((m=b==null?void 0:b.data)==null?void 0:m.geom)??(b==null?void 0:b.geom)??null);(k||V)&&s({html:k,geometry:V??p,infoToken:x})}catch(b){console.warn("CartoCSS map-format (id) error",b)}},y=async d=>{var m,b,k,V;if(!o.value)return;if(!r.value){fe.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const p=(m=d==null?void 0:d.lngLat)==null?void 0:m.lng,x=(b=d==null?void 0:d.lngLat)==null?void 0:b.lat;if(typeof p!="number"||typeof x!="number")return;const g=new URLSearchParams({layer:o.value,lat:x.toFixed(6),lng:p.toFixed(6)});try{const S=await c(g),C=h(((k=S==null?void 0:S.data)==null?void 0:k.geom)??(S==null?void 0:S.geom)??null),_=((V=S==null?void 0:S.data)==null?void 0:V.id)??(S==null?void 0:S.id);if(_!=null){await u(_,C);return}Go({html:S==null?void 0:S.html})&&s({html:S==null?void 0:S.html,geometry:C,infoToken:null})}catch(S){console.warn("CartoCSS map-format error",S)}};return i().then(()=>{a=l.value,a&&(a.on("click",y),f=()=>a==null?void 0:a.off("click",y))}),e.onBeforeUnmount(()=>{f==null||f(),f=null,a=null}),()=>{}}}),Rw={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},Ow={class:"flex-1 relative overflow-hidden"},Uw={class:"absolute top-0 left-0 w-full z-20"},qw={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},Hw={class:"flex items-start justify-between gap-4"},Ww={class:"flex-1 min-w-0"},Yw={class:"flex items-center text-sm text-gray-500 mb-3"},Zw={class:"text-gray-900 font-medium truncate max-w-xs"},Gw={class:"flex items-center justify-between gap-4"},Kw={class:"flex-1 min-w-0"},Xw={class:"flex items-center gap-3 mb-1"},Qw={class:"text-base font-semibold text-gray-900 truncate"},Jw={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},e2={class:"text-xs font-medium text-green-700"},t2=["title"],n2={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]"},o2={class:"relative w-full h-full"},r2={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},l2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},a2={class:"flex items-center gap-2"},s2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},i2={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},c2=["checked"],d2={class:"absolute top-4 left-4 z-20"},u2={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},p2={class:"flex-1 flex flex-col h-full"},m2={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},f2=["aria-selected","onClick"],g2={class:"leading-none"},y2={class:"flex flex-col flex-1 overflow-y-hidden p-3"},h2={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},b2="cartocss-demo-001",x2="OpenGIS",Vl=2,On=5,k2=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"cartocss",setup(t){const n=ve.useRouter(),o=ve.useRoute(),r=e.ref(null),l=[{key:"css",label:"CSS",icon:bl},{key:"data",label:"Дані",icon:Ew},{key:"metadata",label:"Метадані",icon:Vo},{key:"card",label:"Картка",icon:xl}],i=l.map(Y=>Y.key),s=e.ref(i.includes(o.query.tab)?o.query.tab:"css"),c=e.ref(!0),f=e.ref(null),a=e.computed(()=>{var Y;return(Y=f.value)!=null&&Y.source_path?l.filter(T=>T.key==="card"||T.key==="metadata"):l}),h=e.computed(()=>o.params.id||b2),u=e.ref({id:h.value,name:"",description:""});let y=null;const d=e.ref(!1);function p(Y){if(Array.isArray(Y))return p(Y[0]);if(typeof Y!="string"&&typeof Y!="number")return null;const T=typeof Y=="number"?Y:Number(Y.trim());return Number.isFinite(T)?T:null}function x(Y,T){return Y.toFixed(T)}function g(Y,T,j){const F=.5*10**-j;return Math.abs(Y-T)>F}function m(){var Y;return(Y=r.value)==null?void 0:Y.ctx}function b(){var Ee,ge,Ue,ze;const Y=(ge=(Ee=m())==null?void 0:Ee.map)==null?void 0:ge.value;if(!Y)return;const T=p(o.query.z),j=p(o.query.x),F=p(o.query.y);if(T==null||j==null||F==null)return;const P=(Ue=Y.getCenter)==null?void 0:Ue.call(Y),le=(ze=Y.getZoom)==null?void 0:ze.call(Y);(!P||g(P.lng,j,On)||g(P.lat,F,On)||g(le??0,T,Vl))&&(d.value=!0,Y.jumpTo({center:[j,F],zoom:T}),d.value=!1)}function k(){var P,le,ye,Ee;if(d.value)return;const Y=(le=(P=m())==null?void 0:P.map)==null?void 0:le.value;if(!Y)return;const T=(ye=Y.getCenter)==null?void 0:ye.call(Y),j=(Ee=Y.getZoom)==null?void 0:Ee.call(Y);if(!T||j==null)return;const F={...o.query,z:x(j,Vl),x:x(T.lng,On),y:x(T.lat,On)};o.query.z===F.z&&o.query.x===F.x&&o.query.y===F.y||n.replace({query:F})}function V(Y){typeof document>"u"||(document.title=Y?`${Y} — CartoCSS`:x2)}const S=e.ref("");e.ref("");const C=e.ref([]),_=e.ref(!1),w=e.ref(!1),$=e.ref(""),D=e.ref(0),q=e.ref(!1),Q=e.ref(1),oe=e.ref(!0),Z=e.computed(()=>`cartocss-layer-${h.value}`),ee=e.computed(()=>`${Math.round(Q.value*100)}%`),H=e.computed(()=>`cartocss-extent-${h.value}`),z=e.computed(()=>{var P;const Y=(P=$.value)==null?void 0:P.trim();if(!Y)return"";const T=Y.includes("?")?"&":"?",j=`${Y}${T}nottl=1`,F=D.value;return F?`${Y}${T}ts=${F}&nocache=1`:j});e.computed(()=>{const Y=f.value;return Y?Y.cartocss_key||Y.source_path||h.value||"":h.value||""});const v=e.ref(""),M=e.ref(""),N=e.computed(()=>{var le;const Y=(le=f.value)==null?void 0:le.bounds;if(!Array.isArray(Y)||Y.length<4)return null;const[T,j,F,P]=Y;return[T,j,F,P].some(ye=>typeof ye!="number"||Number.isNaN(ye))?null:[(T+F)/2,(j+P)/2]}),E=e.computed(()=>{var le;const Y=(le=f.value)==null?void 0:le.bounds;if(!Array.isArray(Y)||Y.length<4)return null;const[T,j,F,P]=Y;return[T,j,F,P].some(ye=>typeof ye!="number"||Number.isNaN(ye))?null:[T,j,F,P]}),A=e.computed(()=>{const Y=f.value;return Y?[Y.description,Y.group_id?`Група: ${Y.group_id}`:null,Y.source_path?`Шлях: ${Y.source_path}`:null,Y.is_public===!0?"Публічний":"Не публічний",Y.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", "):""}),I=e.computed(()=>{var T;const Y=(T=f.value)==null?void 0:T.group_id;return Y?String(Y).toUpperCase():""});e.watch(h,Y=>{Y&&pe(Y)},{immediate:!0}),e.watch(()=>{var Y;return(Y=u.value)==null?void 0:Y.name},Y=>V(Y),{immediate:!0});async function K(){var F;const Y=m();if(!(Y!=null&&Y.ready))return;await Y.ready(),b();const T=(F=Y.map)==null?void 0:F.value;if(!T)return;const j=()=>k();T.on("moveend",j),T.on("zoomend",j),y=()=>{T.off("moveend",j),T.off("zoomend",j)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{b()}),e.onMounted(()=>{K()}),e.onBeforeUnmount(()=>{y==null||y(),y=null}),e.watch(()=>o.query.tab,Y=>{Y&&a.value.some(T=>T.key===Y)&&s.value!==Y&&(s.value=Y)}),e.watch(a,Y=>{Y.length&&!Y.some(T=>T.key===s.value)&&(s.value=Y[0].key)},{immediate:!0}),e.watch(s,Y=>{o.query.tab!==Y&&a.value.some(T=>T.key===Y)&&n.replace({query:{...o.query,tab:Y}})}),e.watch(()=>f.value,Y=>{const T=Y==null?void 0:Y.card_html;v.value=T,M.value=Y==null?void 0:Y.card_table},{immediate:!0});function re(){h.value&&pe(h.value,{bustCache:!0})}async function J(Y,T){if(h.value){w.value=!0;try{const j=await fetch(`/api/gis-css/${h.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!j.ok)throw new Error(`Failed to save cartocss: ${j.status}`);fe.notify({type:"success",title:"Збережено",message:T}),await pe(h.value,{bustCache:!0})}catch(j){console.error("Failed to save CartoCSS",j),fe.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{w.value=!1}}}function ne(Y){if(!Y)return null;if(typeof Y=="string")try{return JSON.parse(Y)}catch(T){return console.warn("Failed to parse CartoCSS config",T),null}return typeof Y=="object"?Y:null}function me(Y){const T=Array.isArray(Y)?Y:Y==null?void 0:Y.datasets;return Array.isArray(T)?T.map((j,F)=>({table:(j==null?void 0:j.table)||(j==null?void 0:j.id)||`dataset_${F+1}`,query:(j==null?void 0:j.query)||"",srid:(j==null?void 0:j.srid)||"",key:(j==null?void 0:j.key)||(j==null?void 0:j.label)||"Без підпису",active:typeof(j==null?void 0:j.active)=="boolean"?j.active:!0,minzoom:typeof(j==null?void 0:j.zoom)>"u"?"":String(j.zoom),maxzoom:typeof(j==null?void 0:j.maxzoom)>"u"?"":String(j.maxzoom),columns:(j==null?void 0:j.columns)||"",proj4text:(j==null?void 0:j.proj4text)||""})):[]}async function pe(Y,T){_.value=!0;try{const j=await fetch(`/api/gis-css/${Y}`);if(!j.ok)throw new Error(`Failed to load cartocss: ${j.status}`);const F=await j.json(),P=(F==null?void 0:F.message)||F||{};f.value=P,u.value={id:P.cartocss_key||Y,name:P.name||u.value.name,description:P.description||u.value.description},S.value=typeof P.style=="string"?P.style:"";const le=ne(P.config??[]);C.value=me(le);const ye=typeof P.url=="string"?P.url:"";$.value=ye,q.value=!!(ye&&P.enabled!==!1),D.value=T!=null&&T.bustCache?Date.now():0}catch(j){console.error("Failed to fetch CartoCSS",j),q.value=!1,$.value="",D.value=0,f.value=null}finally{_.value=!1}}async function de(){await J({style:S.value||"",config:C.value},"CartoCSS оновлено")}async function Ve(Y){const T=await fetch(`/api/gis-css/${h.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!T.ok)throw new Error(`Failed to save cartocss: ${T.status}`);fe.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(Y,T)=>(e.openBlock(),e.createElementBlock("div",Rw,[e.createElementVNode("div",Ow,[e.createElementVNode("div",Uw,[e.createElementVNode("div",qw,[e.createElementVNode("div",Hw,[e.createElementVNode("div",Ww,[e.createElementVNode("div",Yw,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:T[0]||(T[0]=j=>e.unref(n).push("/gis.cartocss"))}," CartoCSS "),T[6]||(T[6]=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",Zw,e.toDisplayString(u.value.name||"CartoCSS"),1)]),e.createElementVNode("div",Gw,[e.createElementVNode("div",Kw,[e.createElementVNode("div",Xw,[e.createElementVNode("h1",Qw,e.toDisplayString(u.value.name||"CartoCSS"),1),I.value?(e.openBlock(),e.createElementBlock("div",Jw,[e.createElementVNode("span",e2,e.toDisplayString(I.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,t2)):e.createCommentVNode("",!0)])])]),e.createVNode($o,{class:"flex-shrink-0","entity-id":h.value,"entity-info":u.value,"form-endpoint":j=>`/api/form/gis.cartocss.table/${j}`,"save-endpoint":j=>`/api/gis-css/${j}`,"entity-label":"CartoCSS","save-method":"post",onSaved:re},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])])]),e.createElementVNode("div",n2,[e.createElementVNode("div",o2,[e.createVNode(Bn,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var j,F;return[e.createElementVNode("div",r2,[e.createElementVNode("div",l2,[e.createElementVNode("div",a2,[T[7]||(T[7]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":T[1]||(T[1]=P=>Q.value=P),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,Q.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(ee.value),1)])]),e.createElementVNode("div",s2,[e.createElementVNode("label",i2,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:oe.value,onChange:T[2]||(T[2]=P=>oe.value=P.target.checked)},null,40,c2),T[8]||(T[8]=e.createElementVNode("span",null,"Межі css",-1))])])]),e.createElementVNode("div",d2,[e.createVNode(qt)]),e.createElementVNode("div",u2,[e.createVNode(Mt),N.value?(e.openBlock(),e.createBlock(Mt,{key:0,targetCenter:N.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),z.value?(e.openBlock(),e.createBlock(jw,{key:0,"layer-id":Z.value,"tile-url":z.value,active:q.value,opacity:Q.value,title:u.value.name,owner:h.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(Cl,{extent:oe.value?E.value:null,"layer-id":H.value},null,8,["extent","layer-id"]),e.createVNode(Pw,{"cartocss-id":h.value,bounds:((j=f.value)==null?void 0:j.bounds)??null,active:q.value,"info-enabled":(F=f.value)==null?void 0:F.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(so,{"map-id":h.value},null,8,["map-id"])]}),_:1},512)])]),f.value?(e.openBlock(),e.createBlock(No,{key:0,open:c.value,onToggle:T[3]||(T[3]=j=>c.value=!c.value)},null,8,["open"])):e.createCommentVNode("",!0)]),f.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",c.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",p2,[a.value.length>1?(e.openBlock(),e.createElementBlock("div",m2,[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(${a.value.length}, minmax(0, 1fr))`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,j=>(e.openBlock(),e.createElementBlock("button",{key:j.key,type:"button",role:"tab","aria-selected":s.value===j.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",s.value===j.key?"bg-white shadow-sm text-gray-700":""]),onClick:F=>s.value=j.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(j.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",g2,e.toDisplayString(j.label),1)],10,f2))),128))],4)])):e.createCommentVNode("",!0),e.createElementVNode("div",y2,[_.value?(e.openBlock(),e.createElementBlock("div",h2," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[s.value==="css"?(e.openBlock(),e.createBlock(Vw,{key:0,modelValue:S.value,"onUpdate:modelValue":T[4]||(T[4]=j=>S.value=j),class:"flex-1 min-h-0",onSave:de},null,8,["modelValue"])):s.value==="data"?(e.openBlock(),e.createBlock(Fw,{key:1,modelValue:C.value,"onUpdate:modelValue":T[5]||(T[5]=j=>C.value=j),class:"flex-1 min-h-0 flex flex-col",onSave:de},null,8,["modelValue"])):s.value==="card"?(e.openBlock(),e.createBlock(Iw,{key:2,card:v.value,table:M.value,class:"flex-1 min-h-0",onSave:Ve},null,8,["card","table"])):s.value==="metadata"?(e.openBlock(),e.createBlock(Bo,{key:3,data:f.value,"entity-id":h.value,"entity-type":"css",onSaved:re},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}})},Symbol.toStringTag,{value:"Module"})),w2={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},_2=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,l=n,i=e.computed({get:()=>r.modelValue,set:c=>l("update:modelValue",c)}),s=e.computed({get:()=>r.form,set:c=>l("update:form",c)});return(c,f)=>(e.openBlock(),e.createElementBlock("section",w2,[f[2]||(f[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:i.value,"onUpdate:values":f[0]||(f[0]=a=>i.value=a),form:s.value,"onUpdate:form":f[1]||(f[1]=a=>s.value=a)},null,8,["schema","values","form"]))]))}}),E2={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},C2=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},options:{}},emits:["update:layerIDs"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.layerIDs,set:i=>r("update:layerIDs",i)});return(i,s)=>(e.openBlock(),e.createElementBlock("section",E2,[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(Fo.VsInputArraySelect),{data:"layer_list",api:"/api/suggest/layer_list",modelValue:l.value,"onUpdate:modelValue":s[0]||(s[0]=c=>l.value=c),placeholder:"Шари"},null,8,["modelValue"])]))}}),N2={class:"w-full"},V2=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",N2,[e.createVNode(An,{class:"w-full h-[calc(100vh-200px)]",height:"h-[calc(100vh-200px)]",id:t.id},null,8,["id"])]))}}),B2={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},$2={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},S2={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"},v2={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},L2={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},A2=["disabled"],T2=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(""),i=e.ref(null);e.watch(()=>o.modelValue,f=>{if(f){try{l.value=JSON.stringify(f,null,2)}catch{l.value="{}"}i.value=null}},{immediate:!0}),e.watch(l,f=>{if(!f.trim()){i.value=null;return}try{JSON.parse(f),i.value=null}catch(a){i.value=a.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:f}=window;if(f&&f.editor){const a=f.editor.getEditors();a.length>0&&a[a.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function s(){r("update:modelValue",null),l.value="",i.value=null}function c(){if(!i.value)try{const f=JSON.parse(l.value);r("save",f),s()}catch(f){console.error("Failed to parse JSON",f)}}return(f,a)=>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",B2,[e.createElementVNode("div",$2,[a[1]||(a[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(ae.X),{size:20})])]),i.value?(e.openBlock(),e.createElementBlock("div",S2," Помилка JSON: "+e.toDisplayString(i.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",v2,[e.createVNode(kn,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=h=>l.value=h),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",L2,[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,A2)])])])):e.createCommentVNode("",!0)}}),M2={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},F2={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},D2={class:"w-full text-sm"},z2={class:"divide-y divide-gray-200"},I2={class:"px-4 py-3"},j2=["onUpdate:modelValue","onChange"],P2=["value"],R2={class:"px-4 py-3"},O2=["onUpdate:modelValue","onChange"],U2=["value"],q2={class:"px-4 py-3 text-center"},H2=["checked","onChange"],W2={class:"px-4 py-3"},Y2={key:0,class:"flex items-center gap-2"},Z2=["onClick"],G2=["onClick"],K2={key:1},X2=["onClick"],Q2={class:"px-4 py-3 text-right"},J2=["onClick"],e_=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=["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),f=e.computed(()=>o.modelValue||[]);function a(){const m=[...f.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",m)}function h(m){fe.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=f.value.filter((k,V)=>V!==m);r("update:modelValue",b)}})}function u(m,b,k){const V=[...f.value];V[m]={...V[m],[b]:k},r("update:modelValue",V)}function y(m){return!!m&&Object.keys(m).length>0}function d(m,b){c.value=m,s.value=b||{}}function p(m){d(m,{})}function x(m){fe.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{u(m,"config",void 0)}})}function g(m){c.value>-1&&u(c.value,"config",m),s.value=null,c.value=-1}return(m,b)=>{var k;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[b[1]||(b[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:a,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(k=f.value)!=null&&k.length?(e.openBlock(),e.createElementBlock("div",F2,[e.createElementVNode("table",D2,[b[2]||(b[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",z2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(V,S)=>(e.openBlock(),e.createElementBlock("tr",{key:S,class:"hover:bg-gray-50"},[e.createElementVNode("td",I2,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":C=>V.type=C,onChange:C=>u(S,"type",V.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(l,C=>e.createElementVNode("option",{key:C,value:C},e.toDisplayString(C),9,P2)),64))],40,j2),[[e.vModelSelect,V.type]])]),e.createElementVNode("td",R2,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":C=>V.position=C,onChange:C=>u(S,"position",V.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,C=>e.createElementVNode("option",{key:C,value:C},e.toDisplayString(C),9,U2)),64))],40,O2),[[e.vModelSelect,V.position]])]),e.createElementVNode("td",q2,[e.createElementVNode("input",{type:"checkbox",checked:V.visible!==!1,onChange:C=>u(S,"visible",C.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,H2)]),e.createElementVNode("td",W2,[y(V.config)?(e.openBlock(),e.createElementBlock("div",Y2,[e.createElementVNode("button",{onClick:C=>d(S,V.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(ae.Pen),{size:16})],8,Z2),e.createElementVNode("button",{onClick:C=>x(S),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(ae.X),{size:16})],8,G2)])):(e.openBlock(),e.createElementBlock("div",K2,[e.createElementVNode("button",{onClick:C=>p(S),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(ae.Plus),{size:16})],8,X2)]))]),e.createElementVNode("td",Q2,[e.createElementVNode("button",{onClick:C=>h(S),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(ae.Trash2),{size:16})],8,J2)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",M2," Немає віджетів. Додайте перший віджет. ")),e.createVNode(T2,{teleport:"#modal",modelValue:s.value,"onUpdate:modelValue":b[0]||(b[0]=V=>s.value=V),onSave:g},null,8,["modelValue"])])}}}),t_={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},n_={class:"mx-1"},o_={class:"text-gray-900 font-semibold"},r_=["disabled"],l_={key:0,class:"text-center py-12 mt-6 px-[24px]"},a_={key:1,class:"px-[24px] overflow-y-auto"},s_={class:"space-y-6"},i_={class:"space-y-6"},c_={class:"space-y-6"},d_=Object.freeze(Object.defineProperty({__proto__:null,default:we(e.defineComponent({__name:"MapSettings",setup(t){const n=ve.useRouter(),o=ve.useRoute(),r=e.computed(()=>{var C;return((C=n.resolve("/gis.maps").meta)==null?void 0:C.title)??"Карти"}),l=e.ref(!0),i=e.ref(!1),s=e.ref({}),c=e.ref({}),f=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],a=f.map(C=>C.id),h=C=>C?Array.isArray(C)?C[0]:C:null,u=(()=>{const C=h(o.query.tab);return C&&a.includes(C)?C:"general"})(),y=e.ref(u);e.watch(()=>o.query.tab,C=>{const _=h(C);_&&a.includes(_)&&y.value!==_&&(y.value=_)}),e.watch(y,C=>{o.query.tab!==C&&n.replace({query:{...o.query,tab:C}})});const d=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),p=e.computed({get:()=>(d.value.layers||[]).map(C=>C.id||C),set:C=>{d.value.layers=C}});async function x(C){if(!C.length){c.value={};return}try{const _=new URLSearchParams({json:"1",val:Array.from(new Set(C)).join(",")}),w=await fetch(`/api/suggest/layer_list?${_.toString()}`);if(!w.ok)return;const $=await w.json(),D=($==null?void 0:$.data)??$??[],q=Array.isArray(D)?D:[],Q={...c.value};q.forEach(oe=>{const Z=oe.id!=null?String(oe.id):"";Z&&(Q[Z]=oe.text??oe.name??Z)}),c.value=Q}catch(_){console.error("Failed to fetch layer labels:",_)}}const g=e.computed({get:()=>p.value.map(C=>c.value[C]??C),set:C=>{const _=Object.entries(c.value).reduce(($,[D,q])=>($[q]=D,$),{}),w=C.map($=>_[$]??null).filter($=>$!=null);p.value=w}}),m=e.computed(()=>{const C=d.value.center;if(!Array.isArray(C)||C.length<2)return"Не задано";const[_,w]=C;return _===void 0||w===void 0||_===null||w===null||Number.isNaN(Number(_))||Number.isNaN(Number(w))?"Не задано":`Lng ${Number(_).toFixed(6)}, Lat ${Number(w).toFixed(6)}`}),b=e.computed(()=>{const C=d.value.zoom;if(C==null||C==="")return"Не задано";const _=Number(C);return Number.isNaN(_)?"Не задано":_.toFixed(2)}),k=[{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 V(){try{const _=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();d.value={..._,keywords:_.keywords||[],center:_.center??null,widgets:Array.isArray(_.widgets)?_.widgets:[],layers:(_.layers||[]).map(w=>w.id||w)},await x(d.value.layers??[])}catch(C){console.error("Failed to load map:",C),fe.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function S(){var _,w;const C=(w=(_=s.value)==null?void 0:_.validate)==null?void 0:w.call(_);if(C){fe.notify({type:"warning",title:"Валідація",message:Object.entries(C).map(([$,D])=>`${$}: ${D}`).join(`
44
- `)});return}i.value=!0;try{const $=JSON.parse(JSON.stringify(d.value));if($.zoom=Number($.zoom),Array.isArray($.center)&&($.center.every(Q=>Q==null||Q===""||Q===0)||$.center.length===0)&&($.center=null),delete $.created_at,delete $.updated_at,delete $.created_by,delete $.updated_by,delete $.history,delete $.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify($)})).ok)throw new Error("Save failed");fe.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch($){console.error("Save error:",$),fe.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{i.value=!1}}return e.watch(()=>{var C;return((C=d.value)==null?void 0:C.layers)??[]},C=>x(Array.isArray(C)?C.map(_=>(_==null?void 0:_.id)??_):[]),{immediate:!1}),e.onMounted(async()=>{await V()}),(C,_)=>{const w=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",t_,[e.createVNode(Ht,{variant:"form",title:d.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(w,{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",n_,[e.createVNode(e.unref(ae.LucideChevronRight),{size:16,class:"shrink-0"})]),e.createElementVNode("span",o_,e.toDisplayString(d.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[..._[6]||(_[6]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:_[0]||(_[0]=$=>e.unref(n).back()),class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:S,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,r_)]),_:1},8,["title"]),l.value?(e.openBlock(),e.createElementBlock("div",l_,[..._[7]||(_[7]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",a_,[e.createVNode(pr,{tabs:f,activeTab:y.value,"onUpdate:activeTab":_[1]||(_[1]=$=>y.value=$)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",s_,[e.createVNode(_2,{schema:k,loading:l.value,modelValue:d.value,"onUpdate:modelValue":_[2]||(_[2]=$=>d.value=$),form:s.value,"onUpdate:form":_[3]||(_[3]=$=>s.value=$)},null,8,["loading","modelValue","form"])],512),[[e.vShow,y.value==="general"]]),e.withDirectives(e.createElementVNode("div",i_,[e.createVNode(C2,{layerIDs:p.value,"onUpdate:layerIDs":_[4]||(_[4]=$=>p.value=$)},null,8,["layerIDs"])],512),[[e.vShow,y.value==="layers"]]),e.withDirectives(e.createVNode(e_,{modelValue:d.value.widgets,"onUpdate:modelValue":_[5]||(_[5]=$=>d.value.widgets=$)},null,8,["modelValue"]),[[e.vShow,y.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",c_,[e.createVNode(V2,{"center-display":m.value,"zoom-display":b.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"}));je.CartoCSS=ql,je.Classifiers=as,je.MapSettings=Xl,je.MapWidget=An,je.Permissions=Ls,je.Raster=Rl,je.Register=Fl,je.Service=Il,je.default=An,je.install=kf,je.template1=or,je.template2=rr,je.template3=lr,je.template4=ar,je.template5=sr,Object.defineProperties(je,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
40
+ ${i??"CartoCSS property (Mapnik)."}`}]}}}))}const kn=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((x,l)=>{if(s)return x(s);if(window.monaco)return s=window.monaco,x(s);const y=u=>{if([...document.styleSheets].some(f=>{var m;return(m=f==null?void 0:f.href)==null?void 0:m.includes(u)}))return;const b=document.createElement("link");b.rel="stylesheet",b.href=u,document.head.appendChild(b)},d=u=>new Promise((b,f)=>{const m=document.createElement("script");m.src=u,m.onload=()=>b(!0),m.onerror=f,document.body.appendChild(m)});y("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),d("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,x(s)})}).catch(l)})}function g(){var u,b;if(!a.value||!s)return;i&&i.dispose();const x=o.language||"yaml",l=s.editor.createModel(o.modelValue||"",x),y=x==="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 d=x;s.editor.setModelLanguage(l,d),d==="css"&&((b=(u=s.languages)==null?void 0:u.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,x=>{if(!i)return;const l=i.getModel();if(!l)return;const y=l.getValue();if(x!==y){const d=i.getPosition(),u=i.getSelection(),b=i.getScrollTop(),f=i.getScrollLeft();c=!0,i.executeEdits("external-model-sync",[{range:l.getFullModelRange(),text:x||"",forceMoveMarkers:!0}]),u&&i.setSelection(u),d&&i.setPosition(d),i.setScrollTop(b),i.setScrollLeft(f),c=!1}}),e.watch(()=>o.language,x=>{i&&s&&s.editor.setModelLanguage(i.getModel(),x||"yaml")}),e.watch(()=>o.theme,x=>{i&&s&&s.editor.setTheme(x||"vs-light")}),e.onMounted(async()=>{await p(),Ob(s),g()}),e.onBeforeUnmount(()=>{i&&i.dispose()}),(x,l)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:a,class:"w-full h-full"},null,512))}}),Ub={class:"flex flex-col flex-1 overflow-hidden"},qb={class:"flex justify-end gap-2"},Hb=["href"],Wb={class:"flex flex-col flex-1 overflow-hidden"},Yb={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Zb={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Gb=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 g=p??"";a.value!==g&&(a.value=g)},{immediate:!0}),e.watch(a,async p=>{var x,l;const g=p??"";o.styleText!==g&&r("update:style-text",g);try{const y=p?hl(p):null;if((x=y==null?void 0:y.colorAttr)!=null&&x.length&&((l=o.styleYaml)==null?void 0:l.colorAttr)!==y.colorAttr){const d=await i(y.colorAttr);y.colors=d.reduce((b,f,m)=>({...b,[f.id.toString()]:s[m]}),{});const u=xl(y);u!==a.value&&(a.value=u)}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(x=>x.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(g){ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(g)}};return(p,g)=>(e.openBlock(),e.createElementBlock("div",Ub,[e.createElementVNode("div",qb,[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,Hb),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"},[...g[1]||(g[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",Wb,[e.createElementVNode("div",Yb,[g[2]||(g[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",Zb,[e.createVNode(kn,{modelValue:a.value,"onUpdate:modelValue":g[0]||(g[0]=x=>a.value=x),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),Kb={class:"flex flex-col flex-1 min-h-0"},Xb={class:"flex flex-col flex-1 min-h-0"},Qb=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,u=>a.value=u||[],{immediate:!0}),e.watch(a,u=>{const b=Ue(o.token);b&&(b.popup=u),r("update:columns",u)});const i=e.ref("list"),s=e.ref(!1),c=e.ref([]),p=[{key:"name",label:"Назва",type:"main"}],g={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:"text",label:"Data"}};function x(){c.value=a.value.map(u=>u.name||u.id),s.value=!0}function l(){var m;const u=[...a.value],b=((m=o.fields)==null?void 0:m.filter(h=>c.value.includes(h.name)))||[],f=Kt(u,b,{selectedKeys:c.value,resolveKey:h=>Tt(h)});a.value=f,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function d(){let u=[];i.value==="all"?u=o.fields||[]:i.value==="none"?u=[]:u=a.value,u.filter(b=>!b.label).forEach(b=>b.label=b.ua),r("save",u)}return(u,b)=>(e.openBlock(),e.createElementBlock("div",Kb,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Xb,[i.value==="list"?(e.openBlock(),e.createBlock(At,{key:0,modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=f=>a.value=f),"columns-scheme":p,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Zt,{visible:s.value,"onUpdate:visible":b[1]||(b[1]=f=>s.value=f),selection:c.value,"onUpdate:selection":b[2]||(b[2]=f=>c.value=f),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:l,onCancel:y},null,8,["visible","selection","fields"])]))}}),Jb={class:"flex flex-col flex-1 min-h-0"},e1={class:"flex justify-between mb-3 gap-2"},t1={class:"p-4 space-y-4 text-sm"},n1={class:"space-y-1"},o1={class:"space-y-1"},r1={class:"flex items-center gap-3"},l1={class:"flex justify-end gap-2 p-4 border-t"},a1=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,u=>{a.value=u||[]}),e.watch(a,u=>{r("update:columns",u)});const i=e.ref(!1),s=e.ref({name:"",color:"#2E86DE"}),c=e.defineAsyncComponent(()=>import("@opengis/core").then(u=>u.VsModal)),p=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],g={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function x(u){u&&l(),i.value=u}function l(){s.value={name:"",color:"#2E86DE"}}function y(){var m,h;const u=(m=s.value.name)==null?void 0:m.trim();if(!u){ye.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const b=((h=s.value.color)==null?void 0:h.trim())||"#2E86DE";if(a.value.some(k=>Tt(k)===Tt({name:u}))){ye.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}a.value=[...a.value,{name:u,color:b}],l(),i.value=!1}function d(){r("save",a.value)}return(u,b)=>(e.openBlock(),e.createElementBlock("div",Jb,[e.createElementVNode("div",e1,[e.createElementVNode("button",{onClick:b[0]||(b[0]=f=>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:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(At,{modelValue:a.value,"onUpdate:modelValue":b[1]||(b[1]=f=>a.value=f),"columns-scheme":p,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(c),{teleport:"#modal",visible:i.value,title:"Новий елемент легенди","onUpdate:visible":x},{footer:e.withCtx(()=>[e.createElementVNode("div",l1,[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]=f=>x(!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",t1,[e.createElementVNode("div",n1,[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]=f=>s.value.name=f),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",o1,[b[7]||(b[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",r1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[3]||(b[3]=f=>s.value.color=f),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]=f=>s.value.color=f),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"])]))}}),s1={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},i1=["onClick"],c1=["aria-checked","value"],d1={key:0},u1=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",s1,[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:g=>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",d1,[...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,c1),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,i1))),128))],2)]))}}),p1={class:"flex flex-col flex-1 min-h-0"},m1={class:"flex flex-col flex-1 min-h-0"},f1=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,f=>a.value=f||[],{immediate:!0}),e.watch(a,f=>r("update:columns",f));const i=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,f=>{f&&f!==i.value&&(i.value=f)});const s=e.ref(o.html??"");e.watch(()=>o.html,f=>{typeof f=="string"&&f!==s.value&&(s.value=f)},{immediate:!0});const c=e.ref(!1),p=e.ref([]),g=[{key:"name",label:"Name",type:"main"}],x={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:"text",label:"Data"}};function l(){p.value=i.value==="html"?[]:a.value.map(f=>f.name||f.id),c.value=!0}function y(){var k;const f=[...a.value],m=((k=o.fields)==null?void 0:k.filter(N=>p.value.includes(N.name)).map(N=>{const{type:$,format:E,...w}=N;return{...w,format:E??$??"text"}}))||[],h=Kt(f,m,{selectedKeys:p.value,resolveKey:N=>Tt(N)});if(a.value=h,i.value==="html"&&m.length){const N=m.map(w=>{const S=w.label??"",A=w.name??w.id??"";return`<dd>${S}</dd>
41
+ <dt>{{ ${A} }}</dt>`}).join(`
42
+ `),E=(s.value??"").trimEnd();s.value=E?`${E}
43
+ ${N}`:N}c.value=!1,p.value=[]}function d(){c.value=!1,p.value=[]}function u(){const f=i.value==="html"?"html":"list",m={card_mode:f};f==="html"?m.html=s.value:f==="list"&&(m.list=a.value),r("save","card",m)}const b=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(f,m)=>(e.openBlock(),e.createElementBlock("div",p1,[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: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(u1,{modelValue:i.value,"onUpdate:modelValue":m[0]||(m[0]=h=>i.value=h),options:b},null,8,["modelValue"]),e.createElementVNode("div",m1,[i.value==="list"?(e.openBlock(),e.createBlock(At,{key:0,modelValue:a.value,"onUpdate:modelValue":m[1]||(m[1]=h=>a.value=h),"columns-scheme":g,"form-scheme":x,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):i.value==="html"?(e.openBlock(),e.createBlock(kn,{key:1,modelValue:s.value,"onUpdate:modelValue":m[2]||(m[2]=h=>s.value=h),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Zt,{visible:c.value,"onUpdate:visible":m[3]||(m[3]=h=>c.value=h),selection:p.value,"onUpdate:selection":m[4]||(m[4]=h=>p.value=h),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:y,onCancel:d},null,8,["visible","selection","fields"])]))}}),g1={class:"flex flex-col flex-1 min-h-0"},y1=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,u=>a.value=u||[],{immediate:!0}),e.watch(a,u=>r("update:columns",u),{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"}],g={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:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function x(){c.value=a.value.map(u=>u.name||u.id),s.value=!0}function l(){var m;const u=[...a.value],b=((m=o.fields)==null?void 0:m.filter(h=>c.value.includes(h.name)))||[],f=Kt(u,b,{selectedKeys:c.value,resolveKey:h=>Tt(h)});a.value=f,s.value=!1,c.value=[]}function y(){s.value=!1,c.value=[]}function d(){let u=[];i.value==="all"?u=o.fields||[]:i.value==="none"?u=[]:u=a.value,r("save",u)}return(u,b)=>(e.openBlock(),e.createElementBlock("div",g1,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),i.value==="list"?(e.openBlock(),e.createBlock(At,{key:0,modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=f=>a.value=f),"columns-scheme":p,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(Zt,{visible:s.value,"onUpdate:visible":b[1]||(b[1]=f=>s.value=f),selection:c.value,"onUpdate:selection":b[2]||(b[2]=f=>c.value=f),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:l,onCancel:y},null,8,["visible","selection","fields"])]))}}),h1=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var u,b,f,m;const{map:o,flyTo:r,setZoom:a}=tt(),i=((b=(u=e.getCurrentInstance())==null?void 0:u.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`,g=Ue(c,{source:{type:"vector",tiles:[p],minzoom:0,maxzoom:14},popup:s.layer.popup,layer:{style:(f=s.layer)==null?void 0:f.style}});n({layerHandle:g}),(s.autoCenter??!0)&&r({center:s.layer.center||((m=i==null?void 0:i.map)==null?void 0:m.center)||[30,50],animate:!1});let x=null;function l(){if(!(g!=null&&g.setTiles))return;const h=p.includes("?")?"&":"?",k=`${p}${h}_=${Date.now()}`;g.setTiles([k])}function y(){x&&clearTimeout(x),x=setTimeout(()=>{x=null,d().catch(h=>console.error("Failed to update map layer",h))},300)}async function d(){o.value&&(l(),g.setStyle(s.styleSpec??null))}return e.watch(()=>s.styleSpec,y,{deep:!0}),e.onBeforeUnmount(()=>{g.remove()}),(h,k)=>null}}),x1={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},b1={class:"flex-1 relative overflow-hidden"},k1={class:"absolute top-0 left-0 w-full z-20"},w1={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},_1={class:"flex items-start justify-between gap-4"},E1={class:"flex-1 min-w-0"},C1={class:"flex items-center text-sm text-gray-500 mb-3"},N1={class:"text-gray-900 font-medium truncate max-w-xs"},V1={class:"flex items-center justify-between gap-4"},B1={class:"flex-1 min-w-0"},$1={class:"flex items-center gap-3 mb-1"},S1={class:"text-base font-semibold text-gray-900 truncate"},v1={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},L1={class:"text-xs font-medium text-green-700"},A1=["title"],T1={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]"},M1={class:"relative w-full h-full"},F1={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},D1={class:"absolute top-4 left-4 z-20"},z1={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},I1={class:"absolute bottom-4 left-4 z-20"},P1={class:"flex-1 flex flex-col h-full"},j1={class:"px-3 pt-3 pb-2 border-b border-gray-100"},R1={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"},O1=["aria-selected","onClick"],U1={class:"leading-none"},q1={class:"flex flex-col flex-1 overflow-y-hidden p-3"},H1="OpenGIS",Nl=2,Rn=5,W1=1e3,Y1=Object.freeze(Object.defineProperty({__proto__:null,default:Ce(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var Ke,wt;const n=t,o=e.toRef(n,"hideServiceKey"),r=Fe.useRoute(),a=Fe.useRouter(),{id:i}=r.params,s=e.ref(null),c=e.ref(null),p=e.ref({}),g=e.ref(null),x=((wt=(Ke=e.getCurrentInstance())==null?void 0:Ke.appContext.config.globalProperties)==null?void 0:wt.$settings)||null;function l(G){typeof document>"u"||(document.title=G?`${G} — Сервіс`:H1)}let y=null;const d=e.ref(!1);function u(){var G;return(G=s.value)==null?void 0:G.ctx}function b(G){typeof window>"u"||window.dispatchEvent(new CustomEvent(vn,{detail:G}))}function f(G){var Te,ke,He;const ee=(ke=(Te=u())==null?void 0:Te.map)==null?void 0:ke.value;if(!ee||!G)return[];const be=(He=g.value)!=null&&He.service_id?String(g.value.service_id):null;return(ee.queryRenderedFeatures(G)||[]).filter(ve=>{var X,le,de,xe,P,O;const lt=((X=ve==null?void 0:ve.properties)==null?void 0:X.id)??(ve==null?void 0:ve.id);if(lt==null||!(ve!=null&&ve.source)||be&&String(ve.source)!==be)return!1;const W=Ue(ve.source)||Ue((le=ve.layer)==null?void 0:le.id);if(!W)return!1;const B=(xe=(de=W==null?void 0:W.opts)==null?void 0:de.source)==null?void 0:xe.type,M=(O=(P=W==null?void 0:W.opts)==null?void 0:P.layer)==null?void 0:O.type;return B!=="raster"&&M!=="raster"})}function m(G){const ee=f(G==null?void 0:G.point);b({features:ee,externalItems:[]})}function h(G){if(Array.isArray(G))return h(G[0]);if(typeof G!="string"&&typeof G!="number")return null;const ee=typeof G=="number"?G:Number(G.trim());return Number.isFinite(ee)?ee:null}function k(G,ee){return G.toFixed(ee)}function N(G,ee,be){const Pe=.5*10**-be;return Math.abs(G-ee)>Pe}function $(){var ve,lt,W,B;const G=(lt=(ve=u())==null?void 0:ve.map)==null?void 0:lt.value;if(!G)return;const ee=h(r.query.z),be=h(r.query.x),Pe=h(r.query.y);if(ee==null||be==null||Pe==null)return;const Te=(W=G.getCenter)==null?void 0:W.call(G),ke=(B=G.getZoom)==null?void 0:B.call(G);(!Te||N(Te.lng,be,Rn)||N(Te.lat,Pe,Rn)||N(ke??0,ee,Nl))&&(d.value=!0,G.jumpTo({center:[be,Pe],zoom:ee}),d.value=!1)}function E(){var Te,ke,He,ve;if(d.value)return;const G=(ke=(Te=u())==null?void 0:Te.map)==null?void 0:ke.value;if(!G)return;const ee=(He=G.getCenter)==null?void 0:He.call(G),be=(ve=G.getZoom)==null?void 0:ve.call(G);if(!ee||be==null)return;const Pe={...r.query,z:k(be,Nl),x:k(ee.lng,Rn),y:k(ee.lat,Rn)};r.query.z===Pe.z&&r.query.x===Pe.x&&r.query.y===Pe.y||a.replace({query:Pe})}const w=e.ref(null),S=e.ref(""),A=e.ref([]),R=e.ref([]),Z=e.ref([]),I=e.ref("list"),K=e.ref(""),q=e.ref([]),ne=e.ref(!0);let Y=null;const D=e.computed(()=>{var G,ee;return((G=g.value)==null?void 0:G.id)??((ee=g.value)==null?void 0:ee.service_id)??null}),v=e.computed(()=>{const G=(x==null?void 0:x.map)||null,ee=(G==null?void 0:G.boundary)??null,be=(G==null?void 0:G.katottg)??null;return!ee&&!be?null:{boundary:ee,katottg:be}}),F=e.computed(()=>{const G=g.value;if(!G)return"";const ee=[];!o.value&&G.service_key&&ee.push(`Сервіс: ${G.service_key}`),G.description&&ee.push(G.description);const be=G.group_name||G.group_id;return be&&ee.push(`Група: ${be}`),typeof G.is_public<"u"&&ee.push(G.is_public?"Публічний":"Не публічний"),typeof G.is_active<"u"&&ee.push(G.is_active?"Активний":"Неактивний"),ee.join(", ")}),V=e.computed(()=>{const G=g.value,ee=(G==null?void 0:G.group_name)||(G==null?void 0:G.group_id);return ee?String(ee).toUpperCase():""}),_=[{key:"style",label:"Стиль",icon:kl},{key:"popup",label:"Попап",icon:lb},{key:"filter",label:"Фільтр",icon:cb},{key:"legend",label:"Легенда",icon:Qx},{key:"card",label:"Картка",icon:wl},{key:"metadata",label:"Метадані",icon:Bo}],T=_.map(G=>G.key),z=e.ref("style");e.onMounted(async()=>{const G=r.query.tab;G&&T.includes(G)&&(z.value=G),await ie(),Q()});async function Q(){var Pe;const G=u();if(!(G!=null&&G.ready))return;await G.ready(),$();const ee=(Pe=G.map)==null?void 0:Pe.value;if(!ee)return;const be=()=>E();ee.on("moveend",be),ee.on("zoomend",be),ee.on("click",m),y=()=>{ee.off("moveend",be),ee.off("zoomend",be),ee.off("click",m)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{$()}),e.watch(z,G=>{r.query.tab!==G&&a.replace({query:{...r.query,tab:G}})}),e.watch(()=>r.query.tab,G=>{G&&T.includes(G)&&z.value!==G&&(z.value=G)}),e.watch(()=>{var G;return(G=g.value)==null?void 0:G.name},G=>l(G),{immediate:!0});function se(G){if(!G)return null;try{return JSON.parse(JSON.stringify(G))}catch(ee){return console.warn("Failed to clone style",ee),null}}function te(G){if(!G)return null;if(typeof G=="string")try{return Jn(bl.load(G)||null)}catch(ee){return console.warn("Failed to parse style yaml",ee),null}return Jn(se(G))}function oe(G,ee){try{return JSON.stringify(G)===JSON.stringify(ee)}catch{return!1}}function fe(){var ee;if(!g.value)return;const G=te(w.value);oe(G,((ee=g.value)==null?void 0:ee.style)??null)||(g.value={...g.value,style:G})}function he(){Y&&clearTimeout(Y),Y=setTimeout(()=>{Y=null,fe()},W1)}const ie=async()=>{try{const G=await fetch(`/api/gis-service/${i}`);if(!G.ok)throw new Error(`${G.status}`);const ee=await G.json();p.value=ee||{},c.value=i;const be=te(ee.style);g.value=ee?{...ee,style:se(be)}:null,w.value=be,S.value=typeof(ee==null?void 0:ee.style)=="string"?ee.style:be?bl.dump(be):"",R.value=(ee==null?void 0:ee.popup)||[],I.value=ee.card_mode==="html"?"html":"list",Z.value=ee.card,K.value=ee.html,A.value=(ee==null?void 0:ee.legend)||[],q.value=(ee==null?void 0:ee.filters)||[]}catch(G){console.error("Failed to fetch map info",G)}};e.watch(()=>{var G;return(G=g.value)==null?void 0:G.style},G=>{w.value=te(G)},{deep:!0}),e.watch(()=>w.value,()=>{he()},{deep:!0}),e.onBeforeUnmount(()=>{Y&&(clearTimeout(Y),Y=null),y==null||y(),y=null});async function Be(G){try{const ee=await fetch(`/api/gis-clear-vtile/${G}`),{message:be,error:Pe,code:Te}=await ee.json();if(Te===200)return ye.notify({type:"success",title:"Успіх",message:be});ye.notify({type:"error",title:"Помилка",message:Pe})}catch(ee){ye.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(ee)}}async function We(G,ee){await Re({[G]:ee},G)}function qe(){const G=se(w.value);g.value=g.value?{...g.value,style:G}:g.value}async function Re(G,ee){if(g.value={...g.value||{},...G},typeof G.html<"u"&&(p.value={...p.value||{},html:G.html}),!!D.value)try{if(!(await fetch(`/api/gis-service/${D.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(G)})).ok)throw new Error("Save failed");ye.notify({type:"success",title:"Успіх",message:`${ee} saved`}),await ie()}catch(be){ye.notify({type:"error",title:"Помилка",message:`Failed to save ${ee}`}),console.error(be)}}async function Ge(G,ee){if(G!=="card"){await We(G,ee);return}const be=(ee==null?void 0:ee.card_mode)==="html"?"html":"list",Pe=be==="html"&&typeof(ee==null?void 0:ee.html)=="string"?ee.html:"",Te=(be==="html"?[]:null)||(Array.isArray(ee==null?void 0:ee.list)?ee.list:[]);Z.value=Te,I.value=be,K.value=Pe;const ke={card_mode:be};be==="html"&&(ke.html=Pe),be==="list"&&(ke.card=Te),await Re(ke,"card")}return(G,ee)=>{var be,Pe,Te;return e.openBlock(),e.createElementBlock("div",x1,[e.createElementVNode("div",b1,[e.createElementVNode("div",k1,[e.createElementVNode("div",w1,[e.createElementVNode("div",_1,[e.createElementVNode("div",E1,[e.createElementVNode("div",C1,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:ee[0]||(ee[0]=ke=>e.unref(a).push("/gis.datasets"))}," Datasets "),ee[11]||(ee[11]=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",N1,e.toDisplayString(((be=g.value)==null?void 0:be.name)||"Dataset"),1)]),e.createElementVNode("div",V1,[e.createElementVNode("div",B1,[e.createElementVNode("div",$1,[e.createElementVNode("h1",S1,e.toDisplayString(((Pe=g.value)==null?void 0:Pe.name)||"Dataset"),1),V.value?(e.openBlock(),e.createElementBlock("div",v1,[e.createElementVNode("span",L1,e.toDisplayString(V.value),1)])):e.createCommentVNode("",!0)]),F.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:F.value},e.toDisplayString(F.value),9,A1)):e.createCommentVNode("",!0)])])]),D.value?(e.openBlock(),e.createBlock(So,{key:0,class:"flex-shrink-0","entity-id":D.value,"entity-info":{name:(Te=g.value)==null?void 0:Te.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":Be,onSaved:ie},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",T1,[e.createElementVNode("div",M1,[e.createVNode(Bn,{ref_key:"mapViewRef",ref:s},{default:e.withCtx(()=>{var ke,He,ve,lt,W,B,M;return[(ke=g.value)!=null&&ke.service_id?(e.openBlock(),e.createBlock(h1,{key:0,id:(He=g.value)==null?void 0:He.service_id,layer:g.value,"style-spec":((ve=g.value)==null?void 0:ve.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),D.value?(e.openBlock(),e.createBlock(or,{key:1,"layer-id":D.value,boundary:((lt=g.value)==null?void 0:lt.boundary)||((W=v.value)==null?void 0:W.boundary)||null,katottg:((B=g.value)==null?void 0:B.katottg)||((M=v.value)==null?void 0:M.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",F1,[D.value?(e.openBlock(),e.createBlock(uo,{key:0,"layer-id":D.value,filters:q.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),ee[12]||(ee[12]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",D1,[e.createVNode(Wt)]),e.createElementVNode("div",z1,[e.createVNode(It),p.value.center?(e.openBlock(),e.createBlock(It,{key:0,targetCenter:p.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",I1,[e.createVNode(co,{items:A.value||null},null,8,["items"])]),e.createVNode(Zo),e.createVNode(io,{html:p.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(Vo,{open:ne.value,onToggle:ee[1]||(ee[1]=ke=>ne.value=!ne.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",ne.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",P1,[e.createElementVNode("div",j1,[e.createElementVNode("div",R1,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,ke=>e.createElementVNode("button",{key:ke.key,type:"button",role:"tab","aria-selected":z.value===ke.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",z.value===ke.key?"bg-white shadow-sm text-gray-700":""]),onClick:He=>z.value=ke.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ke.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",U1,e.toDisplayString(ke.label),1)],10,O1)),64))])]),e.createElementVNode("div",q1,[z.value==="style"?(e.openBlock(),e.createBlock(Gb,{key:0,token:D.value,"style-text":S.value,"style-yaml":w.value,"onUpdate:styleYaml":ee[2]||(ee[2]=ke=>w.value=ke),"onUpdate:styleText":ee[3]||(ee[3]=ke=>S.value=ke),onUpdate:qe},null,8,["token","style-text","style-yaml"])):z.value==="legend"?(e.openBlock(),e.createBlock(a1,{key:1,token:D.value,columns:A.value,"onUpdate:columns":ee[4]||(ee[4]=ke=>A.value=ke),onSave:ee[5]||(ee[5]=ke=>We("legend",ke))},null,8,["token","columns"])):z.value==="popup"?(e.openBlock(),e.createBlock(Qb,{key:2,token:D.value,columns:R.value,fields:p.value.fields,"onUpdate:columns":ee[6]||(ee[6]=ke=>R.value=ke),onSave:ee[7]||(ee[7]=ke=>We("popup",ke))},null,8,["token","columns","fields"])):z.value==="card"?(e.openBlock(),e.createBlock(f1,{key:3,token:D.value,columns:Z.value,fields:p.value.fields,"view-mode":I.value,html:K.value,"onUpdate:columns":ee[8]||(ee[8]=ke=>Z.value=ke),onSave:Ge},null,8,["token","columns","fields","view-mode","html"])):z.value==="filter"?(e.openBlock(),e.createBlock(y1,{key:4,token:D.value,fields:p.value.fields,columns:q.value,"onUpdate:columns":ee[9]||(ee[9]=ke=>q.value=ke),onSave:ee[10]||(ee[10]=ke=>We("filters",ke))},null,8,["token","fields","columns"])):z.value==="metadata"?(e.openBlock(),e.createBlock($o,{key:5,data:g.value,"entity-id":String(e.unref(i)),"entity-type":"service",onSaved:ie},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-008c5939"]])},Symbol.toStringTag,{value:"Module"})),Z1={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},G1={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"},K1={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},X1={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},Q1={class:"p-3 border-b border-gray-200"},J1={class:"flex flex-col sm:flex-row gap-2"},ek={class:"entity-table-root"},tk={class:"gap-2 inline-flex"},nk=["onClick"],ok={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"},rk={class:"text-sm text-gray-500"},lk={class:"font-medium text-gray-700"},ak={class:"font-medium text-gray-700"},sk={class:"font-medium text-gray-700"},ik={class:"flex items-center justify-end gap-3"},ck=Object.freeze(Object.defineProperty({__proto__:null,default:Ce(e.defineComponent({__name:"RastersTablePage",props:{entityKey:{default:"rasters"},entityBasePath:{default:"/gis.rasters"},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=Fe.useRoute(),r=Fe.useRouter(),a=t,i=e.computed(()=>{var v;return String(((v=o.meta)==null?void 0:v.title)||"Растри")}),s=e.computed(()=>{var v;return String(((v=o.meta)==null?void 0:v.description)||"")}),c=e.computed(()=>`Пошук ${String(i.value).trim()}...`),p=e.computed(()=>a.entityKey||"rasters"),g=e.computed(()=>a.entityBasePath||"/gis.rasters"),x=e.ref([]),l=e.ref(!0),y=e.ref([]),d=e.ref([]),u=e.ref({}),b=e.ref([]),f=e.ref(String(o.query.search??"")),m=e.ref(Math.max(1,Number(o.query.page)||1)),h=e.ref(15),k=e.ref(0),N=e.computed(()=>k.value>0),$=e.computed(()=>k.value?(m.value-1)*h.value+1:0),E=e.computed(()=>k.value?Math.min(m.value*h.value,k.value):0);function w(v){const F=new URLSearchParams;return Object.entries(v).forEach(([V,_])=>{if(!(_==null||_==="")){if(Array.isArray(_)){_.forEach(T=>{T!=null&&T!==""&&F.append(V,String(T))});return}F.append(V,String(_))}}),F.toString()}function S(){return`${g.value}/new`}function A(v){return`${g.value}/${v}/edit`}async function R(){try{l.value=!0;const v=`/api/data/gis.${p.value}.table`,F=w({...u.value,page:m.value,limit:h.value}),V=await fetch(F?`${v}?${F}`:v);if(!V.ok)throw new Error(`Rows fetch failed: ${V.status}`);const _=await V.json();x.value=_.rows||[],k.value=Number(_.filtered??_.total??_.count??x.value.length)||0,y.value=a.columnsConfig.length?a.columnsConfig:_.columns||[],d.value=_.filters||[],b.value=_.actions||[],y.value.length&&!y.value[0].link?y.value[0].link=`${g.value}/{id}`:y.value.length&&(y.value[0].link=`${g.value}/{id}`)}catch{x.value=[],k.value=0}finally{l.value=!1}}function Z(v){u.value=v,m.value=1,D(),R()}async function I(v,F,V){const _=await fetch(`/api/form/gis.${p.value}.table/${v.id}`);if(!_.ok)throw new Error(`Form fetch failed: ${_.status}`);const z=(await _.json()).token,Q=await fetch(`/api/table/${z}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({[F]:V})});if(!Q.ok)throw ye.notify({type:"error",title:"Помилка збереження",message:`Поле "${F}" не оновлено`}),new Error(`Save failed: ${Q.status}`);ye.notify({title:"Збережено",message:`Поле "${F}" оновлено`})}function K(v,F){u.value={...u.value,[v]:F},m.value=1,D(),R()}function q(v){K((v==null?void 0:v.name)||"search",(v==null?void 0:v.value)??f.value)}function ne(v){f.value="",K(v||"search",void 0)}function Y(v){!v||v===m.value||(m.value=v,D(),R())}function D(){const v={...o.query,page:String(m.value),...f.value?{search:f.value}:{}};f.value||delete v.search,delete v.view,r.replace({query:v})}return e.onMounted(()=>{R(),document.title=i.value}),e.watch(()=>o.name,()=>{m.value=1,f.value="",R(),document.title=i.value}),e.watch(()=>o.query,v=>{const F=Math.max(1,Number(v.page)||1),V=String(v.search??""),_=F!==m.value,T=V!==f.value;!_&&!T||(m.value=F,f.value=V,u.value={...u.value,search:V||void 0},R())}),(v,F)=>(e.openBlock(),e.createElementBlock("div",Z1,[e.createVNode(Yt,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),actions:e.withCtx(()=>[e.createElementVNode("a",G1,[e.createVNode(e.unref(ce.RefreshCw),{size:16}),F[2]||(F[2]=e.createTextVNode(" Оновити растри ",-1))]),e.createElementVNode("a",{onClick:F[0]||(F[0]=V=>e.unref(r).push(S())),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(ce.Plus),{size:16}),F[3]||(F[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",K1,[e.createElementVNode("div",X1,[e.createElementVNode("div",Q1,[e.createElementVNode("div",J1,[e.createVNode(e.unref(Nn.FilterField),{modelValue:f.value,"onUpdate:modelValue":F[1]||(F[1]=V=>f.value=V),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:q,onClear:ne,placeholder:c.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Nn.Filter),{schema:d.value,value:u.value,onChange:Z,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",ek,[e.createVNode(e.unref(n),{rows:x.value,columns:y.value,loading:l.value,router:e.unref(r),selectable:!1,onCellUpdate:I,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:V})=>[e.createElementVNode("div",tk,[e.createElementVNode("button",{onClick:_=>e.unref(r).push(A(V.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(Vn)],8,nk)])]),_:1},8,["rows","columns","loading","router"])]),N.value?(e.openBlock(),e.createElementBlock("div",ok,[e.createElementVNode("div",rk,[F[4]||(F[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",lk,e.toDisplayString($.value),1),F[5]||(F[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",ak,e.toDisplayString(E.value),1),F[6]||(F[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",sk,e.toDisplayString(k.value),1)]),e.createElementVNode("div",ik,[e.createVNode(e.unref(ye.VsPagination),{total:k.value,page:m.value,"page-size":h.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":Y,onPageChange:Y},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-63309b89"]])},Symbol.toStringTag,{value:"Module"})),dk={class:"flex-1 overflow-y-auto p-4 sm:p-6"},uk={class:"space-y-3"},pk={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},mk={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},fk={class:"text-xs text-gray-500 mb-1"},gk={key:0,class:"text-base text-md font-semibold text-gray-900"},yk={key:1,class:"text-base text-md font-semibold text-gray-900"},hk={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},xk={class:"space-y-2"},bk={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},kk={class:"text-sm font-semibold text-gray-900"},wk={class:"text-xs text-gray-600 mt-1"},_k={class:"grid grid-cols-2 gap-3"},Ek={class:"text-xs text-gray-500 mb-1"},Ck={class:"text-sm font-semibold text-gray-900"},Nk={class:"bg-gray-50 p-4 rounded-lg"},Vk={class:"grid grid-cols-2 gap-4"},Bk={class:"text-xs text-gray-500 mb-1"},$k={class:"text-sm font-semibold text-gray-900"},Sk=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",dk,[e.createElementVNode("div",uk,[e.createElementVNode("div",pk,[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",mk,[(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",fk,e.toDisplayString(a.label),1),a.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",gk,[e.createTextVNode(e.toDisplayString(a.value),1)])),[[r,a.tooltip]]):(e.openBlock(),e.createElementBlock("p",yk,e.toDisplayString(a.value),1))]))),128))])]),e.createElementVNode("div",hk,[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",xk,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",bk,[e.createElementVNode("p",kk,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",wk,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",_k,[(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",Ek,e.toDisplayString(a.label),1),e.createElementVNode("p",Ck,e.toDisplayString(a.value),1)]))),128))])]),e.createElementVNode("div",Nk,[e.createElementVNode("div",Vk,[(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",Bk,e.toDisplayString(a.label),1),e.createElementVNode("p",$k,e.toDisplayString(a.value),1)]))),128))])])])])])])}}}),vk={class:"flex-1 overflow-y-auto space-y-3 pr-1"},Lk={class:"font-medium text-sm text-gray-800"},Ak={class:"text-xs text-gray-500"},Tk=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",vk,[(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",Lk,e.toDisplayString(r.name),1),e.createElementVNode("p",Ak,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))]))}}),Mk={},Fk={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 Dk(t,n){return e.openBlock(),e.createElementBlock("svg",Fk,[...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 zk=Ce(Mk,[["render",Dk]]),Ik={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},Pk={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},jk={class:"flex items-center gap-2"},Rk={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},Ok={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},Uk=["checked"],qk=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=Ue(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}=tt(),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,g=!1;e.watch(()=>n.extent,l=>{if(!l||l.length!==4)return;const y=l.join(",");if(y!==p){if(p=y,!g){g=!0;return}s==null||s([[l[0],l[1]],[l[2],l[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const x=e.computed(()=>`${Math.round(c.value*100)}%`);return(l,y)=>(e.openBlock(),e.createElementBlock("div",Ik,[e.createElementVNode("div",Pk,[e.createElementVNode("div",jk,[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]=d=>c.value=d),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,c.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(x.value),1)])]),e.createElementVNode("div",Rk,[e.createElementVNode("label",Ok,[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]=d=>l.$emit("toggle-extent",d.target.checked))},null,40,Uk),y[3]||(y[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),On=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,g,x,l]=c;return[p,g,x,l].some(y=>typeof y!="number"||Number.isNaN(y))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[p,g],[x,g],[x,l],[p,l],[p,g]]]}}]}}),i=tt(),s=Ue(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 g;if(!c){s.setVisible(!1),s.setData({type:"FeatureCollection",features:[]});return}s.setVisible(!0),s.setData(c);const p=(g=i.map)==null?void 0:g.value;p!=null&&p.moveLayer&&p.getLayer(o)&&p.moveLayer(o)},{immediate:!0}),(c,p)=>e.createCommentVNode("",!0)}}),Hk={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},Wk={class:"flex-1 relative overflow-hidden"},Yk={class:"absolute top-0 left-0 w-full z-20"},Zk={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},Gk={class:"flex items-start justify-between gap-4"},Kk={class:"flex-1 min-w-0"},Xk={class:"flex items-center text-sm text-gray-500 mb-3"},Qk={class:"text-gray-900 font-medium truncate max-w-xs"},Jk={class:"flex items-center justify-between gap-4"},ew={class:"flex-1 min-w-0"},tw={class:"flex items-center gap-3 mb-1"},nw={class:"text-base font-semibold text-gray-900 truncate"},ow=["title"],rw={class:"flex items-center gap-4 min-w-0"},lw={class:"flex-1 min-w-0"},aw=["title"],sw={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]"},iw={class:"relative w-full h-full"},cw={class:"absolute top-4 left-4 z-20"},dw={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"},uw={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},pw={class:"flex-1 flex flex-col h-full"},mw={class:"px-3 pt-3 pb-2 border-b border-gray-100"},fw={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"},gw=["aria-selected","onClick"],yw={class:"leading-none"},hw={class:"flex flex-col flex-1 overflow-y-hidden p-3"},xw={key:0,class:"mb-3 text-xs text-slate-500"},bw={key:1,class:"mb-3 text-xs text-rose-600"},kw="OpenGIS",Vl=2,Un=5,ww=5,_w=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=Fe.useRouter(),r=Fe.useRoute(),a=e.ref(null),i=e.computed(()=>{var M;const B=(M=r.params)==null?void 0:M.id;return typeof B=="string"?B:void 0}),s=e.ref(null),c=e.ref(!1),p=e.ref(!1),g=e.ref(null),x=e.ref(!0),l=e.ref(!1),y=e.ref(null);let d=null,u=null;const b=e.ref(!1);let f=null,m=!1;function h(B){if(Array.isArray(B))return h(B[0]);if(typeof B!="string"&&typeof B!="number")return null;const M=typeof B=="number"?B:Number(B.trim());return Number.isFinite(M)?M:null}function k(B,M){return B.toFixed(M)}function N(B,M,X){const le=.5*10**-X;return Math.abs(B-M)>le}function $(){var B;return(B=a.value)==null?void 0:B.ctx}function E(){var O,H,ae,ge;const B=(H=(O=$())==null?void 0:O.map)==null?void 0:H.value;if(!B)return;const M=h(r.query.z),X=h(r.query.x),le=h(r.query.y);if(M==null||X==null||le==null)return;const de=(ae=B.getCenter)==null?void 0:ae.call(B),xe=(ge=B.getZoom)==null?void 0:ge.call(B);(!de||N(de.lng,X,Un)||N(de.lat,le,Un)||N(xe??0,M,Vl))&&(b.value=!0,B.jumpTo({center:[X,le],zoom:M}),b.value=!1)}function w(){var de,xe,P,O;if(b.value)return;const B=(xe=(de=$())==null?void 0:de.map)==null?void 0:xe.value;if(!B)return;const M=(P=B.getCenter)==null?void 0:P.call(B),X=(O=B.getZoom)==null?void 0:O.call(B);if(!M||X==null)return;const le={...r.query,z:k(X,Vl),x:k(M.lng,Un),y:k(M.lat,Un)};r.query.z===le.z&&r.query.x===le.x&&r.query.y===le.y||o.replace({query:le})}function S(){var M;if(typeof document>"u")return;const B=(M=te.value)==null?void 0:M.name;document.title=B?`${B} — Растер`:kw}function A(B){return Number(B.toFixed(ww))}function R(B,M){const[X,le]=B,[de,xe]=M;return[A(Math.min(X,de)),A(Math.min(le,xe)),A(Math.max(X,de)),A(Math.max(le,xe))]}function Z(B){const[M,X,le,de]=B;return{type:"Polygon",coordinates:[[[M,X],[le,X],[le,de],[M,de],[M,X]]]}}function I(B){var le,de,xe;const M=(de=(le=$())==null?void 0:le.map)==null?void 0:de.value,X=(xe=M==null?void 0:M.getCanvas)==null?void 0:xe.call(M);X!=null&&X.style&&(X.style.cursor=B)}async function K(B,M){if(!(!i.value||!s.value))try{const X=Z(B),le=await fetch(`/api/gis-metadata/raster/${encodeURIComponent(i.value)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:X})});if(!le.ok)throw new Error(`Failed to save raster metadata geom: ${le.status}`);ye.notify({type:"success",title:"Extent збережено",message:"Нові межі успішно збережено."}),await Ke()}catch(X){console.error("Failed to save raster extent",X),s.value&&(s.value={...s.value,extent:M?[...M]:void 0}),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Extent"})}}function q(B){var X,le,de;const M=(le=(X=$())==null?void 0:X.map)==null?void 0:le.value;if((de=M==null?void 0:M.dragPan)!=null&&de.enable&&M.dragPan.enable(),(B==null?void 0:B.length)===4&&s.value){const xe=Array.isArray(s.value.extent)?[...s.value.extent]:null;s.value={...s.value,extent:[...B]},K(B,xe)}f=null,m=!1,y.value=null,l.value=!1,I("")}function ne(){q(null)}function Y(){var xe,P;const B=(P=(xe=$())==null?void 0:xe.map)==null?void 0:P.value;if(!B)return;const M=O=>{var ae,ge,Ne;if(!l.value||((ae=O==null?void 0:O.originalEvent)==null?void 0:ae.button)!=null&&O.originalEvent.button!==0)return;const H=O==null?void 0:O.lngLat;H&&(f=[H.lng,H.lat],m=!0,y.value=[H.lng,H.lat,H.lng,H.lat],(Ne=(ge=B.dragPan)==null?void 0:ge.disable)==null||Ne.call(ge))},X=O=>{if(!l.value||!m||!f)return;const H=O==null?void 0:O.lngLat;H&&(y.value=R(f,[H.lng,H.lat]))},le=O=>{if(!l.value||!m||!f)return;const H=O==null?void 0:O.lngLat;if(!H){ne();return}const ae=R(f,[H.lng,H.lat]),[ge,Ne,Le,Se]=ae;if(!(Math.abs(Le-ge)>0&&Math.abs(Se-Ne)>0)){ye.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),ne();return}q(ae)},de=O=>{l.value&&O.key==="Escape"&&(O.preventDefault(),ne())};B.on("mousedown",M),B.on("mousemove",X),B.on("mouseup",le),window.addEventListener("keydown",de),u=()=>{B.off("mousedown",M),B.off("mousemove",X),B.off("mouseup",le),window.removeEventListener("keydown",de)}}async function D(){var X;if(l.value)return;const B=$();!(B!=null&&B.ready)||(await B.ready(),!((X=B.map)==null?void 0:X.value))||(u||Y(),l.value=!0,m=!1,f=null,y.value=null,I("crosshair"),ye.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}const v=e.computed(()=>{var M;const B=(M=s.value)==null?void 0:M.url;return B?/^https?:\/\//i.test(B)||typeof window>"u"||typeof location>"u"?B:`${location.origin}${B}`:""}),F=e.computed(()=>{var B;return((B=s.value)==null?void 0:B.extent)??null}),V=e.computed(()=>i.value?`raster-${i.value}`:void 0),_=e.computed(()=>i.value?`raster-extent-${i.value}`:"raster-extent"),T=e.computed(()=>i.value?`raster-extent-draft-${i.value}`:"raster-extent-draft"),z=e.computed(()=>{const B=V.value??"raster",M=F.value&&F.value.length===4?F.value.join(","):"no-extent";return`${B}-${M}`}),Q=e.computed(()=>!!v.value),se=e.computed(()=>{const B=F.value;if(!B||B.length!==4)return null;const[M,X,le,de]=B;return[M,X,le,de].some(xe=>typeof xe!="number"||Number.isNaN(xe))?null:[(M+le)/2,(X+de)/2]}),te=e.computed(()=>{var xe,P;const B=s.value,M=B==null?void 0:B.extent,le=i.value??"—",de=[B!=null&&B.extension?`Формат ${String(B.extension).toUpperCase()}`:null,(B==null?void 0:B.resolution)||null].filter(Boolean).join(", ");return{id:le,name:(B==null?void 0:B.name)||((P=(xe=B==null?void 0:B.files)==null?void 0:xe[0])==null?void 0:P.name),description:(B==null?void 0:B.description)||de||"Попередній перегляд растрового шару.",coverage:M&&M.length===4?`${W(M[0])}, ${W(M[1])} → ${W(M[2])}, ${W(M[3])}`:"Покриття уточнюється",crs:B!=null&&B.srid?`EPSG:${B.srid}`:"EPSG:4326",source:B!=null&&B.proj4?B.proj4:"Джерело: Mapnik",updatedAt:B!=null&&B.cache?"Дані кешовано":"Нові дані"}}),oe=e.computed(()=>{const B=s.value;return B?[B.source_path,B.srid?`SRID: ${B.srid}`:null,B.is_public?"Публічна":"Не публічна",B.is_active?"Активна":"Неактивна",B.cache?"Кешовано":null].filter(M=>M).join(", "):""}),fe=[{key:"info",label:"Інформація",icon:zk},{key:"files",label:"Файли",icon:Vn},{key:"metadata",label:"Метадані",icon:Bo}],he=fe.map(B=>B.key),ie=e.ref(he.includes(r.query.tab)?r.query.tab:"info"),Be=e.ref(!0);e.watch(()=>r.query.tab,B=>{B&&he.includes(B)&&ie.value!==B&&(ie.value=B)}),e.watch(ie,B=>{r.query.tab!==B&&o.replace({query:{...r.query,tab:B}})});const We=e.computed(()=>G(s.value)),qe=e.computed(()=>be(s.value));e.watch(()=>s.value,()=>{S()},{immediate:!0});async function Re(){var le;const B=$();if(!(B!=null&&B.ready))return;await B.ready(),E();const M=(le=B.map)==null?void 0:le.value;if(!M)return;const X=()=>w();M.on("moveend",X),M.on("zoomend",X),d=()=>{M.off("moveend",X),M.off("zoomend",X)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{E()}),e.onMounted(()=>{Re()}),e.onBeforeUnmount(()=>{d==null||d(),d=null,u==null||u(),u=null,I("")}),e.watch(i,()=>{Ke()},{immediate:!0});async function Ge(B){var M;Ke(),((M=s.value)==null?void 0:M.srid)!==B.srid&&(ye.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await wt(`/api/gis-xml/${encodeURIComponent(i.value)}`),ye.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function Ke(){const B=i.value;if(!B){s.value=null,g.value=null;return}c.value=!0,g.value=null;try{const M=await fetch(`/api/gis-raster/${encodeURIComponent(B)}`);if(!M.ok)throw new Error(`HTTP ${M.status}`);const X=await M.json();X.xml&&(p.value=!0),s.value=X,X.xml||(ye.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await wt(`/api/gis-xml/${encodeURIComponent(B)}`),ye.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(B)}?nocache=1`),p.value=!0)}catch(M){console.error("Failed to load raster info",M),s.value=null,g.value=M instanceof Error?M.message:String(M)}finally{c.value=!1}}function wt(B){return new Promise((M,X)=>{const le=new EventSource(B),de=[];le.onmessage=xe=>{de.push(xe.data),console.log("Received:",xe.data)},le.addEventListener("end",()=>{le.close(),M(de)}),le.onerror=xe=>{le.close(),M(xe)}})}function G(B){var M;return(M=B==null?void 0:B.files)!=null&&M.length?B.files.map(X=>({name:X.name,resolution:ee(X.name,B),size:X.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function ee(B,M){const X=B.toLowerCase();return X.endsWith(".tfw")?"Georeference":X.endsWith(".xml")?"Опис":X.endsWith(".tif")||X.endsWith(".tiff")?M!=null&&M.resolution?M.resolution:"Растер":(M==null?void 0:M.resolution)??"Файл"}function be(B){return B?{baseParams:Te(B),spatial:{crs:{code:B.srid?`EPSG:${B.srid}`:"EPSG:4326",description:B.proj4||"WGS 84 — World Geodetic System 1984"},bounds:ke(B.extent),resolution:He(B)},statistics:ve(B),technical:lt(B)}:null}function Pe(B){return B!=null&&B.length?B.map(X=>{var de;if(!X)return"";const le=X.trim().split(/\s+/)[0];return((de=le==null?void 0:le[0])==null?void 0:de.toUpperCase())||""}).filter(Boolean).join(""):""}function Te(B){var xe,P;const M=B.bands_count??((xe=B.bands)==null?void 0:xe.length)??"—",X=Pe(B.bands),le=(B.bands??[]).map(O=>O.trim()).filter(O=>O.length>0),de=le.length?le.join(", "):void 0;return[{label:"Розмір растру, px",value:B.width&&B.height?`${B.width}×${B.height}`:"—"},{label:"Формат файлу",value:((P=B.extension)==null?void 0:P.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:B.total_size?`${B.total_size}`:"—"},{label:"Кількість каналів",value:typeof M=="number"?`${M}${X?` (${X})`:""}`:`${M}${X?` (${X})`:""}`,tooltip:de},{label:"Глибина кольору",value:B.color_depth?`${B.color_depth} біт/канал`:"—"},{label:"Стиснення",value:B.compression||"—"}]}function ke(B){return!B||B.length!==4?[]:[{label:"Північ",value:W(B[3],"N")},{label:"Схід",value:W(B[2],"E")},{label:"Південь",value:W(B[1],"S")},{label:"Захід",value:W(B[0],"W")}]}function He(B){const M=[{label:"Роздільна здатність",value:B.resolution||"—"}];return B.width&&B.height&&M.push({label:"Розмір пікселя",value:`${B.width} × ${B.height} px`}),M}function ve(B){var M;return(M=B.bands)!=null&&M.length?B.bands.map((X,le)=>{const de=n[le%n.length];return{label:`Канал ${le+1}${X?` (${X})`:""}`,cardClass:de.cardClass,titleClass:de.titleClass,metrics:[{label:"Назва",value:X||`Канал ${le+1}`},{label:"Глибина",value:B.color_depth?`${B.color_depth} біт`:"—"},{label:"Статус",value:B.cache?"Кешовано":"Готово"}]}}):[]}function lt(B){var M;return[{label:"Тип даних",value:B.color_depth?`Unsigned Integer ${B.color_depth}-bit`:"—"},{label:"Компресія",value:B.compression||"—"},{label:"Кольорова інтерпретація",value:((M=B.bands)==null?void 0:M.join(", "))||"—"},{label:"SRID",value:B.srid?`EPSG:${B.srid}`:"—"},{label:"Проекція (proj4)",value:B.proj4||"—"},{label:"URL тайла",value:B.url||"—"}]}function W(B,M){if(B==null||Number.isNaN(B))return"—";const X=`${B.toFixed(5)}°`;return M?`${X} ${M}`:X}return(B,M)=>(e.openBlock(),e.createElementBlock("div",Hk,[e.createElementVNode("div",Wk,[e.createElementVNode("div",Yk,[e.createElementVNode("div",Zk,[e.createElementVNode("div",Gk,[e.createElementVNode("div",Kk,[e.createElementVNode("div",Xk,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:M[0]||(M[0]=X=>e.unref(o).push("/gis.rasters"))}," Растри "),M[3]||(M[3]=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",Qk,e.toDisplayString(te.value.name||"Растер"),1)]),e.createElementVNode("div",Jk,[e.createElementVNode("div",ew,[e.createElementVNode("div",tw,[e.createElementVNode("h1",nw,e.toDisplayString(te.value.name||"Растер"),1)]),oe.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:oe.value},e.toDisplayString(oe.value),9,ow)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",rw,[e.createElementVNode("div",lw,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:te.value.description},e.toDisplayString(te.value.description),9,aw)]),e.createVNode(So,{"entity-id":i.value||"","entity-info":{name:te.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:Ge},null,8,["entity-id","entity-info"])])])])]),e.createElementVNode("div",sw,[e.createElementVNode("div",iw,[e.createVNode(Bn,{ref_key:"mapViewRef",ref:a},{default:e.withCtx(()=>[Q.value&&p.value?(e.openBlock(),e.createBlock(qk,{key:z.value,"tile-url":v.value,extent:F.value,"layer-id":V.value,"show-raster-extent":x.value,onToggleExtent:M[1]||(M[1]=X=>x.value=X)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(On,{extent:x.value?F.value:null,"layer-id":_.value},null,8,["extent","layer-id"]),e.createVNode(On,{extent:y.value,"layer-id":T.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createElementVNode("div",cw,[e.createVNode(Wt)]),l.value?(e.openBlock(),e.createElementBlock("div",dw," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),e.createElementVNode("div",uw,[e.createVNode(It),se.value?(e.openBlock(),e.createBlock(It,{key:0,targetCenter:se.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1},512)])]),e.createVNode(Vo,{open:Be.value,onToggle:M[2]||(M[2]=X=>Be.value=!Be.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",Be.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",pw,[e.createElementVNode("div",mw,[e.createElementVNode("div",fw,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(fe,X=>e.createElementVNode("button",{key:X.key,type:"button",role:"tab","aria-selected":ie.value===X.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===X.key?"bg-white shadow-sm text-gray-700":""]),onClick:le=>ie.value=X.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(X.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",yw,e.toDisplayString(X.label),1)],10,gw)),64))])]),e.createElementVNode("div",hw,[c.value?(e.openBlock(),e.createElementBlock("div",xw," Завантаження метаданих растру… ")):g.value?(e.openBlock(),e.createElementBlock("div",bw," Не вдалося отримати дані: "+e.toDisplayString(g.value),1)):e.createCommentVNode("",!0),ie.value==="files"?(e.openBlock(),e.createBlock(Tk,{key:2,files:We.value},null,8,["files"])):ie.value==="metadata"?(e.openBlock(),e.createBlock($o,{key:3,data:s.value,"entity-id":i.value,"entity-type":"raster",onSaved:Ke,onEditCssBounds:D},null,8,["data","entity-id"])):qe.value?(e.openBlock(),e.createBlock(Sk,{key:4,details:qe.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}})},Symbol.toStringTag,{value:"Module"})),Ew={},Cw={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 Nw(t,n){return e.openBlock(),e.createElementBlock("svg",Cw,[...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 Vw=Ce(Ew,[["render",Nw]]),Bw={class:"flex flex-col h-full"},$w={class:"flex justify-end mb-3 gap-2"},Sw=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",Bw,[e.createElementVNode("div",$w,[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(kn,{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"])]))}}),vw={class:"flex flex-col flex-1 min-h-0"},Lw={class:"flex justify-between mb-3 gap-2"},Aw={class:"text-left"},Tw={class:"font-medium text-gray-900"},Mw={class:"text-xs text-gray-500"},Fw={class:"flex justify-center gap-2"},Dw=["checked","onChange"],zw={class:"text-sm font-medium text-gray-900"},Iw=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(u=>u.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:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),g={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function x(){p.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},c.value=!0}function l(){c.value=!1}function y(){var f,m;const u=(f=p.value.table)==null?void 0:f.trim(),b=(m=p.value.key)==null?void 0:m.trim();if(!u||!b){ye.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}i.value=[...Array.isArray(i.value)?i.value:[],{...p.value,table:u,key:b}],c.value=!1}function d(u,b){var m;const f=((m=b==null?void 0:b.target)==null?void 0:m.checked)??!1;u.active=f,i.value=Array.isArray(i.value)?[...i.value]:[]}return(u,b)=>(e.openBlock(),e.createElementBlock("div",vw,[e.createElementVNode("div",Lw,[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:x}," Додати таблицю "),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]=f=>s("save"))}," Зберегти ")]),e.createVNode(At,{modelValue:i.value,"onUpdate:modelValue":b[1]||(b[1]=f=>i.value=f),"columns-scheme":o,"form-scheme":g,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:f})=>[e.createElementVNode("div",Aw,[e.createElementVNode("div",Tw,e.toDisplayString(f.table),1),e.createElementVNode("div",Mw,e.toDisplayString(f.key),1)])]),activeCell:e.withCtx(({row:f})=>[e.createElementVNode("label",Fw,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:f.active,onChange:m=>d(f,m)},null,40,Dw)])]),zoomCell:e.withCtx(({row:f})=>[e.createElementVNode("div",zw,e.toDisplayString(f.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:c.value,"onUpdate:visible":b[3]||(b[3]=f=>c.value=f),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]=f=>p.value=f),schema:g},null,8,["values"])]),_:1},8,["visible"])]))}}),Pw={class:"flex flex-col flex-1 min-h-0 gap-4"},jw={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},Rw=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,g)=>(e.openBlock(),e.createElementBlock("div",Pw,[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},[...g[2]||(g[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":g[0]||(g[0]=x=>a.value=x)},null,8,["modelValue"])]),e.createElementVNode("div",jw,[e.createVNode(kn,{modelValue:i.value,"onUpdate:modelValue":g[1]||(g[1]=x=>i.value=x),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),Ow=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=tt(),{activateTemporaryLayer:r,deactivateTemporaryLayer:a,setTemporaryLayerOpacity:i}=lo(o.map),s=e.computed(()=>{var l;const x=`${(l=n==null?void 0:n.tileUrl)==null?void 0:l.trim()}`;return x?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(x)?x:x.startsWith("//")?`${window.location.protocol}${x}`:x.startsWith("/")?`${location.origin}${x}`:`${location.origin}/${x}`:""});let c="",p="";function g(){const x=n.active&&!!s.value;c&&(!x||c!==n.layerId)&&(a(c,p||void 0),c="",p=""),x&&(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],g,{immediate:!0}),e.watch(()=>n.opacity,x=>{!c||!n.active||i(c,x,p||void 0)},{immediate:!0}),e.onUnmounted(()=>{c&&(a(c,p||void 0),c="",p="")}),(x,l)=>e.createCommentVNode("",!0)}}),Uw=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}=tt(),s=d=>{!d||typeof window>"u"||window.dispatchEvent(new CustomEvent(so,{detail:d}))},c=async d=>{const u=await fetch(`/api/map-format?${d.toString()}`);if(!u.ok)throw new Error(`API returned ${u.status}`);return u.json()};let p=null,g=null;const x=d=>{if(!d)return null;if(typeof d=="string")try{return JSON.parse(d)}catch{return null}return d},l=async(d,u)=>{var m;const b=o.value?`external:${o.value},${String(d)}`:null,f=new URLSearchParams({layer:o.value??"",id:String(d)});try{const h=await c(f),k=typeof h.html=="string"?h.html:null,N=x(((m=h==null?void 0:h.data)==null?void 0:m.geom)??(h==null?void 0:h.geom)??null);(k||N)&&s({html:k,geometry:N??u,infoToken:b})}catch(h){console.warn("CartoCSS map-format (id) error",h)}},y=async d=>{var m,h,k,N;if(!o.value)return;if(!r.value){ye.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const u=(m=d==null?void 0:d.lngLat)==null?void 0:m.lng,b=(h=d==null?void 0:d.lngLat)==null?void 0:h.lat;if(typeof u!="number"||typeof b!="number")return;const f=new URLSearchParams({layer:o.value,lat:b.toFixed(6),lng:u.toFixed(6)});try{const $=await c(f),E=x(((k=$==null?void 0:$.data)==null?void 0:k.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,E);return}Ko({html:$==null?void 0:$.html})&&s({html:$==null?void 0:$.html,geometry:E,infoToken:null})}catch($){console.warn("CartoCSS map-format error",$)}};return i().then(()=>{g=a.value,g&&(g.on("click",y),p=()=>g==null?void 0:g.off("click",y))}),e.onBeforeUnmount(()=>{p==null||p(),p=null,g=null}),()=>{}}}),qw={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},Hw={class:"flex-1 relative overflow-hidden"},Ww={class:"absolute top-0 left-0 w-full z-20"},Yw={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},Zw={class:"flex items-start justify-between gap-4"},Gw={class:"flex-1 min-w-0"},Kw={class:"flex items-center text-sm text-gray-500 mb-3"},Xw={class:"text-gray-900 font-medium truncate max-w-xs"},Qw={class:"flex items-center justify-between gap-4"},Jw={class:"flex-1 min-w-0"},e2={class:"flex items-center gap-3 mb-1"},t2={class:"text-base font-semibold text-gray-900 truncate"},n2={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},o2={class:"text-xs font-medium text-green-700"},r2=["title"],l2={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]"},a2={class:"relative w-full h-full"},s2={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},i2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},c2={class:"flex items-center gap-2"},d2={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},u2={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},p2=["checked"],m2={class:"absolute top-4 left-4 z-20"},f2={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},g2={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"},y2={class:"flex-1 flex flex-col h-full"},h2={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},x2=["aria-selected","onClick"],b2={class:"leading-none"},k2={class:"flex flex-col flex-1 overflow-y-hidden p-3"},w2={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},_2="cartocss-demo-001",E2="OpenGIS",Bl=2,qn=5,C2=5,N2=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"cartocss",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.ref(null),a=[{key:"css",label:"CSS",icon:kl},{key:"data",label:"Дані",icon:Vw},{key:"metadata",label:"Метадані",icon:Bo},{key:"card",label:"Картка",icon:wl}],i=a.map(W=>W.key),s=e.ref(i.includes(o.query.tab)?o.query.tab:"css"),c=e.ref(!0),p=e.ref(null),g=e.computed(()=>{var W;return(W=p.value)!=null&&W.source_path?a.filter(B=>B.key==="card"||B.key==="metadata"):a}),x=e.computed(()=>o.params.id||_2),l=e.ref({id:x.value,name:"",description:""});let y=null;const d=e.ref(!1);function u(W){if(Array.isArray(W))return u(W[0]);if(typeof W!="string"&&typeof W!="number")return null;const B=typeof W=="number"?W:Number(W.trim());return Number.isFinite(B)?B:null}function b(W,B){return W.toFixed(B)}function f(W,B,M){const X=.5*10**-M;return Math.abs(W-B)>X}function m(){var W;return(W=r.value)==null?void 0:W.ctx}function h(){var P,O,H,ae;const W=(O=(P=m())==null?void 0:P.map)==null?void 0:O.value;if(!W)return;const B=u(o.query.z),M=u(o.query.x),X=u(o.query.y);if(B==null||M==null||X==null)return;const le=(H=W.getCenter)==null?void 0:H.call(W),de=(ae=W.getZoom)==null?void 0:ae.call(W);(!le||f(le.lng,M,qn)||f(le.lat,X,qn)||f(de??0,B,Bl))&&(d.value=!0,W.jumpTo({center:[M,X],zoom:B}),d.value=!1)}function k(){var le,de,xe,P;if(d.value)return;const W=(de=(le=m())==null?void 0:le.map)==null?void 0:de.value;if(!W)return;const B=(xe=W.getCenter)==null?void 0:xe.call(W),M=(P=W.getZoom)==null?void 0:P.call(W);if(!B||M==null)return;const X={...o.query,z:b(M,Bl),x:b(B.lng,qn),y:b(B.lat,qn)};o.query.z===X.z&&o.query.x===X.x&&o.query.y===X.y||n.replace({query:X})}function N(W){typeof document>"u"||(document.title=W?`${W} — CartoCSS`:E2)}const $=e.ref(""),E=e.ref([]),w=e.ref(!1),S=e.ref(!1),A=e.ref(""),R=e.ref(0),Z=e.ref(!1),I=e.ref(1),K=e.ref(!0),q=e.ref(!1),ne=e.ref(null),Y=e.computed(()=>`cartocss-layer-${x.value}`),D=e.computed(()=>`${Math.round(I.value*100)}%`),v=e.computed(()=>`cartocss-extent-${x.value}`),F=e.computed(()=>`cartocss-extent-draft-${x.value}`),V=e.computed(()=>{var le;const W=(le=A.value)==null?void 0:le.trim();if(!W)return"";const B=W.includes("?")?"&":"?",M=`${W}${B}nottl=1`,X=R.value;return X?`${W}${B}ts=${X}&nocache=1`:M}),_=e.ref(""),T=e.ref(""),z=e.computed(()=>{var de;const W=(de=p.value)==null?void 0:de.bounds;if(!Array.isArray(W)||W.length<4)return null;const[B,M,X,le]=W;return[B,M,X,le].some(xe=>typeof xe!="number"||Number.isNaN(xe))?null:[(B+X)/2,(M+le)/2]}),Q=e.computed(()=>{var de;const W=(de=p.value)==null?void 0:de.bounds;if(!Array.isArray(W)||W.length<4)return null;const[B,M,X,le]=W;return[B,M,X,le].some(xe=>typeof xe!="number"||Number.isNaN(xe))?null:[B,M,X,le]}),se=e.computed(()=>{const W=p.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(", "):""}),te=e.computed(()=>{var B;const W=(B=p.value)==null?void 0:B.group_id;return W?String(W).toUpperCase():""});let oe=null,fe=!1,he=null;function ie(W){return Number(W.toFixed(C2))}function Be(W,B){const[M,X]=W,[le,de]=B;return[ie(Math.min(M,le)),ie(Math.min(X,de)),ie(Math.max(M,le)),ie(Math.max(X,de))]}function We(W){const[B,M,X,le]=W;return{type:"Polygon",coordinates:[[[B,M],[X,M],[X,le],[B,le],[B,M]]]}}function qe(W){var X,le,de;const B=(le=(X=m())==null?void 0:X.map)==null?void 0:le.value,M=(de=B==null?void 0:B.getCanvas)==null?void 0:de.call(B);M!=null&&M.style&&(M.style.cursor=W)}async function Re(W,B){if(!(!x.value||!p.value)){S.value=!0;try{const M=We(W),X=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:M})});if(!X.ok)throw new Error(`Failed to save cartocss bounds: ${X.status}`);ye.notify({type:"success",title:"Bounds збережено",message:"Нові межі успішно збережено."}),await He(x.value,{bustCache:!0})}catch(M){console.error("Failed to save CartoCSS bounds",M),p.value&&(p.value={...p.value,bounds:B?[...B]:null}),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Bounds"})}finally{S.value=!1}}}function Ge(W){var M,X,le;const B=(X=(M=m())==null?void 0:M.map)==null?void 0:X.value;if((le=B==null?void 0:B.dragPan)!=null&&le.enable&&B.dragPan.enable(),(W==null?void 0:W.length)===4&&p.value){const de=Array.isArray(p.value.bounds)?[...p.value.bounds]:null;p.value={...p.value,bounds:[...W]},Re(W,de)}oe=null,fe=!1,ne.value=null,q.value=!1,qe("")}function Ke(){Ge(null)}function wt(){var de,xe;const W=(xe=(de=m())==null?void 0:de.map)==null?void 0:xe.value;if(!W)return;const B=P=>{var H,ae,ge;if(!q.value||((H=P==null?void 0:P.originalEvent)==null?void 0:H.button)!=null&&P.originalEvent.button!==0)return;const O=P==null?void 0:P.lngLat;O&&(oe=[O.lng,O.lat],fe=!0,ne.value=[O.lng,O.lat,O.lng,O.lat],(ge=(ae=W.dragPan)==null?void 0:ae.disable)==null||ge.call(ae))},M=P=>{if(!q.value||!fe||!oe)return;const O=P==null?void 0:P.lngLat;O&&(ne.value=Be(oe,[O.lng,O.lat]))},X=P=>{if(!q.value||!fe||!oe)return;const O=P==null?void 0:P.lngLat;if(!O){Ke();return}const H=Be(oe,[O.lng,O.lat]),[ae,ge,Ne,Le]=H;if(!(Math.abs(Ne-ae)>0&&Math.abs(Le-ge)>0)){ye.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),Ke();return}Ge(H)},le=P=>{q.value&&P.key==="Escape"&&(P.preventDefault(),Ke())};W.on("mousedown",B),W.on("mousemove",M),W.on("mouseup",X),window.addEventListener("keydown",le),he=()=>{W.off("mousedown",B),W.off("mousemove",M),W.off("mouseup",X),window.removeEventListener("keydown",le)}}async function G(){var M;const W=m();!(W!=null&&W.ready)||(await W.ready(),!((M=W.map)==null?void 0:M.value))||(he||wt(),q.value=!0,fe=!1,oe=null,ne.value=null,qe("crosshair"),ye.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}e.watch(x,W=>{W&&He(W)},{immediate:!0}),e.watch(()=>{var W;return(W=l.value)==null?void 0:W.name},W=>N(W),{immediate:!0});async function ee(){var X;const W=m();if(!(W!=null&&W.ready))return;await W.ready(),h();const B=(X=W.map)==null?void 0:X.value;if(!B)return;const M=()=>k();B.on("moveend",M),B.on("zoomend",M),y=()=>{B.off("moveend",M),B.off("zoomend",M)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{h()}),e.onMounted(()=>{ee()}),e.onBeforeUnmount(()=>{y==null||y(),y=null,he==null||he(),he=null,qe("")}),e.watch(()=>o.query.tab,W=>{W&&g.value.some(B=>B.key===W)&&s.value!==W&&(s.value=W)}),e.watch(g,W=>{W.length&&!W.some(B=>B.key===s.value)&&(s.value=W[0].key)},{immediate:!0}),e.watch(s,W=>{o.query.tab!==W&&g.value.some(B=>B.key===W)&&n.replace({query:{...o.query,tab:W}})}),e.watch(()=>p.value,W=>{const B=W==null?void 0:W.card_html;_.value=B,T.value=W==null?void 0:W.card_table},{immediate:!0});function be(){x.value&&He(x.value,{bustCache:!0})}async function Pe(W,B){if(x.value){S.value=!0;try{const M=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(W)});if(!M.ok)throw new Error(`Failed to save cartocss: ${M.status}`);ye.notify({type:"success",title:"Збережено",message:B}),await He(x.value,{bustCache:!0})}catch(M){console.error("Failed to save CartoCSS",M),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{S.value=!1}}}function Te(W){if(!W)return null;if(typeof W=="string")try{return JSON.parse(W)}catch(B){return console.warn("Failed to parse CartoCSS config",B),null}return typeof W=="object"?W:null}function ke(W){const B=Array.isArray(W)?W:W==null?void 0:W.datasets;return Array.isArray(B)?B.map((M,X)=>({table:(M==null?void 0:M.table)||(M==null?void 0:M.id)||`dataset_${X+1}`,query:(M==null?void 0:M.query)||"",srid:(M==null?void 0:M.srid)||"",key:(M==null?void 0:M.key)||(M==null?void 0:M.label)||"Без підпису",active:typeof(M==null?void 0:M.active)=="boolean"?M.active:!0,minzoom:typeof(M==null?void 0:M.zoom)>"u"?"":String(M.zoom),maxzoom:typeof(M==null?void 0:M.maxzoom)>"u"?"":String(M.maxzoom),columns:(M==null?void 0:M.columns)||"",proj4text:(M==null?void 0:M.proj4text)||""})):[]}async function He(W,B){w.value=!0;try{const M=await fetch(`/api/gis-css/${W}`);if(!M.ok)throw new Error(`Failed to load cartocss: ${M.status}`);const X=await M.json(),le=(X==null?void 0:X.message)||X||{};p.value=le,l.value={id:le.cartocss_key||W,name:le.name||l.value.name,description:le.description||l.value.description},$.value=typeof le.style=="string"?le.style:"";const de=Te(le.config??[]);E.value=ke(de);const xe=typeof le.url=="string"?le.url:"";A.value=xe,Z.value=!!(xe&&le.enabled!==!1),R.value=B!=null&&B.bustCache?Date.now():0}catch(M){console.error("Failed to fetch CartoCSS",M),Z.value=!1,A.value="",R.value=0,p.value=null}finally{w.value=!1}}async function ve(){await Pe({style:$.value||"",config:E.value},"CartoCSS оновлено")}async function lt(W){const B=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(W)});if(!B.ok)throw new Error(`Failed to save cartocss: ${B.status}`);ye.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(W,B)=>(e.openBlock(),e.createElementBlock("div",qw,[e.createElementVNode("div",Hw,[e.createElementVNode("div",Ww,[e.createElementVNode("div",Yw,[e.createElementVNode("div",Zw,[e.createElementVNode("div",Gw,[e.createElementVNode("div",Kw,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:B[0]||(B[0]=M=>e.unref(n).push("/gis.cartocss"))}," CartoCSS "),B[6]||(B[6]=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",Xw,e.toDisplayString(l.value.name||"CartoCSS"),1)]),e.createElementVNode("div",Qw,[e.createElementVNode("div",Jw,[e.createElementVNode("div",e2,[e.createElementVNode("h1",t2,e.toDisplayString(l.value.name||"CartoCSS"),1),te.value?(e.openBlock(),e.createElementBlock("div",n2,[e.createElementVNode("span",o2,e.toDisplayString(te.value),1)])):e.createCommentVNode("",!0)]),se.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:se.value},e.toDisplayString(se.value),9,r2)):e.createCommentVNode("",!0)])])]),e.createVNode(So,{class:"flex-shrink-0","entity-id":x.value,"entity-info":l.value,"form-endpoint":M=>`/api/form/gis.cartocss.table/${M}`,"save-endpoint":M=>`/api/gis-css/${M}`,"entity-label":"CartoCSS","save-method":"post",onSaved:be},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])])]),e.createElementVNode("div",l2,[e.createElementVNode("div",a2,[e.createVNode(Bn,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var M,X;return[e.createElementVNode("div",s2,[e.createElementVNode("div",i2,[e.createElementVNode("div",c2,[B[7]||(B[7]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":B[1]||(B[1]=le=>I.value=le),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,I.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(D.value),1)])]),e.createElementVNode("div",d2,[e.createElementVNode("label",u2,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:K.value,onChange:B[2]||(B[2]=le=>K.value=le.target.checked)},null,40,p2),B[8]||(B[8]=e.createElementVNode("span",null,"Межі css",-1))])])]),e.createElementVNode("div",m2,[e.createVNode(Wt)]),e.createElementVNode("div",f2,[e.createVNode(It),z.value?(e.openBlock(),e.createBlock(It,{key:0,targetCenter:z.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),q.value?(e.openBlock(),e.createElementBlock("div",g2," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createBlock(Ow,{key:1,"layer-id":Y.value,"tile-url":V.value,active:Z.value,opacity:I.value,title:l.value.name,owner:x.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(On,{extent:K.value?Q.value:null,"layer-id":v.value},null,8,["extent","layer-id"]),e.createVNode(On,{extent:ne.value,"layer-id":F.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createVNode(Uw,{"cartocss-id":x.value,bounds:((M=p.value)==null?void 0:M.bounds)??null,active:Z.value&&!q.value,"info-enabled":(X=p.value)==null?void 0:X.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(io,{"map-id":x.value},null,8,["map-id"])]}),_:1},512)])]),p.value?(e.openBlock(),e.createBlock(Vo,{key:0,open:c.value,onToggle:B[3]||(B[3]=M=>c.value=!c.value)},null,8,["open"])):e.createCommentVNode("",!0)]),p.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",c.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",y2,[g.value.length>1?(e.openBlock(),e.createElementBlock("div",h2,[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(${g.value.length}, minmax(0, 1fr))`})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,M=>(e.openBlock(),e.createElementBlock("button",{key:M.key,type:"button",role:"tab","aria-selected":s.value===M.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",s.value===M.key?"bg-white shadow-sm text-gray-700":""]),onClick:X=>s.value=M.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(M.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",b2,e.toDisplayString(M.label),1)],10,x2))),128))],4)])):e.createCommentVNode("",!0),e.createElementVNode("div",k2,[w.value?(e.openBlock(),e.createElementBlock("div",w2," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[s.value==="css"?(e.openBlock(),e.createBlock(Sw,{key:0,modelValue:$.value,"onUpdate:modelValue":B[4]||(B[4]=M=>$.value=M),class:"flex-1 min-h-0",onSave:ve},null,8,["modelValue"])):s.value==="data"?(e.openBlock(),e.createBlock(Iw,{key:1,modelValue:E.value,"onUpdate:modelValue":B[5]||(B[5]=M=>E.value=M),class:"flex-1 min-h-0 flex flex-col",onSave:ve},null,8,["modelValue"])):s.value==="card"?(e.openBlock(),e.createBlock(Rw,{key:2,card:_.value,table:T.value,class:"flex-1 min-h-0",onSave:lt},null,8,["card","table"])):s.value==="metadata"?(e.openBlock(),e.createBlock($o,{key:3,data:p.value,"entity-id":x.value,"entity-type":"css",onSaved:be,onEditCssBounds:G},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}})},Symbol.toStringTag,{value:"Module"})),V2={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},B2=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",V2,[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]=g=>i.value=g),form:s.value,"onUpdate:form":p[1]||(p[1]=g=>s.value=g)},null,8,["schema","values","form"]))]))}}),$2={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},S2=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",$2,[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(Do.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"])]))}}),v2={class:"w-full"},L2=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",v2,[e.createVNode(Tn,{class:"w-full h-[calc(100vh-200px)]",height:"h-[calc(100vh-200px)]",id:t.id},null,8,["id"])]))}}),A2={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},T2={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},M2={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"},F2={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},D2={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},z2=["disabled"],I2=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(g){i.value=g.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:p}=window;if(p&&p.editor){const g=p.editor.getEditors();g.length>0&&g[g.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,g)=>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",A2,[e.createElementVNode("div",T2,[g[1]||(g[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(ce.X),{size:20})])]),i.value?(e.openBlock(),e.createElementBlock("div",M2," Помилка JSON: "+e.toDisplayString(i.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",F2,[e.createVNode(kn,{modelValue:a.value,"onUpdate:modelValue":g[0]||(g[0]=x=>a.value=x),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",D2,[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,z2)])])])):e.createCommentVNode("",!0)}}),P2={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},j2={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},R2={class:"w-full text-sm"},O2={class:"divide-y divide-gray-200"},U2={class:"px-4 py-3"},q2=["onUpdate:modelValue","onChange"],H2=["value"],W2={class:"px-4 py-3"},Y2=["onUpdate:modelValue","onChange"],Z2=["value"],G2={class:"px-4 py-3 text-center"},K2=["checked","onChange"],X2={class:"px-4 py-3"},Q2={key:0,class:"flex items-center gap-2"},J2=["onClick"],e_=["onClick"],t_={key:1},n_=["onClick"],o_={class:"px-4 py-3 text-right"},r_=["onClick"],l_=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 g(){const m=[...p.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",m)}function x(m){ye.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const h=p.value.filter((k,N)=>N!==m);r("update:modelValue",h)}})}function l(m,h,k){const N=[...p.value];N[m]={...N[m],[h]:k},r("update:modelValue",N)}function y(m){return!!m&&Object.keys(m).length>0}function d(m,h){c.value=m,s.value=h||{}}function u(m){d(m,{})}function b(m){ye.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{l(m,"config",void 0)}})}function f(m){c.value>-1&&l(c.value,"config",m),s.value=null,c.value=-1}return(m,h)=>{var k;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:g,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(k=p.value)!=null&&k.length?(e.openBlock(),e.createElementBlock("div",j2,[e.createElementVNode("table",R2,[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",O2,[(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",U2,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>N.type=E,onChange:E=>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=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,H2)),64))],40,q2),[[e.vModelSelect,N.type]])]),e.createElementVNode("td",W2,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>N.position=E,onChange:E=>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=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,Z2)),64))],40,Y2),[[e.vModelSelect,N.position]])]),e.createElementVNode("td",G2,[e.createElementVNode("input",{type:"checkbox",checked:N.visible!==!1,onChange:E=>l($,"visible",E.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,K2)]),e.createElementVNode("td",X2,[y(N.config)?(e.openBlock(),e.createElementBlock("div",Q2,[e.createElementVNode("button",{onClick:E=>d($,N.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(ce.Pen),{size:16})],8,J2),e.createElementVNode("button",{onClick:E=>b($),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(ce.X),{size:16})],8,e_)])):(e.openBlock(),e.createElementBlock("div",t_,[e.createElementVNode("button",{onClick:E=>u($),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(ce.Plus),{size:16})],8,n_)]))]),e.createElementVNode("td",o_,[e.createElementVNode("button",{onClick:E=>x($),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(ce.Trash2),{size:16})],8,r_)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",P2," Немає віджетів. Додайте перший віджет. ")),e.createVNode(I2,{teleport:"#modal",modelValue:s.value,"onUpdate:modelValue":h[0]||(h[0]=N=>s.value=N),onSave:f},null,8,["modelValue"])])}}}),a_={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},s_={class:"mx-1"},i_={class:"text-gray-900 font-semibold"},c_=["disabled"],d_={key:0,class:"text-center py-12 mt-6 px-[24px]"},u_={key:1,class:"px-[24px] overflow-y-auto"},p_={class:"space-y-6"},m_={class:"space-y-6"},f_={class:"space-y-6"},g_=Object.freeze(Object.defineProperty({__proto__:null,default:Ce(e.defineComponent({__name:"MapSettings",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.computed(()=>{var E;return((E=n.resolve("/gis.maps").meta)==null?void 0:E.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"}],g=p.map(E=>E.id),x=E=>E?Array.isArray(E)?E[0]:E:null,l=(()=>{const E=x(o.query.tab);return E&&g.includes(E)?E:"general"})(),y=e.ref(l);e.watch(()=>o.query.tab,E=>{const w=x(E);w&&g.includes(w)&&y.value!==w&&(y.value=w)}),e.watch(y,E=>{o.query.tab!==E&&n.replace({query:{...o.query,tab:E}})});const d=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),u=e.computed({get:()=>(d.value.layers||[]).map(E=>E.id||E),set:E=>{d.value.layers=E}});async function b(E){if(!E.length){c.value={};return}try{const w=new URLSearchParams({json:"1",val:Array.from(new Set(E)).join(",")}),S=await fetch(`/api/suggest/layer_list?${w.toString()}`);if(!S.ok)return;const A=await S.json(),R=(A==null?void 0:A.data)??A??[],Z=Array.isArray(R)?R:[],I={...c.value};Z.forEach(K=>{const q=K.id!=null?String(K.id):"";q&&(I[q]=K.text??K.name??q)}),c.value=I}catch(w){console.error("Failed to fetch layer labels:",w)}}const f=e.computed({get:()=>u.value.map(E=>c.value[E]??E),set:E=>{const w=Object.entries(c.value).reduce((A,[R,Z])=>(A[Z]=R,A),{}),S=E.map(A=>w[A]??null).filter(A=>A!=null);u.value=S}}),m=e.computed(()=>{const E=d.value.center;if(!Array.isArray(E)||E.length<2)return"Не задано";const[w,S]=E;return w===void 0||S===void 0||w===null||S===null||Number.isNaN(Number(w))||Number.isNaN(Number(S))?"Не задано":`Lng ${Number(w).toFixed(6)}, Lat ${Number(S).toFixed(6)}`}),h=e.computed(()=>{const E=d.value.zoom;if(E==null||E==="")return"Не задано";const w=Number(E);return Number.isNaN(w)?"Не задано":w.toFixed(2)}),k=[{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();d.value={...w,keywords:w.keywords||[],center:w.center??null,widgets:Array.isArray(w.widgets)?w.widgets:[],layers:(w.layers||[]).map(S=>S.id||S)},await b(d.value.layers??[])}catch(E){console.error("Failed to load map:",E),ye.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{a.value=!1}}async function $(){var w,S;const E=(S=(w=s.value)==null?void 0:w.validate)==null?void 0:S.call(w);if(E){ye.notify({type:"warning",title:"Валідація",message:Object.entries(E).map(([A,R])=>`${A}: ${R}`).join(`
44
+ `)});return}i.value=!0;try{const A=JSON.parse(JSON.stringify(d.value));if(A.zoom=Number(A.zoom),Array.isArray(A.center)&&(A.center.every(I=>I==null||I===""||I===0)||A.center.length===0)&&(A.center=null),delete A.created_at,delete A.updated_at,delete A.created_by,delete A.updated_by,delete A.history,delete A.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)})).ok)throw new Error("Save failed");ye.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(A){console.error("Save error:",A),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{i.value=!1}}return e.watch(()=>{var E;return((E=d.value)==null?void 0:E.layers)??[]},E=>b(Array.isArray(E)?E.map(w=>(w==null?void 0:w.id)??w):[]),{immediate:!1}),e.onMounted(async()=>{await N()}),(E,w)=>{const S=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",a_,[e.createVNode(Yt,{variant:"form",title:d.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(S,{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",s_,[e.createVNode(e.unref(ce.LucideChevronRight),{size:16,class:"shrink-0"})]),e.createElementVNode("span",i_,e.toDisplayString(d.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...w[6]||(w[6]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:w[0]||(w[0]=A=>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,c_)]),_:1},8,["title"]),a.value?(e.openBlock(),e.createElementBlock("div",d_,[...w[7]||(w[7]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",u_,[e.createVNode(mr,{tabs:p,activeTab:y.value,"onUpdate:activeTab":w[1]||(w[1]=A=>y.value=A)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",p_,[e.createVNode(B2,{schema:k,loading:a.value,modelValue:d.value,"onUpdate:modelValue":w[2]||(w[2]=A=>d.value=A),form:s.value,"onUpdate:form":w[3]||(w[3]=A=>s.value=A)},null,8,["loading","modelValue","form"])],512),[[e.vShow,y.value==="general"]]),e.withDirectives(e.createElementVNode("div",m_,[e.createVNode(S2,{layerIDs:u.value,"onUpdate:layerIDs":w[4]||(w[4]=A=>u.value=A)},null,8,["layerIDs"])],512),[[e.vShow,y.value==="layers"]]),e.withDirectives(e.createVNode(l_,{modelValue:d.value.widgets,"onUpdate:modelValue":w[5]||(w[5]=A=>d.value.widgets=A)},null,8,["modelValue"]),[[e.vShow,y.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",f_,[e.createVNode(L2,{"center-display":m.value,"zoom-display":h.value,"layer-names":f.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"}));Ye.CartoCSS=Hl,Ye.Classifiers=ss,Ye.MapSettings=Ql,Ye.MapWidget=Tn,Ye.Permissions=As,Ye.Raster=Ol,Ye.Register=Dl,Ye.Service=Pl,Ye.default=Tn,Ye.install=wf,Ye.template1=rr,Ye.template2=lr,Ye.template3=ar,Ye.template4=sr,Ye.template5=ir,Object.defineProperties(Ye,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));