@opengis/gis 0.2.183 → 0.2.185

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 (77) hide show
  1. package/dist/{CardIcon-CKcvisBB.js → CardIcon-C3cCdpvO.js} +1 -1
  2. package/dist/{EntityTablePage-Dj4Ysqkw.js → EntityTablePage-D0hDbacp.js} +1 -1
  3. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-zNchIX_P.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-8ervbwRu.js} +1 -1
  4. package/dist/{MapSettings-DH7BzcxB.js → MapSettings-BQak-606.js} +1 -1
  5. package/dist/{MapToolbarRight.vue_vue_type_script_setup_true_lang-B5aTyoyH.js → MapToolbarRight.vue_vue_type_script_setup_true_lang-D5Q1QqS8.js} +1 -1
  6. package/dist/{RastersTablePage-BjgVVZDP.js → RastersTablePage-DbiK7bD4.js} +1 -1
  7. package/dist/{cartocss-B-5m_Jgg.js → cartocss-H7PBnoyC.js} +37 -37
  8. package/dist/{import-utils-Bzs6QWW3.js → import-utils-BYsmUngb.js} +1 -1
  9. package/dist/{index-DhmYISKS.js → index-Bd_JFn54.js} +4785 -4722
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.umd.cjs +25 -25
  13. package/dist/{raster-XFH5nm6L.js → raster-DzFKHCJf.js} +3 -3
  14. package/dist/{register-CNWivGIA.js → register-ChSxZGlt.js} +3 -3
  15. package/dist/{service-CAelhYEL.js → service-DB7wy37J.js} +5 -5
  16. package/dist/{vs-datatable-DkR1zed2.js → vs-datatable-BvSBnibk.js} +2 -3
  17. package/module/gis/card/gis.metadata.table/index.yml +22 -22
  18. package/module/gis/card/gis.rasters.table/index.yml +11 -11
  19. package/module/gis/card/gis.registers.table/index.yml +23 -23
  20. package/module/gis/card/gis.services.table/index.yml +25 -25
  21. package/module/gis/cls/bool.yes_no.json +12 -12
  22. package/module/gis/cls/encoding.json +14 -14
  23. package/module/gis/cls/geom_type.json +14 -14
  24. package/module/gis/cls/gis.column_type.json +34 -34
  25. package/module/gis/cls/gis.column_view_type.json +26 -26
  26. package/module/gis/cls/gis.filter_type.json +22 -22
  27. package/module/gis/cls/language.json +10 -10
  28. package/module/gis/cls/meta.service_type.json +42 -42
  29. package/module/gis/cls/ogc.service.json +21 -21
  30. package/module/gis/cls/source_type.json +10 -10
  31. package/module/gis/cls/standarts.json +6 -6
  32. package/module/gis/cls/topic_category.json +106 -106
  33. package/module/gis/cls/update_frequency.json +29 -29
  34. package/module/gis/cls/view.json +21 -21
  35. package/module/gis/form/feedback.answer.form.json +10 -10
  36. package/module/gis/form/gis.cartocss.form.json +64 -64
  37. package/module/gis/form/gis.group_list.form.json +17 -17
  38. package/module/gis/form/gis.maps.form.json +61 -61
  39. package/module/gis/form/gis.metadata.form.json +240 -240
  40. package/module/gis/form/gis.metadata_new.form.json +195 -195
  41. package/module/gis/form/gis.ogc_service.form.json +51 -51
  42. package/module/gis/form/gis.rasters.form.json +76 -76
  43. package/module/gis/form/gis.registers_column.form.json +84 -84
  44. package/module/gis/form/gis.registers_filter.form.json +65 -65
  45. package/module/gis/form/gis.services.form.json +111 -111
  46. package/module/gis/form/gis.services_attributes.form.json +75 -75
  47. package/module/gis/form/gis.services_filter.form.json +65 -65
  48. package/module/gis/menu.json +43 -43
  49. package/module/gis/select/admin.cls.name.sql +9 -9
  50. package/module/gis/select/layer_list.sql +7 -7
  51. package/module/gis/select/layer_list_text.sql +7 -7
  52. package/module/gis/select/pg.column_name.geometry.sql +12 -12
  53. package/module/gis/select/pg.columns.parent.sql +6 -6
  54. package/module/gis/select/pg.table_name.sql +17 -17
  55. package/module/gis/select/service_id.sql +1 -1
  56. package/module/gis/select/srid.sql +7 -7
  57. package/module/gis/table/gis.cartocss.table.json +74 -74
  58. package/module/gis/table/gis.group_list.table.json +58 -58
  59. package/module/gis/table/gis.maps.table.json +110 -110
  60. package/module/gis/table/gis.metadata.table.json +70 -70
  61. package/module/gis/table/gis.metadata_new.table.json +137 -137
  62. package/module/gis/table/gis.ogc_service.table.json +100 -100
  63. package/module/gis/table/gis.rasters.table.json +113 -113
  64. package/module/gis/table/gis.registers.table.json +143 -143
  65. package/module/gis/table/gis.services.table.json +120 -120
  66. package/module/gis/table/site.gis.registers.table.json +88 -88
  67. package/module/gis/table/site.gis.services.table.json +106 -106
  68. package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
  69. package/module/gis/tokens.yml +5 -5
  70. package/module/permissions/form/permissions.users.form.json +151 -151
  71. package/module/permissions/table/gis.permissions.table.json +97 -97
  72. package/package.json +2 -2
  73. package/server/routes/registers/functions/gis.suggest.js +16 -8
  74. package/server/routes/registers/functions/handleRegistryRequest.js +3 -2
  75. package/server/routes/registers/registers.route.test.js +1 -1
  76. package/server/routes/services/functions/get.services.js +34 -4
  77. package/server/routes/services/services.route.test.js +4 -0
@@ -1,17 +1,17 @@
1
- (function(Ze,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router"),require("lucide-vue-next"),require("@opengis/core"),require("@opengis/filter"),require("@opengis/form")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router","lucide-vue-next","@opengis/core","@opengis/filter","@opengis/form"],e):(Ze=typeof globalThis<"u"?globalThis:Ze||self,e(Ze.MapCustom={},Ze.Vue,Ze.vueRouter,Ze.lucide,Ze.openGIScore,Ze.openGISfilter,Ze.openGISform))})(this,(function(Ze,e,He,ge,Ce,Qn,fl){"use strict";var XB=Object.defineProperty;var JB=(Ze,e,He)=>e in Ze?XB(Ze,e,{enumerable:!0,configurable:!0,writable:!0,value:He}):Ze[e]=He;var ut=(Ze,e,He)=>JB(Ze,typeof e!="symbol"?e+"":e,He);const _n=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=He.useRoute(),r=e.useSlots(),l=e.computed(()=>{const s=String(o.params.id??""),i=String(o.params.action??"");return s?i===n.editAction?n.components.edit:s===n.createParam?n.components.create:n.components.card:n.components.table});return(s,i)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.value),{"entity-key":n.entityKey,"entity-base-path":n.entityBasePath,"columns-config":n.columnsConfig},e.createSlots({_:2},[e.renderList(e.unref(r),(d,u)=>({name:u,fn:e.withCtx(c=>[e.renderSlot(s.$slots,u,e.normalizeProps(e.guardReactiveProps(c)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),as="registers",ss="/gis.registers",is=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>ak)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Ключ",name:"register_key",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];return(d,u)=>(e.openBlock(),e.createBlock(_n,{components:s,"entity-key":as,"entity-base-path":ss,"columns-config":i,"create-param":"new","edit-action":"edit"}))}}),cs="services",ds="/gis.datasets",us=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>cC)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Група",name:"group_id",format:"badge",width:220},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];function d(u){const c=String((u==null?void 0:u.text)||u||"").toLowerCase();return c.includes("error")||c.includes("inactive")?"bg-red-100 text-red-800":c.includes("warning")||c.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(u,c)=>(e.openBlock(),e.createBlock(_n,{components:s,"entity-key":cs,"entity-base-path":ds,"columns-config":i,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:p})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",d(p)])},e.toDisplayString((p==null?void 0:p.text)||p||"-"),3)]),_:1}))}}),fs="rasters",ms="/gis.rasters",ps=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>NC)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>PN)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Джерело",name:"source_path",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];return(d,u)=>(e.openBlock(),e.createBlock(_n,{components:s,"entity-key":fs,"entity-base-path":ms,"columns-config":i,"create-param":"new","edit-action":"edit"}))}}),gs="cartocss",ys="/gis.cartocss",hs=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>JV)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:280},{ua:"Опис",name:"description",format:"text",width:320},{ua:"Група",name:"group_id",format:"badge",width:220},{ua:"Джерело",name:"source_path",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"enabled",edit:!0,format:"boolean",width:120}];function d(u){const c=String((u==null?void 0:u.text)||u||"").toLowerCase();return c.includes("error")||c.includes("inactive")?"bg-red-100 text-red-800":c.includes("warning")||c.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(u,c)=>(e.openBlock(),e.createBlock(_n,{components:s,"entity-key":gs,"entity-base-path":ys,"columns-config":i,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:p})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",d(p)])},e.toDisplayString((p==null?void 0:p.text)||p||"-"),3)]),_:1}))}}),Fe=(t,n)=>{const o=t.__vccOpts||t;for(const[r,l]of n)o[r]=l;return o},bs={},xs={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 ks(t,n){return e.openBlock(),e.createElementBlock("svg",xs,[...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 eo=Fe(bs,[["render",ks]]),ws={class:"gap-2 inline-flex"},_s=["href"],Es="maps",ml="/gis.maps",Cs=Fe(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Tn)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>OB)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",link:"/gis.maps/{id}",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120},{ua:"Карта",name:"id",format:"link",link:"/maps/{id}",getCellData:()=>"",width:80,align:"center"}];return(d,u)=>(e.openBlock(),e.createBlock(_n,{components:s,"entity-key":Es,"entity-base-path":ml,"columns-config":i,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:c})=>[e.createElementVNode("div",ws,[e.createElementVNode("a",{href:`${ml}/${c.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(eo)],8,_s)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),Ns={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%]"},Vs={class:"pt-0 mt-0"},Bs={key:0,class:"flex items-center justify-center py-12"},$s={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Ss={key:2,class:"text-center py-12 text-gray-500"},vs={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},Ls=["onClick"],Ts={class:"flex items-start justify-between"},As={class:"flex items-start gap-3"},Ms={class:"flex-1 min-w-0"},Fs={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},Ds=["onClick"],Ps={class:"relative"},zs=["onClick"],Is={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"},Rs={class:"text-xs text-gray-600 line-clamp-2"},js={class:"flex items-center gap-2 shrink-0"},Os={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},Us={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},Ho=30,qs=Fe(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=He.useRouter(),i=He.useRoute(),d=e.ref(Number(i.query.page)||1),u=e.ref(!1),c=e.ref(0),p=e.ref([]),a=e.computed(()=>{const w=(d.value-1)*Ho,$=w+Ho;return p.value.slice(w,$)}),g=e.ref(!0),m=e.ref(null),y=e.ref(null);let k=null,h=null;const f=(w="",$="")=>{const L=new URLSearchParams,Y=w.trim();Y&&L.set("search",Y);const Q=($||"").trim();Q&&L.set("type",Q);const j=L.toString();return j?`/api/user-cls?${j}`:"/api/user-cls"},b=async(w="",$="")=>{try{g.value=!0,m.value=null;const L=f(w,$),Y=await fetch(L);if(!Y.ok)throw new Error(`HTTP error: ${Y.status}`);const Q=await Y.json();if(p.value=Q.data,!w.trim())c.value=Q.data.length;else if(c.value===0){const j=await fetch(f("",$));if(j.ok){const te=await j.json();c.value=te.data.length}}l("update:counts",{filtered:p.value.length,total:c.value})}catch(L){m.value=L instanceof Error?L.message:"Failed to load classifiers",console.error("Error fetching classifiers:",L)}finally{g.value=!1}};e.onMounted(()=>{u.value=!0,b(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([w,$])=>{k&&clearTimeout(k),k=setTimeout(()=>{b(w,$??""),d.value=1},300)});const x=w=>{s.push({name:"classifier-detail",params:{name:w.name}})},C=()=>{b(r.search,r.type??"")},V=async w=>{try{await navigator.clipboard.writeText(w),y.value=w,h&&clearTimeout(h),h=setTimeout(()=>{y.value=null},500)}catch($){console.error("Failed to copy text: ",$)}};n({refetch:C});const _=w=>{d.value=w,s.replace({query:{...i.query,page:String(w)}})};return(w,$)=>(e.openBlock(),e.createElementBlock("div",Ns,[e.createElementVNode("div",Vs,[g.value?(e.openBlock(),e.createElementBlock("div",Bs,[e.createVNode(e.unref(ge.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):m.value?(e.openBlock(),e.createElementBlock("div",$s,e.toDisplayString(m.value),1)):p.value.length===0?(e.openBlock(),e.createElementBlock("div",Ss," Нічого не знайдено ")):e.createCommentVNode("",!0),p.value.length>0?(e.openBlock(),e.createElementBlock("div",vs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(L,Y)=>(e.openBlock(),e.createElementBlock("div",{key:Y,class:"w-full border border-gray-200 bg-white rounded-lg p-4 text-left hover:shadow-md transition-all hover:border-gray-300 cursor-pointer",onClick:Q=>x(L)},[e.createElementVNode("div",Ts,[e.createElementVNode("div",As,[L.type==="sql"?(e.openBlock(),e.createBlock(e.unref(ge.Layers),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(ge.Code),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",Ms,[e.createElementVNode("div",Fs,[e.createElementVNode("h4",{onClick:e.withModifiers(Q=>V(L.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(L.name),9,Ds),e.createElementVNode("div",Ps,[e.createElementVNode("button",{onClick:e.withModifiers(Q=>V(L.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(ge.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,zs),y.value===L.name?(e.openBlock(),e.createElementBlock("div",Is," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",Rs,e.toDisplayString(L.description||"Опис відсутній"),1)])]),e.createElementVNode("div",js,[L.type!="sql"?(e.openBlock(),e.createElementBlock("span",Os,e.toDisplayString(L.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(ge.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,Ls))),128))])):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",Us,[e.createVNode(e.unref(Ce.VsPagination),{total:p.value.length,page:d.value,"page-size":Ho,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":_,onPageChange:_},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3556f06d"]]),Hs={class:"bg-white rounded-lg shadow-xl max-w-md w-full overflow-hidden"},Ws={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Ys={class:"text-lg font-semibold text-gray-900"},Gs={key:0,class:"p-6 flex items-center justify-center"},Zs={key:1,class:"p-6"},Ks={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Xs={class:"flex items-center gap-3 mt-6 pt-6 border-t border-gray-200"},Js=["disabled"],Qs=["disabled"],ei=e.defineComponent({__name:"DictModale",props:{editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,l=n,s=e.computed(()=>!!r.editData),i=e.ref(null),d=e.ref({name:"",description:"",alias:[]}),u=e.computed(()=>[{name:"name",type:"text",label:"Назва (унікальна)",placeholder:"Назва класифікатора",validators:["required"],disabled:s.value,hint:"Використовується як ідентифікатор в API"},{name:"description",type:"textarea",label:"Опис",placeholder:"Опис довідника"},{name:"alias",type:"tags",label:"Аліас",placeholder:"Аліас",addButtonText:"Додати аліас"}]),c=e.ref([]),p=e.ref(!1),a=e.ref(!1),g=e.ref(null),m=async h=>{try{a.value=!0;const f=await fetch(`/api/suggest/${encodeURIComponent(h)}`);if(!f.ok)throw new Error(`HTTP error: ${f.status}`);const b=await f.json();c.value=b.data||[]}catch(f){console.error("Error fetching suggest data:",f),c.value=[]}finally{a.value=!1}};e.onMounted(async()=>{r.editData&&(d.value={name:r.editData.name,description:r.editData.description||"",alias:r.editData.alias||[]},await m(r.editData.name))});const y=async()=>{var f,b;const h=(b=(f=i.value)==null?void 0:f.validate)==null?void 0:b.call(f);if(h){Ce.notify({type:"warning",title:"Валідація",message:Object.entries(h).map(([x,C])=>`${x}: ${C}`).join(`
2
- `)});return}if(d.value.name.trim())try{p.value=!0,g.value=null;const x={name:d.value.name.trim(),description:d.value.description.trim()||null,alias:d.value.alias.length>0?d.value.alias:null,data:c.value.length>0?c.value:[]},C=s.value?`/api/user-cls/${encodeURIComponent(d.value.name.trim())}`:"/api/user-cls",V=await fetch(C,{method:s.value?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!V.ok){const _=await V.json().catch(()=>({}));throw new Error(_.message||`HTTP error: ${V.status}`)}l("created"),l("close")}catch(x){let C="Помилка створення довідника";x instanceof Error?C=x.message:s.value&&(C="Помилка оновлення довідника"),Ce.notify({type:"error",title:"Помилка",message:C}),console.error("Error saving classifier:",x)}finally{p.value=!1}},k=()=>{const h=document.createElement("input");h.type="file",h.accept=".json",h.onchange=f=>{var V;const b=(V=f.target.files)==null?void 0:V[0];if(!b)return;const x=b.name.replace(/\.json$/i,"").trim(),C=new FileReader;C.onload=async _=>{try{const w=JSON.parse(_.target.result);if(!Array.isArray(w))throw new Error("Файл повинен містити масив обʼєктів");p.value=!0,g.value=null;const L=await fetch("/api/user-cls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:x,description:null,alias:null,data:w})});if(!L.ok){const Y=await L.json().catch(()=>({}));throw new Error(Y.message||`HTTP error: ${L.status}`)}Ce.notify({title:"Імпорт успішний",type:"success",message:`Створено класифікатор "${x}" з ${w.length} записами`}),l("created"),l("close")}catch(w){Ce.notify({title:"Помилка імпорту",type:"error",message:w.message||"Некоректний формат файлу"})}finally{p.value=!1}},C.readAsText(b)},h.click()};return(h,f)=>(e.openBlock(),e.createElementBlock("div",{onClick:f[3]||(f[3]=e.withModifiers(b=>l("close"),["self"])),class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},[e.createElementVNode("div",Hs,[e.createElementVNode("div",Ws,[e.createElementVNode("h3",Ys,e.toDisplayString(s.value?"Редагувати довідник":"Створити довідник"),1),e.createElementVNode("button",{onClick:f[0]||(f[0]=b=>l("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(ge.X),{width:20,height:20,"stroke-width":2,class:"lucide lucide-x-icon lucide-x"})])]),a.value?(e.openBlock(),e.createElementBlock("div",Gs,[e.createVNode(e.unref(ge.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):(e.openBlock(),e.createElementBlock("div",Zs,[e.createVNode(e.unref(o),{ref_key:"formRef",ref:i,schema:u.value,values:d.value,"onUpdate:values":f[1]||(f[1]=b=>d.value=b)},null,8,["schema","values"]),g.value?(e.openBlock(),e.createElementBlock("div",Ks,e.toDisplayString(g.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Xs,[e.createElementVNode("button",{type:"button",onClick:y,disabled:p.value,class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[p.value?(e.openBlock(),e.createBlock(e.unref(ge.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(p.value?"Збереження...":"Зберегти"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(p.value?"Створення...":"Створити"),1)],64))],8,Js),e.createElementVNode("button",{type:"button",onClick:k,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Імпорт "),e.createElementVNode("button",{type:"button",onClick:f[2]||(f[2]=b=>l("close")),disabled:p.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Скасувати ",8,Qs)])]))])]))}}),ti={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},ni={class:""},oi={class:"text-2xl font-bold mb-2 flex items-center gap-2"},ri={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},li={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},ai={class:"w-full md:w-auto"},si=["value"],ii={class:"relative w-full lg:w-[16rem]"},ci={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},di={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},ui=["value"],fi=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=d=>{const u=d.target.value;r("update:filter",u)},s=e.ref(!1),i=()=>{r("refresh")};return(d,u)=>(e.openBlock(),e.createElementBlock("div",ti,[e.createElementVNode("div",ni,[e.createElementVNode("h1",oi,[u[4]||(u[4]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",ri,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),u[5]||(u[5]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",li,[e.createElementVNode("div",ai,[u[7]||(u[7]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:l},[...u[6]||(u[6]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,si)]),e.createElementVNode("div",ii,[e.createElementVNode("div",ci,[e.createElementVNode("div",di,[e.createVNode(e.unref(ge.Search),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:u[0]||(u[0]=c=>d.$emit("update:modelValue",c.target.value))},null,40,ui),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:u[1]||(u[1]=c=>d.$emit("update:modelValue",""))},[e.createVNode(e.unref(ge.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:u[2]||(u[2]=c=>s.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(ge.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),u[8]||(u[8]=e.createTextVNode(" Додати ",-1))]),s.value?(e.openBlock(),e.createBlock(ei,{key:0,onClose:u[3]||(u[3]=c=>s.value=!1),onCreated:i})):e.createCommentVNode("",!0)])]))}}),mi={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},pi={key:0,class:"flex items-center justify-center py-12"},gi={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},yi={key:2,class:"text-center py-12 text-gray-500"},hi={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},bi={class:"bg-gray-50 border-b border-gray-200"},xi={class:"divide-y divide-gray-200"},ki={class:"px-4 py-3 w-1/12"},wi={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},_i={class:"px-4 py-3 text-sm text-gray-600 font-mono"},Ei={class:"px-4 py-3 w-1/12"},Ci={class:"flex gap-1"},Ni=["onClick"],Vi=["onClick"],Bi=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},emits:["edit"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=y=>{l("edit",y)},i=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-5/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"},{key:"actions",label:"Дії",width:"w-1/12",align:"text-left"}],d=e.ref([]),u=e.ref(!0),c=e.ref(null),p=e.computed(()=>{var k;if(!((k=r.search)!=null&&k.trim()))return d.value;const y=r.search.toLowerCase().trim();return d.value.filter(h=>{var f,b;return((f=h.text)==null?void 0:f.toLowerCase().includes(y))||((b=h.id)==null?void 0:b.toLowerCase().includes(y))})}),a=async y=>{try{u.value=!0,c.value=null;const k=await fetch(`/api/suggest/${encodeURIComponent(y)}`);if(!k.ok)throw new Error(`HTTP error: ${k.status}`);const h=await k.json();d.value=h.data}catch(k){c.value=k instanceof Error?k.message:"Failed to load items",console.error("Error fetching suggest items:",k)}finally{u.value=!1}},g=async(y,k)=>{Ce.confirm({title:"Підтвердіть дію",type:"error",message:"Ви впевнені, що хочете видалити даний обʼєкт?",onConfirm:async()=>{const h=await fetch(`/api/user-cls/${y}/${k}`,{method:"DELETE"});if(!h.ok){Ce.notify({type:"error",title:"Помилка",message:(await h.json()).error||"Something went wrong"});return}Ce.notify({title:"Видалено",type:"success",message:"Обʼєкт успішно видалено"}),a(y)}})};return e.onMounted(()=>{r.classifierName&&a(r.classifierName)}),e.watch(()=>r.classifierName,y=>{y&&a(y)}),n({refetch:()=>{a(r.classifierName)}}),(y,k)=>(e.openBlock(),e.createElementBlock("div",mi,[u.value?(e.openBlock(),e.createElementBlock("div",pi,[e.createVNode(e.unref(ge.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):c.value?(e.openBlock(),e.createElementBlock("div",gi,e.toDisplayString(c.value),1)):d.value.length===0?(e.openBlock(),e.createElementBlock("div",yi," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",hi,[e.createElementVNode("thead",bi,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,h=>e.createElementVNode("th",{key:h.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[h.width,h.align]])},e.toDisplayString(h.label),3)),64))])]),e.createElementVNode("tbody",xi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,h=>(e.openBlock(),e.createElementBlock("tr",{key:h.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",ki,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:h.color})},null,4)]),e.createElementVNode("td",wi,e.toDisplayString(h.text),1),e.createElementVNode("td",_i,e.toDisplayString(h.id),1),e.createElementVNode("td",Ei,[e.createElementVNode("div",Ci,[e.createElementVNode("button",{onClick:f=>s(h),class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати"},[e.createVNode(e.unref(ge.PenLine),{size:14,"stroke-width":2})],8,Ni),e.createElementVNode("button",{onClick:f=>g(t.classifierName,h.id),class:"p-1 text-gray-400 hover:text-red-600 transition-all rounded hover:bg-red-50",title:"Видалити"},[e.createVNode(e.unref(ge.Trash2),{size:14,"stroke-width":2})],8,Vi)])])]))),128))])]))]))}}),$i={class:"bg-white rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto"},Si={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},vi={class:"text-lg font-semibold text-gray-900"},Li={class:"space-y-5"},Ti={class:"space-y-3"},Ai={class:"grid grid-cols-6 gap-2"},Mi=["onClick"],Fi={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Di={class:"flex items-center gap-3 pt-6"},Pi=["disabled"],zi=["disabled"],Ii=e.defineComponent({__name:"TableAddModale",props:{classifierName:{},editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=t,r=n,l=["rgb(44, 94, 255)","rgb(187, 224, 168)","rgb(255, 165, 0)","rgb(139, 92, 246)","rgb(239, 68, 68)","rgb(84, 171, 82)","rgb(107, 114, 128)","rgb(236, 72, 153)","rgb(255, 216, 117)","rgb(96, 193, 235)","rgb(20, 184, 166)","rgb(209, 115, 168)"],s=e.ref(null),i=e.ref(!1),d=e.ref(null),u=e.reactive({id:"",text:""});e.onMounted(()=>{o.editData&&(u.id=o.editData.id||"",u.text=o.editData.text,s.value=o.editData.color||null)});const c=async()=>{if(u.text.trim())try{i.value=!0,d.value=null;const p=await fetch(`/api/suggest/${encodeURIComponent(o.classifierName)}`);if(!p.ok)throw new Error(`HTTP error: ${p.status}`);const g=(await p.json()).data||[],m={id:u.id.trim(),text:u.text.trim(),color:s.value||null};let y;o.editData?y=g.map(h=>{var f;return h.id===((f=o.editData)==null?void 0:f.id)?m:h}):y=[...g,m];const k=await fetch(`/api/user-cls/${encodeURIComponent(o.classifierName)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.classifierName,data:y})});if(!k.ok){const h=await k.json().catch(()=>({}));throw new Error(h.message||`HTTP error: ${k.status}`)}r("created"),r("close")}catch(p){d.value=p instanceof Error?p.message:"Помилка збереження",console.error("Error saving record:",p)}finally{i.value=!1}};return(p,a)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createElementVNode("div",{class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4",onClick:a[4]||(a[4]=e.withModifiers(g=>r("close"),["self"]))},[e.createElementVNode("div",$i,[e.createElementVNode("div",Si,[e.createElementVNode("h2",vi,e.toDisplayString(t.editData?"Редагувати запис":"Додати запис"),1),e.createElementVNode("button",{onClick:a[0]||(a[0]=g=>r("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(ge.X),{width:20,height:20,"stroke-width":2,class:""})])]),e.createElementVNode("form",{class:"p-6",onSubmit:e.withModifiers(c,["prevent"])},[e.createElementVNode("div",Li,[e.createElementVNode("div",null,[a[6]||(a[6]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"}," Колір ",-1)),e.createElementVNode("div",Ti,[e.createElementVNode("div",Ai,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,g=>e.createElementVNode("button",{key:g,type:"button",class:e.normalizeClass(["w-full aspect-square rounded-lg border-2 transition-all",s.value===g?"border-gray-900 scale-110":"border-gray-300 hover:border-gray-400"]),style:e.normalizeStyle({backgroundColor:g}),onClick:m=>s.value=g},null,14,Mi)),64))]),a[5]||(a[5]=e.createElementVNode("div",{class:"relative"},[e.createElementVNode("button",{type:"button",class:"text-sm text-sky-600 hover:text-sky-700"}," Обрати інший колір ")],-1))])]),e.createElementVNode("div",null,[a[7]||(a[7]=e.createElementVNode("label",{for:"id",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Код "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[1]||(a[1]=g=>u.id=g),type:"text",id:"id",placeholder:"Введіть код",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.id]])]),e.createElementVNode("div",null,[a[8]||(a[8]=e.createElementVNode("label",{for:"name",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[2]||(a[2]=g=>u.text=g),type:"text",id:"name",placeholder:"Введіть назву",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.text]])])]),d.value?(e.openBlock(),e.createElementBlock("div",Fi,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Di,[e.createElementVNode("button",{type:"submit",disabled:i.value||!u.text.trim(),class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[i.value?(e.openBlock(),e.createBlock(e.unref(ge.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(i.value?"Збереження...":t.editData?"Зберегти зміни":"Зберегти"),1)],8,Pi),e.createElementVNode("button",{type:"button",onClick:a[3]||(a[3]=g=>r("close")),disabled:i.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed"}," Скасувати ",8,zi)])],32)])])]))}}),Ri={class:"space-y-6 flex-1 overflow-y-auto p-0"},ji={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Oi={class:"text-gray-900"},Ui={class:"flex items-start justify-between mb-6"},qi={class:"flex-1 mr-4"},Hi={class:"text-2xl font-bold text-gray-900"},Wi={key:0,class:"flex items-center gap-2 group mt-1"},Yi={class:"text-sm text-gray-500"},Gi={key:1,class:"flex items-center gap-2 mt-1"},Zi=["disabled"],Ki=["disabled"],Xi={class:"flex items-center gap-3"},Ji={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4 grid grid-cols-2 justify-between"},Qi={class:"relative max-w-md grid"},ec={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},tc={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},nc=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=He.useRouter(),o=He.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),s=e.ref(null),i=e.ref(null),d=e.ref(""),u=e.ref(""),c=e.ref(""),p=e.ref(!1),a=e.ref(!1),g=e.ref(null),m=async()=>{var _;try{const w=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!w.ok)return;const L=(_=(await w.json()).data)==null?void 0:_[0];L&&(u.value=L.description||"")}catch(w){console.error("Error fetching classifier details:",w)}},y=()=>{c.value=u.value,p.value=!0,e.nextTick(()=>{var _;(_=g.value)==null||_.focus()})},k=()=>{p.value=!1,c.value=""},h=async()=>{try{a.value=!0;const $=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],L={name:r.value,description:c.value.trim()||null,data:$},Y=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(L)});if(!Y.ok)throw new Error(`HTTP error: ${Y.status}`);u.value=c.value,p.value=!1}catch(_){console.error("Error saving description:",_)}finally{a.value=!1}};e.onMounted(()=>{m()}),e.watch(r,()=>{m()});const f=()=>{s.value=null,l.value=!0},b=_=>{s.value=_,l.value=!0},x=()=>{l.value=!1,s.value=null},C=()=>{var _;(_=i.value)==null||_.refetch()},V=async()=>{try{const _=await fetch(`/api/suggest/${encodeURIComponent(r.value)}`);if(!_.ok)throw new Error(`HTTP error: ${_.status}`);const $=(await _.json()).data||[],L=new Blob([JSON.stringify($,(j,te)=>te===null?void 0:te,2)],{type:"application/json"}),Y=URL.createObjectURL(L),Q=document.createElement("a");Q.href=Y,Q.download=`${r.value}.json`,document.body.appendChild(Q),Q.click(),document.body.removeChild(Q),URL.revokeObjectURL(Y),Ce.notify({title:"Експорт завершено",type:"success",message:"Файл успішно експортовано"})}catch(_){console.error("Error exporting classifier to json:",_),Ce.notify({title:"Помилка",type:"error",message:"Не вдалося експортувати дані"})}};return(_,w)=>(e.openBlock(),e.createElementBlock("div",Ri,[e.createElementVNode("div",null,[e.createElementVNode("div",ji,[e.createElementVNode("button",{onClick:w[0]||(w[0]=$=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),w[4]||(w[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Oi,e.toDisplayString(r.value),1)]),e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("h1",Hi,e.toDisplayString(r.value),1),p.value?(e.openBlock(),e.createElementBlock("div",Gi,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:g,"onUpdate:modelValue":w[1]||(w[1]=$=>c.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(h,["enter"]),e.withKeys(k,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,c.value]]),e.createElementVNode("button",{onClick:h,disabled:a.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(ge.Check),{width:18,height:18,"stroke-width":2})],8,Zi),e.createElementVNode("button",{onClick:k,disabled:a.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(ge.X),{width:18,height:18,"stroke-width":2})],8,Ki)])):(e.openBlock(),e.createElementBlock("div",Wi,[e.createElementVNode("p",Yi,e.toDisplayString(u.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:y,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(ge.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Xi,[e.createElementVNode("button",{onClick:f,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(ge.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),w[5]||(w[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:w[2]||(w[2]=$=>e.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",Ji,[e.createElementVNode("div",Qi,[e.createElementVNode("div",ec,[e.createElementVNode("div",tc,[e.createVNode(e.unref(ge.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[3]||(w[3]=$=>d.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,d.value]])])]),e.createElementVNode("button",{onClick:V,class:"justify-self-end border p-2 rounded-lg w-fit text-sm bg-stone-100/50 hover:bg-white hover:shadow-sm transition-colors"}," Експорт ")]),l.value?(e.openBlock(),e.createBlock(Ii,{key:0,"classifier-name":r.value,"edit-data":s.value,onClose:x,onCreated:C},null,8,["classifier-name","edit-data"])):e.createCommentVNode("",!0),e.createVNode(Bi,{ref_key:"detailsTableRef",ref:i,"classifier-name":r.value,search:d.value,onEdit:b},null,8,["classifier-name","search"])]))}}),oc={class:"flex-col justify-between h-full"},rc={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},lc=e.defineComponent({__name:"index",setup(t){const n=He.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),s=e.ref({filtered:0,total:0}),i=u=>{s.value=u},d=()=>{var u;(u=l.value)==null||u.refetch()};return(u,c)=>(e.openBlock(),e.createElementBlock("div",oc,[e.createElementVNode("div",rc,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(fi,{key:0,modelValue:o.value,"onUpdate:modelValue":c[0]||(c[0]=p=>o.value=p),filter:r.value,"onUpdate:filter":c[1]||(c[1]=p=>r.value=p),counts:s.value,onRefresh:d},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(nc,{key:2})):(e.openBlock(),e.createBlock(qs,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":i},null,8,["search","type"]))]),c[2]||(c[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),ac={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},sc={class:"w-full bg-white relative"},ic={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},cc={key:0,class:"bg-white divide-y divide-gray-200"},dc={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},uc=["onClick"],fc={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},mc={key:1,class:"px-6 py-3.5"},pc={class:"text-sm font-semibold text-gray-900"},gc={class:"text-xs text-gray-400 mt-0.5"},yc={key:0,class:"inline-flex items-center cursor-pointer"},hc={class:"relative"},bc=["checked","onChange"],xc=["checked","onChange"],kc={class:"px-6 py-3"},wc={class:"ml-6"},_c={class:"text-sm text-black font-medium"},Ec={class:"text-xs text-gray-400 mt-0.5"},Cc=["checked","onChange"],Nc={key:1},Vc=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),i=e.ref({}),d=e.ref({}),u=e.computed(()=>{var x;return((x=r.data)==null?void 0:x.routers)||[]});e.watch(()=>r.modelValue,x=>{const C={};(x||[]).forEach(V=>{C[V.id]=new Set(V.actions||[])}),d.value=C},{immediate:!0});function c(){const x=Object.entries(d.value).map(([C,V])=>({id:C,actions:Array.from(V)}));l("update:modelValue",x)}function p(x){return x?x.id||x.path||x.table||x.ua||JSON.stringify(x):""}function a(x){return x?x.id||x.ua||x.name:""}function g(x){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[x]||x}function m(x,C){var _;const V=p(x);return((_=d.value[V])==null?void 0:_.has(C))||!1}function y(x){const C=a(x);return i.value[C]===!0}function k(x){const C=a(x);i.value[C]=!y(x)}function h(x,C){var V;return(V=x.menu)!=null&&V.length?x.menu.every(_=>m(_,C)):m(x,C)}function f(x,C,V){var _;if((_=x.menu)!=null&&_.length){const w={...d.value};x.menu.forEach($=>{const L=p($),Y=new Set(w[L]||[]);V?Y.add(C):Y.delete(C),w[L]=Y}),d.value=w,c()}}function b(x,C,V){const _=p(x),w=new Set(d.value[_]||[]);V?w.add(C):w.delete(C),d.value={...d.value,[_]:w},c()}return n({getSelected:()=>r.modelValue}),(x,C)=>{var V;return e.openBlock(),e.createElementBlock("div",ac,[e.createElementVNode("table",sc,[e.createElementVNode("thead",ic,[e.createElementVNode("tr",null,[C[0]||(C[0]=e.createElementVNode("th",{class:"px-6 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-32 text-left"},"Групи",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,_=>(e.openBlock(),e.createElementBlock("th",{key:_,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(g(_)),1))),128))])]),(V=u.value)!=null&&V.length?(e.openBlock(),e.createElementBlock("tbody",cc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,_=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:p(_)},[e.createElementVNode("tr",dc,[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:w=>k(_)},[e.createElementVNode("button",fc,[e.createVNode(e.unref(ge.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":y(_)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(_.ua),1)])],8,uc)):(e.openBlock(),e.createElementBlock("td",mc,[e.createElementVNode("div",pc,e.toDisplayString(_.ua),1),e.createElementVNode("div",gc,e.toDisplayString(_.path||_.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,w=>(e.openBlock(),e.createElementBlock("td",{key:w,class:"px-4 py-3.5 text-center"},[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("label",yc,[e.createElementVNode("div",hc,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:h(_,w),onChange:$=>f(_,w,$.target.checked)},null,40,bc),C[1]||(C[1]=e.createElementVNode("div",{class:"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600"},null,-1))])])):(e.openBlock(),e.createElementBlock("input",{key:1,type:"checkbox",checked:m(_,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,xc))]))),128))]),_!=null&&_.menu&&y(_)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.menu,w=>(e.openBlock(),e.createElementBlock("tr",{key:p(w),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",kc,[e.createElementVNode("div",wc,[e.createElementVNode("div",_c,e.toDisplayString(w.ua),1),e.createElementVNode("div",Ec,e.toDisplayString(w.path||w.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,$=>(e.openBlock(),e.createElementBlock("td",{key:$,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:m(w,$),onChange:L=>b(w,$,L.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,Cc)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",Nc,[...C[2]||(C[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),Bc={class:"flex flex-col gap-4 mt-2 mx-2"},$c={class:"flex items-center gap-3"},Sc={class:"flex-1 relative"},vc=e.defineComponent({__name:"VsPermissions",setup(t){const n=He.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),s=e.ref([]),i=e.ref(["edit"]),d=e.computed(()=>c(l.value)),u=e.computed(()=>{const g=o.value.toLowerCase().trim();return g?d.value.map(m=>{const y=String(m.ua||"").toLowerCase().includes(g),k=(m.menu||[]).filter(h=>String(h.ua||"").toLowerCase().includes(g));return y?{...m,menu:m.menu}:k.length?{...m,menu:k}:null}).filter(Boolean):d.value}),c=g=>{const m=g.categories||[],y=g.layers||[],k=m.map(f=>{const b=y.filter(x=>x.category_id===f.category_id).map(x=>({id:String(x.layer_id),ua:x.name,path:String(x.layer_id)}));return b.length?{ua:f.name,menu:b,id:String(f.category_id)}:null}).filter(Boolean),h=y.filter(f=>!f.category_id).map(f=>({ua:f.name,id:String(f.layer_id),path:String(f.layer_id)}));return h.length&&k.push({ua:"Без категорії",menu:h,id:"noCategory"}),k},p=async()=>{const[g,m]=await Promise.all([fetch("/api/catalog").then(y=>y.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(y=>y.json())]);l.value=g,s.value=((m==null?void 0:m.layer_list)||[]).filter(y=>y.service_id).map(y=>({id:String(y.service_id),actions:y.actions||[]}))},a=async()=>{var y,k;const m=(((k=(y=r.value)==null?void 0:y.getSelected)==null?void 0:k.call(y))||s.value).filter(h=>{var f;return(f=h.actions)==null?void 0:f.length}).map(h=>({service_id:h.id,actions:h.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)}).then(h=>h.json()).then(h=>{Ce.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(h=>{Ce.notify({title:"Помилка",message:h.message,type:"error"})})};return e.onMounted(p),(g,m)=>(e.openBlock(),e.createElementBlock("div",Bc,[e.createElementVNode("div",$c,[e.createElementVNode("div",Sc,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=y=>o.value=y),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:m[1]||(m[1]=y=>g.$router.back())}," Повернутися "),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700",onClick:a}," Зберегти ")]),e.createVNode(Vc,{ref_key:"accessRef",ref:r,data:{routers:u.value},modelValue:s.value,"onUpdate:modelValue":m[2]||(m[2]=y=>s.value=y),actions:i.value},null,8,["data","modelValue","actions"])]))}});function nn(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function Wt(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=nn(t[0]),o=nn(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return Wt(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=nn(o),s=nn(r);if(l!=null&&s!=null)return[l,s]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=nn(n),l=nn(o);return r!=null&&l!=null?[r,l]:null}return null}const pl=Symbol("MapContext");function Lc(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],s=()=>{r=!0,l.length&&l.forEach(m=>m())},i=()=>{const m=t.container;return typeof m=="string"?document.getElementById(m):(m==null?void 0:m.value)!==void 0?m.value:m},d=()=>r?Promise.resolve():new Promise(m=>l.push(m)),u=(m,y)=>{if(m==null)return y;const k=Number(typeof m=="string"?m.trim():m);return Number.isFinite(k)?k:y},c=m=>{if(!n.value||!m)return;const y=Wt(m.center);y&&n.value.setCenter(y);const k=n.value.getZoom(),h=u(m.zoom,k);if(h!==k&&n.value.setZoom(h),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const f=n.value.getMaxZoom(),b=u(m.maxZoom,f);b!==f&&n.value.setMaxZoom(b)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const f=n.value.getMinZoom(),b=u(m.minZoom,f);b!==f&&n.value.setMinZoom(b)}m.bounds&&n.value.fitBounds(m.bounds,{animate:!1})},p=async()=>{var C,V,_,w,$,L,Y;if(typeof window>"u"||n.value)return;const m=i();if(!m)throw new Error("Map container not found");const y=e.unref(t.settings)||null,k=Wt((C=y==null?void 0:y.map)==null?void 0:C.center)||[30,50],h=u((V=y==null?void 0:y.map)==null?void 0:V.zoom,7),f=u((_=y==null?void 0:y.map)==null?void 0:_.maxZoom,20),x={...{attributionControl:!1,center:k,zoom:h,maxZoom:f,minZoom:4},...t.mapOptions||{},container:m};x.maxZoom==null&&(x.maxZoom=f),n.value=new maplibregl.Map(x),(w=t.controls)!=null&&w.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var te;const Q=n.value.getContainer(),j=(te=Q==null?void 0:Q.querySelector)==null?void 0:te.call(Q,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");j&&typeof n.value.easeTo=="function"&&j.addEventListener("click",de=>{de.preventDefault(),de.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),($=t.controls)!=null&&$.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(L=t.controls)!=null&&L.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(Y=t.controls)!=null&&Y.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var Q;c((Q=e.unref(t.settings))==null?void 0:Q.map),o.value=!0,s()})};e.watch(()=>{var m;return(m=e.unref(t.settings))==null?void 0:m.map},m=>{c(m)},{deep:!0});const a=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(p),e.onUnmounted(a);const g={map:n,ready:d,flyTo:m=>{var y;return(y=n.value)==null?void 0:y.flyTo(m)},fitBounds:(m,y)=>{var k;return(k=n.value)==null?void 0:k.fitBounds(m,y)},setCenter:m=>{var y;return(y=n.value)==null?void 0:y.setCenter(m)},setZoom:m=>{var y;return(y=n.value)==null?void 0:y.setZoom(m)},addControl:(m,y)=>{var k;return(k=n.value)==null?void 0:k.addControl(m,y)},removeControl:m=>{var y;return(y=n.value)==null?void 0:y.removeControl(m)},on:(m,y,k)=>{var h,f;return typeof y=="string"?((h=n.value)==null||h.on(m,y,k),()=>{var b;return(b=n.value)==null?void 0:b.off(m,y,k)}):((f=n.value)==null||f.on(m,y),()=>{var b;return(b=n.value)==null?void 0:b.off(m,y)})},off:(m,y,k)=>{var h,f;typeof y=="string"?(h=n.value)==null||h.off(m,y,k):(f=n.value)==null||f.off(m,y)},project:m=>{var y;return(y=n.value)==null?void 0:y.project(m)},unproject:m=>{var y;return(y=n.value)==null?void 0:y.unproject(m)}};return e.provide(pl,g),g}function Ke(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(pl);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const gl=Symbol.for("gis.settingsRef");function Wo(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[gl];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[gl]=o),o}const Tc={class:"map-view-slot"},to=Fe(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=Wo(),i=Lc({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!1,scale:!0},settings:s});async function d(){var a;await e.nextTick();const p=(a=i.map)==null?void 0:a.value;p!=null&&p.resize&&p.resize()}function u(){typeof ResizeObserver>"u"||l.value||!r.value||(l.value=new ResizeObserver(()=>{d()}),l.value.observe(r.value))}function c(){var p;(p=l.value)==null||p.disconnect(),l.value=null}return e.onMounted(()=>{d(),u(),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",d),c()}),n({ctx:i}),(p,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapper",ref:r,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.createElementVNode("div",{ref_key:"el",ref:o,class:"map-view-canvas"},null,512),e.createElementVNode("div",Tc,[e.renderSlot(p.$slots,"default",{},void 0,!0)])],512))}}),[["__scopeId","data-v-d415aafd"]]),Ac=["Noto Sans Regular"],Mc=12,Fc="#0f172a",Dc="#fff",Pc=14;function it(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 zc(t){return t?Array.isArray(t)?t:[t]:Ac}function Yo(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 Ic(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 Rc(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 jc(t,n={}){if(!t)return[];const o=it(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Ic(o);if(!r)return[];const l=r,s=(n.geometry||t.type||"point").toString().toLowerCase(),i=it(t,["text-font","textFont"]),d=Yo(it(t,["text-size","textSize"]),Mc),u=it(t,["text-allow-overlap","textAllowOverlap"]),c=it(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),p=it(t,["text-maxzoom","textMaxZoom","maxzoom"]),a=it(t,["text-color","textColor"])||Fc,g=it(t,["text-halo-color","textHaloColor"])||Dc,m=it(t,["text-halo-width","textHaloWidth"]),y=it(t,["text-halo-blur","textHaloBlur"]),k=it(t,["text-offset","textOffset"]),h=it(t,["text-anchor","textAnchor"]),f=it(t,["text-justify","textJustify"]),b=it(t,["text-letter-spacing","textLetterSpacing"]),x=it(t,["text-transform","textTransform"]),C=it(t,["symbol-placement","symbolPlacement"]),V=it(t,["symbol-spacing","symbolSpacing"]),_=it(t,["text-rotation-alignment","textRotationAlignment"]),w=it(t,["text-pitch-alignment","textPitchAlignment"]),$=it(t,["text-opacity","textOpacity"]),L={"text-field":l,"text-font":zc(i),"text-size":d,"text-allow-overlap":u??!1};k&&(L["text-offset"]=k),s!=="line"&&(L["text-anchor"]=h??"center"),f&&(L["text-justify"]=f),b!==void 0&&(L["text-letter-spacing"]=b),x&&(L["text-transform"]=x),V!==void 0&&(L["symbol-spacing"]=V),s==="line"?(L["symbol-placement"]=C||"line",L["text-rotation-alignment"]=_||"map",L["text-pitch-alignment"]=w||"map"):(_&&(L["text-rotation-alignment"]=_),w&&(L["text-pitch-alignment"]=w),C&&(L["symbol-placement"]=C)),h&&s==="line"&&(L["text-anchor"]=h);const Y={"text-color":a,"text-opacity":$??1};Y["text-halo-color"]=g,m!==void 0&&(Y["text-halo-width"]=m),y!==void 0&&(Y["text-halo-blur"]=y);const Q={type:"symbol",layout:L,paint:Y},j=Yo(c,Pc);if(Q.minzoom=j,p!==void 0){const de=Yo(p,void 0);de!==void 0&&(Q.maxzoom=de)}const te=Rc(n.filter,n.excludeClusters);return te&&(Q.filter=te),[Q]}const Ct="#9ca3af";function Go(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const yl=new WeakMap,Oc={};function Uc(t){if(!t||t.__layerStoreMode!=="isolated")return Oc;const n=yl.get(t);if(n)return n;const o={};return yl.set(t,o),o}function Zo(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,Ct]}return null}function no(t){return/^(https?:|data:|blob:)/i.test(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.includes("/")&&/\.(svg|png|jpe?g|gif|webp)(?:[?#].*)?$/i.test(t)}function qc(t){return no(t)?t:`/api/gis-icon/${t}`}function Ko(t){return/\.svg(?:[?#].*)?$/i.test(t)||/^data:image\/svg\+xml/i.test(t)}function oo(t,n){return n?`${t}__${String(n).replace("#","")}`:t}function Hc(t,n){return t.replace(/currentColor/gi,n).replace(/\bfill=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`fill=${r}${n}${r}`).replace(/\bstroke=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`stroke=${r}${n}${r}`)}async function Wc(t,n){const o=await fetch(t);if(!o.ok)throw new Error(`Failed to fetch SVG image: ${t}`);const r=await o.text(),l=n?Hc(r,n):r,s=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(l)}`;return hl(s)}function hl(t){return new Promise((n,o)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`Failed to load image: ${t}`)),r.src=t})}function Yc(t){const n=t.iconSet&&typeof t.iconSet=="object"?t.iconSet:null,o=t.colors&&typeof t.colors=="object"?Object.entries(t.colors):[],r=!!(t.colorAttr&&o.length),l=d=>{if(!r)return d;const u=o.flatMap(([c,p])=>[c,oo(d,p)]);return["match",["get",t.colorAttr],...u,oo(d,Ct)]};if(t.iconAttr&&n){const d=Object.entries(n).flatMap(([u,c])=>{if(r&&typeof c=="string"){const p=t.colors[u];return[u,oo(c,typeof p=="string"?p:Ct)]}return[u,c]});return["match",["get",t.iconAttr],...d,r&&t.icon?l(t.icon):t.icon||Object.values(n)[0]]}if(!t.icon||!t.colors)return null;if(no(t.icon))return l(t.icon);const s=[],i=t.icon.split("+")[0];return Object.values(t.colors).forEach(d=>{s.push(`${i}+${d.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((d,[u,c],p)=>d.concat([u,s[p]]),[]),t.icon]}function on(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function Gc(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],s=["has","point_count"],i=["!",s],c={type:"circle",maxzoom:r,filter:s,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},p={type:"symbol",maxzoom:r,filter:s,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},a={...n,filter:["all",i,n.filter||!0]};return[c,p,a]}function bl(t,n){const o=Zo(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||Ct,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=Gc(t,r);return l||r}function Zc(t){const n=Zo(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||Ct,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||Ct}}}function Kc(t){return{type:"line",paint:{"line-color":Zo(t)||t.color||Ct,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Xc(t){const n=Yc(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 xl(t,n={}){if(!t)return[];if(!Jc(t))return[];const o=[];t.icon&&on(o,Xc(t)),t.pointZoom&&on(o,bl(t,t.pointZoom)),t.type==="polygon"?on(o,Zc(t)):t.type==="line"?on(o,Kc(t)):on(o,bl(t));const l=n.sourceType!=="raster"?jc(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return on(o,l),o.filter(Boolean)}function Jc(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 kl(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){const l=Go(t);if(l&&o&&(l.filter=o),l)return xl(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const s={type:"point",color:Ct};return o&&(s.filter=o),xl(s,{sourceType:n})}return[]}function Qc(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}function Xo(t){if(typeof t!="string")return t;const n=t.trim();if(!n)return"";if(n==="null")return null;if(n==="true")return!0;if(n==="false")return!1;const o=Number(n);return Number.isFinite(o)&&n!==""?o:n}function En(t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t!="string")return!1;const n=t.trim();return n===""||n==="[]"}function ed(t){if(t==null)return null;if(Array.isArray(t))return t;if(typeof t=="object"){const l=Object.entries(t).filter(([,i])=>!En(i));if(!l.length)return null;const s=l.map(([i,d])=>{if(Array.isArray(d)){const c=d.map(p=>Xo(p)).filter(p=>!En(p));return c.length?["in",["get",i],["literal",c]]:null}const u=Xo(d);return En(u)?null:["==",["get",i],u]}).filter(Boolean);return s.length?s.length===1?s[0]:["all",...s]:null}if(typeof t!="string")return null;const n=t.trim();if(!n)return null;const o=n.split("|").map(l=>l.trim()).filter(Boolean);if(!o.length)return null;const r=o.map(l=>{const s=l.indexOf("=");if(s<=0)return null;const i=l.slice(0,s).trim(),d=l.slice(s+1).trim();if(!i||En(d))return null;const u=d.split(",").map(c=>Xo(c)).filter(c=>!En(c));return u.length?u.length>1?["in",["get",i],["literal",u]]:["==",["get",i],u[0]]:null}).filter(Boolean);return r.length?r.length===1?r[0]:["all",...r]:null}function td(t,n){return n?!t||t===!0?n:Array.isArray(t)&&t[0]==="all"?[...t,n]:["all",t,n]:t??null}async function wl(t,n){var d;const o=new Set,r=new Map,l=n!=null&&n.colors&&typeof n.colors=="object"?Object.entries(n.colors):[],s=!!(n!=null&&n.colorAttr&&l.length),i=(u,c)=>{const p=oo(u,c);o.add(p),c&&r.set(p,c)};if(n!=null&&n.icon&&i(n.icon),n!=null&&n.iconSet&&typeof n.iconSet=="object"&&Object.values(n.iconSet).forEach(u=>{if(!(typeof u!="string"||!u.trim())){if(!s){i(u);return}if(Ko(u)){l.forEach(([,c])=>{i(u,String(c))}),i(u,Ct);return}i(u),l.forEach(([,c])=>{i(u,String(c))})}}),n!=null&&n.icon&&(n!=null&&n.colors)&&!no(n.icon)){const u=n.icon.split("+")[0];Object.values(n.colors||{}).forEach(c=>{o.add(`${u}+${String(c).replace("#","")}.png`)})}n!=null&&n.icon&&(n!=null&&n.colors)&&no(n.icon)&&Ko(String(n.icon))&&(Object.values(n.colors||{}).forEach(u=>{i(n.icon,String(u))}),i(n.icon,Ct)),await Promise.allSettled(Array.from(o).map(async u=>{if(t.getImage(u))return;const c=r.get(u)||null,p=u.split("__")[0],a=qc(p),g=Ko(p)?await Wc(a,c):await hl(a);t.addImage(u,g)})),(d=t.triggerRepaint)==null||d.call(t)}function qe(t,n,o){var ne;const r=Uc(o);if(!t)return r;if(!n)return r[t];const{map:l,ready:s=()=>Promise.resolve()}=Ke(o),i=t||((ne=n.layer)==null?void 0:ne.id),d=n.sourceId??t;function u(v){var B;const M={...v};return M.point&&(M.source=Qc(M.point)),!M.layer&&((B=M.source)==null?void 0:B.type)==="raster"&&(M.layer={id:d,type:"raster",source:d}),M.layer&&!M.layer.source&&Object.assign(M.layer,{source:d}),M}let c=u({...n}),p=!1,a=!1;const g=new Map,m=(v=!0)=>{var B,N,F;if(!l.value)return;(((F=(N=(B=l.value).getStyle)==null?void 0:N.call(B))==null?void 0:F.layers)??[]).filter(H=>H.source===i).forEach(H=>{l.value.removeLayer(H.id)}),c.source&&v&&l.value.getSource(d)&&l.value.removeSource(d)},y=async()=>{var v,M,B,N,F,H,he,G,D,U,q,ee;if(!(a||!l.value)){if(c.source&&!l.value.getSource(d)&&l.value.addSource(d,c.source),!l.value.getLayer(i)){const z=c.beforeId===0?(M=(v=l.value.getStyle().layers)==null?void 0:v[0])==null?void 0:M.id:c.beforeId;((N=(B=c.layer)==null?void 0:B.style)!=null&&N.icon||(H=(F=c.layer)==null?void 0:F.style)!=null&&H.iconSet)&&await wl(l.value,c.layer.style);const oe=((he=c.source)==null?void 0:he.type)||((G=c.layer)==null?void 0:G.type),ye=c.layer&&(c.layer.type||c.layer.ref)?c.layer:null,we=(D=c.layer)==null?void 0:D.style,T=((U=c.layer)==null?void 0:U["source-layer"])||((q=c.source)==null?void 0:q["source-layer"])||c.sourceLayer||d,X=c.style||we,fe=kl(X,{sourceType:oe,filter:(ee=c.layer)==null?void 0:ee.filter,allowFallback:!ye});if(!fe.length){if(ye){const ie={...ye,id:ye.id||i,source:ye.source||d};oe==="vector"&&T&&(ie["source-layer"]=ie["source-layer"]||T),l.value.addLayer(ie,z),g.set(ie.id,ie.filter??null)}return}fe.forEach((ie,ce)=>{const pe={...ie,id:`${i}${ce||""}`,source:d};oe==="vector"&&T&&(pe["source-layer"]=T),l.value.addLayer(pe,z),g.set(pe.id,pe.filter??null)})}p=!0}};s().then(y);const k=(v,M)=>l.value?(l.value.on(v,i,M),()=>{var B;return(B=l.value)==null?void 0:B.off(v,i,M)}):()=>{},h=v=>{const M=l.value;if(!M)return;const B=M.getStyle(),N=B==null?void 0:B.layers;if(!(N!=null&&N.length))return;const F=v?"visible":"none";N.filter(H=>H.source===d||H.id===i||typeof H.id=="string"&&H.id.startsWith(String(i))).forEach(H=>{M.setLayoutProperty(H.id,"visibility",F)})},f=(v=!0)=>{l.value&&(m(v),a=!0)},b=async v=>{v&&(c=u({...v}),de.opts=c,de.card=c.card,de.popup=c.popup),!a&&(p=!1,m(!0),await s(),await y())},x=async v=>{var F,H,he,G,D;if(!l.value)return;(v!=null&&v.icon||v!=null&&v.iconSet)&&await wl(l.value,v);const M=((F=c.source)==null?void 0:F.type)||((H=c.layer)==null?void 0:H.type),B=((he=c.layer)==null?void 0:he["source-layer"])||((G=c.source)==null?void 0:G["source-layer"])||c.sourceLayer||d,N=kl(v,{sourceType:M,filter:(D=c.layer)==null?void 0:D.filter,allowFallback:!0});m(!1),N.forEach((U,q)=>{var z;const ee={...U,id:`${i}${q}`,source:((z=c.layer)==null?void 0:z.source)||d};M==="vector"&&B&&(ee["source-layer"]=ee["source-layer"]||B),l.value.addLayer(ee)}),p=!0},C=v=>{l.value&&Object.entries(v).forEach(([M,B])=>{l.value.setPaintProperty(i,M,B)})},V=(v,M,B)=>{const N=l.value;if(N)switch(M){case"raster":N.setPaintProperty(v,"raster-opacity",B);break;case"fill":N.setPaintProperty(v,"fill-opacity",B);break;case"line":N.setPaintProperty(v,"line-opacity",B);break;case"circle":N.setPaintProperty(v,"circle-opacity",B);break;case"symbol":N.setPaintProperty(v,"icon-opacity",B),N.setPaintProperty(v,"text-opacity",B);break}},de={ids:{layerId:i,sourceId:d},isMounted:()=>{var v;return p&&!!((v=l.value)!=null&&v.getLayer(i))},setVisible:h,updatePaint:C,updateLayout:v=>{l.value&&Object.entries(v).forEach(([M,B])=>{l.value.setLayoutProperty(i,M,B)})},updateFilter:v=>{l.value&&l.value.setFilter(i,v)},setOpacity:v=>{var N;if(!l.value)return;const B=(((N=l.value.getStyle())==null?void 0:N.layers)||[]).filter(F=>F.source===d);if(!B.length){const F=l.value.getLayer(i);F&&V(i,F.type,v);return}B.forEach(F=>V(F.id,F.type,v))},setData:v=>{if(!l.value)return;const M=l.value.getSource(d);M&&"setData"in M&&M.setData(v)},setTiles:v=>{if(!l.value)return;const M=l.value.getSource(d);M&&"setTiles"in M&&M.setTiles(v)},setStyle:x,setFilter:v=>{var N,F,H,he,G,D;if(!l.value)return;if(((N=c.source)==null?void 0:N.type)==="geojson"){const U=ed(v);(((he=(H=(F=l.value).getStyle)==null?void 0:H.call(F))==null?void 0:he.layers)??[]).filter(z=>z.source===d).map(z=>z.id).forEach(z=>{const oe=g.get(z)??null,ye=td(oe,U);l.value.setFilter(z,ye)});return}const B=l.value.getSource(d);if(B&&"setTiles"in B&&((D=(G=c.source)==null?void 0:G.tiles)!=null&&D[0])){const U=c.source.tiles[0];B.setTiles([`${U}${U.includes("?")?"&":"?"}filter=${v}`])}},setFeatureState:(v,M)=>{l.value&&l.value.setFeatureState({source:d,...v},M)},removeFeatureState:(v,M)=>{l.value&&l.value.removeFeatureState({source:d,...v},M?{key:M}:void 0)},refresh:b,remove:f,card:c.card,popup:c.popup,opts:c,getSource:()=>{var v;return(v=l.value)==null?void 0:v.getSource(d)},getLayer:()=>{var v;return(v=l.value)==null?void 0:v.getLayer(i)},on:k},be=()=>{r[t]===de&&delete r[t]},ae=de.remove;return de.remove=()=>{be(),ae()},e.getCurrentInstance()&&e.onBeforeUnmount(de.remove),r[t]=de,de}const nd={class:"z-10 relative widget bg-white rounded-lg shadow-md overflow-hidden"},od=["title","onClick"],rd=["src","alt"],ld=["title"],rn=e.defineComponent({__name:"BaseMaps",props:{layers:{},defaultLayer:{},title:{}},emits:["state-change"],setup(t,{emit:n}){var be,ae,ne,v,M;const o={z:13,x:4790,y:2762},r={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}};function l(B){if(B)return B.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function s(B,N){let F=B||`layers-${Object.keys(N).length}`,H=1;for(;N[F];)F=`${B}-${H}`,H+=1;return F}function i(B,N,F){const H=(B==null?void 0:B.name)??(B==null?void 0:B.title)??`basemap-${N}`,he=((B==null?void 0:B.id)??H??`basemap-${N}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),G=s(he||`basemap-${N}`,F),D=(B==null?void 0:B.preview)||(B!=null&&B.url?l(B.url):void 0);return{id:G,title:H,url:B==null?void 0:B.url,preview:D,overlayUrl:B==null?void 0:B.overlayUrl}}function d(B,N,F=r){let H=[];if(Array.isArray(B)&&B.length>0?H=B:B&&typeof B=="object"&&Object.keys(B).length>0?H=Object.values(B):Array.isArray(N==null?void 0:N.basemaps)&&(H=N.basemaps),!H.length)return F;const he={};return H.forEach((G,D)=>{const U=i(G,D,he);he[U.id]={url:U.url,preview:U.preview,title:U.title,overlayUrl:U.overlayUrl}}),he}function u(B,N,F=r){const H=d(B,N,F);return Object.entries(H).map(([he,G])=>({id:he,title:G.title??he,url:G.url,preview:G.preview,overlayUrl:G.overlayUrl}))}const c=t,p=n,a=e.getCurrentInstance(),g=(be=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:be.$settings,m=g==null?void 0:g.map,y=He.useRoute(),k=He.useRouter();function h(){const B=y==null?void 0:y.query;return!B||typeof B!="object"?null:typeof B.basemap=="string"?B.basemap:null}const f=e.computed(()=>h()),b=e.computed(()=>d(c.layers,m,r)),x=e.computed(()=>u(c.layers,m,r)),C=e.ref(f.value??Object.keys(b.value)[0]??"gki"),V=e.ref(C.value!=="none"?C.value:"gki"),_=e.computed(()=>x.value.filter(B=>B.url)),w=e.computed(()=>!!b.value.none),$=e.computed(()=>{const B=b.value[C.value];return!!(B!=null&&B.url)}),L=qe("base",{source:{type:"raster",tiles:(ae=b.value[C.value])!=null&&ae.url?[(ne=b.value[C.value])==null?void 0:ne.url]:[],tileSize:256},layer:{id:"base",type:"raster",source:"base"},beforeId:0}),Y=qe("base-overlay",{source:{type:"raster",tiles:(v=b.value[C.value])!=null&&v.overlayUrl?[(M=b.value[C.value])==null?void 0:M.overlayUrl]:[],tileSize:256},layer:{id:"base-overlay",type:"raster",source:"base-overlay",layout:{visibility:"none"}}});function Q(B){B!=null&&B.url?(L.setVisible(!0),L.setTiles([B.url])):L.setVisible(!1),B!=null&&B.overlayUrl?(Y.setVisible(!0),Y.setTiles([B.overlayUrl])):Y.setVisible(!1)}function j(){p("state-change",{basemaps:x.value,selectedId:C.value})}function te(B){var N;b.value[B]&&(B!=="none"&&((N=b.value[B])!=null&&N.url)&&(V.value=B),C.value=B,Q(b.value[B]),j(),typeof window<"u"&&h()!==B&&k.replace({query:{...y==null?void 0:y.query,basemap:B}}).catch(()=>{}))}function de(){var N,F;if(!w.value)return;if($.value){te("none");return}const B=(N=b.value[V.value])!=null&&N.url?V.value:(F=_.value[0])==null?void 0:F.id;B&&te(B)}return e.watch(()=>[b.value,f.value],([B,N])=>{var H;const F=N&&B[N]?N:C.value;B[F]?C.value=F:C.value=Object.keys(B)[0]??F,C.value!=="none"&&((H=B[C.value])!=null&&H.url)&&(V.value=C.value),Q(B[C.value]),j()},{immediate:!0,deep:!0}),e.watch(()=>C.value,()=>{j()}),e.onBeforeUnmount(()=>{}),(B,N)=>(e.openBlock(),e.createElementBlock("div",nd,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 p-2",{"border-b border-gray-100":B.$slots.default}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,F=>(e.openBlock(),e.createElementBlock("button",{key:F.id,type:"button",class:e.normalizeClass(["w-8 h-8 rounded overflow-hidden flex-shrink-0 cursor-pointer border-2",C.value===F.id&&$.value?"border-blue-500":"border-gray-200"]),title:F.title,onClick:H=>te(F.id)},[F.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:F.preview,alt:F.title,class:"w-full h-full object-cover"},null,8,rd)):e.createCommentVNode("",!0)],10,od))),128)),w.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"ml-1 p-1 text-gray-400 hover:text-gray-600 rounded transition-colors",title:$.value?"Приховати підложку":"Показати підложку",onClick:de},[$.value?(e.openBlock(),e.createBlock(e.unref(ge.Eye),{key:0,class:"w-4 h-4"})):(e.openBlock(),e.createBlock(e.unref(ge.EyeOff),{key:1,class:"w-4 h-4"}))],8,ld)):e.createCommentVNode("",!0)],2),e.renderSlot(B.$slots,"default")]))}}),ad={class:"mapLayer-info__inner"},sd={class:"mapLayer-info__item-label"},Jo=Fe(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const d=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function u(k){if(r.open){g();return}const h=k.currentTarget,f=h==null?void 0:h.closest(".mapLayer-info");if(!f){g();return}l.value=f,r.open=!0,e.nextTick(()=>{c(),m(),requestAnimationFrame(()=>{c()})})}function c(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,C=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(300,window.innerWidth-24),_=s.value.offsetHeight||0;let w=k.left+window.scrollX+(k.width-V)/2;w<f&&(w=f),w+V>b&&(w=Math.max(f,b-V)),r.left=w;let $=k.bottom+window.scrollY+h;$+_>C&&($=k.top+window.scrollY-_-h,$<x&&($=Math.max(x,C-_))),$<x&&($=x),$+_>C&&($=Math.max(x,C-_)),r.top=$,r.transform="none"}function p(k){var f,b;if(!r.open)return;const h=k.target;(f=l.value)!=null&&f.contains(h)||(b=s.value)!=null&&b.contains(h)||g()}function a(k){k.key==="Escape"&&g()}function g(){y(),r.open=!1,l.value=null,s.value=null}function m(){y(),s.value&&(i=new ResizeObserver(()=>{c()}),i.observe(s.value))}function y(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",p,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c),y()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>c())},{deep:!0}),n({close:g}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(u,["prevent","stop"])},[...h[1]||(h[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(d.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",ad,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"mapLayer-info__item"},[e.createElementVNode("div",sd,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),id={key:0,class:"map-info__title"},cd={class:"map-info__actions"},dd={key:0,class:"map-info__menu"},ud=["href"],fd=["innerHTML"],_l=Fe(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),s=e.ref(null),i=e.ref({top:0,left:0});He.useRouter();const d=e.ref(!0),u=e.ref(!1),c=e.computed(()=>Array.isArray(n.links)?n.links.filter(C=>(C==null?void 0:C.name)&&(C==null?void 0:C.slug)):[]),p=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),a=e.computed(()=>{const C=[];return n.mapName&&C.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&C.push({label:"Опис",value:n.mapDescription,breakLine:!0}),C});function g(C){return C==null?!1:C.replace(/<[^>]*>/g,"").trim().length>0}const m=e.computed(()=>g(n.content)),y=e.computed(()=>m.value);function k(C){C.stopPropagation(),r.value=!r.value}function h(){const C=l.value;if(!C||!s.value)return;const V=C.getBoundingClientRect(),_=12,w=8,$=window.scrollX+_,L=window.scrollX+window.innerWidth-_,Y=window.scrollY+_,Q=window.scrollY+window.innerHeight-_,j=s.value.offsetWidth||160,te=s.value.offsetHeight||0;let de=V.bottom+window.scrollY+w,be=V.left+window.scrollX;be+j>L&&(be=V.right+window.scrollX-j,be<$&&(be=$)),be<$&&(be=$),de+te>Q&&(de=V.top+window.scrollY-te-w,de<Y&&(de=Math.max(Y,Q-te))),de<Y&&(de=Y),de+te>Q&&(de=Math.max(Y,Q-te)),i.value={top:de,left:be}}function f(C){if(!r.value)return;const V=o.value;if(!V){r.value=!1;return}V.contains(C.target)||(r.value=!1)}e.watch(r,C=>{C?e.nextTick(()=>{h(),requestAnimationFrame(()=>{h()}),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h)}):(window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h))});function b(){d.value=!d.value}function x(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",f,!0),x(),y.value?u.value&&(d.value=!1):d.value=!1,window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",f,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",x)}),(C,V)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[t.title||c.value.length||a.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([m.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",id,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",cd,[c.value.length?(e.openBlock(),e.createElementBlock("div",dd,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:k,"aria-label":"Показати посилання"},[...V[1]||(V[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:s,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(p.value),onClick:V[0]||(V[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,_=>(e.openBlock(),e.createElementBlock("a",{key:_.slug||_.name,href:`/maps/${_.slug}`,class:"map-info__popover-link"},e.toDisplayString(_.name),9,ud))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),a.value.length?(e.openBlock(),e.createBlock(Jo,{key:1,items:a.value},null,8,["items"])):e.createCommentVNode("",!0),y.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":d.value})},[...V[2]||(V[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!d.value}]),innerHTML:t.content},null,10,fd)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),md=new Set(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection"]);function El(t){if(!t||typeof t!="object")return null;const n=t,o=n.type;return o==="FeatureCollection"&&Array.isArray(n.features)?{type:"FeatureCollection",features:n.features.filter(r=>r==null?void 0:r.geometry)}:o==="Feature"&&n.geometry?{type:"FeatureCollection",features:[n]}:typeof o=="string"&&md.has(o)?{type:"FeatureCollection",features:[{type:"Feature",geometry:n,properties:{}}]}:null}function pd(t){const n=new Set((t.features||[]).map(o=>{var r;return((r=o==null?void 0:o.geometry)==null?void 0:r.type)||""}).filter(Boolean));return[...n].some(o=>o.includes("Polygon"))?"polygon":[...n].some(o=>o.includes("Line"))?"line":"point"}function Cn(t,n=[]){if(!t)return n;if(Array.isArray(t))return t.length>=2&&typeof t[0]=="number"&&typeof t[1]=="number"?(n.push([t[0],t[1]]),n):(t.forEach(o=>Cn(o,n)),n);if(typeof t=="object"){const o=t;Array.isArray(o.coordinates)&&Cn(o.coordinates,n),Array.isArray(o.features)&&o.features.forEach(r=>Cn(r==null?void 0:r.geometry,n)),Array.isArray(o.geometries)&&o.geometries.forEach(r=>Cn(r,n))}return n}function Qo(t){const n=Cn(t);if(!n.length)return null;let o=n[0][0],r=n[0][0],l=n[0][1],s=n[0][1];return n.forEach(([i,d])=>{i<o&&(o=i),i>r&&(r=i),d<l&&(l=d),d>s&&(s=d)}),[[o,l],[r,s]]}const Cl=["zip","shp","kml","gml","geojson","json"],gd=[".zip",".shp",".kml",".gml",".geojson",".json"].join(",");function yd(t){const n=t.toLowerCase().split(".");return n.length>1&&n.pop()||""}function Nl(t){const n=yd(t.name);return Cl.includes(n)}function Vl(){return Cl.map(t=>t.toUpperCase()).join(", ")}function hd(t){let n="";for(let r=0;r<t.length;r+=32768)n+=String.fromCharCode(...t.subarray(r,r+32768));return btoa(n)}async function bd(t){const n=await t.arrayBuffer();return hd(new Uint8Array(n))}async function xd(t,n){if(t.size>52428800)throw new Error("Максимальний розмір файлу — 50MB");if(!Nl(t))throw new Error(`Підтримуються формати: ${Vl()}`);const r=await bd(t),l=await fetch("/api/gis-convert",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:r,filename:t.name,srid:Number(n)})}),s=await l.json().catch(()=>null);if(!l.ok)throw new Error((s==null?void 0:s.error)||`Помилка обробки файлу (${l.status})`);return s}const xt=e.ref([]);function kd(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const s=n[l];return s!=null?String(s):""}):t}function ro(t){return t==null?"":String(t).trim()}function er(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function wd(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function _d(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 Nn(t){function n(i,d={},u,c){var C,V;const p=ro(i==null?void 0:i.id),a=((C=i==null?void 0:i.title)==null?void 0:C.trim())||p,g=(i==null?void 0:i.type)||(i!=null&&i.data?"geojson":"raster"),m=((V=i==null?void 0:i.url)==null?void 0:V.trim())||"";if(!p||g==="raster"&&!m||g==="geojson"&&!(i!=null&&i.data))return;const y=c??t;if(!y)return;const k=wd(y);if(!k)return;const h=xt.value.findIndex(_=>_.id===p);h!==-1&&(er(xt.value[h]),xt.value.splice(h,1));let f=null;const b=i.beforeId??_d(k);let x="";try{if(g==="geojson"){const _=pd(i.data),w=i.style||{type:_,color:"#2563eb",stroke:"#1d4ed8",opacity:_==="polygon"?.35:1,width:2,radius:6};f=qe(p,{source:{type:"geojson",data:i.data},style:w,beforeId:b},y)}else{if(x=kd(m,d),!x)return;f=qe(p,{source:{type:"raster",tiles:[x],tileSize:i.tileSize??256,minzoom:i.minzoom??0,maxzoom:i.maxzoom??19},layer:{id:p,type:"raster",source:p,paint:{"raster-opacity":i.opacity??.85}},beforeId:b},y)}}catch(_){const w=(_==null?void 0:_.message)??"";if(!(typeof w=="string"&&w.includes("Map provider")))throw _;return}xt.value=[...xt.value,{id:p,title:a,originalUrl:g==="raster"?m:"",resolvedUrl:g==="raster"?x:"",owner:u??null,handle:f??null}]}function o(i,d){const u=ro(i);if(!u)return;const c=xt.value.findIndex(a=>a.id===u&&(!d||a.owner===d));if(c===-1)return;const[p]=xt.value.splice(c,1);er(p)}function r(i,d,u){var a;const c=ro(i);if(!c)return;const p=xt.value.find(g=>g.id===c&&(!u||g.owner===u));(a=p==null?void 0:p.handle)!=null&&a.setOpacity&&p.handle.setOpacity(d)}function l(i){if(!xt.value.length)return;const d=[];xt.value.forEach(u=>{(i?u.owner===i:!0)?er(u):d.push(u)}),xt.value=d}function s(i,d){const u=ro(i);return u?xt.value.some(c=>c.id===u&&(!d||c.owner===d)):!1}return{temporaryLayers:xt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:s}}const Nt=e.ref({}),Vn="map:client-layer-added",lo="map:client-layer-removed";function tr(){function t(s){Nt.value={...Nt.value,[s.id]:s}}function n(s){if(!Nt.value[s])return;const i={...Nt.value};delete i[s],Nt.value=i}function o(){Nt.value={}}function r(s){return!!Nt.value[s]}function l(s){return Nt.value[s]??null}return{clientLayers:Nt,registerClientLayer:t,unregisterClientLayer:n,clearClientLayers:o,isClientLayer:r,getClientLayer:l}}const Bn=e.ref(null);function Ed(){Bn.value=null}function Cd(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(Bn,i=>{i!==o()&&n.value&&(n.value=!1)});function r(){Bn.value=o(),n.value=!0}function l(){Bn.value===o()&&(Bn.value=null),n.value=!1}function s(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:s}}const Nd={class:"map-filter"},Vd={class:"map-filter__header"},Bd={class:"map-filter__title"},$d={"aria-hidden":"true"},nr="#map-filter-popover-host",ao=Fe(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 B;return((B=o.layer)==null?void 0:B.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:s,close:i,toggle:d}=Cd(l),u=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),c=e.ref(null),p=e.ref(null);let a=null;const g=e.ref({}),m=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),y=e.computed(()=>s.value),k=e.computed(()=>{var B;return Array.isArray((B=o.layer)==null?void 0:B.filters)?o.layer.filters:[]}),h=e.computed(()=>k.value.length>0),f=e.computed(()=>{var B;return((B=o.layer)==null?void 0:B.name)??""}),b=e.computed(()=>k.value),x=e.ref(null),C=e.computed(()=>k.value.length),V=e.computed(()=>C.value<=2),_=e.computed(()=>V.value?"body":typeof window>"u"||x.value?nr:"body"),w=e.computed(()=>{if(!y.value||!V.value)return{};const B=typeof window<"u"?window.innerWidth:280,F=Math.max(280,B-16*2);return{position:"absolute",top:`${u.top}px`,left:`${u.left}px`,transform:u.transform,zIndex:1e3,width:"280px",maxWidth:`${F}px`}});function $(){i()}function L(B,N,F=8){const H=window.scrollY+F,he=window.scrollY+window.innerHeight-F;let G=B;return G+N>he&&(G=he-N),G<H&&(G=H),G}function Y(){var U,q,ee;if(!c.value||!V.value)return;const B=c.value.getBoundingClientRect(),N=window.scrollX+8,F=window.scrollX+window.innerWidth-8,H=((U=p.value)==null?void 0:U.offsetWidth)||280,he=((q=p.value)==null?void 0:q.offsetHeight)||0;let G=0,D=0;if((ee=o.catalogAnchor)!=null&&ee.value){const z=o.catalogAnchor.value.getBoundingClientRect(),oe=z.top+window.scrollY;G=L(oe,he,8);const ye=z.right+window.scrollX+12,we=F-H,T=N;D=Math.min(Math.max(ye,T),Math.max(T,we))}else{const z=B.bottom+window.scrollY+8;G=L(z,he,8);let oe=B.left+window.scrollX;oe<N&&(oe=N),oe+H>F&&(oe=Math.max(N,F-H)),D=oe}u.left=D,u.top=G,u.transform="none"}function Q(){V.value||M(),d(),s.value&&V.value&&e.nextTick(()=>{Y(),ne(),requestAnimationFrame(()=>Y())})}function j(){o.disabled||Q()}e.watch(y,B=>{B&&V.value?e.nextTick(()=>{Y(),ne(),requestAnimationFrame(()=>Y())}):(v(),V.value||M())}),e.watch(b,()=>{!y.value||!V.value||e.nextTick(()=>Y())},{deep:!0}),e.watch(V,B=>{y.value&&(B?e.nextTick(()=>{Y(),ne()}):(v(),M()))}),e.watch(()=>o.disabled,B=>{B&&(i(),g.value={})});function te(){!y.value||!V.value||Y()}function de(B){const N=r.value;if(!N)return;const F=qe(N);if(!(F!=null&&F.setFilter))return;g.value=B;const H=Object.entries(B).map(([he,G])=>`${he}=${G}`).join("|");F.setFilter(H)}function be(B){if(!o.disabled)return;const N=B.currentTarget;if(!N)return;const F=N.getBoundingClientRect();m.left=F.left+F.width/2+window.scrollX,m.top=F.bottom+8+window.scrollY,m.visible=!0}function ae(){m.visible=!1}e.onMounted(()=>{M(),window.addEventListener("resize",te),window.addEventListener("scroll",te,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",te),window.removeEventListener("scroll",te,!0),v()});function ne(){v(),!(!p.value||!V.value)&&(a=new ResizeObserver(()=>{!y.value||!V.value||Y()}),a.observe(p.value))}function v(){a&&(a.disconnect(),a=null)}function M(){typeof window>"u"||typeof document>"u"||(x.value=document.querySelector(nr))}return(B,N)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:c},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(j,["prevent","stop"]),onMouseenter:be,onMouseleave:ae,onFocus:be,onBlur:ae},[...N[2]||(N[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),y.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:_.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!V.value}]),style:e.normalizeStyle(w.value),ref_key:"panel",ref:p,onClick:N[1]||(N[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Nd,[e.createElementVNode("div",Vd,[e.createElementVNode("h3",Bd,e.toDisplayString(f.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:$},[e.createElementVNode("span",$d,[e.createVNode(e.unref(ge.X),{class:"h-4 w-4"})]),N[3]||(N[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:g.value,limit:10,onChange:N[0]||(N[0]=F=>de(F.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[m.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${m.top}px`,left:`${m.left}px`})},e.toDisplayString(m.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-32948852"]]),Sd={class:"opacity-popover__content"},vd={class:"opacity-popover__value"},Bl=Fe(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),s=e.ref(null),i=e.reactive({top:0,left:0});function d(){var V;const a=(V=s.value)==null?void 0:V.querySelector("button");if(!a||!l.value)return;const g=a.getBoundingClientRect(),m=260,y=l.value.offsetHeight||60,k=8,h=12,f=window.innerWidth,b=window.innerHeight;let x=g.bottom+k+window.scrollY,C=g.left+window.scrollX;C+m>f-h&&(C=f-m-h+window.scrollX),C<h+window.scrollX&&(C=h+window.scrollX),x+y>b+window.scrollY-h&&(x=g.top-y-k+window.scrollY,x<h+window.scrollY&&(x=b-y-h+window.scrollY)),i.top=x,i.left=C}function u(){o.value=!o.value,o.value&&e.nextTick(d)}function c(){var y;const a=qe(n.layerId),g=(r.value??100)/100;if(a!=null&&a.setOpacity){a.setOpacity(g);return}const m=(y=a==null?void 0:a.getLayer)==null?void 0:y.call(a);if(m)switch(m.type){case"raster":a.updatePaint({"raster-opacity":g});break;case"fill":a.updatePaint({"fill-opacity":g});break;case"line":a.updatePaint({"line-opacity":g});break;case"circle":a.updatePaint({"circle-opacity":g});break;case"symbol":a.updatePaint({"icon-opacity":g});break}}function p(a){var m,y;if(!o.value)return;const g=a.target;(m=l.value)!=null&&m.contains(g)||(y=s.value)!=null&&y.contains(g)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",p),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d)}),(a,g)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:s},[e.renderSlot(a.$slots,"trigger",{toggle:u,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",Sd,[g[1]||(g[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":g[0]||(g[0]=m=>r.value=m),class:"opacity-popover__range",onInput:c},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",vd,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-39c90b6d"]]),Ld={class:"layers-panel"},Td={class:"layers-panel__header"},Ad={class:"layers-panel__heading"},Md={class:"layers-panel__heading-title"},Fd={class:"layers-panel__count"},Dd={class:"layers-panel__bulk-actions"},Pd={class:"layers-panel__header-actions"},zd={class:"layers-panel__header-controls"},Id={class:"layers-panel__label"},Rd={class:"layers-panel__label-row"},jd=["checked","onChange"],Od={class:"layers-panel__title-block"},Ud={class:"layers-panel__name"},qd={class:"layers-panel__meta text-slate-500"},Hd=["onClick"],Wd=["onClick"],Yd={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Gd={key:0,class:"layers-panel__actions"},Zd=["innerHTML","onClick"],$l="map:temporary-layer-request",Kd="#5763ba",or=Fe(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),s=e.ref(!1),i=e.ref(!1),d=Ke(),{temporaryLayers:u,activateTemporaryLayer:c,deactivateTemporaryLayer:p,clearTemporaryLayers:a}=Nn(d.map),{clientLayers:g,isClientLayer:m,getClientLayer:y,unregisterClientLayer:k}=tr(),h=e.computed(()=>{const T=o.layers.map(ie=>({...ie,isTemporary:!1,owner:null,visible:ie.visible!==!1})),X=u.value.map(ie=>({id:ie.id,name:ie.title,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:ie.owner??null,handle:ie.handle??null,card:ie.card??null,popup:ie.popup??null,style:ie.style??null,group_name:null,count:null,holder:null})),fe=Object.values(g.value).filter(ie=>!X.some(ce=>ce.id===ie.id)).map(ie=>({id:ie.id,name:ie.name,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:"add-data",handle:qe(ie.id)??null,card:null,popup:null,style:null,group_name:null,count:null,holder:null}));return[...T,...X,...fe]}),f=e.computed(()=>h.value.length),b=e.computed(()=>h.value.filter(T=>de(T.id)).length),x=e.computed(()=>f.value>0&&b.value===f.value),C=n,V=new Map;function _(T){if(T==null)return"";try{return JSON.stringify(T)}catch{return String(T)}}function w(T){var X,fe;return _({id:(T==null?void 0:T.id)??null,visible:(T==null?void 0:T.visible)!==!1,service:(T==null?void 0:T.service)??(T==null?void 0:T.service_type)??(T==null?void 0:T.type)??null,data:(T==null?void 0:T.data)??(T==null?void 0:T.geojson)??((X=T==null?void 0:T.source)==null?void 0:X.data)??null,tiles:((fe=T==null?void 0:T.source)==null?void 0:fe.tiles)??(T==null?void 0:T.tiles)??null,style:(T==null?void 0:T.style)??null,filter:(T==null?void 0:T.filter)??null})}function $(T,X){var ie,ce,pe,K,Z,ke,ve,Ae,$e,Je,Re,at,et;return{sourceKind:(((ie=X==null?void 0:X.source)==null?void 0:ie.type)||((ce=X==null?void 0:X.layer)==null?void 0:ce.type)||T.type||T.service_type||T.service||"").toString().toLowerCase(),sourceSig:_({type:((pe=X==null?void 0:X.source)==null?void 0:pe.type)??null,data:((K=X==null?void 0:X.source)==null?void 0:K.data)??null,tiles:((Z=X==null?void 0:X.source)==null?void 0:Z.tiles)??null,minzoom:((ke=X==null?void 0:X.source)==null?void 0:ke.minzoom)??null,maxzoom:((ve=X==null?void 0:X.source)==null?void 0:ve.maxzoom)??null,tileSize:((Ae=X==null?void 0:X.source)==null?void 0:Ae.tileSize)??null,scheme:(($e=X==null?void 0:X.source)==null?void 0:$e.scheme)??null}),styleSig:_(((Je=X==null?void 0:X.layer)==null?void 0:Je.style)??null),filterSig:_(((Re=X==null?void 0:X.layer)==null?void 0:Re.filter)??null),dataSig:_(((at=X==null?void 0:X.source)==null?void 0:at.data)??null),tilesSig:_(((et=X==null?void 0:X.source)==null?void 0:et.tiles)??null),visible:T.visible!==!1}}async function L(T=!1){var fe,ie,ce,pe;const X=new Set;for(let K=0;K<o.layers.length;K++){const Z=o.layers[K],ke=Q(Z);if(!ke)continue;const ve=$(Z,ke),Ae=qe(Z.id),$e=V.get(Z.id);if(X.add(Z.id),!Ae){if(!T)continue;const Re=qe(Z.id,ke,d.map);r.value[Z.id]=ve.visible,(fe=Re==null?void 0:Re.setVisible)==null||fe.call(Re,ve.visible),V.set(Z.id,ve);continue}if(!$e){r.value[Z.id]=ve.visible,V.set(Z.id,ve);continue}const Je=$e.sourceKind!==ve.sourceKind||$e.sourceSig!==ve.sourceSig||$e.dataSig!==ve.dataSig||$e.tilesSig!==ve.tilesSig||$e.styleSig!==ve.styleSig||$e.filterSig!==ve.filterSig;if(r.value[Z.id]=ve.visible,Je){await((ie=Ae==null?void 0:Ae.refresh)==null?void 0:ie.call(Ae,ke)),(ce=Ae==null?void 0:Ae.setVisible)==null||ce.call(Ae,ve.visible),V.set(Z.id,ve);continue}$e.visible!==ve.visible&&((pe=Ae==null?void 0:Ae.setVisible)==null||pe.call(Ae,ve.visible)),V.set(Z.id,ve)}V.forEach((K,Z)=>{X.has(Z)||(V.delete(Z),Z in r.value&&delete r.value[Z])})}function Y(T,X){const fe=T.sourceLayer||T["source-layer"];return fe||((T.service_url||T.url||"").toString().includes("/dla/vtile")?"dla":X)}function Q(T){var ke;const X=T.id;if(!X)return null;const fe=(T.type||T.service_type||T.service||"").toString().toLowerCase(),ie=te(T.data??T.geojson??((ke=T.source)==null?void 0:ke.data)??null),ce=fe==="geojson"||!!ie,pe=T.service_url||T.url||null;if(!!pe&&(fe==="tms"||fe==="wmts"||fe==="wms"||fe==="ogc")){const ve=j(pe);return ve?{sourceId:X,service:fe,source:{type:"raster",tiles:[ve],tileSize:T.tileSize||256,minzoom:T.minzoom??0,maxzoom:T.maxzoom??22,scheme:T.scheme||"xyz"},layer:{id:X,type:"raster",source:X},card:T.card,popup:T.popup}:null}if(ce)return ie?{sourceId:X,service:fe||"geojson",source:{type:"geojson",data:ie},layer:{id:X,source:X,style:T.style},card:T.card,popup:T.popup}:null;if(fe==="cartocss"){const ve=T.url?j(T.url):`${location.origin}/api/gis-rtile/${X}/{z}/{x}/{y}.png`;return ve?{sourceId:X,service:fe,source:{type:"raster",tiles:[ve],tileSize:T.tileSize||256,minzoom:T.minzoom??0,maxzoom:T.maxzoom??22},layer:{id:X,type:"raster",source:X},card:T.card,popup:T.popup}:null}if(pe&&(fe==="vtile"||fe==="vector")){const ve=j(pe);if(!ve)return null;const Ae=Y(T,X);return{sourceId:X,service:fe,source:{type:"vector",tiles:[ve],minzoom:T.minzoom??0,maxzoom:T.maxzoom??22},layer:{id:X,source:X,"source-layer":Ae,style:T.style,filter:T.filter},card:T.card,popup:T.popup}}if(fe==="raster"){const ve=T.url?j(T.url):`${location.origin}/api/gis-rtile/${X}/{z}/{x}/{y}.png`;return ve?{sourceId:X,service:fe,source:{type:"raster",tiles:[ve],tileSize:T.tileSize||256,minzoom:T.minzoom??0,maxzoom:T.maxzoom??22},layer:{id:X,type:"raster",source:X},card:T.card,popup:T.popup}:null}const Z=`${location.origin}/api/vtile/${X}/ua/{z}/{x}/{y}.vmt`;return{sourceId:X,service:fe,source:{type:"vector",tiles:[Z],minZoom:4,maxZoom:14},layer:{id:X,source:X,"source-layer":X,style:T.style},card:T.card,popup:T.popup}}function j(T){return T?/^https?:\/\//i.test(T)?T:T.startsWith("//")?`${window.location.protocol}${T}`:T.startsWith("/")?`${location.origin}${T}`:`${location.origin}/${T}`:null}function te(T){if(!T)return null;if(typeof T=="string")try{T=JSON.parse(T)}catch{return null}return T.type==="FeatureCollection"?T:T.type==="Feature"?{type:"FeatureCollection",features:[T]}:T.type&&Array.isArray(T.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:T,properties:{}}]}:Array.isArray(T.features)?{type:"FeatureCollection",features:T.features}:T.geometry?te(T.geometry):null}function de(T){const X=r.value[T];return X??!0}function be(T){var ie,ce;if(!(T!=null&&T.id))return null;const X=(ie=T.title)==null?void 0:ie.trim();if(!X)return null;if(T.type==="geojson"||T.data)return T.data?{id:T.id,title:X,type:"geojson",data:T.data,style:T.style}:null;const fe=(ce=T.url)==null?void 0:ce.trim();return fe?{id:T.id,title:X,url:fe,tileSize:T.tileSize,minzoom:T.minzoom,maxzoom:T.maxzoom,opacity:T.opacity}:null}function ae(T){if(!T)return;const X=T.owner;if(T.action==="clear"){const ie=u.value.filter(ce=>!X||ce.owner===X).map(ce=>ce.id);a(X),ie.forEach(ce=>{ce in r.value&&delete r.value[ce]});return}const fe=be(T.spec);if(fe){if(T.action==="activate"){c(fe,T.context||{},X),r.value[fe.id]=!0;return}T.action==="deactivate"&&(p(fe.id,X),delete r.value[fe.id])}}function ne(T){T instanceof CustomEvent&&ae(T.detail)}e.watch(()=>u.value.map(T=>T.id),(T,X)=>{const fe=new Set(X||[]),ie=new Set(T);T.forEach(ce=>{ce in r.value||(r.value[ce]=!0)}),fe.forEach(ce=>{ie.has(ce)||delete r.value[ce]})},{immediate:!0});function v(T){return T.owner==="add-data"||m(T.id)}function M(T){const X=y(T);if(!(X!=null&&X.data))return;const fe={id:X.id,title:X.name,type:"geojson",data:X.data};c(fe,{},"add-data"),ae({action:"activate",owner:"add-data",spec:fe})}function B(T,X){var ie,ce,pe,K,Z;if(v(T)){r.value[T.id]=X;const ke=qe(T.id);if(!X){(ie=ke==null?void 0:ke.setVisible)==null||ie.call(ke,!1);return}if((ce=ke==null?void 0:ke.isMounted)!=null&&ce.call(ke)){ke.setVisible(!0);return}M(T.id);return}if(T.isTemporary){if(!X){p(T.id,T.owner||void 0),delete r.value[T.id];return}r.value[T.id]=!0;const ke=T.handle||((pe=u.value.find(ve=>ve.id===T.id))==null?void 0:pe.handle);(K=ke==null?void 0:ke.setVisible)==null||K.call(ke,!0);return}r.value[T.id]=X;const fe=qe(T.id);(Z=fe==null?void 0:fe.setVisible)==null||Z.call(fe,X)}function N(T,X){const fe=X.target;B(T,fe.checked)}function F(T){h.value.forEach(X=>B(X,T))}function H(){F(!x.value)}function he(T){return T.isTemporary?[{label:"Назва",value:T.name??null},{label:"Тип",value:"Тимчасовий шар"},T.owner==="add-data"?{label:"Джерело",value:"Завантажені дані"}:T.owner?{label:"Джерело",value:T.owner}:null].filter(Boolean):[{label:"Назва",value:T.name??null},{label:"Назва групи",value:T.group_name||null},{label:"Кількість",value:T.count??null},{label:"Балансоутримувач",value:T.holder??null}]}function G(T){const X=T.trim();return X?!!(/^#[\da-fA-F]{3,8}$/.test(X)||/^rgb\s*\(/.test(X)||/^rgba\s*\(/.test(X)||/^hsl\s*\(/.test(X)||/^hsla\s*\(/.test(X)||/^[a-zA-Z]+$/.test(X)&&X.length<25):!1}function D(T){var X,fe,ie,ce,pe,K;if(!T)return null;if(typeof T=="string"){const Z=T.trim();return!Z||!G(Z)?null:Z}if(Array.isArray(T)){for(const Z of T){const ke=D(Z);if(ke)return ke}return null}if(typeof T=="object"){const Z=T;return D(Z.color??Z.fill??Z.stroke??Z.lineColor??Z.fillColor??((X=Z.paint)==null?void 0:X["fill-color"])??((fe=Z.paint)==null?void 0:fe["line-color"])??((ie=Z.paint)==null?void 0:ie["circle-color"])??((ce=Z.paint)==null?void 0:ce.color)??((pe=Z.paint)==null?void 0:pe.lineColor)??((K=Z.paint)==null?void 0:K.fillColor)??Z.paint??Z.value)}return null}function U(T){const X=Array.isArray(T==null?void 0:T.legend)?T.legend[0]:T==null?void 0:T.legend,fe=D(X);return fe||D(T==null?void 0:T.style)||Kd}function q(T){return{"--layers-panel-checkbox-color":U(T)}}function ee(T){var ce;const{id:X}=T,fe=T.owner||void 0;p(X,fe);const ie=qe(X);(ce=ie==null?void 0:ie.remove)==null||ce.call(ie),(m(X)||fe==="add-data")&&(k(X),window.dispatchEvent(new CustomEvent(lo,{detail:{id:X}}))),delete r.value[X]}function z(){l.value=!l.value}function oe(){s.value=window.innerWidth<=768}function ye(T){var fe;if(!(T instanceof CustomEvent))return;const X=(fe=T.detail)==null?void 0:fe.id;X&&(r.value[X]=!0)}function we(T){var fe;if(!(T instanceof CustomEvent))return;const X=(fe=T.detail)==null?void 0:fe.id;X&&(p(X),delete r.value[X])}return e.onMounted(()=>{(async()=>{var T;await((T=d.ready)==null?void 0:T.call(d)),d.map.value&&(await L(!0),i.value=!0)})(),window.addEventListener($l,ne),window.addEventListener(Vn,ye),window.addEventListener(lo,we),oe(),s.value&&(l.value=!1),window.addEventListener("resize",oe)}),e.watch(()=>o.layers.map(T=>w(T)).join("|"),()=>{i.value&&L(!1)}),e.onBeforeUnmount(()=>{window.removeEventListener($l,ne),window.removeEventListener(Vn,ye),window.removeEventListener(lo,we),window.removeEventListener("resize",oe)}),(T,X)=>(e.openBlock(),e.createElementBlock("div",Ld,[e.createElementVNode("div",Td,[e.createElementVNode("div",Ad,[e.createElementVNode("div",Md,[X[0]||(X[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",Fd," ("+e.toDisplayString(b.value)+" з "+e.toDisplayString(f.value)+") ",1),e.createElementVNode("div",Dd,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:H},e.toDisplayString(x.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Pd,[e.createElementVNode("div",zd,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:z,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":l.value})},[...X[1]||(X[1]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,fe=>{var ie;return e.openBlock(),e.createElementBlock("div",{key:fe.id,class:"layers-panel__item"},[e.createElementVNode("label",Id,[e.createElementVNode("div",Rd,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:de(fe.id),style:e.normalizeStyle(q(fe)),onChange:ce=>N(fe,ce)},null,44,jd),e.createElementVNode("div",Od,[e.createElementVNode("span",Ud,e.toDisplayString(fe.name),1)]),e.createElementVNode("div",qd,[fe.isTemporary?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__remove","aria-label":"Видалити шар",onClick:e.withModifiers(ce=>ee(fe),["stop"])},[...X[2]||(X[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])],8,Hd)):e.createCommentVNode("",!0),de(fe.id)&&!fe.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(Bl,{"layer-id":fe.id,class:"flex"},{trigger:e.withCtx(({toggle:ce})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(ce,["prevent","stop"])},[e.createElementVNode("div",Yd,[e.createVNode(e.unref(ge.Contrast))])],8,Wd)]),_:1},8,["layer-id"]),e.createVNode(ao,{count:Array.isArray(fe.filters)?fe.filters.length:0,layer:fe},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(Jo,{items:he(fe)},null,8,["items"])])])]),(ie=fe.actions)!=null&&ie.length?(e.openBlock(),e.createElementBlock("div",Gd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(fe.actions,ce=>(e.openBlock(),e.createElementBlock("button",{key:ce.widget||ce.id||ce.icon,type:"button",class:"layers-panel__action",innerHTML:ce.icon,onClick:pe=>C("action",{layerId:ce.widget})},null,8,Zd))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-3c399929"]]);function Xd(){const{map:t,ready:n}=Ke(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(null);let i=[];function d(){i.forEach(m=>m()),i=[]}const u=m=>{const y=(m==null?void 0:m.properties)||{};return!!(y.cluster||y.point_count||y.point_count_abbreviated)},c=m=>{var f,b;o.value=[m.point.x,m.point.y];const y=t.value.queryRenderedFeatures(m.point);if(!(y!=null&&y.length)){p();return}const k=y.find(x=>!u(x));if(!k){p();return}const h=qe(k.source)||qe((f=k.layer)==null?void 0:f.id);h!=null&&h.popup&&(r.value=((b=h.popup)==null?void 0:b.fields)||h.popup,s.value=k.properties)},p=()=>{r.value=null,s.value=null,o.value=null};async function a(){await n(),t.value&&(d(),t.value.on("mousemove",c),t.value.on("mouseleave",p))}function g(){d(),r.value=null,s.value=null,o.value=null}return n().then(a),{popupCoords:o,popupFields:r,popupValues:s,disable:g,title:l}}const Jd={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Qd={class:"space-y-1.5"},eu={class:"font-bold text-slate-700"},tu={class:"text-slate-700"},Sl=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=Xd(),{map:s}=Ke(),i=e.ref(null),d=e.ref({left:"-9999px",top:"-9999px"}),u=e.ref({}),c=new Set,p=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function a(f,b){if(b==null||b==="")return b;if((f==null?void 0:f.type)==="number"){const x=typeof b=="number"?b:Number(b);if(Number.isFinite(x))return p.format(x)}return b}function g(f,b,x){const C=f.name||f.label||f.title||`field-${x}`,V=f.label||f.title||f.name||C,_=f.name?b[f.name]:void 0,w=f.name?b[`${f.name}_text`]:void 0;let $;if((f.format==="select"||f.format==="autocomplete")&&f.data&&_!=null){const Y=u.value[f.data];Y&&($=Y[String(_)])}const L=$??w??_??f.value??null;return{key:C,label:V,value:a(f,L)}}const m=e.computed(()=>{const f=o.value||[],b=r.value||{};return f.filter(x=>(x==null?void 0:x.meta)!=="title").map((x,C)=>g(x,b,C)).filter(x=>x.label)});e.watch([o,r],([f,b])=>{!f||!b||f.forEach(async x=>{if(x.format==="select"||x.format==="autocomplete"){const C=x.data;if(!C)return;if(!u.value[C]&&!c.has(C)){c.add(C);try{const V=await fetch(`/api/suggest/${C}`);if(V.ok){const _=await V.json();if(_!=null&&_.data&&Array.isArray(_.data)){const w={};_.data.forEach($=>{w[String($.id)]=$.text}),u.value[C]=w}}}catch(V){console.error(`Failed to fetch suggest for ${C}`,V)}}}})},{deep:!0,immediate:!0});const y=e.computed(()=>{const f=o.value||[],b=r.value||{},x=f.find(C=>(C==null?void 0:C.meta)==="title");return x?g(x,b,0):null}),k=e.computed(()=>{var b;const f=m.value;return(b=y.value)!=null&&b.value?[{...y.value,key:`${y.value.key}-title`,label:"Назва"},...f]:f});function h(){var B,N;if(!k.value.length||!n.value||!i.value){d.value={left:"-9999px",top:"-9999px"};return}const f=i.value,b=f.offsetParent||null,x=(b==null?void 0:b.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},C=((N=(B=s.value)==null?void 0:B.getContainer)==null?void 0:N.call(B))||void 0,V=(C==null?void 0:C.getBoundingClientRect())??x,_=V.left-x.left,w=V.top-x.top,$=f.offsetWidth||0,L=f.offsetHeight||0,Y=12,Q=8,[j,te]=n.value;let de=_+j+Y,be=w+te+Y;de+$+Q>x.width&&(de=_+j-$-Y),be+L+Q>x.height&&(be=w+te-L-Y);const ae=Q,ne=Q,v=Math.max(Q,x.width-$-Q),M=Math.max(Q,x.height-L-Q);de=Math.min(Math.max(de,ae),v),be=Math.min(Math.max(be,ne),M),d.value={left:`${de}px`,top:`${be}px`}}return e.watch([n,k],()=>{e.nextTick(()=>h())}),e.onMounted(()=>{window.addEventListener("resize",h)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",h),l()}),(f,b)=>k.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-[130]",style:e.normalizeStyle(d.value)},[e.createElementVNode("div",Jd,[e.createElementVNode("div",Qd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex flex-col"},[e.createElementVNode("span",eu,e.toDisplayString(x.label),1),e.createElementVNode("span",tu,e.toDisplayString(x.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function nu(){const t=He.useRoute(),n=He.useRouter(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(!1),i=e.ref([]),d=e.ref(0),u=e.computed(()=>i.value.length),c=e.computed(()=>s.value||!!o.value||!!l.value);let p=!1;function a(){o.value=null,r.value=null,l.value=null,s.value=!1,i.value=[],d.value=0}function g(w,$=0){if(!w.length){a(),V(null);return}i.value=w,m($)}function m(w){const $=i.value[w];if(!$)return;d.value=w;const L=qe($.source);h($,L==null?void 0:L.card)}function y(){d.value>=i.value.length-1||m(d.value+1)}function k(){d.value<=0||m(d.value-1)}async function h(w,$){var Q,j,te,de,be;if(!((Q=w==null?void 0:w.properties)!=null&&Q.id))return;const L=new URLSearchParams;L.set("layer",w.source),L.set("id",String((j=w.properties)==null?void 0:j.id));const Y=Array.isArray($)&&$.length>0;s.value=Y,l.value=null,o.value=null,r.value=w||null;try{const ae=await fetch(`/api/map-format?${L.toString()}`);if(!ae.ok)throw new Error(`Failed (${ae.status})`);const ne=await ae.json(),v=Array.isArray(ne.columns)?ne.columns:[],M=Array.isArray($)?$:[];if(!v.length&&!M.length){console.error("Configure layer in admin"),f();return}const B=ne.rows??ne.data??{};o.value={rows:B,fields:M,columns:v,html:ne.html||null},p||V(r.value);const N=((te=ne.rows)==null?void 0:te.geom)??((de=ne.data)==null?void 0:de.geom);if(N){const F=typeof N=="string"?JSON.parse(N):N;F&&(r.value={...r.value,geometry:F,properties:{...((be=r.value)==null?void 0:be.properties)||{},geom:F,geom_4326:F}})}}catch(ae){console.error("Failed to load feature card:",ae),f()}finally{s.value=!1}}function f(){a(),V(null)}function b(){a()}_(x()),e.onBeforeUnmount(()=>b());function x(){const w=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof w!="string")return null;const $=w.trim();return $.startsWith("external:")?null:$||null}function C(w){var Q,j;const $=(w==null?void 0:w.source)??((Q=w==null?void 0:w.layer)==null?void 0:Q.id),L=(j=w==null?void 0:w.properties)==null?void 0:j.id;return!$||L===void 0||L===null?null:`${$},${L}`.trim()||null}function V(w){const $=C(w),L=x();if($===L)return;const Y={...t.query};$?Y.info=$:delete Y.info,n.push({query:Y}).catch(()=>{})}async function _(w){if(!w){a();return}if(w===C(r.value))return;const[$,L]=w.split(","),Y=$==null?void 0:$.trim(),Q=L==null?void 0:L.trim();if(!Y||!Q){a(),V(null);return}p=!0;try{g([{source:Y,properties:{id:Q}}],0)}finally{p=!1}}return e.watch(()=>x(),w=>{w!==C(r.value)&&(p=!0,_(w).finally(()=>{p=!1}))}),{card:o,cardFeature:r,cardError:l,cardLoading:s,isOpen:c,close:f,openFeature:w=>g(w?[w]:[],0),openFeatures:g,next:y,prev:k,count:u,index:d}}function ou(){const{map:t,ready:n}=Ke(),o=e.ref([]),r=e.ref(0),l=e.ref(0),s=e.ref(!1),i=e.ref(null),d=e.ref({}),u=e.ref(null),c=e.ref([]),p=e.computed(()=>o.value[l.value]||null),a=e.computed(()=>o.value.length>0);let g=null;const m=()=>{g==null||g.remove(),g=null},y=$=>$?$.type==="FeatureCollection"?$:$.type==="Feature"?{type:"FeatureCollection",features:[$]}:$.type&&Array.isArray($.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:$,properties:{}}]}:Array.isArray($.features)?{type:"FeatureCollection",features:$.features}:$.geometry?y($.geometry):null:null,k=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=$=>Number($.toFixed(5)),f=async $=>{if(await n(),!t.value)return;const L=y($);L&&(m(),g=qe("feature-highlight",{source:{type:"geojson",data:L},style:k()},t))},b=async($,L,Y)=>{var te,de;const[Q,j]=[h($),h(L)];u.value={x:Q,y:j},c.value=Y,s.value=!0,i.value=null,o.value=[],d.value={},l.value=0;try{const be=Y.map(async B=>{const N=`/api/map-info-point?x=${Q}&y=${j}&layers=${B}`,F=await fetch(N);if(!F.ok)return null;const H=await F.json();if(!H.count)return null;const G=await(await fetch(`${N}&index=0`)).json();return{layerId:B,data:G,count:H.count}}),ne=(await Promise.all(be)).filter(Boolean);if(ne.length===0){r.value=0;return}o.value=ne.map(B=>B.data);const[v]=o.value;r.value=ne.reduce((B,N)=>B+(N.count||0),0),d.value[0]=v;const M=((te=v==null?void 0:v.data)==null?void 0:te.geom_4326)??((de=v==null?void 0:v.data)==null?void 0:de.geom);await f(M)}catch(be){i.value=be.message}finally{s.value=!1}},x=async $=>{if(!u.value||!c.value.length)return;if(d.value[$]){o.value[$]=d.value[$];return}const{x:L,y:Y}=u.value,Q=c.value.join(","),j=`/api/map-info-point?x=${L}&y=${Y}&index=${$}&layers=${Q}`;try{s.value=!0;const te=await fetch(j);if(!te.ok)throw new Error("Failed to fetch feature by index");const de=await te.json();o.value[$]=de,d.value[$]=de}catch(te){i.value=te.message}finally{s.value=!1}},C=async()=>{l.value<r.value-1&&(l.value+=1,d.value[l.value]||await x(l.value))},V=async()=>{l.value>0&&(l.value-=1,d.value[l.value]||await x(l.value))},_=()=>{o.value=[],r.value=0,l.value=0,d.value={},u.value=null,c.value=[],m()};e.watch(l,async()=>{var L,Y;const $=p.value;if($){const Q=((L=$==null?void 0:$.data)==null?void 0:L.geom_4326)??((Y=$==null?void 0:$.data)==null?void 0:Y.geom);await f(Q)}});let w=null;return e.onMounted(async()=>{await n(),t.value&&(w=async $=>{const{lng:L,lat:Y}=$.lngLat,Q=qe(),te=Object.entries(Q).map(([de,be])=>{var ae,ne,v,M;return{id:de,service:((ae=be==null?void 0:be.opts)==null?void 0:ae.service)??((v=(ne=be==null?void 0:be.opts)==null?void 0:ne.source)==null?void 0:v.service)??null,count:((M=be==null?void 0:be.opts)==null?void 0:M.count)??null,visible:(()=>{var B;try{return((B=t.value)==null?void 0:B.getLayer(de))?t.value.getLayoutProperty(de,"visibility")!=="none":!0}catch{return!0}})()}}).filter(de=>de.service==="ogc"&&de.visible).map(de=>de.id);te.length>0&&await b(L,Y,te)},t.value.on("dblclick",w))}),e.onBeforeUnmount(()=>{t.value&&w&&t.value.off("dblclick",w),m()}),{features:o,count:r,index:l,current:p,loading:s,error:i,active:a,next:C,prev:V,close:_}}const vl=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(c){const p=c.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(p)return p;const a=Array.from(c).map(g=>g.charCodeAt(0).toString(16)).join("").slice(0,8);return a?`layer-${a}`:"layer-temp"}const s=e.computed(()=>{var c;return((c=o.id)==null?void 0:c.trim())||l(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function d(){return{id:s.value,title:o.title,url:o.url}}function u(){r("activate",d())}return(c,p)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:u},[e.renderSlot(c.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),rr="map-card:external-payload",so="map-card:click-results",Ll=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,ru={key:0,class:"card pointer-events-auto absolute top-4 lg:left-auto right-[52px] md:left-4 z-[130] w-[calc(100%-60px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},lu={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},au={class:"min-w-0 flex-1"},su={class:"text-base font-semibold text-slate-900 truncate"},iu={key:0,class:"flex gap-1 mt-1"},cu=["disabled"],du=["disabled"],uu={key:1,class:"flex gap-1 mt-1"},fu=["disabled"],mu=["disabled"],pu={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},gu={key:0,class:"text-center text-xs text-slate-500"},yu={key:1,class:"text-center text-xs text-red-500"},hu={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},bu={class:"divide-y divide-gray-100 py-[5px]"},xu={class:"text-gray-900 sm:col-span-4 font-normal"},ku={key:0,class:"flex gap-1 flex-wrap"},wu={key:0,class:"flex flex-col gap-1"},_u=["href"],Eu=["href"],Cu={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Nu=["innerHTML"],Vu=["innerHTML"],Bu={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},$u={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},Su={class:"text-xs tracking-[0.02em] leading-none"},vu={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},Lu={class:"space-y-1"},Tu={class:"flex items-center cursor-pointer gap-2 flex-1"},Au=["checked","onChange"],Mu={class:"text-[13px] text-gray-600"},Fu={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},Du={key:5,class:"text-center text-xs text-slate-400"},Pu="map:temporary-layer-request",Tl="cardHideEmpty",zu=14,lr=Fe(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=nu(),r=ou(),l=He.useRouter(),s=e.ref([]),i=e.ref(0),d=e.computed(()=>s.value[i.value]||null),u=e.computed(()=>{var E;return((E=d.value)==null?void 0:E.type)==="external"?d.value:null}),c=e.computed(()=>s.value.length>0),p=e.computed(()=>{var E,S;return!!((S=(E=u.value)==null?void 0:E.html)!=null&&S.trim())}),a=e.computed(()=>{var E;return((E=u.value)==null?void 0:E.geometry)??null});function g(){s.value=[],i.value=0}function m(E){if(!E)return null;if(typeof E=="string")try{return JSON.parse(E)}catch{return null}return E}function y(){const E=Array.isArray(be.query.info)?be.query.info[0]:be.query.info;return typeof E!="string"?null:E.trim()||null}function k(E){if(!E||!E.startsWith("external:"))return null;const S=E.slice(9),[O,ue]=S.split(","),_e=O==null?void 0:O.trim(),Ee=ue==null?void 0:ue.trim();return!_e||!Ee?null:{layer:_e,id:Ee,token:`external:${_e},${Ee}`}}function h(E){const S=y(),O=(E==null?void 0:E.trim())||null;if(S===O)return;const ue={...be.query};if(O)ue.info=O;else if(S!=null&&S.startsWith("external:"))delete ue.info;else return;l.push({query:ue}).catch(()=>{})}function f(E){var O;const S=s.value[E];if(!S){g(),o.close(),rt();return}if(i.value=E,S.type==="feature"){o.openFeature(S.feature);return}o.close(),h(S.infoToken??null),(O=S.html)!=null&&O.trim()?C():rt()}function b(E,S=0){if(r.close(),s.value=E.map(O=>({type:"external",...O})),!s.value.length){o.close(),h(null),rt();return}f(Math.min(Math.max(S,0),s.value.length-1))}function x(E){r.close();const S=Array.isArray(E==null?void 0:E.features)?E.features.filter(Boolean):[],O=Array.isArray(E==null?void 0:E.externalItems)?E.externalItems.filter(ue=>typeof(ue==null?void 0:ue.html)=="string"&&ue.html.trim()):[];if(s.value=[...S.map(ue=>({type:"feature",feature:ue})),...O.map(ue=>({type:"external",...ue}))],!s.value.length){o.close(),h(null),rt();return}f(0)}function C(){return p.value?a.value?(De(a.value),!0):(rt(),!0):(rt(),!1)}const V=E=>{var ue,_e,Ee,Me;const S=E,O=Array.isArray((ue=S.detail)==null?void 0:ue.items)?(_e=S.detail)==null?void 0:_e.items.filter(ze=>typeof(ze==null?void 0:ze.html)=="string"&&ze.html.trim()):[];O.length?b(O,Number(((Ee=S.detail)==null?void 0:Ee.index)??0)):typeof((Me=S.detail)==null?void 0:Me.html)=="string"&&S.detail.html.trim()?b([{html:S.detail.html,geometry:S.detail.geometry??null,infoToken:S.detail.infoToken??null}],0):(g(),o.close(),h(null),rt())},_=E=>{x(E.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(so,_),window.addEventListener(rr,V))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(so,_),window.removeEventListener(rr,V))});const w=e.computed(()=>r.active.value),$=e.computed(()=>w.value||o.isOpen.value||p.value),L=e.computed(()=>w.value?r.loading.value:o.cardLoading.value),Y=e.computed(()=>w.value?r.error.value:o.cardError.value),Q=e.computed(()=>{var E,S,O;return w.value?((E=r.current.value)==null?void 0:E.html)||null:p.value?((S=u.value)==null?void 0:S.html)||null:((O=o.card.value)==null?void 0:O.html)||null}),j=Ke(),te=Wo(),de=e.computed(()=>{var E,S;return((S=(E=te.value)==null?void 0:E.map)==null?void 0:S.cardHideEmpty)??null}),be=He.useRoute(),{activateTemporaryLayer:ae,deactivateTemporaryLayer:ne,clearTemporaryLayers:v,isTemporaryLayerActive:M}=Nn(j.map);function B(E){window.dispatchEvent(new CustomEvent(Pu,{detail:E}))}const N=e.computed(()=>{var E;return((E=o.cardFeature.value)==null?void 0:E.source)??null}),F=e.computed(()=>N.value?`map-card:${N.value}`:"map-card"),H=e.computed(()=>{var ue,_e;const E=o.cardFeature.value,S=(E==null?void 0:E.source)||((ue=E==null?void 0:E.layer)==null?void 0:ue.id),O=((_e=E==null?void 0:E.properties)==null?void 0:_e.id)??(E==null?void 0:E.id);return S&&O!=null?`${S}:${O}`:null}),he=e.ref(null),G=e.ref([]),D=e.ref(0),U=new Map;function q(){if(typeof window>"u")return null;const S=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return S&&S[1]?S[1]:null}const ee=e.computed(()=>{const E=typeof n.mapId=="string"?n.mapId.trim():"";if(E.length)return E;const S=typeof be.params.slug=="string"?be.params.slug.trim():"";if(S.length)return S;const O=typeof be.query.slug=="string"?be.query.slug.trim():"";return O.length?O:q()}),z=e.ref(null),oe=e.ref(null),ye=new Map;function we(E){const S=E.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(S)return S;const O=Array.from(E).map(ue=>ue.charCodeAt(0).toString(16)).join("").slice(0,8);return O?`layer-${O}`:`layer-${Math.random().toString(36).slice(2,8)}`}function T(E){if(typeof E!="string")return"";const S=E.trim();if(!S)return"";if(/^https?:\/\//i.test(S))return S;if(S.startsWith("//"))return typeof window>"u"?`https:${S}`:`${window.location.protocol}${S}`;const O=typeof window<"u"?window.location.origin:"";return S.startsWith("/")?O?`${O}${S}`:S:O?`${O}/${S}`:S}function X(E){if(E==null)return[];if(Array.isArray(E))return E.flatMap(S=>X(S));if(typeof E=="number")return Number.isFinite(E)?[E]:[];if(typeof E=="string"){const S=E.match(/-?\d+(?:\.\d+)?/g);return!S||!S.length?[]:S.map(O=>Number(O)).filter(O=>Number.isFinite(O))}return[]}function fe(E){const S=X(E);if(S.length<4)return null;const[O,ue,_e,Ee]=S;return[O,ue,_e,Ee].every(Me=>Number.isFinite(Me))?[O,ue,_e,Ee]:null}function ie(E){if(!E)return null;const S=E.trim();if(!S.length)return null;try{const _e=JSON.parse(S),Ee=fe(_e);if(Ee)return Ee}catch{}const O=S.match(/-?\d+(?:\.\d+)?/g);if(!O||O.length<4)return null;const ue=O.slice(0,4).map(_e=>Number(_e));return ue.every(_e=>Number.isFinite(_e))?[ue[0],ue[1],ue[2],ue[3]]:null}function ce(E){const S={},O=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let ue;for(;(ue=O.exec(E))!==null;){const _e=ue[1],Ee=ue[2]??ue[3]??ue[4]??"";_e&&(S[_e]=Ee)}return S}function pe(E,S){for(const O of S)if(E[O]!=null&&String(E[O]).trim().length)return String(E[O]).trim();return""}function K(E){if(!(E!=null&&E.length))return;const S=Number(E);return Number.isFinite(S)?S:void 0}function Z(E){if(typeof E!="string"||!E.length)return[];const S=[],O=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let ue=0,_e;const Ee=new Set,Me=ze=>{let Ue=ze,Ge=2;for(;Ee.has(Ue);)Ue=`${ze}-${Ge}`,Ge+=1;return Ee.add(Ue),Ue};for(;(_e=O.exec(E))!==null;){const[ze,Ue="",Ge=""]=_e,ot=_e.index;if(ot>ue){const rs=E.slice(ue,ot);rs.trim().length&&S.push({type:"html",content:rs})}const tt=ce(Ue),lt=pe(tt,["title"])||"Тимчасовий шар",Ht=T(pe(tt,["url"]));if(!Ht){S.push({type:"html",content:ze}),ue=ot+ze.length;continue}const Jn=pe(tt,["id"]),cl=pe(tt,["button-text","buttonText","show","show-label","showLabel"]),UB=K(pe(tt,["tile-size","tileSize"])),qB=K(pe(tt,["minzoom","minZoom"])),HB=K(pe(tt,["maxzoom","maxZoom"])),WB=K(pe(tt,["opacity"])),YB=ie(pe(tt,["bounds","data-bounds","bbox"])),GB=Jn||we(`${lt}-${Ht}`)||we(lt),ns=Me(GB||`layer-${S.length+1}`),dl=Ge.trim(),os=/<[^>]+>/.test(dl),ZB=os?dl:null,ul=os?null:dl,KB=cl&&cl.trim().length?cl.trim():ul&&ul.trim().length?ul.trim():void 0;S.push({type:"layer",spec:{id:ns,title:lt,url:Ht,tileSize:UB,minzoom:qB,maxzoom:HB,opacity:WB,bounds:YB},componentProps:{title:lt,url:Ht,id:ns,buttonText:KB},slotText:ZB}),ue=ot+ze.length}if(ue<E.length){const ze=E.slice(ue);ze.trim().length&&S.push({type:"html",content:ze})}return!S.length&&E.trim().length&&S.push({type:"html",content:E}),S}function ke(E){if(!E)return null;const S=typeof E.id=="string"?E.id.trim():"",O=typeof E.title=="string"?E.title.trim():"",ue=T(typeof E.url=="string"?E.url:"");return!S||!ue?null:{id:S,title:O||S,url:ue,tileSize:E.tileSize,minzoom:E.minzoom,maxzoom:E.maxzoom,opacity:E.opacity,bounds:E.bounds}}const ve=e.computed(()=>{if(w.value&&r.current.value)return r.current.value.data??{};const E=o.card.value;return(E==null?void 0:E.rows)??{}}),Ae=e.computed(()=>{if(w.value&&r.current.value){const ue=r.current.value,_e=Array.isArray(ue.columns)?ue.columns:[];return _e.length?_e:ue.fields??[]}const E=o.card.value;if(!E)return[];const S=Array.isArray(E.columns)?E.columns:[];return S.length?S:Array.isArray(E.fields)?E.fields:[]}),$e=e.computed(()=>{const E=Ae.value;if(!E.length)return[];const S=ve.value;return E.map(O=>({key:O.name,label:O.ua||O.label||O.title||O.name,value:et(S[O.name],O.format||"text",O.type||"text"),format:O.format||"text"}))}),Je=new Set(["—","-","–","−"]);function Re(E){const S=E.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!S)return E;const[,O,ue,_e]=S;return`${_e}.${ue}.${O}`}function at(E){return Number.isFinite(E)?new Intl.NumberFormat("uk-UA").format(E):"—"}function et(E,S,O){if(E==null)return"—";if(S==="tags"||S==="file")return E;if(Array.isArray(E))return E.length?E.map(ue=>et(ue,"text","text")).join(", "):"—";if(typeof E=="boolean")return E?"так":"ні";if(O==="number"&&typeof E=="number")return at(E);if(typeof E=="string"){const ue=E.trim();if(!ue.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(ue))return Re(ue);if(O==="number"&&/^-?\d+(?:\.\d+)?$/.test(ue)){const _e=Number(ue);return Number.isFinite(_e)?at(_e):ue}return ue}return String(E)}function nt(E){if(E==null)return!0;if(Array.isArray(E))return E.length===0;if(typeof E=="string"){const S=E.trim();return S.length?Je.has(S):!0}return!1}function P(E){if(!E)return[];if(Array.isArray(E))return E;if(typeof E=="string"){const S=E.trim();if(S.startsWith("{")&&S.endsWith("}")){const ue=S.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return ue?ue.map(_e=>_e.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}function me(E){if(E==null)return[];if(Array.isArray(E))return E.filter(S=>typeof S=="string").map(S=>S.trim()).filter(S=>S.length>0&&!Je.has(S));if(typeof E=="string"){const S=E.trim();return!S.length||Je.has(S)?[]:S.includes(",")?S.split(",").map(O=>O.trim()).filter(O=>O.length>0):[S]}return[]}const A=e.ref(!1),W=e.ref(!0),J=()=>{var E,S;return typeof window>"u"?null:((S=(E=window.localStorage)==null?void 0:E.getItem)==null?void 0:S.call(E,Tl))??null},xe=e.ref(J()),Ve=E=>{const S=typeof E=="string"&&E.toLowerCase()==="true";A.value=S,W.value=!S},I=E=>{xe.value=E};if(typeof window<"u"){const E=S=>{S.key===Tl&&I(S.newValue)};window.addEventListener("storage",E),e.onBeforeUnmount(()=>{window.removeEventListener("storage",E)})}const se=e.computed(()=>typeof xe.value=="string");e.watch(xe,E=>{Ve(typeof E=="string"?E:de.value)},{immediate:!0}),e.watch(de,E=>{se.value||Ve(E)},{immediate:!0});const re=e.computed(()=>$e.value.filter(E=>nt(E.value)).length),Ne=e.computed(()=>A.value&&!W.value?$e.value.filter(E=>!nt(E.value)):$e.value);function Se(E){const S=typeof E=="string"?E:"";if(!S.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:S,hiddenCount:0};const ue=new DOMParser().parseFromString(S,"text/html");let _e=0;return ue.querySelectorAll("dd").forEach(Ee=>{var Ue;const Me=((Ue=Ee.textContent)==null?void 0:Ue.trim())??"",ze=Ee.closest("div");if(nt(Me)){_e+=1,ze?ze.remove():Ee.remove();return}}),{sanitized:ue.body.innerHTML,hiddenCount:_e}}const Oe=e.computed(()=>Se(Q.value)),Qe=e.computed(()=>Q.value?Oe.value.hiddenCount:0),Xe=e.computed(()=>re.value+Qe.value),st=e.computed(()=>{var E;return A.value&&!W.value&&!!((E=Q.value)!=null&&E.trim())}),ct=e.computed(()=>A.value&&Xe.value>0),wt=e.computed(()=>W.value?"Приховати пусті значення":"Показати пусті значення"),Ft=e.computed(()=>W.value?ge.ChevronUp:ge.ChevronDown);function yn(){W.value=!W.value}const Ut=e.computed(()=>{const E=st.value?Oe.value.sanitized:Q.value??"";return Z(E)}),hn=e.computed(()=>Ut.value.filter(E=>E.type==="layer"));function Jr(E){return Array.isArray(E)?E.map((S,O)=>{const ue=T(typeof(S==null?void 0:S.url)=="string"?S.url:""),_e=typeof(S==null?void 0:S.geohub)=="string"&&S.geohub.trim().length?`/api-hub/tms/${S.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",Ee=((S==null?void 0:S.name)||(S==null?void 0:S.title)||(S==null?void 0:S.label)||`Шар ${O+1}`).toString(),Me=(S==null?void 0:S.id)!=null?String(S.id):we(`${Ee}-${O+1}`),ze=(S==null?void 0:S.buttonText)||(S==null?void 0:S.button_text)||null,Ue=(S==null?void 0:S.description)||(S==null?void 0:S.subtitle)||null,Ge=ue||T(_e)||"";if(!Ge)return null;const ot=typeof(S==null?void 0:S.layer_id)=="string"&&S.layer_id.trim().length?S.layer_id.trim():null,tt={id:Me,title:Ee,url:Ge,layer_id:ot,subtitle:Ue,buttonText:ze||void 0};typeof(S==null?void 0:S.tileSize)=="number"&&(tt.tileSize=S.tileSize),typeof(S==null?void 0:S.tile_size)=="number"&&(tt.tileSize=S.tile_size),typeof(S==null?void 0:S.minzoom)=="number"&&(tt.minzoom=S.minzoom),typeof(S==null?void 0:S.maxzoom)=="number"&&(tt.maxzoom=S.maxzoom),typeof(S==null?void 0:S.opacity)=="number"&&(tt.opacity=S.opacity);const lt=fe((S==null?void 0:S.bounds)??(S==null?void 0:S.bbox)??null);return lt&&(tt.bounds=lt),tt}).filter(Boolean):[]}const bn=e.computed(()=>{var ue,_e;const E=o.card.value,S=r.current.value,O=[(ue=E==null?void 0:E.rows)==null?void 0:ue.layers,E==null?void 0:E.layers,(_e=S==null?void 0:S.data)==null?void 0:_e.layers,S==null?void 0:S.layers];for(const Ee of O){const Me=Jr(Ee);if(Me.length)return Me}return[]}),Qr=e.computed(()=>Ut.value.length>0||$e.value.length>0||bn.value.length>0),Io=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function el(){const E={},S=z.value;if(S&&typeof S=="object"&&Object.entries(S).forEach(([O,ue])=>{typeof ue=="string"&&(E[O]=ue)}),N.value&&(E.layer=N.value),!E.geohub){const O=typeof(S==null?void 0:S.geohub)=="string"?S.geohub:null,ue=typeof(S==null?void 0:S.geohub_key)=="string"?S.geohub_key:null,_e=typeof(S==null?void 0:S.geohubId)=="string"?S.geohubId:null;E.geohub=O||ue||_e||E.layer||""}return E}async function tl(){const E=N.value;if(!E)return z.value=null,oe.value=null,null;if(oe.value===E&&z.value)return z.value;if(ye.has(E)){const S=ye.get(E);return z.value=S,oe.value=E,S}try{const S=await fetch(`/api/gis-service/${encodeURIComponent(E)}`);if(!S.ok)return null;const O=await S.json();return ye.set(E,O),z.value=O,oe.value=E,O}catch{return null}}async function Hn(E){var Ue,Ge,ot,tt;if(!(E!=null&&E.id))return;await tl();const S=el(),O=hn.value.find(lt=>lt.spec.id===E.id),ue=bn.value.find(lt=>lt.id===E.id),_e=(O==null?void 0:O.spec)||ke(ue)||ke(E),Ee=(O==null?void 0:O.spec.bounds)??(ue==null?void 0:ue.bounds);if(!_e||M(_e.id,F.value))return;const Me=(ue==null?void 0:ue.layer_id)||((Ge=(Ue=O==null?void 0:O.spec.url)==null?void 0:Ue.match(/\/api\/gis-rtile\/([^/]+)\//))==null?void 0:Ge[1])||((tt=(ot=_e.url)==null?void 0:ot.match(/\/api\/gis-rtile\/([^/]+)\//))==null?void 0:tt[1])||null;if(Me){const lt=typeof window<"u"?window.location.origin:"";try{await fetch(`${lt}/api/gis-xml/${Me}`)}catch{}}const ze=F.value||void 0;he.value=ze??null,ae(_e,S,ze),B({action:"activate",owner:ze,spec:_e,context:S}),nl(Ee)}async function nl(E){var Ee;if(!(E!=null&&E.length))return;const[S,O,ue,_e]=E;[S,O,ue,_e].every(Me=>Number.isFinite(Me))&&typeof j.fitBounds=="function"&&(await((Ee=j.ready)==null?void 0:Ee.call(j)),j.fitBounds([[S,O],[ue,_e]],{padding:48,maxZoom:18}))}function ol(E){if(!E)return;const S=Wn()||void 0;ne(E,S),B({action:"deactivate",owner:S,spec:{id:E}})}function rl(E){return M(E,Wn())}function ll(E,S){const O=S.target;!!(O!=null&&O.checked)?Hn(E):ol(E.id)}function Wn(){return he.value||F.value||null}e.watch(N,(E,S)=>{E!==S&&(z.value=null,oe.value=null)});const{next:Yn,prev:Ro,count:Gn,index:xn}=r,jo=e.computed(()=>o.count.value),al=e.computed(()=>o.index.value),Oo=e.computed(()=>w.value?!1:c.value?s.value.length>1:jo.value>1),Zn=e.computed(()=>w.value?Gn.value:c.value?s.value.length:jo.value),kn=e.computed(()=>w.value?xn.value:c.value?i.value:al.value),sl=()=>{if(c.value){if(i.value>=s.value.length-1)return;f(i.value+1);return}o.next()},il=()=>{if(c.value){if(i.value<=0)return;f(i.value-1);return}o.prev()};function Et(){const E=Wn();E&&(v(E),B({action:"clear",owner:E}),he.value=null)}function Kn(){g(),o.close(),r.close(),Et(),h(null)}e.watch($,(E,S)=>{!E&&S&&(Et(),rt())});function qt(){!o.isOpen.value&&!r.active.value&&Et()}e.watch(()=>o.isOpen.value,()=>{qt()}),e.watch(()=>r.active.value,()=>{qt()}),e.watch(N,(E,S)=>{E&&S&&E!==S&&Et()}),e.watch(xn,(E,S)=>{E!==S&&Et()}),e.watch(H,(E,S)=>{E&&S&&E!==S&&Et()});function tn(E){if(!E)return null;if(E.geometry)return E.geometry;const S=(E==null?void 0:E.data)??(E==null?void 0:E.properties);return S!=null&&S.geom_4326?S.geom_4326:S!=null&&S.geom?S.geom:null}function rt(){G.value.length&&(G.value.forEach((E,S)=>{var O;(O=E==null?void 0:E.remove)==null||O.call(E,S===0)}),G.value=[])}function Uo(E){var O,ue,_e;const S=(E==null?void 0:E.type)||((_e=(ue=(O=E==null?void 0:E.features)==null?void 0:O[0])==null?void 0:ue.geometry)==null?void 0:_e.type)||"";return S.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}}]:S.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 wn=null;function Xn(){return y()}function qo(E){var _e,Ee;if(!E)return null;const S=(E==null?void 0:E.source)??((_e=E==null?void 0:E.layer)==null?void 0:_e.id),O=((Ee=E==null?void 0:E.properties)==null?void 0:Ee.id)??(E==null?void 0:E.id);return!S||O===void 0||O===null?null:`${S},${O}`.trim()||null}function R(E,S){if(E){if(Array.isArray(E)){if(E.length>=2&&typeof E[0]=="number"&&typeof E[1]=="number"){S.push([E[0],E[1]]);return}E.forEach(O=>R(O,S));return}typeof E=="object"&&(Array.isArray(E.coordinates)&&R(E.coordinates,S),Array.isArray(E.features)&&E.features.forEach(O=>R(O==null?void 0:O.geometry,S)))}}function le(E){var ze,Ue;if(!E)return null;const S=E.type==="FeatureCollection"?(Ue=(ze=E.features)==null?void 0:ze[0])==null?void 0:Ue.geometry:E.type==="Feature"?E.geometry:E,O=[];if(R(S,O),!O.length)return null;let ue=O[0][0],_e=O[0][0],Ee=O[0][1],Me=O[0][1];return O.forEach(([Ge,ot])=>{Ge<ue&&(ue=Ge),Ge>_e&&(_e=Ge),ot<Ee&&(Ee=ot),ot>Me&&(Me=ot)}),[(ue+_e)/2,(Ee+Me)/2]}async function Te(E,S){var Ee;const O=Xn();if(!O||O.startsWith("external:"))return;const ue=qo(E);if(!ue||ue!==O||wn===O)return;const _e=le(S);_e&&(await((Ee=j.ready)==null?void 0:Ee.call(j)),j.flyTo({center:_e,zoom:zu}),wn=O)}function De(E){var _e;if(!E){rt();return}const S=(_e=j.map)==null?void 0:_e.value,O={type:"FeatureCollection",features:[{type:"Feature",geometry:E,properties:{}}]};rt();const ue=Uo(E);if(G.value=ue.map((Ee,Me)=>qe(`feature-card-highlight${Me||""}`,{...Me===0?{source:{type:"geojson",data:O}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Me||""}`,type:Ee.type,source:"feature-card-highlight",paint:Ee.paint}},j.map)),S!=null&&S.moveLayer){const Ee=()=>{try{G.value.forEach(Ge=>{var tt;const ot=(tt=Ge==null?void 0:Ge.ids)==null?void 0:tt.layerId;ot&&S.moveLayer(ot)})}catch{}},Me=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Ee)}):setTimeout(Ee,0)};Me();const ze=()=>Me();S.once("styledata",ze);const Ue=()=>{Me(),S.off("styledata",ze),S.off("idle",Ue)};S.on("idle",Ue)}}function Be(E){var ue,_e;const S=(E==null?void 0:E.source)||((ue=E==null?void 0:E.layer)==null?void 0:ue.id)||"unknown",O=((_e=E==null?void 0:E.properties)==null?void 0:_e.id)??(E==null?void 0:E.id)??"unknown";return`${S}:${O}`}async function Ie(E){var Ee,Me,ze,Ue,Ge;if(!E)return null;const S=tn(E);if(S)return S;const O=((Ee=E==null?void 0:E.properties)==null?void 0:Ee.id)??(E==null?void 0:E.id);if(!O)return null;const ue=Be(E);if(U.has(ue))return U.get(ue);const _e=[ee.value,E==null?void 0:E.source,(Me=E==null?void 0:E.layer)==null?void 0:Me.id].map(ot=>typeof ot=="string"?ot.trim():"").filter(Boolean);for(const ot of _e)try{const tt=await fetch(`/api/map-features/${encodeURIComponent(ot)}/${encodeURIComponent(String(O))}`);if(!tt.ok)continue;const lt=await tt.json(),Ht=((ze=lt==null?void 0:lt.data)==null?void 0:ze.geom)||((Ue=lt==null?void 0:lt.data)==null?void 0:Ue.geometry)||((Ge=lt==null?void 0:lt.data)==null?void 0:Ge.geom_4326)||null,Jn=typeof Ht=="string"?JSON.parse(Ht):Ht;if(Jn)return U.set(ue,Jn),Jn}catch{continue}return null}async function je(E){D.value+=1;const S=D.value;if(C())return;if(!E||w.value){rt();return}if(!Io.value){rt();return}const O=await Ie(E);if(S===D.value){if(!O){rt();return}De(O),Te(E,O)}}async function Le(E){var O,ue,_e;const S=k(E);if(!S){(O=y())!=null&&O.startsWith("external:")&&(g(),rt());return}if(((ue=u.value)==null?void 0:ue.infoToken)===S.token){C();return}try{const Ee=await fetch(`/api/map-format?layer=${encodeURIComponent(S.layer)}&id=${encodeURIComponent(S.id)}`);if(!Ee.ok)throw new Error(`Failed (${Ee.status})`);const Me=await Ee.json(),ze=typeof(Me==null?void 0:Me.html)=="string"?Me.html:null,Ue=m(((_e=Me==null?void 0:Me.data)==null?void 0:_e.geom)??(Me==null?void 0:Me.geom)??null);if(!ze&&!Ue){g(),rt();return}b([{html:ze,geometry:Ue,infoToken:S.token}],0)}catch{g(),rt()}}return e.watch(()=>o.cardFeature.value,E=>{je(E)},{immediate:!0}),e.watch(()=>o.index.value,()=>{w.value||je(o.cardFeature.value)}),e.watch(w,E=>{if(E){p.value||rt();return}if(p.value){C();return}je(o.cardFeature.value)}),e.watch(ee,()=>{if(p.value){C();return}!w.value&&o.cardFeature.value&&je(o.cardFeature.value)}),e.watch(Io,E=>{C()||(E?je(o.cardFeature.value):rt())}),e.watch(()=>Xn(),E=>{if(wn=null,E!=null&&E.startsWith("external:")){Le(E);return}u.value&&(g(),rt())},{immediate:!0}),e.watch(u,E=>{var S;if(!((S=E==null?void 0:E.html)!=null&&S.trim())){rt();return}C()}),e.onBeforeUnmount(()=>{Et(),rt()}),(E,S)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[$.value?(e.openBlock(),e.createElementBlock("div",ru,[e.createElementVNode("div",lu,[e.createElementVNode("div",au,[e.createElementVNode("p",su,[w.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(kn.value+1)+" / "+e.toDisplayString(Zn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[Oo.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(kn.value+1)+" / "+e.toDisplayString(Zn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),w.value&&e.unref(Gn)>1?(e.openBlock(),e.createElementBlock("div",iu,[e.createElementVNode("button",{onClick:S[0]||(S[0]=(...O)=>e.unref(Ro)&&e.unref(Ro)(...O)),disabled:e.unref(xn)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ge.ArrowLeft),{class:"h-4 w-4"})],8,cu),e.createElementVNode("button",{onClick:S[1]||(S[1]=(...O)=>e.unref(Yn)&&e.unref(Yn)(...O)),disabled:e.unref(xn)===e.unref(Gn)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ge.ArrowRight),{class:"h-4 w-4"})],8,du)])):!w.value&&Oo.value?(e.openBlock(),e.createElementBlock("div",uu,[e.createElementVNode("button",{onClick:il,disabled:kn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ge.ArrowLeft),{class:"h-4 w-4"})],8,fu),e.createElementVNode("button",{onClick:sl,disabled:kn.value>=Zn.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(ge.ArrowRight),{class:"h-4 w-4"})],8,mu)])):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:Kn}," ✕ ")]),e.createElementVNode("div",pu,[L.value?(e.openBlock(),e.createElementBlock("div",gu," Завантаження даних… ")):Y.value?(e.openBlock(),e.createElementBlock("div",yu,e.toDisplayString(Y.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[$e.value.length?(e.openBlock(),e.createElementBlock("div",hu,[e.createElementVNode("dl",bu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ne.value,O=>(e.openBlock(),e.createElementBlock("div",{key:O.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-10 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",xu,e.toDisplayString(O.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-6 font-normal",[O.format==="badge"?"font-semibold text-yellow-800":"",O.format==="file"?"whitespace-normal":"whitespace-pre-wrap"]])},[O.format==="tags"?(e.openBlock(),e.createElementBlock("div",ku,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P(O.value),(ue,_e)=>(e.openBlock(),e.createElementBlock("span",{key:_e,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(ue),1))),128))])):O.format==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[me(O.value).length?(e.openBlock(),e.createElementBlock("div",wu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(me(O.value),(ue,_e)=>(e.openBlock(),e.createElementBlock("div",{key:_e,class:"flex gap-x-2"},[e.createElementVNode("a",{class:"flex items-center gap-x-2 border py-2 px-3 shadow rounded-xl cursor-pointer w-[42px] y-[34px]",href:ue,target:"_blank",rel:"noopener"},[...S[2]||(S[2]=[e.createElementVNode("img",{src:"https://cdn.softpro.ua/assets/eye.svg",alt:"eye"},null,-1)])],8,_u),e.createElementVNode("a",{download:"1",class:"flex items-center gap-x-2 border py-2 px-3 shadow rounded-xl cursor-pointer w-[42px] y-[34px]",href:ue,target:"_blank",rel:"noopener"},[...S[3]||(S[3]=[e.createElementVNode("img",{src:"https://cdn.softpro.ua/assets/file-up.svg",alt:"generate"},null,-1)])],8,Eu)]))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("—")],64))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(O.value),1)],64))],2)]))),128))])])):Ut.value.length?(e.openBlock(),e.createElementBlock("div",Cu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ut.value,(O,ue)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:ue},[O.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:O.content},null,8,Nu)):(e.openBlock(),e.createBlock(vl,{key:1,title:O.componentProps.title,url:O.componentProps.url,id:O.componentProps.id,"button-text":O.componentProps.buttonText,onActivate:Hn},e.createSlots({_:2},[O.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:O.slotText},null,8,Vu)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),hn.value.length?(e.openBlock(),e.createElementBlock("div",Bu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(hn.value,O=>(e.openBlock(),e.createBlock(vl,{key:O.spec.id,title:O.componentProps.title,url:O.componentProps.url,id:O.spec.id,"button-text":O.componentProps.buttonText,onActivate:Hn},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),ct.value?(e.openBlock(),e.createElementBlock("div",$u,[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:yn},[e.createElementVNode("span",Su,e.toDisplayString(wt.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Ft.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),bn.value.length?(e.openBlock(),e.createElementBlock("div",vu,[S[5]||(S[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",Lu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(bn.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",Tu,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:rl(O.id),onChange:ue=>ll(O,ue)},null,40,Au),S[4]||(S[4]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Mu,e.toDisplayString(O.title),1)]),O.subtitle?(e.openBlock(),e.createElementBlock("div",Fu,e.toDisplayString(O.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Qr.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Du," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-e2cf1510"]]),Iu={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%"}},Ru={class:"flex flex-col gap-1 p-5"},ju={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},ar=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Ke(),l=e.ref([]);let s=null;function i(p){return p?p.map((a,g)=>{var k;const m=(a==null?void 0:a.name)||(a==null?void 0:a.label)||(a==null?void 0:a.title)||(a==null?void 0:a.id)||`Layer ${g+1}`,y=(a==null?void 0:a.color)||(a==null?void 0:a.fill)||((k=a==null?void 0:a.paint)==null?void 0:k.color)||"#3388ff";return{id:`${m}-${g}`,label:m,color:y}}):[]}function d(p){return p!=null&&p.layers?p.layers.filter(a=>{const g=a.paint||{};return g["fill-color"]||g["line-color"]||g["circle-color"]}).map((a,g)=>{var k;const m=a.paint||{},y=m["fill-color"]||m["line-color"]||m["circle-color"]||"#3388ff";return{id:a.id||`layer-${g}`,label:((k=a.metadata)==null?void 0:k.title)||a.id||`Layer ${g+1}`,color:y}}):[]}async function u(){var g;await r();const p=o.value;if(!p)return;const a=(g=p.getStyle)==null?void 0:g.call(p);l.value=d(a)}function c(){o.value&&(s==null||s())}return e.watch(()=>n.items,async p=>{p!=null?(l.value=i(p),s==null||s()):(await r(),c(),u())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),c(),u())}),e.onBeforeUnmount(()=>{s==null||s(),s=null}),(p,a)=>l.value.length?(e.openBlock(),e.createElementBlock("div",Iu,[e.createElementVNode("div",Ru,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.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:g.color})},null,4),e.createElementVNode("span",ju,[e.createElementVNode("span",null,e.toDisplayString(g.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Ou={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"},sr=Fe(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",Ou,[e.createVNode(ao,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),io=e.ref({}),co=e.ref([]);function Uu(t){const n={};t.forEach(o=>{o!=null&&o.id&&(n[o.id]=o)}),io.value=n}function qu(t){co.value=[...t]}function Hu(){io.value={},co.value=[]}function Wu(t){return t.legend?(Array.isArray(t.legend)?t.legend:[t.legend]).filter(Boolean):[]}const Al=e.computed(()=>{const t=[];return co.value.forEach(n=>{const o=io.value[n];o&&Wu(o).forEach(r=>{t.push({...r,name:r.name??r.label??o.name,label:r.label??r.name??o.name})})}),t});function Yu(t,n={}){const o=t==null?void 0:t.config;return Array.isArray(o)?o:o&&typeof o=="object"&&Array.isArray(o.items)?o.items:(o&&typeof o=="object"?o.source:void 0)==="catalog"||n.hasCatalogWidget?Al.value:[]}function Ml(){return{layersById:io,selectedLayerIds:co,catalogLegendItems:Al,registerCatalogLayers:Uu,setCatalogSelectedLayerIds:qu,resetMapCatalogLegend:Hu,resolveMapLegendItems:Yu}}const Gu={class:"catalog-tab__search relative mt-[10px]"},Zu={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%)"}},Ku={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Xu={key:0,class:"text-sm text-gray-400 text-center mt-6"},Ju=["onClick"],Qu={class:"flex items-center gap-x-3"},ef={class:"max-w-[260px] text-[14px] text-[#4b5563]"},tf={class:"text-xs opacity-60 text-[#4b5563]"},nf={class:"flex items-center cursor-pointer gap-2 flex-1"},of=["checked","onChange"],rf={class:"text-[13px] text-gray-600 max-w-[260px]"},lf={class:"flex items-center gap-2"},af=Fe(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),d=new Intl.Collator("uk",{sensitivity:"base"}),u=e.computed(()=>{const f=o.search.trim().toLowerCase();return o.catalog.groups.map(b=>{const x=b.layers.filter(C=>{const V=k(C);return V?f?V.toLowerCase().includes(f):!0:!1}).sort((C,V)=>d.compare(k(C),k(V)));return{...b,layers:x}}).filter(b=>b.layers.length>0).sort((b,x)=>d.compare(b.name,x.name))}),c=e.computed({get:()=>o.search,set:f=>r("update:search",f)});function p(f){l[f]=!l[f],Ed()}function a(f){return!!l[f]}function g(f,b){if(o.selected.includes(b)){i.visible=!1,i.layerId=null;return}const x=f.currentTarget;if(!x)return;const C=x.getBoundingClientRect(),V=typeof window<"u"?window.scrollX:0,_=typeof window<"u"?window.scrollY:0;i.left=C.left+C.width/2+V,i.top=C.bottom+8+_,i.layerId=b,i.visible=!0}function m(){i.visible=!1,i.layerId=null}function y(f){return[{label:"Назва",value:h(f.name)},{label:"Сервіс",value:h(f.service)},{label:"Посилання",value:h(f.url),breakLine:!0}]}function k(f){return typeof(f==null?void 0:f.name)=="string"?f.name.trim():""}function h(f){return f==null||f===""?null:String(f)}return e.watch(()=>o.selected?o.selected.slice():[],f=>{!i.visible||!i.layerId||f.includes(i.layerId)&&(i.visible=!1,i.layerId=null)}),(f,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:s,class:"catalog-tab"},[e.createElementVNode("div",Gu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=x=>c.value=x),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,c.value]]),(e.openBlock(),e.createElementBlock("svg",Zu,[...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",Ku,[u.value.length===0?(e.openBlock(),e.createElementBlock("div",Xu," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:C=>p(x.id)},[e.createElementVNode("div",Qu,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",a(x.id)?"rotate-90":""])},[...b[2]||(b[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",ef,e.toDisplayString(x.name),1)]),e.createElementVNode("div",tf,e.toDisplayString(x.layers.length),1)],8,Ju),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.layers,C=>(e.openBlock(),e.createElementBlock("div",{key:C.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",nf,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(C.id),onChange:V=>f.$emit("toggle-layer",C.id,V.target.checked,C)},null,40,of),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",rf,e.toDisplayString(C.name),1)]),e.createElementVNode("div",lf,[Array.isArray(C.filters)&&C.filters.length?(e.openBlock(),e.createBlock(ao,{key:0,count:C.filters.length,layer:C,disabled:!t.selected.includes(C.id),onMouseenter:V=>g(V,C.id),onMouseleave:m,onFocus:V=>g(V,C.id),onBlur:m},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(Jo,{items:y(C)},null,8,["items"])])]))),128))],512),[[e.vShow,a(x.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${i.top}px`,left:`${i.left}px`})},e.toDisplayString(i.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-36ed2aad"]]),sf={class:"flex flex-col gap-0"},cf={class:"text-xs text-slate-600 font-semibold"},df=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const d=e.computed(()=>{if(!r.open)return{display:"none"};const k=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${k}px`,maxWidth:`${k}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function u(){if(r.open){g();return}if(!l.value){g();return}r.open=!0,e.nextTick(()=>{c(),m(),requestAnimationFrame(()=>{c()})})}function c(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,C=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(460,window.innerWidth-24),_=s.value.offsetHeight||0;let w=k.left+window.scrollX+(k.width-V)/2;w<f&&(w=f),w+V>b&&(w=Math.max(f,b-V)),r.left=w;let $=k.bottom+window.scrollY+h;$+_>C&&($=k.top+window.scrollY-_-h,$<x&&($=Math.max(x,C-_))),$<x&&($=x),$+_>C&&($=Math.max(x,C-_)),r.top=$,r.transform="none"}function p(k){var f,b;if(!r.open)return;const h=k.target;(f=l.value)!=null&&f.contains(h)||(b=s.value)!=null&&b.contains(h)||g()}function a(k){k.key==="Escape"&&g()}function g(){y(),r.open=!1,l.value=null,s.value=null}function m(){y(),s.value&&(i=new ResizeObserver(()=>{c()}),i.observe(s.value))}function y(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",p,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c),y()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>c())},{deep:!0}),n({close:g}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(u,["prevent","stop"])},[e.renderSlot(k.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(d.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",sf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",cf,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),uf={class:"selected-tab"},ff={class:"selected-tab__actions"},mf={key:0,class:"selected-tab__scroll"},pf=["onDragstart","onDragover","onDrop"],gf={class:"selected-tab__item-header"},yf={class:"selected-tab__item-info"},hf=["checked","onChange"],bf={class:"selected-tab__item-name"},xf={class:"selected-tab__item-controls"},kf=["onClick"],wf={class:"selected-tab__menu-inner"},_f=Fe(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{},clientLayers:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.ref(null),d=new Map,u=e.reactive({top:0,left:0}),c=e.ref(null),p=e.reactive({top:0,left:0}),a=e.ref(null),g=new Map,m=e.reactive({});function y(v){var B,N;const M=(B=o.clientLayers)==null?void 0:B[v];if(M){const F=M.bounds?[M.bounds[0][0],M.bounds[0][1],M.bounds[1][0],M.bounds[1][1]]:null;return{id:M.id,name:M.name,service:"geojson",isClient:!0,extent:F}}for(const F of((N=o.catalog)==null?void 0:N.groups)??[]){const H=F.layers.find(he=>he.id===v);if(H)return H}return null}e.watch(()=>o.selected,v=>{v.forEach(M=>{l[M]==null&&(l[M]=100)})},{immediate:!0});function k(){if(!s.value)return;const v=d.get(s.value);if(!v)return;const M=v.getBoundingClientRect();u.top=M.bottom+8+window.scrollY,u.left=M.left+window.scrollX}e.watch(()=>o.selected,v=>{v.forEach(M=>{m[M]==null&&(m[M]=!0)})},{immediate:!0});function h(v,M){var N;if(m[v]=M,(N=o.clientLayers)!=null&&N[v]){r("toggle-layer",v,M);return}const B=qe(v);B&&B.setVisible(M)}function f(v,M){M?g.set(v,M):g.delete(v)}function b(v){c.value=c.value===v?null:v,c.value&&e.nextTick(()=>{x(v),requestAnimationFrame(()=>{x(v)})})}function x(v){const M=g.get(v);if(!M||!a.value)return;const B=M.getBoundingClientRect(),N=12,F=6,H=window.scrollX+N,he=window.scrollX+window.innerWidth-N,G=window.scrollY+N,D=window.scrollY+window.innerHeight-N,U=a.value.offsetWidth||190,q=a.value.offsetHeight||0;let ee=B.bottom+window.scrollY+F,z=B.left+window.scrollX;z+U>he&&(z=B.right+window.scrollX-U,z<H&&(z=H)),z<H&&(z=H),ee+q>D&&(ee=B.top+window.scrollY-q-F,ee<G&&(ee=Math.max(G,D-q))),ee<G&&(ee=G),ee+q>D&&(ee=Math.max(G,D-q)),p.top=ee,p.left=z}function C(v){const M=qe(v);M&&M.remove(),r("remove",v),c.value=null}function V(v){const M=v.target,B=s.value,N=c.value;if(B){const F=i.value,H=d.get(B);if(F&&F.contains(M)||H&&H.contains(M))return;s.value=null}if(N){const F=a.value,H=g.get(N);if(F&&F.contains(M)||H&&H.contains(M))return;c.value=null}}function _(){s.value&&k(),c.value&&x(c.value)}e.onMounted(()=>{document.addEventListener("click",V),window.addEventListener("resize",_),window.addEventListener("scroll",_,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",V),window.removeEventListener("resize",_),window.removeEventListener("scroll",_,!0)});const{map:w}=Ke();function $(v){var H,he,G,D,U,q;if(!v)return;const M=qe(v),B=y(v);if(!M&&!B)return;if(((H=B==null?void 0:B.extent)==null?void 0:H.length)===4&&((he=w.value)!=null&&he.fitBounds)){const ee=B.extent.map(z=>Number(z));if(ee.every(z=>Number.isFinite(z))){const[z,oe,ye,we]=ee;w.value.fitBounds([[z,oe],[ye,we]],{padding:40}),c.value=null;return}}const N=(D=(G=o.clientLayers)==null?void 0:G[v])==null?void 0:D.bounds;if(N&&((U=w.value)!=null&&U.fitBounds)){w.value.fitBounds(N,{padding:40}),c.value=null;return}(q=M==null?void 0:M.getSource)!=null&&q.call(M)&&(c.value=null)}const L=e.ref(null),Y=e.ref(null);function Q(v,M){L.value=M,Y.value=M,v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(M)))}function j(v){Y.value=v}function te(v,M){if(v.preventDefault(),L.value===null||L.value===M){L.value=null,Y.value=null;return}const N=[...o.selected],[F]=N.splice(L.value,1);N.splice(M,0,F),r("reorder",N),L.value=null,Y.value=null}function de(){L.value=null,Y.value=null}function be(v){return v==null||v===""?null:String(v)}function ae(v,M){return!Array.isArray(v)||v.length===0?null:`${v.length} ${M}`}function ne(v){var ee,z,oe,ye,we,T;const M=qe(v),B=y(v);if(!M&&!B)return[];const N=(B==null?void 0:B.name)||((z=(ee=M==null?void 0:M.opts)==null?void 0:ee.layer)==null?void 0:z.name)||null,F=(B==null?void 0:B.service)||((oe=M==null?void 0:M.opts)==null?void 0:oe.service)||null,H=(ye=M==null?void 0:M.getSource)==null?void 0:ye.call(M),he=H&&"tiles"in H?(we=H.tiles)==null?void 0:we[0]:(B==null?void 0:B.url)||null,G=(B==null?void 0:B.source_path)||null,D=(M==null?void 0:M.popup)||(B==null?void 0:B.popup),U=(M==null?void 0:M.card)||(B==null?void 0:B.card),q=(B==null?void 0:B.filters)||((T=M==null?void 0:M.opts)==null?void 0:T.filters);return[{label:"Назва",value:be(N)},{label:"Сервіс",value:be(B!=null&&B.isClient?"Завантажені дані":F)},{label:"Посилання",value:be(he),breakLine:!0},{label:"Джерело",value:be(G),breakLine:!0},{label:"Popup",value:ae(D,"полів")},{label:"Картка",value:ae(U,"полів")},{label:"Фільтри",value:ae(q,"фільтрів")}]}return(v,M)=>(e.openBlock(),e.createElementBlock("div",uf,[e.createElementVNode("div",ff,[e.createElementVNode("button",{class:"selected-tab__add",onClick:M[0]||(M[0]=B=>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",mf,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(B,N)=>{var F;return e.openBlock(),e.createElementBlock("div",{key:B,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":L.value===N,"selected-tab__item--over":Y.value===N}]),draggable:"true",onDragstart:H=>Q(H,N),onDragover:e.withModifiers(H=>j(N),["prevent"]),onDrop:H=>te(H,N),onDragend:de},[e.createElementVNode("div",gf,[e.createElementVNode("div",yf,[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:m[B]??!0,onChange:H=>h(B,H.target.checked)},null,40,hf),e.createElementVNode("span",bf,e.toDisplayString(((F=y(B))==null?void 0:F.name)||"Шар"),1)]),e.createElementVNode("div",xf,[e.createVNode(Bl,{"layer-id":B},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:H=>f(B,H),onClick:e.withModifiers(H=>b(B),["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,kf)])])],42,pf)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[c.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:a,class:"selected-tab__menu",style:e.normalizeStyle({top:p.top+"px",left:p.left+"px"})},[e.createElementVNode("div",wf,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:M[1]||(M[1]=B=>$(c.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(df,{items:ne(c.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]=B=>C(c.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-32207ce7"]]),Ef={class:"filter-tab"},Cf={key:0,class:"filter-tab__header"},Nf={class:"filter-tab__title"},Vf={key:1,class:"filter-tab__content rounded-md"},Bf={class:"filter-tab__scroll"},$f={key:2,class:"filter-tab__empty"},Sf=Fe(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,s=e.computed(()=>{var u;return((u=r.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>s.value.length>0);function d(u){l("change",u.data)}return(u,c)=>(e.openBlock(),e.createElementBlock("div",Ef,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Cf,[e.createElementVNode("div",null,[e.createElementVNode("p",Nf,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Vf,[e.createElementVNode("div",Bf,[e.createVNode(e.unref(o),{view:"vertical",schema:s.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:c[0]||(c[0]=p=>d(p))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",$f,[...c[1]||(c[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),vf={class:"flex items-center justify-between mb-1"},Lf={class:"flex items-center gap-2"},Tf={class:"text-lg font-semibold text-gray-800"},Af={key:0},Mf={key:1,class:"block text-sm font-normal text-gray-500"},Ff={class:"flex items-center gap-2"},Df={class:"flex mb-4 border-b border-gray-200"},Pf={class:"map-catalog-widget__body"},Fl=Fe(e.defineComponent({__name:"MapCatalogWidget",setup(t){const{registerCatalogLayers:n,setCatalogSelectedLayerIds:o,resetMapCatalogLegend:r}=Ml(),l=He.useRoute(),s=He.useRouter();function i(){const z=l.query["catalog-tab"];return(Array.isArray(z)?z[0]:z)==="selected"?"selected":"catalog"}const d=e.ref(i()),u=e.ref({groups:[]}),c=e.ref([]),p=e.ref(""),{map:a}=Ke(),{clientLayers:g,isClientLayer:m,getClientLayer:y,unregisterClientLayer:k,clearClientLayers:h}=tr(),f=e.reactive({}),b=e.ref(null),x=e.ref(!0),C=e.ref(!1),{activateTemporaryLayer:V}=Nn(a);function _(z){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"activate",owner:"add-data",spec:z}}))}function w(z,oe){var X,fe;const ye=g.value[z]||y(z),we=qe(z);if(!oe){(X=we==null?void 0:we.setVisible)==null||X.call(we,!1);return}if((fe=we==null?void 0:we.isMounted)!=null&&fe.call(we)){we.setVisible(!0);return}if(!(ye!=null&&ye.data))return;const T={id:ye.id,title:ye.name,type:"geojson",data:ye.data};V(T,{},"add-data"),_(T)}function $(z){const oe=g.value[z];if(oe){const ye=oe.bounds?[oe.bounds[0][0],oe.bounds[0][1],oe.bounds[1][0],oe.bounds[1][1]]:null;return{id:oe.id,name:oe.name,service:"geojson",isClient:!0,extent:ye}}return u.value.groups.map(ye=>ye.layers.find(we=>we.id===z)).find(Boolean)||null}function L(z){return typeof(z==null?void 0:z.name)=="string"&&z.name.trim().length>0}function Y(){const z=b.value;if(!z)return;delete f[z];const oe=qe(z);oe!=null&&oe.setFilter&&oe.setFilter("")}function Q(z,oe){const ye=qe(z);if(f[z]={...oe},!(ye!=null&&ye.setFilter))return;const we=Object.entries(oe).filter(([,T])=>T!=null&&T!=="").map(([T,X])=>`${T}=${X}`);ye.setFilter(we.join("|"))}function j(z){const oe=b.value;oe&&Q(oe,z)}function te(z){const oe=z.url;let ye=null;if(oe&&(ye=oe.startsWith("http")?oe:`${window.location.origin}${oe}`),!ye)return null;const we=(z.service||"").toString().toLowerCase(),T=z.count??null;return we&&we!=="vtile"?{service:we,count:T,source:{type:"raster",tiles:[ye],tileSize:256,minzoom:0,maxzoom:20}}:{service:we,count:T,source:{type:"vector",tiles:[ye],minzoom:0,maxzoom:14},layer:{style:z.style},card:z.card,popup:z.popup}}function de(z,oe,ye){var fe;const we=ye??$(z);if(!we)return;if(we.isClient){w(z,oe),oe&&!c.value.includes(z)&&c.value.push(z);return}const T=te(we);if(!T)return;const X=qe(we.id,T,a);if(X)if(X.setVisible(oe),oe){if(!c.value.includes(z)&&(c.value.push(z),(fe=a.value)!=null&&fe.getLayer(z)))try{a.value.moveLayer(z)}catch(ie){console.warn("Cannot move new layer",z,ie)}}else c.value=c.value.filter(ie=>ie!==z),b.value===z&&(Y(),b.value=null)}function be(){c.value.forEach(z=>{var ye;const oe=qe(z);oe&&oe.setVisible(!1),m(z)&&((ye=oe==null?void 0:oe.remove)==null||ye.call(oe),k(z))}),c.value=[],h()}function ae(z){var ye;const oe=qe(z);(ye=oe==null?void 0:oe.remove)==null||ye.call(oe),m(z)&&(k(z),window.dispatchEvent(new CustomEvent(lo,{detail:{id:z}})),window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"deactivate",spec:{id:z},owner:"add-data"}}))),c.value=c.value.filter(we=>we!==z),b.value===z&&(Y(),b.value=null)}function ne(z){if(!(z instanceof CustomEvent))return;const{id:oe}=z.detail||{};!oe||typeof oe!="string"||(c.value.includes(oe)||c.value.push(oe),d.value="selected")}function v(z){c.value=[...z],e.nextTick(()=>{var T;if(!a.value)return;const oe=((T=a.value.getStyle())==null?void 0:T.layers)??[];let ye;const we=X=>oe.filter(fe=>{var ie,ce;return(fe==null?void 0:fe.source)===X||(fe==null?void 0:fe.id)===X||((ce=(ie=fe==null?void 0:fe.id)==null?void 0:ie.startsWith)==null?void 0:ce.call(ie,`${X}`))}).map(fe=>fe.id);for(let X=z.length-1;X>=0;X-=1){const fe=z[X],ie=we(fe);ie.length&&(ie.forEach(ce=>{var pe;if((pe=a.value)!=null&&pe.getLayer(ce))try{a.value.moveLayer(ce,ye)}catch(K){console.warn("Cannot move layer",ce,K)}}),ye=ie[0])}})}function M(z){!z||!Array.isArray(z.filters)||z.filters.length===0||c.value.includes(z.id)&&(b.value=z.id,f[z.id]||(f[z.id]={}),d.value="filter")}function B(){d.value="catalog"}const N=e.computed(()=>b.value?$(b.value):null),F=e.computed(()=>{const z=b.value;return z?f[z]??{}:{}}),H=e.computed(()=>u.value.groups.reduce((z,oe)=>z+oe.layers.filter(L).length,0)),he=e.computed(()=>d.value==="selected"?"Вибрані шари":d.value==="filter"?"Фільтр шарів":"Каталог"),G=e.computed(()=>d.value==="selected"?c.value.length:d.value==="catalog"?H.value:null),D=e.computed(()=>{var z;return d.value==="filter"?((z=N.value)==null?void 0:z.name)??"":""});async function U(){const oe=await(await fetch("/api/gis-layer-list")).json(),ye=new Map;oe.forEach(X=>{const fe=X.group_id??"other";ye.has(fe)||ye.set(fe,{id:fe,name:X.group_name||"Інші шари",layers:[]}),ye.get(fe).layers.push(X)}),u.value={groups:Array.from(ye.values())},n(u.value.groups.flatMap(X=>X.layers)),o(c.value);const we=l.query.layers;if(!we)return;const T=Array.isArray(we)?we[0]:we;typeof T=="string"&&T.split(",").forEach(X=>{const fe=X.trim();if(!fe)return;const ie=$(fe);ie&&de(fe,!0,ie)})}e.watch(b,z=>{!z&&d.value==="filter"&&(d.value="catalog")}),e.watch(N,z=>{!z&&b.value&&(b.value=null)}),e.watch(c,z=>{const oe=z.filter(we=>!m(we));o(oe);const ye={...l.query};oe.length?ye.layers=oe.join(","):delete ye.layers,s.replace({query:ye}).catch(()=>{})},{deep:!0});function q(){x.value=!x.value}function ee(){C.value=window.innerWidth<=768}return e.onMounted(()=>{U(),ee(),C.value&&(x.value=!1),window.addEventListener("resize",ee),window.addEventListener(Vn,ne)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",ee),window.removeEventListener(Vn,ne),r()}),(z,oe)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",x.value&&(d.value==="selected"||G.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",vf,[e.createElementVNode("div",Lf,[oe[4]||(oe[4]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",Tf,[e.createTextVNode(e.toDisplayString(he.value)+" ",1),G.value!==null?(e.openBlock(),e.createElementBlock("span",Af,"("+e.toDisplayString(G.value)+")",1)):e.createCommentVNode("",!0),D.value?(e.openBlock(),e.createElementBlock("span",Mf,e.toDisplayString(D.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Ff,[e.createElementVNode("button",{onClick:be,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...oe[5]||(oe[5]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-b81b0112><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-b81b0112></path><path d="M21 3v5h-5" data-v-b81b0112></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" data-v-b81b0112></path><path d="M8 16H3v5" data-v-b81b0112></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:q,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":x.value})},[...oe[6]||(oe[6]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!x.value}])},[e.createElementVNode("div",Df,[e.createElementVNode("button",{onClick:oe[0]||(oe[0]=ye=>d.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",d.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:oe[1]||(oe[1]=ye=>d.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",d.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Pf,[d.value==="catalog"?(e.openBlock(),e.createBlock(af,{key:0,class:"map-catalog-widget__scroll",catalog:u.value,selected:c.value,search:p.value,"onUpdate:search":oe[2]||(oe[2]=ye=>p.value=ye),onToggleLayer:de,onOpenFilter:M},null,8,["catalog","selected","search"])):d.value==="selected"?(e.openBlock(),e.createBlock(_f,{key:1,catalog:u.value,selected:c.value,"client-layers":e.unref(g),onToggleLayer:de,onSelectLayer:oe[3]||(oe[3]=ye=>d.value="catalog"),onReorder:v,onRemove:ae},null,8,["catalog","selected","client-layers"])):(e.openBlock(),e.createBlock(Sf,{key:2,layer:N.value,value:F.value,onChange:j,onClose:B},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-b81b0112"]]),zf={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},If={class:"flex items-start justify-between gap-3 p-5 pb-3"},Rf={class:"inline-block text-xl font-semibold text-gray-800"},jf={key:0,class:"mt-1 text-sm text-gray-500"},Of={class:"flex items-center gap-[6px]"},Uf={class:"px-5 pb-5 space-y-6"},qf={key:0,class:"space-y-2"},Hf={class:"flex flex-wrap gap-4"},Wf=["value"],Yf={key:1,class:"text-sm text-gray-500"},Gf={key:2,class:"text-sm text-gray-500"},Zf={class:"text-4xl font-medium text-gray-800"},Kf={class:"space-y-[14px]"},Xf={class:"flex items-center gap-[10px] text-gray-600"},Jf={class:"font-medium text-gray-700"},Qf={class:"flex items-center justify-end text-end gap-3"},em={class:"font-medium text-gray-800"},tm={class:"min-w-[40px] font-medium text-[#3C3C4399]"},Dl=Fe(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),s=e.ref([]),i=e.ref(null),d=e.ref(null),u=e.ref(null),c=e.ref(null),p=e.ref(null),a=e.ref({}),g=e.ref(null);function m(ae){return ae&&JSON.parse(JSON.stringify(ae))}const y=e.computed(()=>{const ae=o.config.layer;if(typeof ae!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const ne=ae.trim();if(!ne)throw new Error("MapAttributeWidget: `layer` must be non-empty");return ne}),k=e.computed(()=>{const{list:ae,attribute:ne}=o.config;if(Array.isArray(ae)&&ae.length)return ae.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(ne))return ne.map(v=>v!=null?String(v).trim():"").filter(v=>v.length).map(v=>({id:v,text:null}));if(typeof ne=="string"){const v=ne.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")}),h=e.computed(()=>k.value.map(ae=>({id:ae.id,label:ae.text||a.value[ae.id]||ae.id})));e.watch(k,ae=>{if(!ae.length){g.value=null,s.value=[];return}(!g.value||!ae.some(ne=>ne.id===g.value))&&(g.value=ae[0].id)},{immediate:!0});const f=e.computed(()=>{var ae;return g.value||((ae=k.value[0])==null?void 0:ae.id)||null});e.watch(y,()=>{var ae,ne;(ne=(ae=d.value)==null?void 0:ae.remove)==null||ne.call(ae),d.value=null,u.value=null,c.value=null,p.value=null,a.value={}});const b=e.computed(()=>{var ae;return(ae=c.value)!=null&&ae.length?{id:y.value,name:u.value,filters:c.value}:null}),x=e.computed(()=>{var ae,ne;return((ne=(ae=b.value)==null?void 0:ae.filters)==null?void 0:ne.length)||0});async function C(ae){var M;const ne=await fetch(`/api/gis-service/${encodeURIComponent(ae)}`);if(!ne.ok){let B="Не вдалося завантажити налаштування шару";try{const N=await ne.json();B=((M=N==null?void 0:N.message)==null?void 0:M.error)||(N==null?void 0:N.message)||B}catch{}throw new Error(B)}const v=await ne.json();return u.value=(v==null?void 0:v.name)||null,c.value=Array.isArray(v==null?void 0:v.filters)?v.filters:null,p.value=m((v==null?void 0:v.style)||{}),a.value=((v==null?void 0:v.attributes)||[]).reduce((B,N)=>{const F=typeof(N==null?void 0:N.name)=="string"?N.name.trim():"",H=typeof(N==null?void 0:N.ua)=="string"?N.ua.trim():"";return F&&(B[F]=H||F),B},{}),v}function V(ae,ne){let v=qe(ae);if(!v){const M=`${location.origin}/api/vtile/${ae}/ua/{z}/{x}/{y}.vmt`;v=qe(ae,{source:{type:"vector",tiles:[M],minzoom:0,maxzoom:14},layer:{id:ae,source:ae,"source-layer":ae,style:(ne==null?void 0:ne.style)||{}},card:ne==null?void 0:ne.card,popup:ne==null?void 0:ne.popup})}return d.value=v,v}async function _(ae,ne){var B;const v=`/api/gis-service/${encodeURIComponent(ae)}/${encodeURIComponent(ne)}`,M=await fetch(v);if(!M.ok){let N="Не вдалося отримати статистику";try{const F=await M.json();N=((B=F==null?void 0:F.message)==null?void 0:B.error)||(F==null?void 0:F.message)||N}catch{}throw new Error(N)}return M.json()}function w(ae){const ne=new Map;return ae&&(ae.rules||[]).forEach(M=>{const B=(M==null?void 0:M.value)??(M==null?void 0:M.id);B!=null&&ne.set(String(B),M)}),ne}function $(ae,ne,v,M,B){if(typeof(ne==null?void 0:ne.color)=="string"&&ne.color.trim())return ne.color.trim();const N=o.config.colors||{};if(N[ae])return N[ae];const H=w(v==null?void 0:v.style).get(ae);return typeof(H==null?void 0:H.color)=="string"&&H.color.trim()?H.color.trim():n[B%n.length]}function L(ae,ne,v,M){var B;return(ne==null?void 0:ne.text)||(ne==null?void 0:ne.label)||(ne==null?void 0:ne.name)||(ne==null?void 0:ne[`${M}_text`])||((B=w(v==null?void 0:v.style).get(ae))==null?void 0:B.label)||ae}function Y(ae,ne,v,M){if(!ae)return;const B=m((ne==null?void 0:ne.style)||p.value)||{},N=M.trim();if(!N)return;const F={...B.colors||{},...o.config.colors||{}};N===M&&v.forEach(H=>{H.color.trim()&&(F[H.id]=H.color)}),ae.setStyle({...B,type:B.type||"polygon",colorAttr:N,opacity:.8,colors:F})}async function Q(){var N,F;s.value=[],i.value=null;const ae=y.value,ne=f.value;if(!ne)return;l.value=!0;const v=await C(ae);V(ae,v);const M=await _(ae,ne),B=Array.isArray(M==null?void 0:M.rows)?M.rows.map((H,he)=>{const G=(H==null?void 0:H.id)??(H==null?void 0:H.value),D=G!=null?String(G):"";if(!D)return null;const U=L(D,H,v,ne),q=Number((H==null?void 0:H.count)??0)||0,ee=$(D,H,v,ne,he);return{id:D,label:U,count:q,color:ee}}).filter(Boolean):[];s.value=B,i.value=((N=M==null?void 0:M.field)==null?void 0:N.label)||((F=M==null?void 0:M.field)==null?void 0:F.name)||null,Y(d.value,v,B,ne),l.value=!1}e.watch(()=>[y.value,f.value],()=>{Q()},{immediate:!0});const j=e.computed(()=>"Набори даних"),te=e.computed(()=>s.value.reduce((ae,ne)=>ae+ne.count,0)),de=e.computed(()=>{var v;const ae=f.value;return((v=h.value.find(M=>M.id===ae))==null?void 0:v.label)||null||i.value||ae||null});function be(ae){return te.value?`${(ae/te.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var ae,ne;(ne=(ae=d.value)==null?void 0:ae.remove)==null||ne.call(ae)}),(ae,ne)=>r.value?(e.openBlock(),e.createElementBlock("div",zf,[e.createElementVNode("div",If,[e.createElementVNode("div",null,[e.createElementVNode("h2",Rf,e.toDisplayString(j.value),1),de.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",jf,e.toDisplayString(de.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Of,[b.value?(e.openBlock(),e.createBlock(ao,{key:0,class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",count:x.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:ne[1]||(ne[1]=v=>r.value=!1)},[...ne[3]||(ne[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",Uf,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",qf,[e.createElementVNode("div",Hf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.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":ne[2]||(ne[2]=M=>g.value=M)},null,8,Wf),[[e.vModelRadio,g.value]]),e.createElementVNode("span",null,e.toDisplayString(v.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Yf,"Завантаження…")):s.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Zf,e.toDisplayString(te.value),1),e.createElementVNode("ul",Kf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,v=>(e.openBlock(),e.createElementBlock("li",{key:v.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Xf,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:v.color})},null,4),e.createElementVNode("span",Jf,e.toDisplayString(v.label),1)]),e.createElementVNode("div",Qf,[e.createElementVNode("span",em,e.toDisplayString(v.count),1),e.createElementVNode("span",tm,e.toDisplayString(be(v.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Gf,"Дані відсутні"))])])):(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:ne[0]||(ne[0]=v=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),nm=["title"],om={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"},rm=["onClick"],lm=["placeholder"],am={class:"absolute inset-y-0 right-2 flex items-center gap-1"},sm={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},im={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},cm={class:"max-h-[60vh] overflow-auto"},dm={key:0,class:"divide-y divide-gray-100"},um=["onClick"],fm={key:1,class:"px-3 py-3 text-xs text-gray-500"},Pl="mapSearchAddressHistory",uo="search-marker-source",ir="search-marker-layer",$n="search-geom-source",Sn="search-geom-layer-fill",fo="search-geom-layer-line",mm=12,pm="https://data.softpro.ua/api-user/gis-url-proxy",gm="https://data.softpro.ua/api/parcel",ym="https://nominatim.openstreetmap.org/search",zl=Fe(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(A,W){if(typeof document>"u")return;let J=null;const xe=8,Ve=()=>{const se=String((W==null?void 0:W.value)??"");if(!se)return;J=document.createElement("div"),J.textContent=se,Object.assign(J.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(J);const re=A.getBoundingClientRect();J.style.left=`${re.right+window.scrollX+xe}px`,J.style.top=`${re.top+window.scrollY+(re.height-J.offsetHeight)/2}px`},I=()=>{J!=null&&J.parentNode&&J.parentNode.removeChild(J),J=null};A.addEventListener("mouseenter",Ve),A.addEventListener("mouseleave",I),Object.assign(A,{tooltipRightHandlers:{show:Ve,hide:I}})},unmounted(A){if(typeof document>"u")return;const W=A.tooltipRightHandlers;W&&(A.removeEventListener("mouseenter",W.show),A.removeEventListener("mouseleave",W.hide))}},o=t,r=Ke(),l=e.getCurrentInstance();function s(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function i(){var xe,Ve,I;const A=(xe=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:xe.$settings,W=(Ve=A==null?void 0:A.map)==null?void 0:Ve.searchViewbox;if(W)return W;const J=s();return(I=J==null?void 0:J.map)==null?void 0:I.searchViewbox}function d(){var Ve,I,se;const A=(Ve=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:Ve.$settings,W=(I=A==null?void 0:A.map)==null?void 0:I.addressSuggest;if(typeof W=="string"&&W.trim())return W.trim();const J=s(),xe=(se=J==null?void 0:J.map)==null?void 0:se.addressSuggest;if(typeof xe=="string"&&xe.trim())return xe.trim()}const u=!!d(),c=!!i(),p=e.computed(()=>{const A=["xy","parcel"];return u&&A.push("address"),c&&A.push("nominatim"),A}),a=e.computed(()=>{var J,xe;const A=p.value,W=(xe=(J=o.config)==null?void 0:J.tools)==null?void 0:xe.filter(Ve=>A.includes(Ve));return W&&W.length?W:A}),g=e.computed(()=>{var A,W;return((W=(A=o.config)==null?void 0:A.placeholder)==null?void 0:W.trim())||"Пошук…"}),m=e.ref(a.value[0]);e.watch(a,A=>{A.includes(m.value)||(m.value=A[0])});const y=e.ref(""),k=e.ref(!1),h=e.ref(null),f=e.ref(null),b=e.ref(null),x=e.ref(null),C=e.ref([]),V=e.ref(null),_=e.ref(!1),w=e.ref([]),$=e.computed(()=>(m.value==="address"||m.value==="nominatim")&&_.value),L=e.computed(()=>{var A;return((A=o.config)==null?void 0:A.addressDebounceMs)??1e3});let Y=null;const Q=e.ref(!1),j=e.computed(()=>y.value.trim().length>0?C.value:w.value),te=e.computed(()=>y.value.trim().length?`Знайдено ${C.value.length}`:"Історія пошуку"),de=e.computed(()=>y.value.trim().length?"Нічого не знайдено":"Історія порожня");function be(){var A,W;if(typeof window>"u")return[];try{const J=(W=(A=window.localStorage)==null?void 0:A.getItem)==null?void 0:W.call(A,Pl);if(!J)return[];const xe=JSON.parse(J);return Array.isArray(xe)?xe:[]}catch{return[]}}function ae(A){var W,J;typeof window>"u"||(J=(W=window.localStorage)==null?void 0:W.setItem)==null||J.call(W,Pl,JSON.stringify(A))}function ne(A){const J=[A,...w.value.filter(xe=>xe.id!==A.id)].slice(0,10);w.value=J,ae(J)}function v(){var W;const A=(W=r.map)==null?void 0:W.value;A&&(A.getLayer(ir)&&A.removeLayer(ir),A.getSource(uo)&&A.removeSource(uo))}function M(){var W;const A=(W=r.map)==null?void 0:W.value;A&&(A.getLayer(Sn)&&A.removeLayer(Sn),A.getLayer(fo)&&A.removeLayer(fo),A.getSource($n)&&A.removeSource($n))}function B(A){var Ve,I,se,re;if(!((Ve=o.config)!=null&&Ve.showMarker)||!A)return;const W=(I=r.map)==null?void 0:I.value;if(!W)return;M(),F();const J={type:"Feature",geometry:A,properties:{}};W.addSource($n,{type:"geojson",data:J});const xe=((se=o.config)==null?void 0:se.geometryColor)||((re=o.config)==null?void 0:re.markerColor)||"#3B82F6";W.addLayer({id:Sn,type:"fill",source:$n,paint:{"fill-color":xe,"fill-opacity":.3}}),W.addLayer({id:fo,type:"line",source:$n,paint:{"line-color":xe,"line-width":1,"line-opacity":1}}),H(W)}let N=null;function F(){N&&(cancelAnimationFrame(N),N=null)}function H(A){const J=performance.now();function xe(Ve){if(!A.getLayer(Sn))return;const se=(Ve-J)%1200/1200,re=Math.sin(se*Math.PI),Ne=.2+re*.3,Se=1+re*1;A.setPaintProperty(Sn,"fill-opacity",Ne),A.setPaintProperty(fo,"line-width",Se),N=requestAnimationFrame(xe)}N=requestAnimationFrame(xe)}function he(A,W){var Ve,I,se;if(!((Ve=o.config)!=null&&Ve.showMarker))return;v(),M();const J=(I=r.map)==null?void 0:I.value;if(!J)return;if(W){B(W);return}const xe=((se=o.config)==null?void 0:se.markerColor)||"#3B82F6";J.addSource(uo,{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:[A.lng,A.lat]},properties:{}}}),J.addLayer({id:ir,type:"circle",source:uo,paint:{"circle-radius":7,"circle-color":xe,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}})}const G=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function D(){var I;if(!x.value)return;const A=x.value.getBoundingClientRect(),W=(I=b.value)==null?void 0:I.getBoundingClientRect(),J=(W==null?void 0:W.width)??A.width,xe=((W==null?void 0:W.left)??A.left)+window.scrollX,Ve=A.bottom+window.scrollY+mm;G.left=`${xe}px`,G.top=`${Ve}px`,G.width=`${J}px`,G.display="block"}const U=()=>{$.value&&D()};function q(){Y&&(clearTimeout(Y),Y=null)}e.watch(m,()=>{y.value="",k.value=!1,C.value=[],_.value=!1,q(),Q.value=!1,v(),M()}),e.watch($,A=>{A?e.nextTick(()=>{D()}):G.display="none"}),e.watch(y,A=>{if(m.value!=="address"&&m.value!=="nominatim"){C.value=[],q();return}if(!A.trim()){C.value=[],_.value=w.value.length>0,q();return}q(),_.value=!0,Y=window.setTimeout(()=>{Re(A).catch(W=>{const J=(W==null?void 0:W.message)||"Помилка пошуку адреси";Ce.notify({type:"error",title:"Пошук адреси",message:J})})},L.value)});function ee(A){var xe;const W=[];f.value&&W.push(f.value),A instanceof HTMLElement&&W.push(A);const J=(xe=h.value)==null?void 0:xe.querySelectorAll("li");J==null||J.forEach(Ve=>{W.push(Ve)}),W.forEach(Ve=>{Ve.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function z(A){k.value&&ee(A.target),k.value=!k.value}function oe(A,W){ee(W==null?void 0:W.target),m.value=A}function ye(){y.value="",C.value=[],_.value=!1,Q.value=!1,v(),M()}function we(A){const W=A.target;if(k.value){const J=h.value;J&&!J.contains(W)&&(ee(W),k.value=!1)}if($.value){const J=V.value,xe=x.value;J&&!J.contains(W)&&(!xe||!xe.contains(W))&&(_.value=!1)}}e.onMounted(()=>{w.value=be(),window.addEventListener("click",we,!0),window.addEventListener("scroll",U,!0),window.addEventListener("resize",U)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",we,!0),window.removeEventListener("scroll",U,!0),window.removeEventListener("resize",U),q(),v(),M()});function T(A){return A==="xy"?"Координати":A==="parcel"?"Кадастр":A==="nominatim"?"Nominatim":"Адресний"}function X(A){switch(A){case"xy":return"Пошук за географічними координатами. Введіть широту і довготу через пробіл або кому (lat lng або lng lat).";case"parcel":return"Пошук земельної ділянки за кадастровим номером у форматі 0000000000:00:000:0000 з відображенням меж ділянки на карті.";case"nominatim":return"Пошук адрес та обʼєктів через Nominatim з обмеженням у межах карти.";case"address":return"Пошук адрес через локальний сервіс addressSuggest (швидкі підказки з вашого геопорталу).";default:return""}}function fe(A){const W=A.replace(/[,]+/g," ").trim();if(!W)return null;const J=W.split(/\s+/).filter(Boolean);if(J.length<2)return null;const xe=J.slice(0,2).map(Number);if(!xe.every(Oe=>Number.isFinite(Oe)))return null;let[Ve,I]=xe,se=Ve,re=I;const Ne=Oe=>Math.abs(Oe)<=90,Se=Oe=>Math.abs(Oe)<=180;if(!Ne(se)||!Se(re))if(Ne(re)&&Se(se))se=I,re=Ve;else return null;return{lat:se,lng:re}}function ie(A){return((A==null?void 0:A.items)||[]).map((J,xe)=>{var Ve,I,se;return{id:String((J==null?void 0:J.id)??xe),title:(J==null?void 0:J.title)||((Ve=J==null?void 0:J.address)==null?void 0:Ve.label)||"Знайдений обʼєкт",lat:Number((I=J==null?void 0:J.position)==null?void 0:I.lat),lng:Number((se=J==null?void 0:J.position)==null?void 0:se.lng)}})}function ce(A){const W=(A==null?void 0:A.result)||(A==null?void 0:A.data)||A;if(!W)return[];const J=W.geom_centroid;if(!J||!Array.isArray(J.coordinates))return[];const[xe,Ve]=J.coordinates;return!Number.isFinite(Ve)||!Number.isFinite(xe)?[]:[{id:"parcel",title:W.cadnum||W.cad_num||"Земельна ділянка",lat:Ve,lng:xe,geom:W.geom||null}]}function pe(A){return(Array.isArray(A==null?void 0:A.features)?A.features:[]).map((J,xe)=>{var Oe,Qe,Xe;const Ve=(Oe=J==null?void 0:J.geometry)==null?void 0:Oe.coordinates,I=Number(Ve==null?void 0:Ve[0]),se=Number(Ve==null?void 0:Ve[1]);if(!Number.isFinite(se)||!Number.isFinite(I))return null;const re=(J==null?void 0:J.properties)||{},Ne=((Qe=re==null?void 0:re.geocoding)==null?void 0:Qe.label)||(re==null?void 0:re.display_name)||(re==null?void 0:re.label)||"Адреса";return{id:String(((Xe=re==null?void 0:re.geocoding)==null?void 0:Xe.place_id)||(re==null?void 0:re.place_id)||xe),title:Ne,lat:se,lng:I}}).filter(J=>!!J)}function K(A){return Number.isFinite(A.lat)&&Number.isFinite(A.lng)}function Z(A){const W=Number(A);return Number.isFinite(W)?W:null}function ke(A){var Ve,I,se,re,Ne,Se;const W=Z(A.lng)??Z(A.lon)??Z(A.longitude)??Z(A.x),J=Z(A.lat)??Z(A.latitude)??Z(A.y);if(W!=null&&J!=null)return{lat:J,lng:W};const xe=((Ve=A==null?void 0:A.geometry)==null?void 0:Ve.coordinates)??((I=A==null?void 0:A.geom_centroid)==null?void 0:I.coordinates)??((se=A==null?void 0:A.centroid)==null?void 0:se.coordinates)??((Ne=(re=A==null?void 0:A.geojson)==null?void 0:re.geometry)==null?void 0:Ne.coordinates)??((Se=A==null?void 0:A.geom)==null?void 0:Se.coordinates);if(Array.isArray(xe)&&xe.length>=2){const Oe=Z(xe[0]),Qe=Z(xe[1]);if(Oe!=null&&Qe!=null)return{lat:Qe,lng:Oe}}return null}function ve(A){return(Array.isArray(A==null?void 0:A.data)?A.data:[]).map((J,xe)=>{const Ve=ke(J),I=String(J.text??J.title??J.label??J.name??J.address??J.display_name??J.id??"Адреса"),se=String(J.id??J.code??J.value??xe);return Ve?{id:se,title:I,...Ve}:{id:se,title:I}}).filter(J=>!!(J!=null&&J.title))}function Ae(A){const W=d();if(!W)return null;if(W.includes(":name"))return W.replace(":name",encodeURIComponent(A));try{const J=new URL(W,window.location.origin);return A.trim()&&J.searchParams.set("q",A),J.toString()}catch{return W}}async function $e(A){const W=Ae(A);if(!W)return[];const J=await fetch(W);if(!J.ok)throw new Error(`HTTP ${J.status}`);const xe=await J.json();return ve(xe)}async function Je(A){const W=new URL(ym);W.searchParams.set("format","geojson"),W.searchParams.set("q",A),W.searchParams.set("addressdetails","1"),W.searchParams.set("bounded","1");const J=i();J&&W.searchParams.set("viewbox",J);const xe=await fetch(W.toString());if(!xe.ok)throw new Error(`HTTP ${xe.status}`);const Ve=await xe.json();return pe(Ve)}async function Re(A){if(C.value=[],q(),m.value==="address"){if(!d()){Ce.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const xe=await $e(A);if(!xe.length){Ce.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}C.value=xe;return}const W=await Je(A);if(!W.length){Ce.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}C.value=W}async function at(A){if(K(A)){P(A),ne(A);return}Ce.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function et(){m.value!=="address"&&m.value!=="nominatim"||y.value.trim().length||w.value.length&&(_.value=!0,e.nextTick(()=>{D()}))}function nt(A){const J=A.replace(/\s+/g,"").split(":");if(console.log(J),J.length!==4)return!1;const xe=[10,2,3,4];return J.every((Ve,I)=>Ve.length===xe[I]&&/^\d+$/.test(Ve))}function P(A){var J,xe;const W=((J=o.config)==null?void 0:J.zoom)??17;(xe=r.flyTo)==null||xe.call(r,{center:[A.lng,A.lat],zoom:W}),he(A,A.geom),Q.value=!0}async function me(){const A=y.value.trim();if(A){if(m.value==="xy"){const W=fe(A);if(!W){Ce.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}P(W);return}if(m.value==="address"||m.value==="nominatim"){try{await Re(A)}catch(W){const J=(W==null?void 0:W.message)||"Помилка пошуку адреси";Ce.notify({type:"error",title:"Пошук адреси",message:J})}return}try{const W=new URL(m.value==="here"?pm:gm);if(m.value==="here")W.searchParams.set("searchtext",A);else{if(!nt(A)){Ce.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}W.searchParams.set("cadnum",A)}const J=await fetch(W.toString());if(!J.ok)throw new Error(`HTTP ${J.status}`);const xe=await J.json(),Ve=m.value==="here"?ie(xe):ce(xe);if(!Ve.length)Ce.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const I=Ve[0];P(I)}}catch(W){const J=(W==null?void 0:W.message)||"Помилка пошуку";Ce.notify({type:"error",title:"Пошук",message:J})}}}return(A,W)=>(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(me,["prevent"])},[a.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:h,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:z},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:f,class:"block w-full truncate",title:T(m.value)},[e.createTextVNode(e.toDisplayString(T(m.value)),1)],8,nm)),[[n,X(m.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":k.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...W[3]||(W[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),k.value?(e.openBlock(),e.createElementBlock("div",om,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,J=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:J,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:xe=>oe(J,xe)},[e.createTextVNode(e.toDisplayString(T(J)),1)],8,rm)),[[n,X(J)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:x,class:"relative flex-1 min-w-[140px]"},[m.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(fl.VsInputMask),{key:0,modelValue:y.value,"onUpdate:modelValue":W[0]||(W[0]=J=>y.value=J),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":W[1]||(W[1]=J=>y.value=J),placeholder:g.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:et},null,42,lm)),[[e.vModelText,y.value,void 0,{trim:!0}]]),e.createElementVNode("div",am,[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:ye},[...W[4]||(W[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),W[5]||(W[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))]),$.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:V,class:"vs-select__options mt-1 bg-white border border-gray-300 rounded-lg shadow-lg text-sm text-gray-900 z-50",style:e.normalizeStyle(G)},[e.createElementVNode("div",sm,[e.createElementVNode("span",im,e.toDisplayString(te.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:W[2]||(W[2]=J=>_.value=!1)}," ✕ ")]),e.createElementVNode("div",cm,[j.value.length?(e.openBlock(),e.createElementBlock("ul",dm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(j.value,J=>(e.openBlock(),e.createElementBlock("li",{key:J.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:xe=>at(J)},e.toDisplayString(J.title),9,um))),128))])):(e.openBlock(),e.createElementBlock("div",fm,e.toDisplayString(de.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-c278e4f1"]]),hm="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",bm="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",xm=Fe(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Ke(),s=e.ref(null),i=e.ref(null),d=e.ref(null),u=e.ref(null);let c=null;function p(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function a(_){if(Array.from(document.styleSheets).some(L=>{var Y;return(Y=L==null?void 0:L.href)==null?void 0:Y.includes(_)}))return;const $=document.createElement("link");$.rel="stylesheet",$.href=_,document.head.appendChild($)}function g(_){return new Promise((w,$)=>{const L=Array.from(document.scripts).find(Q=>Q.src===_);if(L){if(L._loaded)return w();L.addEventListener("load",()=>w()),L.addEventListener("error",()=>$(new Error(`Failed ${_}`)));return}const Y=document.createElement("script");Y.src=_,Y.async=!0,Y.onload=()=>{Y._loaded=!0,w()},Y.onerror=()=>$(new Error(`Failed ${_}`)),document.head.appendChild(Y)})}function m(){var w,$,L;const _=window;return _.MapboxExportControl||((w=_.mapboxgl)==null?void 0:w.MapboxExportControl)||(($=_.mapboxglExport)==null?void 0:$.MapboxExportControl)||((L=_.mapboxglExport)==null?void 0:L.default)||null}function y(){const _=document.createElementNS("http://www.w3.org/2000/svg","svg");return _.setAttribute("xmlns","http://www.w3.org/2000/svg"),_.setAttribute("viewBox","0 0 24 24"),_.setAttribute("width","18"),_.setAttribute("height","18"),_.setAttribute("fill","none"),_.setAttribute("stroke","currentColor"),_.setAttribute("stroke-width","2"),_.setAttribute("stroke-linecap","round"),_.setAttribute("stroke-linejoin","round"),_.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach(($,L)=>{const Y=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries($).forEach(([Q,j])=>{Y.setAttribute(Q,j)}),_.appendChild(Y)}),_}function k(){const _=document.createElement("button");_.id="print-btn",_.type="button",_.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),_.setAttribute("aria-label","Друк карти");const w=y(),$=document.createElement("span");return $.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(" "),$.textContent="Друк карти",$.setAttribute("aria-hidden","true"),_.appendChild(w),_.appendChild($),_.addEventListener("click",L=>{L.stopPropagation(),h()}),u.value=_,_}function h(){if(!d.value)return;d.value.style.display==="block"?b():f()}function f(){var _,w,$;d.value&&(d.value.style.display="block",(_=u.value)==null||_.classList.add("scale-105","shadow-xl"),(w=i.value)==null||w.toggleCrosshair(!0),($=i.value)==null||$.togglePrintableArea(!0),document.addEventListener("click",x))}function b(){var _,w,$;d.value&&(d.value.style.display="none",(_=u.value)==null||_.classList.remove("scale-105","shadow-xl"),(w=i.value)==null||w.toggleCrosshair(!1),($=i.value)==null||$.togglePrintableArea(!1),document.removeEventListener("click",x))}function x(_){const w=s.value;w&&(_.target&&w.contains(_.target)||b())}function C(_){const w={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};_.querySelectorAll("label, option").forEach(L=>{var Q;const Y=(Q=L.textContent)==null?void 0:Q.trim();Y&&w[Y]&&(L.textContent=w[Y])});const $=_.querySelector("button");$&&($.textContent="Друкувати")}function V(_){const w=_.querySelector(".mapboxgl-export-list");if(!w||!s.value)return;d.value=w;const $=_.querySelector("button");if($&&($.style.display="none"),_.style.display="none",!u.value){const Y=k();s.value.appendChild(Y)}w.style.display="none";const L="_printControlBound";if(!w[L]){const Y=Q=>Q.stopPropagation();w.addEventListener("click",Y),w.addEventListener("mousedown",Y),w[L]=!0}s.value.appendChild(w),C(w)}return e.onMounted(async()=>{await(o==null?void 0:o());const _=n.value;if(!_)return;a(hm),p();try{await g(bm)}catch(L){console.warn("[MapPrintControl] load error",L);return}const w=m();if(!w)return;const $=new w({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=$,typeof $.onAdd=="function"){const L=$.onAdd.bind($);$.onAdd=Y=>{const Q=L(Y);return setTimeout(()=>Q&&V(Q),50),Q}}r?r($,"top-right"):_.addControl($,"top-right"),c=L=>{L.key==="Escape"&&b()},document.addEventListener("keyup",c)}),e.onBeforeUnmount(()=>{b(),c&&(document.removeEventListener("keyup",c),c=null);const _=n.value;if(i.value)try{l?l(i.value):_==null||_.removeControl(i.value)}catch{}i.value=null}),(_,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),km=["aria-label"],wm={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"},_m=e.defineComponent({__name:"MapCompareControl",props:{hasCompareOptions:{type:Boolean},isCompareOpen:{type:Boolean}},emits:["toggle"],setup(t){return(n,o)=>t.hasCompareOptions?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",t.isCompareOpen?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок",onClick:o[0]||(o[0]=e.withModifiers(r=>n.$emit("toggle"),["stop"]))},[e.createElementVNode("span",wm,e.toDisplayString(t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок"),1),e.createVNode(e.unref(ge.Columns2),{class:"w-4 h-4"})],10,km)):e.createCommentVNode("",!0)}}),Em={class:"map-center-control"},Cm=["aria-label"],Nm={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"},Yt=Fe(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Ke(),l=e.ref(null),s=e.ref(null),i=e.ref(null),d=e.ref(null),u=Wo(),c=e.computed(()=>{var b;return((b=u.value)==null?void 0:b.map)??null});function p(b){if(Array.isArray(b)&&b.length>=2){const[x,C]=b.slice(0,2).map(V=>Number(V));return Number.isNaN(x)||Number.isNaN(C)?null:[x,C]}if(b&&typeof b=="object"){const x=b,C=x.lng??x.lon??x.long??x.x,V=x.lat??x.y;if(C!=null&&V!=null){const _=Number(C),w=Number(V);if(!Number.isNaN(_)&&!Number.isNaN(w))return[_,w]}}if(typeof b=="string"){const x=b.split(",").map(C=>Number(C.trim()));if(x.length>=2&&x.every(C=>!Number.isNaN(C)))return[x[0],x[1]]}return null}function a(b){const x=p(b);x&&(l.value=x)}function g(b){const x=Number(b);Number.isNaN(x)||(s.value=x)}e.watch(()=>n.center,b=>a(b),{immediate:!0}),e.watch(()=>n.zoom,b=>g(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{i.value=p(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const x=Number(b);d.value=Number.isNaN(x)?null:x},{immediate:!0}),e.watch(()=>{var b;return(b=c.value)==null?void 0:b.center},b=>{a(b)},{immediate:!0}),e.watch(()=>{var b;return(b=c.value)==null?void 0:b.zoom},b=>{g(b)},{immediate:!0});const m=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),y=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),k=e.computed(()=>!!i.value);e.onMounted(async()=>{await(r==null?void 0:r());const b=o.value;if(b){if(!l.value){const x=b.getCenter();l.value=[x.lng,x.lat]}s.value==null&&(s.value=b.getZoom())}});function h(){const b=o.value;if(!b)return;const x=l.value||(()=>{const V=b.getCenter();return[V.lng,V.lat]})(),C=s.value??b.getZoom();b.flyTo({center:x,zoom:C})}function f(){const b=o.value;if(!b||!i.value)return;const x=d.value??s.value??b.getZoom();b.flyTo({center:i.value,zoom:x})}return(b,x)=>(e.openBlock(),e.createElementBlock("div",Em,[k.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(h,["stop"])},[x[0]||(x[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(ge.House),{class:"w-4 h-4"})])),k.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":y.value,onClick:e.withModifiers(f,["stop"])},[e.createElementVNode("span",Nm,e.toDisplayString(m.value),1),e.createVNode(e.unref(ge.MapPin),{class:"w-4 h-4"})],8,Cm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),Vm={class:"map-navigation-control"},Bm=["disabled"],$m=["disabled"],Sm=["disabled"],vm=Fe(e.defineComponent({__name:"MapNavigationControl",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1),l=e.ref(0),s=e.ref(0),i=e.computed(()=>({transform:`scale(${(1+s.value/70).toFixed(5)}) rotateZ(0deg) rotateX(${s.value}deg) rotateZ(${l.value}deg)`}));function d(){var g,m;const a=n.value;a&&(l.value=Number(((g=a.getBearing)==null?void 0:g.call(a))??0),s.value=Number(((m=a.getPitch)==null?void 0:m.call(a))??0))}e.onMounted(async()=>{var g,m,y;await(o==null?void 0:o());const a=n.value;r.value=!!a,d(),(g=a==null?void 0:a.on)==null||g.call(a,"rotate",d),(m=a==null?void 0:a.on)==null||m.call(a,"pitch",d),(y=a==null?void 0:a.on)==null||y.call(a,"load",d)}),e.onBeforeUnmount(()=>{var g,m,y;const a=n.value;(g=a==null?void 0:a.off)==null||g.call(a,"rotate",d),(m=a==null?void 0:a.off)==null||m.call(a,"pitch",d),(y=a==null?void 0:a.off)==null||y.call(a,"load",d)});function u(){const a=n.value;a!=null&&a.zoomIn&&a.zoomIn()}function c(){const a=n.value;a!=null&&a.zoomOut&&a.zoomOut()}function p(){const a=n.value;a!=null&&a.easeTo&&a.easeTo({bearing:0,pitch:0})}return(a,g)=>(e.openBlock(),e.createElementBlock("div",Vm,[e.createElementVNode("button",{type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",disabled:!r.value,"aria-label":"Zoom in",title:"Zoom in",onClick:e.withModifiers(u,["stop"])},[g[0]||(g[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(ge.Plus),{class:"w-4 h-4","stroke-width":2.25})],8,Bm),e.createElementVNode("button",{type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",disabled:!r.value,"aria-label":"Zoom out",title:"Zoom out",onClick:e.withModifiers(c,["stop"])},[g[1]||(g[1]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Мінус зум",-1)),e.createVNode(e.unref(ge.Minus),{class:"w-4 h-4","stroke-width":2.25})],8,$m),e.createElementVNode("button",{type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",disabled:!r.value,"aria-label":"Reset north",title:"Reset north",onClick:e.withModifiers(p,["stop"])},[g[2]||(g[2]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Компас",-1)),e.createVNode(e.unref(ge.Navigation2),{class:"w-4 h-4","stroke-width":2.25,"aria-hidden":"true",style:e.normalizeStyle(i.value)},null,8,["style"])],8,Sm)]))}}),[["__scopeId","data-v-14b11a99"]]),Lm={class:"cursor-coordinates"},Tm={class:"cursor-coordinates__text"},Am=Fe(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Lm,[e.createElementVNode("span",Tm,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),Mm={class:"minimap__wrapper"},mo="minimap-viewport",Fm="minimap-viewport-layer",Dm=Fe(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var x,C,V,_;const n=t,o=((C=(x=e.getCurrentInstance())==null?void 0:x.appContext.config.globalProperties)==null?void 0:C.$settings)||null,r=Wt((V=o==null?void 0:o.map)==null?void 0:V.center)||[30,50],l=e.ref(null),s=e.shallowRef(null),i=(_=n.options)==null?void 0:_.active,d=e.ref(i===void 0?!1:!!i);function u(w,$){return typeof w=="number"&&Number.isFinite(w)?w:$}const c=e.computed(()=>{var Q,j;const w=(Q=n.options)==null?void 0:Q.width,$=(j=n.options)==null?void 0:j.height,L=u(n.width??w,210),Y=u(n.height??$,150);return{width:`${L}px`,height:`${Y}px`}});function p(){var $,L;const w=(L=($=n.mapContext)==null?void 0:$.map)==null?void 0:L.value;if(!w||typeof w.getStyle!="function")return null;try{const Y=w.getStyle();return Y?JSON.parse(JSON.stringify(Y)):null}catch{return null}}let a=null;function g(){var Q;if(typeof window>"u"||s.value||!l.value)return;const w=p(),$=r,L={container:l.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:$,zoom:((Q=n.options)==null?void 0:Q.zoom)??3,interactive:!1,attributionControl:!1},Y={...L,...n.options??{}};Y.container=L.container,s.value=new maplibregl.Map(Y),s.value.on("load",()=>{y(),h()})}function m(){if(!s.value)return;const w=p();w&&(s.value.once("styledata",()=>{y(),h()}),s.value.setStyle(w))}function y(){if(s.value){if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{y(),h()});return}s.value.getSource(mo)||(s.value.addSource(mo,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),s.value.addLayer({id:Fm,type:"fill",source:mo,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function k(){d.value=!d.value,d.value&&e.nextTick(()=>{var w;return(w=s.value)==null?void 0:w.resize()})}function h(){var te,de;const w=(de=(te=n.mapContext)==null?void 0:te.map)==null?void 0:de.value;if(!s.value||!w||!w.getBounds)return;if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{h()});return}const $=w.getBounds();if(!$)return;const L=$.getNorthEast(),Y=$.getSouthWest();if(!L||!Y)return;const Q=[[Y.lng,L.lat],[L.lng,L.lat],[L.lng,Y.lat],[Y.lng,Y.lat],[Y.lng,L.lat]],j=s.value.getSource(mo);if(!j){y();return}j.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[Q]},properties:{}})}function f(){var L;const w=n.mapContext,$=(L=w==null?void 0:w.map)==null?void 0:L.value;!(w!=null&&w.on)||!$||(a==null||a(),a=w.on("move",h),h())}async function b(){const w=n.mapContext;if(w){if(typeof w.ready=="function")try{await w.ready()}catch{return}f()}}return e.onMounted(()=>{g(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var w,$;return($=(w=n.mapContext)==null?void 0:w.map)==null?void 0:$.value},()=>{s.value&&(m(),b())}),e.watch(c,()=>{s.value&&e.nextTick(()=>{var w;return(w=s.value)==null?void 0:w.resize()})}),e.watch(()=>n.options,()=>{var $;a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null);const w=($=n.options)==null?void 0:$.active;typeof w=="boolean"&&(d.value=w),e.nextTick(()=>{g(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null)}),(w,$)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":d.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:k},[e.createVNode(e.unref(ge.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",Mm,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(c.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,d.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Pm={key:0,class:"pointer-events-none absolute inset-0 z-[90]"},zm={class:"pointer-events-auto absolute right-[54px] top-[103px] z-[131] flex items-start gap-2"},Im={class:"compare-panel min-w-[220px] overflow-hidden rounded-[10px]"},Rm={class:"max-h-[260px] overflow-auto pb-1"},jm=["onClick"],Om={class:"mt-1 border-t border-slate-200 p-2"},Um="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.css",Il="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.js",gt="compare-base",yt="compare-base-overlay",qm=Fe(e.defineComponent({__name:"MapCompare",props:{compareBasemaps:{},isCompareOpen:{type:Boolean},selectedBasemapId:{}},emits:["close"],setup(t,{emit:n}){const o=t,r=n,{map:l,ready:s}=Ke(),i=e.ref(null),d=e.ref(null),u=e.ref(null),c=e.ref(!1),p=e.ref(null);p.__layerStoreMode="isolated";const a=e.ref(null),g=e.ref(!1),m=e.ref(!1),y=e.ref(!1);let k=null,h=null,f=null,b=!1,x="";const C=new Map,V=e.computed(()=>o.compareBasemaps||[]);let _=null;function w(){var D;if(typeof window>"u"||(D=window.maplibregl)!=null&&D.Compare)return Promise.resolve();if(!Array.from(document.styleSheets).some(U=>{var q;return!!((q=U==null?void 0:U.href)!=null&&q.includes("maplibre-gl-compare.min.css"))})){const U=document.createElement("link");U.rel="stylesheet",U.href=Um,document.head.appendChild(U)}return _||(_=new Promise((U,q)=>{var oe;if((oe=window.maplibregl)!=null&&oe.Compare){U();return}const ee=Array.from(document.querySelectorAll("script")).find(ye=>ye.src===Il);if(ee){ee.addEventListener("load",()=>U(),{once:!0}),ee.addEventListener("error",()=>q(new Error("Failed to load map compare script")),{once:!0});return}const z=document.createElement("script");z.src=Il,z.async=!0,z.onload=()=>U(),z.onerror=()=>{z.remove(),q(new Error("Failed to load map compare script"))},document.head.appendChild(z)}),_)}function $(){var G,D,U;k==null||k(),k=null,h==null||h(),h=null,f==null||f(),f=null,C.forEach(q=>{var ee;return(ee=q==null?void 0:q.remove)==null?void 0:ee.call(q)}),C.clear(),m.value=!1,y.value=!1,x="",(G=a.value)==null||G.remove(),a.value=null,(U=(D=p.value)==null?void 0:D.remove)==null||U.call(D),p.value=null,g.value=!1}function L(G){try{return JSON.stringify(G??null)}catch{return""}}function Y(G,D){var q;if(!G||!D)return;(Array.isArray((q=G.listImages)==null?void 0:q.call(G))?G.listImages():[]).forEach(ee=>{var oe,ye,we;if(!ee||(oe=D.hasImage)!=null&&oe.call(D,ee))return;const z=(ye=G.getImage)==null?void 0:ye.call(G,ee);if(z)try{(we=D.addImage)==null||we.call(D,ee,z)}catch{}})}function Q(G){var D;try{return((D=G==null?void 0:G.getStyle)==null?void 0:D.call(G))??null}catch{return null}}function j(G){if(G==null)return G;try{return JSON.parse(JSON.stringify(G))}catch{return G}}function te(G){if(!G)return null;try{if(typeof G.serialize=="function"){const D=G.serialize();if((D==null?void 0:D.data)!=null)return D.data;if((D==null?void 0:D.tiles)!=null)return D.tiles}}catch{}return G._data!=null?G._data:G.data!=null?G.data:null}function de(G,D){const U=Q(G),q=(U==null?void 0:U.sources)||{};Object.entries(q).forEach(([ee,z])=>{var we,T;const oe=(we=G==null?void 0:G.getSource)==null?void 0:we.call(G,ee),ye=(T=D==null?void 0:D.getSource)==null?void 0:T.call(D,ee);if(!(!oe||!ye)&&(z==null?void 0:z.type)==="geojson"&&typeof ye.setData=="function"){const X=te(oe);X!=null&&ye.setData(j(X))}})}function be(G,D){return!G||["base","base-overlay",gt,yt].includes(G)?!1:!!(D!=null&&D.opts)}function ae(){const G=p;if(!(G!=null&&G.value)||!g.value)return;const D=qe(void 0,void 0,l);Object.entries(D).forEach(([U,q])=>{var oe;if(!be(U,q))return;const ee=j(q.opts)||{},z=qe(U,void 0,G);if(!z){const ye=qe(U,ee,G);C.set(U,ye);return}C.set(U,z),L(z.opts)!==L(ee)&&((oe=z.refresh)==null||oe.call(z,ee))})}function ne(G){var D;try{const U=(D=G==null?void 0:G.getStyle)==null?void 0:D.call(G);return U?JSON.parse(JSON.stringify(U)):null}catch{return null}}function v(G,D){const U=ne(G)||{version:8,sources:{},layers:[]};if(U.sources||(U.sources={}),U.layers||(U.layers=[]),D!=null&&D.url){U.sources[gt]={type:"raster",tiles:[D.url],tileSize:256};const q=U.layers.find(ee=>ee.id===gt);q?(q.type="raster",q.source=gt,q.layout||(q.layout={}),q.layout.visibility="visible"):U.layers.unshift({id:gt,type:"raster",source:gt})}if(D!=null&&D.overlayUrl){U.sources[yt]={type:"raster",tiles:[D.overlayUrl],tileSize:256};const q=U.layers.find(ee=>ee.id===yt);if(q)q.type="raster",q.source=yt,q.layout||(q.layout={}),q.layout.visibility="visible";else{const ee=U.layers.findIndex(oe=>oe.id===gt),z=ee>=0?ee+1:0;U.layers.splice(z,0,{id:yt,type:"raster",source:yt})}}return U}function M(G){var we,T,X,fe,ie,ce,pe,K,Z,ke,ve,Ae,$e,Je,Re;if(!p.value)return;const D=p.value,U=(we=D.getSource)==null?void 0:we.call(D,gt),q=(T=D.getSource)==null?void 0:T.call(D,yt),ee=!!((X=D.getLayer)!=null&&X.call(D,gt)),z=!!((fe=D.getLayer)!=null&&fe.call(D,yt)),oe=Q(D),ye=(ce=(ie=oe==null?void 0:oe.layers)==null?void 0:ie[0])==null?void 0:ce.id;if(!(G!=null&&G.url)){ee&&((pe=D.setLayoutProperty)==null||pe.call(D,gt,"visibility","none")),z&&((K=D.setLayoutProperty)==null||K.call(D,yt,"visibility","none"));return}ee&&((Z=D.setLayoutProperty)==null||Z.call(D,gt,"visibility","visible")),U!=null&&U.setTiles?U.setTiles([G.url]):U||((ke=D.addSource)==null||ke.call(D,gt,{type:"raster",tiles:[G.url],tileSize:256}),(ve=D.addLayer)==null||ve.call(D,{id:gt,type:"raster",source:gt},ye)),G.overlayUrl?(z&&((Ae=D.setLayoutProperty)==null||Ae.call(D,yt,"visibility","visible")),q!=null&&q.setTiles?q.setTiles([G.overlayUrl]):q||(($e=D.addSource)==null||$e.call(D,yt,{type:"raster",tiles:[G.overlayUrl],tileSize:256}),(Je=D.addLayer)==null||Je.call(D,{id:yt,type:"raster",source:yt}))):z&&((Re=D.setLayoutProperty)==null||Re.call(D,yt,"visibility","none")),(!U||typeof U.setTiles!="function")&&D.setStyle(v(Q(D),G))}function B(){if(!p.value||!g.value)return;const G=V.value.find(D=>D.id===u.value);M(G)}async function N(){const G=l.value,D=p.value;if(!G||!D||!g.value)return;const U=V.value.find(oe=>oe.id===u.value),q=Q(G),ee=v(q,U),z=L(ee);!z||z===x||(x=z,D.setStyle(ee),Y(G,D),de(G,D),y.value=!1,await new Promise(oe=>{var ye,we;if((ye=D.isStyleLoaded)!=null&&ye.call(D)){oe();return}(we=D.once)==null||we.call(D,"load",()=>oe())}),ae())}function F(){y.value=!0,!b&&(b=!0,queueMicrotask(()=>{b=!1,N()}))}function H(){y.value&&N()}async function he(){var T,X,fe,ie,ce,pe,K,Z;if(!o.isCompareOpen||a.value||p.value||(await(s==null?void 0:s()),await e.nextTick(),!l.value||!i.value||!d.value))return;await w();const G=l.value,D=V.value.find(ke=>ke.id===u.value),U=v({},D),q=(T=G.getCenter)==null?void 0:T.call(G),ee=(X=G.getZoom)==null?void 0:X.call(G),z=((fe=G.getBearing)==null?void 0:fe.call(G))??0,oe=((ie=G.getPitch)==null?void 0:ie.call(G))??0;p.value=new maplibregl.Map({container:d.value,style:U,center:q,zoom:ee,bearing:z,pitch:oe,attributionControl:!1,interactive:!1}),g.value=!1,await new Promise(ke=>{var ve,Ae;if(!p.value){ke();return}if((Ae=(ve=p.value).isStyleLoaded)!=null&&Ae.call(ve)){g.value=!0,H(),ke();return}p.value.once("load",()=>{g.value=!0,H(),ke()})});const ye=(ce=window.maplibregl)==null?void 0:ce.Compare;if(!ye){$(),r("close");return}a.value=new ye(G,p.value,"#comparison-container",{mousemove:!1});const we=()=>{o.isCompareOpen&&F()};G.on("styledata",we),G.on("sourcedata",we),G.on("idle",we),k=()=>G.off("styledata",we),h=()=>G.off("sourcedata",we),f=()=>G.off("idle",we),await N(),Y(G,p.value),de(G,p.value),(pe=G.resize)==null||pe.call(G),(Z=(K=p.value).resize)==null||Z.call(K)}return e.watch(()=>o.isCompareOpen,async G=>{if(G){await he();return}$()}),e.watch(()=>l.value,async(G,D)=>{!o.isCompareOpen||!G||G===D||($(),await he())}),e.watch(()=>[o.isCompareOpen,V.value,o.selectedBasemapId],([G,D,U])=>{var ee;if(!G||u.value&&D.some(z=>z.id===u.value))return;const q=D.find(z=>z.id!==U);u.value=(q==null?void 0:q.id)||((ee=D[0])==null?void 0:ee.id)||null},{immediate:!0,deep:!0}),e.watch(()=>u.value,()=>{var G,D,U,q;if(p.value){if((D=(G=p.value).isStyleLoaded)!=null&&D.call(G)){g.value=!0,B();return}(q=(U=p.value).once)==null||q.call(U,"load",()=>{g.value=!0,B()})}}),e.onBeforeUnmount(()=>{$()}),(G,D)=>t.isCompareOpen?(e.openBlock(),e.createElementBlock("div",Pm,[e.createElementVNode("div",zm,[e.createElementVNode("div",Im,[e.createElementVNode("button",{type:"button",class:"compare-panel__head",onClick:D[0]||(D[0]=U=>c.value=!c.value)},[D[3]||(D[3]=e.createStaticVNode('<span class="compare-panel__head-left" data-v-06bedfe8><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-70" data-v-06bedfe8><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z" data-v-06bedfe8></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65" data-v-06bedfe8></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65" data-v-06bedfe8></path></svg><span class="text-[12px] font-semibold text-slate-900" data-v-06bedfe8>Підложки для порівняння</span></span>',1)),(e.openBlock(),e.createElementBlock("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:e.normalizeClass(["compare-panel__chevron shrink-0 text-slate-400",c.value?"compare-panel__chevron--collapsed":""])},[...D[2]||(D[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)])],2))]),e.withDirectives(e.createElementVNode("div",null,[D[5]||(D[5]=e.createElementVNode("div",{class:"px-3 pb-1 pt-2 text-[10px] font-bold uppercase tracking-[0.07em] text-slate-400"}," Базова карта ",-1)),e.createElementVNode("div",Rm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,U=>(e.openBlock(),e.createElementBlock("button",{key:U.id,type:"button",class:e.normalizeClass(["compare-panel__item",U.id===u.value?"compare-panel__item--active":""]),onClick:q=>u.value=U.id},[e.createElementVNode("span",{class:e.normalizeClass(["compare-panel__radio",U.id===u.value?"compare-panel__radio--active":""])},null,2),e.createElementVNode("span",{class:e.normalizeClass(["text-[12px]",U.id===u.value?"font-semibold text-slate-900":"font-normal text-slate-600"])},e.toDisplayString(U.title),3)],10,jm))),128))]),e.createElementVNode("div",Om,[e.createElementVNode("button",{type:"button",class:"flex h-[30px] w-full items-center justify-center gap-1.5 rounded-[7px] border border-slate-200 bg-white text-[12px] font-medium text-slate-700 transition-colors hover:bg-slate-50",onClick:D[1]||(D[1]=U=>r("close"))},[...D[4]||(D[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1),e.createTextVNode(" Закрити ",-1)])])])],512),[[e.vShow,!c.value]])])]),e.createElementVNode("div",{id:"comparison-container",ref_key:"containerRef",ref:i,class:"absolute inset-0 overflow-hidden z-[90]"},[e.createElementVNode("div",{id:"after",ref_key:"afterRef",ref:d,class:"map-compare"},null,512)],512)])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-06bedfe8"]]);function cr(t){return[t.lng,t.lat]}function Rl(t){if(!Array.isArray(t)||t.length<2)return null;const n=Number(t[0]),o=Number(t[1]);return Number.isFinite(n)&&Number.isFinite(o)?[n,o]:null}function dr(t){if(!t||typeof t!="object")return null;const n=t;if(n.type==="LineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Rl(r)).filter(r=>!!r);return o.length>=2?{type:"LineString",coordinates:o}:null}if(n.type==="MultiLineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Array.isArray(r)?r.map(l=>Rl(l)).filter(l=>!!l):[]).filter(r=>r.length>=2);return o.length?o.length===1?{type:"LineString",coordinates:o[0]}:{type:"MultiLineString",coordinates:o}:null}return null}function Hm(t){return t?t.type==="LineString"?t.coordinates:t.coordinates.flatMap(n=>n):[]}function Wm(t,n){for(const o of n){const r=t[t.length-1];r&&r[0]===o[0]&&r[1]===o[1]||t.push(o)}}function Ym(t){const n=[];for(const o of t)Wm(n,Hm(o.geometry));return n.length>=2?{type:"LineString",coordinates:n}:null}function ur(t){const n=Math.max(0,t);return n>=1e3?`${(n/1e3).toFixed(1)} км`:`${Math.round(n)} м`}function jl(t){const n=Math.max(0,Math.round(t));if(n<60)return`${n} с`;const o=Math.floor(n/60);if(o<60)return`${o} хв`;const r=Math.floor(o/60),l=o%60;return l>0?`${r} год ${l} хв`:`${r} год`}function Gm(t){const n=Number(t);return Number.isFinite(n)&&n>0?n:null}function Zm(t){const n=Number((t==null?void 0:t.totalDistanceMeters)??0);if(Number.isFinite(n)&&n>0)return ur(n);const o=(t==null?void 0:t.distance)??"",r=Number(o);if(Number.isFinite(r)&&r>0)return ur(r);const l=String(o).trim();return l||""}function Km(t){const n=Number((t==null?void 0:t.time_for_route)??0);if(Number.isFinite(n)&&n>0)return jl(n);const o=(t==null?void 0:t.time_for_route)??"",r=String(o).trim();return r||""}function Xm(t){const n=Gm(t);return n!=null?jl(n):""}function Jm(t){const n=Number(t);return Number.isFinite(n)&&n>0?ur(n):String(t??"").trim()}function Qm(t){return t?{title:t.title,distanceText:"",durationText:"",icon:t.icon,tone:t.tone,geometry:null}:null}function po(t){const n=t.toLowerCase();return n.includes("left")||n.includes("slight left")||n.includes("sharp left")}function go(t){const n=t.toLowerCase();return n.includes("right")||n.includes("slight right")||n.includes("sharp right")}function ep(t,n){const o=t.toLowerCase(),r=n.toLowerCase();return o.includes("depart")?"depart":o.includes("arriv")?"arrive":o.includes("roundabout")||r.includes("uturn")||r.includes("u-turn")?"roundabout":po(r)||o.includes("left")?"left":go(r)||o.includes("right")?"right":o.includes("straight")||r.includes("straight")||o.includes("merge")||o.includes("new name")?"straight":"unknown"}function tp(t){const n=t.maneuver&&typeof t.maneuver=="object"?t.maneuver:{},o=String(n.type??t.type??"").trim(),r=String(n.modifier??t.modifier??"").trim(),l=String(t.name??t.ref??"").trim(),s=String(t.text??t.instruction??t.description??"").trim();if(s)return{title:s,icon:ep(o,r),tone:o.toLowerCase().includes("arriv")?"end":o.toLowerCase().includes("depart")?"start":"neutral"};const i=o.toLowerCase(),d=r.toLowerCase(),u=l?` на ${l}`:"",c=l?` по ${l}`:"",p=po(d)?"ліворуч":go(d)?"праворуч":"",a=p?` ${p}`:"";return i.includes("depart")?{title:p?l?`Виїдьте${a}${u}`:`Виїдьте${a}`:l?`Виїдьте${u}`:"Почніть рух",icon:"depart",tone:"start"}:i.includes("arriv")?{title:"Ви прибули до пункту призначення",icon:"arrive",tone:"end"}:i.includes("roundabout")?{title:l?`На кільці${c}`:"На кільці",icon:"roundabout",tone:"neutral"}:d.includes("uturn")||d.includes("u-turn")?{title:l?`Розверніться${u}`:"Розверніться",icon:"roundabout",tone:"neutral"}:i.includes("merge")?{title:l?`Злийтеся${c}`:"Злийтеся з потоком",icon:"straight",tone:"neutral"}:i.includes("fork")?po(d)?{title:l?`На розвилці тримайтеся ліворуч${u}`:"На розвилці тримайтеся ліворуч",icon:"left",tone:"neutral"}:go(d)?{title:l?`На розвилці тримайтеся праворуч${u}`:"На розвилці тримайтеся праворуч",icon:"right",tone:"neutral"}:{title:l?`На розвилці${u}`:"На розвилці",icon:"straight",tone:"neutral"}:i.includes("new name")?{title:l?`Продовжуйте по ${l}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:i.includes("end of road")?po(d)?{title:l?`У кінці дороги поверніть ліворуч${u}`:"У кінці дороги поверніть ліворуч",icon:"left",tone:"neutral"}:go(d)?{title:l?`У кінці дороги поверніть праворуч${u}`:"У кінці дороги поверніть праворуч",icon:"right",tone:"neutral"}:{title:l?`У кінці дороги${u}`:"У кінці дороги",icon:"straight",tone:"neutral"}:i.includes("turn")&&d.includes("left")?{title:l?`Поверніть ліворуч${u}`:"Поверніть ліворуч",icon:"left",tone:"neutral"}:i.includes("turn")&&d.includes("right")?{title:l?`Поверніть праворуч${u}`:"Поверніть праворуч",icon:"right",tone:"neutral"}:i.includes("straight")||d.includes("straight")?{title:l?`Продовжуйте${c}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:{title:l?`Рухайтесь${c}`:"Рухайтесь далі",icon:"unknown",tone:"neutral"}}function np(t){return(Array.isArray(t==null?void 0:t.instructions)?t.instructions:Array.isArray(t==null?void 0:t.instruction)?t.instruction:Array.isArray(t==null?void 0:t.legs)?t.legs.flatMap(o=>{const r=o&&typeof o=="object"?o:null;return Array.isArray(r==null?void 0:r.steps)?r.steps:[]}):[]).map(o=>{if(!o||typeof o!="object")return null;const r=o,l=r.maneuver&&typeof r.maneuver=="object"?r.maneuver:{},s=tp(r),i=dr(r.geometry??null);return{title:s.title,distanceText:Jm(r.distance??r.length??l.distance??0),durationText:Xm(r.duration??r.time??r.duration_seconds??r.durationSeconds??0),icon:s.icon,tone:s.tone,geometry:i}}).filter(o=>!!o)}function op(t,n){const o=cr(t[0].coords),r=cr(t[t.length-1].coords),l=new URLSearchParams({from:`${o[0]},${o[1]}`,to:`${r[0]},${r[1]}`}),s=String((n==null?void 0:n.mode)??"").trim();if(s&&l.set("mode",s),t.length>2){const i=t.slice(1,-1).map(d=>{const[u,c]=cr(d.coords);return`${u},${c}`}).join(";");i&&l.set("via",i)}return l}async function rp(t,n){const o=await fetch(`/api/routes?${op(t,n).toString()}`,{credentials:"include"});if(!o.ok)throw new Error(`Route API returned ${o.status}`);return await o.json()}async function lp(t,n){if(t.length<2)return{geometry:null,source:"api",distanceText:"",durationText:"",durationSeconds:null,instructions:[],note:null};const o=await rp(t,n),r=Array.isArray(o)?o[0]:Array.isArray(o==null?void 0:o.routes)?o.routes[0]:o!=null&&o.route&&typeof o.route=="object"?o.route:o,l=np(r),s=Number((r==null?void 0:r.time_for_route)??(o==null?void 0:o.time_for_route)??0),i=Ym(l)??dr((r==null?void 0:r.geom)??(r==null?void 0:r.geom_simplify)??(r==null?void 0:r.geometry)??null)??dr((o==null?void 0:o.geom)??(o==null?void 0:o.geom_simplify)??(o==null?void 0:o.geometry)??null);return{geometry:i,source:"api",distanceText:Zm(r),durationText:Km(r),durationSeconds:Number.isFinite(s)?s:null,startInstruction:Qm(l[0]),instructions:l,note:i?null:"Сервер маршруту не повернув геометрію."}}const ap={class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex-shrink-0 overflow-hidden pointer-events-auto w-72"},sp={class:"px-4 pt-4 pb-3"},ip={class:"flex items-center justify-between gap-2 mb-3"},cp={class:"flex items-center gap-2 min-w-0"},dp={class:"w-7 h-7 bg-blue-500 rounded-xl flex items-center justify-center flex-shrink-0"},up={class:"flex items-center gap-1.5 flex-shrink-0"},fp={key:0,class:"flex items-center gap-1 px-2 py-1 bg-blue-50 rounded-lg border border-blue-100 animate-fade-in"},mp={class:"text-xs font-bold text-blue-700 tabular-nums"},pp={class:"relative flex flex-col gap-2"},gp={class:"relative"},yp={class:"flex items-center justify-center relative z-10"},hp=["disabled"],bp={class:"relative"},xp={class:"flex items-stretch gap-0.5 rounded-xl border p-0.5 bg-gray-100 border-gray-200"},kp=["aria-label","aria-pressed","onClick"],wp={class:"text-[9px] font-semibold leading-none tabular-nums text-blue-500"},_p=["aria-label","aria-pressed"],Ep={key:0,class:"text-xs text-gray-500"},Cp={key:1,class:"text-xs text-rose-600"},Np={key:2,class:"text-xs text-amber-700"},Vp={class:"px-4 pb-4 flex gap-2"},Bp=["disabled"],$p={key:0,class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex min-h-0 h-auto max-h-[250px] flex-[1_1_auto] flex-col overflow-hidden pointer-events-auto animate-slide-up"},Sp={class:"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 flex-shrink-0"},vp={class:"text-xs text-gray-400"},Lp={class:"min-h-0 flex-1 overflow-y-auto overflow-x-hidden pb-1 scrollbar-thin"},Tp={class:"min-h-0 py-1 animate-fade-in"},Ap={class:"flex flex-col gap-0.5"},Mp=["onMouseenter"],Fp={class:"flex-1 min-w-0"},Dp={class:"flex items-start justify-between gap-2"},Pp={class:"text-sm leading-snug font-medium text-gray-700"},zp={key:0,class:"text-xs flex-shrink-0 font-semibold mt-0.5 text-gray-400"},Ip={key:0,class:"text-xs mt-0.5 text-gray-400"},Rp=e.defineComponent({name:"RoutePanel",__name:"index",emits:["close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"car",label:"Автомобіль",icon:ge.Car,factor:1},{id:"walk",label:"Пішохід",icon:ge.PersonStanding,factor:6.5},{id:"bike",label:"Велосипед",icon:ge.Bike,factor:2.2},{id:"transit",label:"Громадський транспорт",icon:ge.Bus,factor:1.8},{id:"flight",label:"Авіарейс",icon:ge.PlaneTakeoff,factor:.45}],s=e.ref([]),i=e.ref(""),d=e.ref(""),u=e.ref("car"),c=e.ref(!1),p=e.ref(""),a=e.ref(""),g=e.ref(""),m=e.ref(null),y=e.ref(null),k=e.ref([]),h=e.ref(null),f=e.ref(null),b=e.ref(null),x=e.ref(null),C=e.ref(null);let V=null;const _=e.computed(()=>{if(C.value!==null)return{height:`${C.value}px`,maxHeight:`${C.value}px`}});let w=1,$=0;const L=e.computed(()=>s.value.length>=2),Y=e.computed(()=>{const ie=[];return y.value&&ie.push(y.value),ie.push(...k.value),ie}),Q=e.computed(()=>Y.value.length);function j(ie){return ie?`${ie.coords.lng.toFixed(6)}, ${ie.coords.lat.toFixed(6)}`:""}function te(){i.value=j(s.value[0]),d.value=j(s.value[1])}function de(){return s.value.map(ie=>({id:ie.id,coords:{...ie.coords}}))}function be(){r("points-change",de())}function ae(ie){r("instruction-hover",ie)}function ne(ie){r("route-change",ie?{geometry:ie.geometry,source:ie.source,distanceText:ie.distanceText,durationText:ie.durationText,note:ie.note}:null)}function v({loading:ie=!1}={}){f.value=null,a.value="",g.value="",m.value=null,y.value=null,k.value=[],h.value=null,p.value="",c.value=ie,b.value=null,ae(null),ne(null)}function M(){const ie=w;return w+=1,ie}function B(ie){const ce=ie.replace(/[^\d.,+\-\s]/g," ").match(/-?\d+(?:\.\d+)?/g);if(!ce||ce.length<2)return null;const pe=Number(ce[0]),K=Number(ce[1]);return!Number.isFinite(pe)||!Number.isFinite(K)||Math.abs(K)>90||Math.abs(pe)>180?null:{lat:K,lng:pe}}function N(ie,ce){var K,Z;const pe=s.value.slice(0,2);ie===0?pe[0]={id:((K=pe[0])==null?void 0:K.id)??M(),coords:{lat:ce.lat,lng:ce.lng}}:pe[0]?pe[1]={id:((Z=pe[1])==null?void 0:Z.id)??M(),coords:{lat:ce.lat,lng:ce.lng}}:pe[0]={id:M(),coords:{lat:ce.lat,lng:ce.lng}},s.value=pe.filter(Boolean).slice(0,2),te(),be(),v()}function F(ie){s.value.length===0?s.value=[{id:M(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value.length===1?s.value=[s.value[0],{id:M(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value=[s.value[0],{id:s.value[1].id,coords:{lat:ie.lat,lng:ie.lng}}],te(),be(),v()}function H(ie){ie===0?s.value=s.value.length>1?[s.value[1]]:[]:s.value=s.value.slice(0,1),te(),be(),v()}function he(){s.value.length<2||(s.value=[s.value[1],s.value[0]],te(),be(),v())}function G(ie){const ce=ie===0?i.value:d.value,pe=B(ce);if(!pe){te();return}N(ie,pe)}async function D(){if(s.value.length<2){v();return}const ie=++$;c.value=!0,p.value="";const ce=de();try{const pe=await lp(ce,{mode:u.value});if(ie!==$)return;f.value=pe.geometry,a.value=pe.distanceText,g.value=pe.durationText,m.value=pe.durationSeconds,y.value=pe.startInstruction,k.value=pe.instructions,h.value=pe.note,c.value=!1,b.value=null,ae(null),ne(pe)}catch(pe){if(ie!==$)return;c.value=!1,p.value=pe instanceof Error?pe.message:"Не вдалося побудувати маршрут",h.value=null,f.value=null,y.value=null,b.value=null,ae(null),ne(null)}}const U=ie=>{const ce=(ie??[]).map(pe=>({id:pe.id??M(),coords:{...pe.coords}}));s.value=ce.slice(0,2),w=s.value.length?Math.max(...s.value.map(pe=>pe.id))+1:1,te(),be(),v()};function q(ie){var K;const ce=m.value;if(!ce||!Number.isFinite(ce))return ie==="car"&&g.value||"—";const pe=((K=l.find(Z=>Z.id===ie))==null?void 0:K.factor)??1;return we(ce*pe)}function ee(ie){switch(ie){case"depart":return ge.Navigation;case"arrive":return ge.MapPin;case"left":return ge.ArrowLeft;case"right":return ge.ArrowRight;case"straight":return ge.ArrowUp;case"roundabout":return ge.RotateCcw;default:return ge.Route}}function z(ie){return ie==="start"?{icon:"bg-emerald-50 text-emerald-600"}:ie==="end"?{icon:"bg-red-50 text-red-500"}:{icon:"bg-gray-100 text-gray-500"}}function oe(ie){var ce;b.value=ie,ae(((ce=k.value[ie-1])==null?void 0:ce.geometry)??null)}function ye(){b.value=null,ae(null)}function we(ie){const ce=Math.max(0,Math.round(ie));if(ce<60)return`${ce} с`;const pe=Math.floor(ce/60);if(pe<60)return`${pe} хв`;const K=Math.floor(pe/60),Z=pe%60;return Z>0?`${K} год ${Z} хв`:`${K} год`}function T(){X(),r("close")}function X(){s.value=[],w=1,$+=1,te(),v(),be()}async function fe(){await e.nextTick();const ie=x.value,ce=ie==null?void 0:ie.closest(".map-view-root");if(!ie||!ce)return;const pe=ce.getBoundingClientRect(),K=ie.getBoundingClientRect();C.value=Math.max(0,Math.floor(pe.bottom-K.top-8))}return e.onMounted(()=>{var ce;te(),be(),fe();const ie=(ce=x.value)==null?void 0:ce.closest(".map-view-root");ie&&typeof ResizeObserver<"u"&&(V=new ResizeObserver(fe),V.observe(ie))}),e.onBeforeUnmount(()=>{V==null||V.disconnect(),V=null}),e.watch(()=>s.value,()=>{te(),s.value.length<2&&($+=1)},{deep:!0}),e.watch(()=>Y.value.length,()=>fe()),e.watch(u,()=>{s.value.length>=2&&($+=1,v())}),n({addPoint:F,setPoints:U,clearPoints:X}),(ie,ce)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"panelWrapRef",ref:x,class:"route-panel-wrap absolute top-0 right-full mr-2 z-20 flex h-auto max-h-none min-h-0 flex-col gap-2 overflow-hidden pointer-events-none animate-slide-up",style:e.normalizeStyle(_.value)},[e.createElementVNode("div",ap,[e.createElementVNode("div",sp,[e.createElementVNode("div",ip,[e.createElementVNode("div",cp,[e.createElementVNode("div",dp,[e.createVNode(e.unref(ge.Route),{size:14,"stroke-width":2,class:"text-white"})]),ce[8]||(ce[8]=e.createElementVNode("div",{class:"flex-1 min-w-0"},[e.createElementVNode("h2",{class:"text-sm font-bold text-gray-900 leading-none"},"Маршрутизатор"),e.createElementVNode("p",{class:"text-xs text-gray-400 mt-0.5"},"Введіть координати")],-1))]),e.createElementVNode("div",up,[a.value?(e.openBlock(),e.createElementBlock("div",fp,[e.createVNode(e.unref(ge.Map),{size:10,"stroke-width":2,class:"text-blue-500"}),e.createElementVNode("span",mp,e.toDisplayString(a.value),1)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-7 h-7 rounded-xl flex items-center justify-center text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 flex-shrink-0","aria-label":"Закрити",onClick:T},[e.createVNode(e.unref(ge.X),{size:14,"stroke-width":2})])])]),e.createElementVNode("div",pp,[e.createElementVNode("div",gp,[ce[9]||(ce[9]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-emerald-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":ce[0]||(ce[0]=pe=>i.value=pe),type:"text",placeholder:"30.5234, 50.4501",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:ce[1]||(ce[1]=pe=>G(0)),onKeyup:ce[2]||(ce[2]=e.withKeys(e.withModifiers(pe=>G(0),["prevent"]),["enter"]))},null,544),[[e.vModelText,i.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку A",onClick:ce[3]||(ce[3]=pe=>H(0))},[e.createVNode(e.unref(ge.X),{size:11,"stroke-width":2})]),ce[10]||(ce[10]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"A",-1))]),e.createElementVNode("div",yp,[ce[11]||(ce[11]=e.createElementVNode("div",{class:"absolute w-full h-px bg-gray-100"},null,-1)),e.createElementVNode("button",{type:"button",class:"relative w-8 h-8 rounded-full border flex items-center justify-center transition-all disabled:opacity-40 hover:shadow-sm bg-white border-gray-200 text-gray-500 hover:text-blue-500 hover:border-blue-300",title:"Поміняти місцями",disabled:s.value.length<2,onClick:he},[e.createVNode(e.unref(ge.ArrowUpDown),{size:14,"stroke-width":2})],8,hp)]),e.createElementVNode("div",bp,[ce[12]||(ce[12]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-red-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":ce[4]||(ce[4]=pe=>d.value=pe),type:"text",placeholder:"30.4947, 50.4271",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:ce[5]||(ce[5]=pe=>G(1)),onKeyup:ce[6]||(ce[6]=e.withKeys(e.withModifiers(pe=>G(1),["prevent"]),["enter"]))},null,544),[[e.vModelText,d.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку B",onClick:ce[7]||(ce[7]=pe=>H(1))},[e.createVNode(e.unref(ge.X),{size:11,"stroke-width":2})]),ce[13]||(ce[13]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"B",-1))]),e.createElementVNode("div",xp,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,pe=>e.createElementVNode("div",{key:pe.id,class:"relative flex-1 flex flex-col justify-center"},[pe.id==="car"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button","aria-label":pe.label,"aria-pressed":u.value===pe.id,class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 bg-white text-blue-600 shadow-sm border border-blue-200",onClick:K=>u.value=pe.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(pe.icon),{size:16,"stroke-width":2})),e.createElementVNode("span",wp,e.toDisplayString(q(pe.id)),1)],8,kp)):(e.openBlock(),e.createElementBlock("button",{key:1,type:"button","aria-label":pe.label,"aria-pressed":u.value===pe.id,disabled:"",class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 text-gray-300 opacity-60 cursor-not-allowed"},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(pe.icon),{size:16,"stroke-width":2}))],8,_p))])),64))]),c.value?(e.openBlock(),e.createElementBlock("p",Ep,"Прокладаємо маршрут...")):p.value?(e.openBlock(),e.createElementBlock("p",Cp,e.toDisplayString(p.value),1)):h.value?(e.openBlock(),e.createElementBlock("p",Np,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Vp,[e.createElementVNode("button",{type:"button",class:"w-full h-9 rounded-xl bg-blue-600 hover:bg-blue-700 text-white text-xs font-semibold flex items-center justify-center gap-1.5 transition-colors disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-blue-600",disabled:!L.value,onClick:D},[e.createVNode(e.unref(ge.Route),{size:13,"stroke-width":2}),ce[14]||(ce[14]=e.createTextVNode(" Побудувати маршрут ",-1))],8,Bp)])]),k.value.length?(e.openBlock(),e.createElementBlock("div",$p,[e.createElementVNode("div",Sp,[ce[15]||(ce[15]=e.createElementVNode("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wide"},"Покрокові інструкції",-1)),e.createElementVNode("span",vp,e.toDisplayString(Q.value)+" кроків",1)]),e.createElementVNode("div",Lp,[e.createElementVNode("div",Tp,[e.createElementVNode("div",Ap,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Y.value,(pe,K)=>(e.openBlock(),e.createElementBlock("div",{key:`${K}-${pe.title}`,class:e.normalizeClass(["step-item flex items-start gap-3 rounded-xl cursor-pointer select-none transition-all px-3 py-2",[K===0?"bg-emerald-50/60 cursor-default":b.value===K?"bg-blue-50 ring-1 ring-blue-100":"hover:bg-gray-50"]]),onMouseenter:Z=>oe(K),onMouseleave:ye},[e.createElementVNode("div",{class:e.normalizeClass(["flex-shrink-0 w-7 h-7 rounded-lg flex items-center justify-center mt-0.5",z(pe.tone).icon])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ee(pe.icon)),{size:14,"stroke-width":2}))],2),e.createElementVNode("div",Fp,[e.createElementVNode("div",Dp,[e.createElementVNode("p",Pp,e.toDisplayString(pe.title),1),pe.distanceText?(e.openBlock(),e.createElementBlock("span",zp,e.toDisplayString(pe.distanceText),1)):e.createCommentVNode("",!0)]),pe.durationText?(e.openBlock(),e.createElementBlock("p",Ip,e.toDisplayString(pe.durationText),1)):e.createCommentVNode("",!0)])],42,Mp))),128))])])])])):e.createCommentVNode("",!0),ce[16]||(ce[16]=e.createElementVNode("div",{class:"bg-white/80 backdrop-blur-xl rounded-xl border border-white/60 px-3 py-2 flex-shrink-0 pointer-events-auto"},[e.createElementVNode("p",{class:"text-[10px] text-gray-400 leading-relaxed text-center"},[e.createElementVNode("kbd",{class:"px-1.5 py-0.5 rounded bg-gray-100 text-gray-500 text-[9px] font-mono"},"ЛКМ"),e.createTextVNode(" по карті заповнює точки маршруту ")])],-1))],4))}}),jp={class:"relative"},Op=["aria-label"],Up={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"},qp=e.defineComponent({name:"RouteControl",__name:"RouteControl",props:{active:{type:Boolean}},emits:["toggle","close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.ref(null);function i(c){var p;(p=s.value)==null||p.addPoint(c)}function d(c){var p;(p=s.value)==null||p.setPoints(c)}function u(){var c;(c=s.value)==null||c.clearPoints()}return n({addPoint:i,setPoints:d,clearPoints:u}),(c,p)=>(e.openBlock(),e.createElementBlock("div",jp,[t.active?(e.openBlock(),e.createBlock(Rp,{key:0,ref_key:"routePanelRef",ref:s,class:"absolute top-0 right-full mr-2",onClose:p[0]||(p[0]=a=>l("close")),onPointsChange:p[1]||(p[1]=a=>l("points-change",a)),onInstructionHover:p[2]||(p[2]=a=>l("instruction-hover",a)),onRouteChange:p[3]||(p[3]=a=>l("route-change",a))},null,512)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",r.active?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":r.active?"Вимкнути побудову маршруту":"Побудова маршруту",onClick:p[4]||(p[4]=e.withModifiers(a=>l("toggle"),["stop"]))},[e.createElementVNode("span",Up,e.toDisplayString(r.active?"Вимкнути побудову маршруту":"Побудова маршруту"),1),e.createVNode(e.unref(ge.Route),{class:"w-4 h-4"})],10,Op)]))}}),Dt="route-builder-src",yo="route-builder-line",ho="route-builder-points",bo="route-builder-labels",ln="route-builder-hover-src",xo="route-builder-hover-line",Hp=e.defineComponent({__name:"RouteLayer",props:{points:{},routeGeometry:{},hoverGeometry:{}},setup(t){const n={"text-anchor":"center","text-offset":[0,0],"text-allow-overlap":!0,"text-ignore-placement":!0};function o(){return{type:"FeatureCollection",features:[]}}function r(g){return g?{type:"FeatureCollection",features:[{type:"Feature",properties:{role:"hover-line"},geometry:g}]}:o()}function l(g){if(!g)return null;if(g.type==="LineString"){const m=(g.coordinates||[]).filter(y=>Number.isFinite(y[0])&&Number.isFinite(y[1]));return m.length>=2?{type:"LineString",coordinates:m}:null}if(g.type==="MultiLineString"){const m=(g.coordinates||[]).map(y=>y.filter(k=>Number.isFinite(k[0])&&Number.isFinite(k[1]))).filter(y=>y.length>=2);return m.length?m.length===1?{type:"LineString",coordinates:m[0]}:{type:"MultiLineString",coordinates:m}:null}return null}function s(g,m){const y=[];return m&&y.push({type:"Feature",properties:{role:"line"},geometry:m}),g.forEach((k,h)=>{y.push({type:"Feature",properties:{role:"point",label:String(h+1),kind:h===0?"start":h===g.length-1?"end":"mid"},geometry:{type:"Point",coordinates:[k.coords.lng,k.coords.lat]}})}),{type:"FeatureCollection",features:y}}function i(g){g.getSource(Dt)||g.addSource(Dt,{type:"geojson",data:o()}),g.getSource(ln)||g.addSource(ln,{type:"geojson",data:o()}),g.getLayer(yo)||g.addLayer({id:yo,type:"line",source:Dt,filter:["==",["get","role"],"line"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#2563eb","line-width":4,"line-opacity":.9}}),g.getLayer(xo)||g.addLayer({id:xo,type:"line",source:ln,layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#f59e0b","line-width":7,"line-opacity":.95}}),g.getLayer(ho)||g.addLayer({id:ho,type:"circle",source:Dt,filter:["==",["get","role"],"point"],paint:{"circle-radius":10,"circle-color":["match",["get","kind"],"start","#22c55e","end","#ef4444","#60a5fa"],"circle-stroke-width":2,"circle-stroke-color":"#0f172a"}}),g.getLayer(bo)||g.addLayer({id:bo,type:"symbol",source:Dt,filter:["==",["get","role"],"point"],layout:{"text-field":["to-string",["get","label"]],"text-size":12,"text-font":["Arial Unicode MS Bold","Open Sans Bold"],...n},paint:{"text-color":"#ffffff","text-halo-color":"#0f172a","text-halo-width":1}})}function d(g){if(g)try{g.getLayer(xo)&&g.removeLayer(xo),g.getLayer(bo)&&g.removeLayer(bo),g.getLayer(ho)&&g.removeLayer(ho),g.getLayer(yo)&&g.removeLayer(yo),g.getSource(ln)&&g.removeSource(ln),g.getSource(Dt)&&g.removeSource(Dt)}catch{}}const u=t,{map:c,ready:p}=Ke();function a(){p().then(()=>{const g=c.value;if(!g)return;i(g);const m=g.getSource(Dt);if(!(m!=null&&m.setData))return;m.setData(s(u.points,l(u.routeGeometry)));const y=g.getSource(ln);y!=null&&y.setData&&y.setData(r(l(u.hoverGeometry??null)))})}return e.watch(()=>[u.points,u.routeGeometry,u.hoverGeometry],()=>a(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{p().then(()=>d(c.value))}),(g,m)=>null}}),Wp={class:"pt-1 border-t border-gray-100"},Yp={class:"space-y-1"},Gp=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),s=(u,c,p)=>Math.min(Math.max(u,c),p),i=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const u=s(r.value,-90,90),c=s(l.value,-180,180);o("submit",{lat:u,lng:c}),r.value=null,l.value=null},d=()=>{r.value=null,l.value=null,o("cancel")};return(u,c)=>(e.openBlock(),e.createElementBlock("div",Wp,[c[2]||(c[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",Yp,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>r.value=p),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":c[1]||(c[1]=p=>l.value=p),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick:i}," Додати "),e.createElementVNode("button",{class:"px-2 py-1 bg-gray-200 hover:bg-gray-300 text-gray-700 text-xs font-medium rounded transition-colors",type:"button",onClick:d}," Скасувати ")])])]))}}),Zp=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(ge.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),Kp=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(ge.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),Xp=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(ge.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),Jp=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Gt(t){return Jp.format(t)}function Ol(t){return t>=1e3?`${Gt(t/1e3)} км`:`${Gt(t)} м`}const Qp={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},eg={key:0,class:"flex-1 flex gap-1"},tg={key:1,class:"flex-1 font-mono text-gray-700"},ng=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),s=e.ref(!1),i=e.ref(o.coords.lat),d=e.ref(o.coords.lng);e.watch(()=>o.coords,g=>{i.value=g.lat,d.value=g.lng},{deep:!0,immediate:!0});const u=(g,m,y)=>Math.min(Math.max(g,m),y),c=()=>{s.value=!0},p=()=>{if(!Number.isFinite(i.value)||!Number.isFinite(d.value))return;const g=u(i.value,-90,90),m=u(d.value,-180,180);r("update",{id:o.id,coords:{lat:g,lng:m}}),s.value=!1},a=()=>{r("delete",o.id)};return(g,m)=>(e.openBlock(),e.createElementBlock("div",Qp,[e.createVNode(e.unref(ge.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),s.value?(e.openBlock(),e.createElementBlock("div",eg,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=y=>i.value=y),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[1]||(m[1]=y=>d.value=y),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,d.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:p}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",tg,e.toDisplayString(l.value),1)),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"text-blue-500 hover:text-blue-600 px-0.5",type:"button",onClick:c}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:a}," ✕ ")]))}}),og={class:"ruler-control px-3 py-2.5 space-y-2"},rg={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},lg={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"},ag={class:"text-sm font-semibold text-slate-700"},sg={class:"ruler-row"},ig={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},cg={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"},dg={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},ug=["onClick"],fg={class:"flex items-center gap-2 mt-0.5 pl-7"},mg={key:0,class:"text-base font-semibold text-green-600"},pg={key:1,class:"text-xs text-gray-400"},gg={class:"ruler-row flex items-center gap-2 cursor-pointer"},yg={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"},hg={class:"text-xs font-medium text-gray-600 flex-1"},bg={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},xg=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],s=()=>{o.value=!o.value},i=(y,k)=>{const h=L=>L*Math.PI/180,f=h(k.lat-y.lat),b=h(k.lng-y.lng),x=h(y.lat),C=h(k.lat),V=Math.sin(f/2),_=Math.sin(b/2);return 6371e3*(2*Math.asin(Math.sqrt(V*V+Math.cos(x)*Math.cos(C)*_*_)))},d=e.computed(()=>{if(n.points.length<2)return 0;let y=0;for(let k=1;k<n.points.length;k+=1)y+=i(n.points[k-1].coords,n.points[k].coords);return n.isShapeClosed&&n.points.length>=2&&(y+=i(n.points[n.points.length-1].coords,n.points[0].coords)),y}),u=e.computed(()=>d.value>=1e3?`${Gt(d.value/1e3)} км`:`${Gt(d.value)} м`);function c(y){if(y.length<3)return 0;const k=y[0].lat,h=y[0].lng,f=(x,C)=>{const V=(x-k)*110574;return{x:(C-h)*111320*Math.cos(k*Math.PI/180),y:V}};let b=0;for(let x=0;x<y.length;x++){const C=(x+1)%y.length,V=f(y[x].lat,y[x].lng),_=f(y[C].lat,y[C].lng);b+=V.x*_.y-V.y*_.x}return Math.abs(b)*.5}const p=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const y=n.points.map(k=>k.coords);return c(y)}),a=e.computed(()=>p.value>0),g=e.computed(()=>{const y=p.value;if(y===0)return"—";if(r.value==="km2"){const h=y/1e6;return`${Gt(h)} км²`}if(r.value==="ha"){const h=y/1e4;return`${Gt(h)} га`}const k=y>=1?Math.round(y):y;return`${Gt(k)} м²`}),m=e.computed(()=>{const y=n.points.length;return y===1?"1 точка":y>=2&&y<=4?`${y} точки`:`${y} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(y,k)=>(e.openBlock(),e.createElementBlock("div",og,[e.createElementVNode("button",rg,[e.createElementVNode("span",lg,[e.createVNode(e.unref(ge.Info),{size:12,"stroke-width":2.5})]),k[1]||(k[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",ag,e.toDisplayString(u.value),1)]),e.createElementVNode("div",sg,[e.createElementVNode("button",ig,[e.createElementVNode("span",cg,[e.createVNode(e.unref(ge.Info),{size:12,"stroke-width":2.5})]),k[2]||(k[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",dg,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(h,f)=>e.createElementVNode("button",{key:h.id,type:"button",class:e.normalizeClass(["px-2.5 py-1 text-xs font-medium transition-colors border-r border-gray-200 last:border-r-0",f===0&&"rounded-l-md",f===l.length-1&&"rounded-r-md",r.value===h.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(b=>r.value=h.id,["stop"])},e.toDisplayString(h.label),11,ug)),64))])]),e.createElementVNode("div",fg,[a.value?(e.openBlock(),e.createElementBlock("span",mg,e.toDisplayString(g.value),1)):(e.openBlock(),e.createElementBlock("span",pg,"—"))])]),e.createElementVNode("div",gg,[e.createElementVNode("span",yg,[e.createVNode(e.unref(ge.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",hg,e.toDisplayString(m.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(s,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",bg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(h,f)=>(e.openBlock(),e.createBlock(ng,{key:h.id,id:h.id,index:f+1,coords:h.coords,onUpdate:k[0]||(k[0]=b=>y.$emit("update-point",b)),onDelete:b=>y.$emit("delete-point",h.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),kg={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},wg={class:"flex items-start gap-2"},_g=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",kg,[e.createElementVNode("div",wg,[e.createVNode(e.unref(ge.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))])]))}}),Eg={class:"space-y-1.5"},Cg={class:"space-y-1 max-h-40 overflow-y-auto"},Ng={class:"text-gray-700"},Vg={class:"font-semibold text-slate-800"},Bg=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(s,i){const d=m=>m*Math.PI/180,u=d(i.lat-s.lat),c=d(i.lng-s.lng),p=d(s.lat),a=d(i.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(u/2)**2+Math.cos(p)*Math.cos(a)*Math.sin(c/2)**2)))}function r(s){return Ol(s)}const l=e.computed(()=>{const s=[],i=n.points;if(i.length<2)return s;for(let d=0;d<i.length;d++){const u=d===i.length-1&&n.isShapeClosed?0:d+1;if(u>=i.length)break;const c=o(i[d].coords,i[u].coords);s.push({from:d+1,to:u+1,label:r(c)})}return s});return(s,i)=>(e.openBlock(),e.createElementBlock("div",Eg,[i[0]||(i[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",Cg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(d,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",Ng,"Точка "+e.toDisplayString(d.from)+" → Точка "+e.toDisplayString(d.to),1),e.createElementVNode("span",Vg,e.toDisplayString(d.label),1)]))),128))])]))}}),$g={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Sg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},vg={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Lg={class:"flex items-center gap-2"},Tg={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Ag={class:"flex border-b border-gray-200"},Mg={key:1,class:"px-3 py-2.5"},Fg={key:1,class:"text-xs text-gray-500"},Dg={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Pg={class:"flex gap-1.5"},Ul=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),s=e.computed(()=>l.value.length>0),i=e.ref(!1),d=e.ref(!1),u=e.ref("general");function c(Q){u.value=Q,r("tab-change",Q)}e.onMounted(()=>{r("tab-change",u.value)});const p=e.computed(()=>l.value.length>=3&&!d.value);let a=1;const g=()=>l.value.map(Q=>({id:Q.id,coords:{...Q.coords}})),m=()=>{l.value.length<3&&d.value&&(d.value=!1,r("shape-closed-change",!1)),r("points-change",g())},y=()=>{const Q=a;return a+=1,Q},k=Q=>{l.value=[...l.value,{id:y(),coords:{lat:Q.lat,lng:Q.lng}}],m()},h=({id:Q,coords:j})=>{const te=l.value.findIndex(be=>be.id===Q);if(te===-1)return;const de=[...l.value];de[te]={id:Q,coords:{...j}},l.value=de,m()},f=Q=>{l.value=l.value.filter(j=>j.id!==Q),m()},b=()=>{l.value=[],d.value&&(d.value=!1,r("shape-closed-change",!1)),m()},x=Q=>{h(Q)},C=Q=>{f(Q)},V=()=>{i.value=!0,r("add-request")},_=Q=>{k(Q),i.value=!1},w=()=>{i.value=!1},$=()=>{p.value&&(d.value=!0,r("complete"),r("shape-closed-change",!0))},L=Q=>{const j=(Q??[]).map(te=>({id:te.id??y(),coords:{...te.coords}}));l.value=j,j.length===0?a=1:a=Math.max(...j.map(te=>te.id))+1,m()},Y=()=>{b(),i.value=!1,r("close")};return n({addPoint:k,setPoints:L,clearPoints:b}),(Q,j)=>(e.openBlock(),e.createElementBlock("div",$g,[e.createElementVNode("div",Sg,[e.createElementVNode("div",vg,[e.createElementVNode("div",Lg,[e.createElementVNode("div",Tg,[e.createVNode(e.unref(ge.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),j[2]||(j[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Вимірювання",-1))]),e.createElementVNode("button",{class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:Y},[e.createVNode(e.unref(ge.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Ag,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:j[0]||(j[0]=te=>c("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:j[1]||(j[1]=te=>c("topoint"))}," До точки ",2)]),u.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value?(e.openBlock(),e.createBlock(xg,{key:1,points:l.value,"is-shape-closed":d.value,onUpdatePoint:x,onDeletePoint:C},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(_g,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",Mg,[s.value?(e.openBlock(),e.createBlock(Bg,{key:0,points:l.value,"is-shape-closed":d.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",Fg,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",Dg,[e.createElementVNode("div",Pg,[i.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Zp,{key:0,onClick:V})),p.value?(e.openBlock(),e.createBlock(Xp,{key:1,onClick:$})):e.createCommentVNode("",!0)]),i.value?(e.openBlock(),e.createBlock(Gp,{key:0,onSubmit:_,onCancel:w})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(Kp,{key:1,onClick:b})):e.createCommentVNode("",!0)])])]))}}),kt="ruler-points",Vt="ruler-line",Bt="ruler-polygon",$t="ruler-segments",ql=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(h,f){const b=$=>$*Math.PI/180,x=b(f.lat-h.lat),C=b(f.lng-h.lng),V=b(h.lat),_=b(f.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(x/2)**2+Math.cos(V)*Math.cos(_)*Math.sin(C/2)**2)))}function o(h){return Ol(h)}const r=t,{map:l,ready:s}=Ke();function i(){return{type:"FeatureCollection",features:[]}}function d(h,f,b){const x=b??"general",C=[];let V=0;C.push(0);for(let _=1;_<h.length;_++)V+=n(h[_-1].coords,h[_].coords),C.push(V);return f&&h.length>=2&&(V+=n(h[h.length-1].coords,h[0].coords)),{type:"FeatureCollection",features:h.map((_,w)=>{const $=x==="general"?w===0?"0":o(C[w]):w===0?"0":o(n(h[w-1].coords,h[w].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[_.coords.lng,_.coords.lat]},properties:{id:_.id,index:w+1,label:$}}})}}function u(h,f){if(h.length<2)return i();const b=[];for(let x=0;x<h.length;x++){const C=x===h.length-1&&f?0:x+1;if(C>=h.length)break;const V=h[x].coords,_=h[C].coords,w=n(V,_);b.push({type:"Feature",geometry:{type:"LineString",coordinates:[[V.lng,V.lat],[_.lng,_.lat]]},properties:{distance:o(w)}})}return{type:"FeatureCollection",features:b}}function c(h,f){if(h.length<2)return i();const b=h.map(x=>[x.coords.lng,x.coords.lat]);return f&&b.push(b[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:b},properties:{}}]}}function p(h){if(h.length<3)return i();const f=h.map(b=>[b.coords.lng,b.coords.lat]);return f.push(f[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[f]},properties:{}}]}}let a=!1;function g(h){h.getSource(kt)||(h.addSource(kt,{type:"geojson",data:i()}),h.addLayer({id:`${kt}-circle`,type:"circle",source:kt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),h.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}})),h.getSource($t)||(h.addSource($t,{type:"geojson",data:i()}),h.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}})),h.getSource(Vt)||(h.addSource(Vt,{type:"geojson",data:i()}),h.addLayer({id:`${Vt}-layer`,type:"line",source:Vt,paint:{"line-color":"#3b82f6","line-width":2}})),h.getSource(Bt)||(h.addSource(Bt,{type:"geojson",data:i()}),h.addLayer({id:`${Bt}-layer`,type:"fill",source:Bt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),a=!0}function m(h){if(h){try{h.getLayer(`${Bt}-layer`)&&h.removeLayer(`${Bt}-layer`),h.getSource(Bt)&&h.removeSource(Bt),h.getLayer(`${Vt}-layer`)&&h.removeLayer(`${Vt}-layer`),h.getSource(Vt)&&h.removeSource(Vt),h.getLayer(`${$t}-labels`)&&h.removeLayer(`${$t}-labels`),h.getSource($t)&&h.removeSource($t),h.getLayer(`${kt}-labels`)&&h.removeLayer(`${kt}-labels`),h.getLayer(`${kt}-circle`)&&h.removeLayer(`${kt}-circle`),h.getSource(kt)&&h.removeSource(kt)}catch{}a=!1}}function y(h){if(!h)return;const f=h.getSource(kt),b=h.getSource(Vt),x=h.getSource(Bt),C=h.getSource($t),V=r.points,_=r.labelMode??"general";f&&f.setData(d(V,r.isShapeClosed,_)),b&&b.setData(c(V,r.isShapeClosed)),x&&x.setData(p(V)),C&&C.setData(_==="topoint"?u(V,r.isShapeClosed):i())}function k(){s().then(()=>{const h=l.value;h&&(a||g(h),y(h))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>k(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{s().then(()=>m(l.value))}),(h,f)=>null}}),zg={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},Ig={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Rg={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},jg={class:"flex items-center gap-2"},Og=["disabled"],Ug={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},qg={class:"text-sm font-mono text-slate-700"},Hg={class:"flex items-center gap-2 shrink-0"},Wg={key:0,class:"text-xs font-[100] text-gray-500"},Yg=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),s=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),i=e.ref(!1);let d=null;function u(){if(o.position==null)return;const a=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,d&&clearTimeout(d),d=setTimeout(()=>{i.value=!1,d=null},600)})}function c(){r("close")}function p(){o.position!=null&&r("recenter")}return(a,g)=>(e.openBlock(),e.createElementBlock("div",zg,[e.createElementVNode("div",Ig,[e.createElementVNode("div",Rg,[e.createElementVNode("div",jg,[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:p},[e.createVNode(e.unref(ge.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,Og),g[0]||(g[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:c},[e.createVNode(e.unref(ge.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Ug,[e.createElementVNode("div",null,[g[4]||(g[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",qg,[g[1]||(g[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.value)+" ",1),g[2]||(g[2]=e.createElementVNode("br",null,null,-1)),g[3]||(g[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(s.value),1)])]),e.createElementVNode("div",Hg,[i.value?(e.openBlock(),e.createElementBlock("span",Wg," Скопійовано! ")):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center justify-center w-9 h-9 rounded-xl border border-gray-200 text-gray-500 hover:bg-gray-50 hover:text-gray-700 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/50 focus-visible:ring-offset-1","aria-label":"Копіювати координати",onClick:u},[e.createVNode(e.unref(ge.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),St="geolocation-marker",Gg=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=Ke();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function d(a){a.getSource(St)||(a.addSource(St,{type:"geojson",data:s()}),a.addLayer({id:`${St}-circle`,type:"circle",source:St,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function u(a){try{a.getLayer(`${St}-circle`)&&a.removeLayer(`${St}-circle`),a.getSource(St)&&a.removeSource(St)}catch{}l=!1}function c(a){const g=a.getSource(St);if(g){if(n.position==null){g.setData(s());return}g.setData({type:"FeatureCollection",features:[i(n.position)]})}}function p(){r().then(()=>{const a=o.value;if(a){if(n.position==null){l&&u(a);return}l||d(a),c(a)}})}return e.watch(()=>n.position,()=>p(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,g)=>null}});function Zg(t,n,o){const r=o||`HTTP ${n}`;if(t==null||typeof t!="object")return r;const l=t;return typeof l.message=="string"&&l.message.trim()?l.message.trim():typeof l.error=="string"&&l.error.trim()?l.error.trim():r}async function Kg(t,n){const o=new URLSearchParams({lat:String(t),lng:String(n)}),r=await fetch(`/api/coords/height?${o}`),l=await r.json().catch(()=>null);if(!r.ok)throw new Error(Zg(l,r.status,r.statusText));return l}function Xg(){const t=e.ref(null),n=e.ref(null),o=e.ref(!1),r=e.ref(null);async function l(i){t.value=i,o.value=!0,r.value=null,n.value=null;try{const d=await Kg(i.lat,i.lng);n.value=d.height,d.height==null&&(r.value="unavailable")}catch(d){n.value=null,r.value=d instanceof Error?d.message:"loadFailed"}finally{o.value=!1}}function s(){t.value=null,n.value=null,o.value=!1,r.value=null}return{point:t,height:n,loading:o,error:r,measureAt:l,reset:s}}let fr;function Hl(){return fr||(fr=Xg()),fr}const Jg={class:"height-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Qg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ey={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},ty={class:"flex items-center gap-2"},ny={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},oy={class:"px-3 py-3 space-y-3"},ry={key:0,class:"flex items-center gap-2 text-xs text-gray-500"},ly={key:1,class:"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700"},ay={key:0,class:"space-y-1.5"},sy={class:"text-3xl font-bold text-blue-600 tabular-nums"},iy={class:"text-xs text-gray-500"},cy={key:1,class:"rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800"},dy={key:3,class:"rounded-md border border-dashed border-gray-200 bg-gray-50 px-3 py-3 text-xs leading-relaxed text-gray-500"},uy=e.defineComponent({name:"HeightPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Hl(),l=e.computed(()=>r.point.value),s=e.computed(()=>r.loading.value),i=e.computed(()=>r.error.value),d=e.computed(()=>typeof r.height.value=="number"),u=e.computed(()=>{const{value:g}=r.height;if(g==null||!Number.isFinite(g))return"—";const m=Math.round(g*10)/10;return Number.isInteger(m)?String(m):m.toLocaleString("uk-UA",{minimumFractionDigits:1,maximumFractionDigits:1})}),c=e.computed(()=>l.value?`${l.value.lat.toFixed(6)}, ${l.value.lng.toFixed(6)}`:""),p=e.computed(()=>i.value==="unavailable"?"Не вдалося визначити висоту для цієї точки":"Не вдалося завантажити дані висоти");function a(){o("close")}return(g,m)=>(e.openBlock(),e.createElementBlock("div",Jg,[e.createElementVNode("div",Qg,[e.createElementVNode("div",ey,[e.createElementVNode("div",ty,[e.createElementVNode("div",ny,[e.createVNode(e.unref(ge.TrendingUp),{size:14,"stroke-width":2,class:"text-white"})]),m[0]||(m[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Висота точки",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:a},[e.createVNode(e.unref(ge.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",oy,[s.value?(e.openBlock(),e.createElementBlock("div",ry,[e.createVNode(e.unref(ge.Loader2),{size:14,class:"animate-spin text-blue-500"}),m[1]||(m[1]=e.createElementVNode("span",null,"Визначаємо висоту…",-1))])):i.value&&!d.value?(e.openBlock(),e.createElementBlock("div",ly,e.toDisplayString(p.value),1)):l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[d.value?(e.openBlock(),e.createElementBlock("div",ay,[m[3]||(m[3]=e.createElementVNode("div",{class:"text-[10px] uppercase tracking-wide text-gray-400"},"Висота",-1)),e.createElementVNode("div",sy,[e.createTextVNode(e.toDisplayString(u.value)+" ",1),m[2]||(m[2]=e.createElementVNode("span",{class:"text-sm font-semibold text-gray-400"},"м",-1))]),e.createElementVNode("div",iy,e.toDisplayString(c.value),1)])):(e.openBlock(),e.createElementBlock("div",cy," Не вдалося визначити висоту для цієї точки "))],64)):(e.openBlock(),e.createElementBlock("div",dy," Клацніть по карті, щоб отримати висоту точки. "))])])]))}}),fy={"aria-hidden":"true",style:{display:"none"}},vt="height-marker",my=e.defineComponent({__name:"HeightMarkerLayer",props:{point:{}},setup(t){const n=t,{map:o,ready:r}=Ke();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function d(a){a.getSource(vt)||(a.addSource(vt,{type:"geojson",data:s()}),a.addLayer({id:`${vt}-circle`,type:"circle",source:vt,paint:{"circle-radius":7,"circle-color":"#2563eb","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),l=!0)}function u(a){try{a.getLayer(`${vt}-circle`)&&a.removeLayer(`${vt}-circle`),a.getSource(vt)&&a.removeSource(vt)}catch{}l=!1}function c(a){const g=a.getSource(vt);if(g){if(n.point==null){g.setData(s());return}g.setData({type:"FeatureCollection",features:[i(n.point)]})}}function p(){r().then(()=>{const a=o.value;if(a){if(n.point==null){l&&u(a);return}l||d(a),c(a)}})}return e.watch(()=>n.point,()=>p(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,g)=>(e.openBlock(),e.createElementBlock("div",fy))}}),py={class:"animate-slide-up"},gy={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},yy={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},hy={class:"flex items-center gap-2"},by={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},xy={class:"px-3 py-2.5 border-b border-gray-200"},ky={class:"flex gap-1 flex-nowrap"},wy=["title","onClick"],_y={class:"px-3 py-2.5 border-b border-gray-200"},Ey={class:"flex items-center gap-4"},Cy={class:"flex items-center gap-2 cursor-pointer shrink-0"},Ny={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},Vy={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},By={class:"flex items-center gap-1.5"},$y=Fe(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:ge.Pen,title:"Олівець"},{id:"line",icon:ge.Minus,title:"Лінія"},{id:"rect",icon:ge.Square,title:"Прямокутник"},{id:"circle",icon:ge.Circle,title:"Коло"},{id:"polygon",icon:ge.Pentagon,title:"Полігон"},{id:"paint",icon:ge.PaintBucket,title:"Балончик"},{id:"eraser",icon:ge.Eraser,title:"Стирачка"}],s=e.ref("pen"),i=e.ref("#2563eb"),d=e.ref(3),u=()=>r("update:stroke-color",i.value),c=()=>r("update:stroke-width",d.value);e.watch(s,k=>r("update:tool",k)),e.watch(i,k=>r("update:stroke-color",k)),e.watch(d,k=>r("update:stroke-width",k));function p(){r("close")}function a(){r("undo")}function g(){r("finish-polygon")}function m(){r("clear")}function y(){r("download")}return n({tool:s,strokeColor:i,strokeWidth:d}),(k,h)=>(e.openBlock(),e.createElementBlock("div",py,[e.createElementVNode("div",gy,[e.createElementVNode("div",yy,[e.createElementVNode("div",hy,[e.createElementVNode("div",by,[e.createVNode(e.unref(ge.Pen),{size:14,"stroke-width":2,class:"text-white"})]),h[2]||(h[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Малювання",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:p},[e.createVNode(e.unref(ge.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",xy,[h[3]||(h[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",ky,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,f=>e.createElementVNode("button",{key:f.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",s.value===f.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:f.title,onClick:b=>s.value=f.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.icon),{size:16,"stroke-width":2}))],10,wy)),64))])]),e.createElementVNode("section",_y,[h[6]||(h[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",Ey,[e.createElementVNode("label",Cy,[h[4]||(h[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=f=>i.value=f),type:"color",class:"w-9 h-9 p-0.5 border-2 border-gray-200 rounded-lg cursor-pointer bg-white [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-none [&::-webkit-color-swatch]:rounded-md",onChange:u},null,544),[[e.vModelText,i.value]])]),e.createElementVNode("label",Ny,[h[5]||(h[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[1]||(h[1]=f=>d.value=f),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:c},null,544),[[e.vModelText,d.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",Vy,[e.createElementVNode("div",By,[e.createElementVNode("button",{type:"button",class:"w-9 h-9 shrink-0 flex items-center justify-center rounded-lg bg-gray-100 text-gray-700 hover:bg-gray-200 transition-colors",title:"Відкотити дію","aria-label":"Відкотити дію",onClick:a},[e.createVNode(e.unref(ge.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:m},[e.createVNode(e.unref(ge.Trash2),{size:14,"stroke-width":2}),h[7]||(h[7]=e.createTextVNode(" Очистити ",-1))])]),s.value==="polygon"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-blue-50 text-blue-600 hover:bg-blue-100 transition-colors",onClick:g},[e.createVNode(e.unref(ge.Pentagon),{size:14,"stroke-width":2}),h[8]||(h[8]=e.createTextVNode(" Замкнути полігон ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-gradient-to-r from-blue-400 to-blue-500 text-white shadow-sm hover:brightness-105 transition-[filter]",onClick:y},[e.createVNode(e.unref(ge.Download),{size:14,"stroke-width":2}),h[9]||(h[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),Sy=Fe(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref({x:0,y:0}),i=e.ref(!1),d=t,u=e.computed(()=>Math.max(d.strokeWidth*3,12)),c=e.computed(()=>({width:`${u.value}px`,height:`${u.value}px`,left:`${s.value.x}px`,top:`${s.value.y}px`,transform:"translate(-50%, -50%)"})),{ready:p}=Ke(),a=e.ref(!1),g=e.ref([]),m=e.ref([]);let y=0,k=0,h=0,f=0,b=null;function x(){const N=r.value,F=l.value,H=o.value;if(!N||!H)return;const he=H.parentElement;if(!he)return;const G=he.clientWidth,D=he.clientHeight;if(G<=0||D<=0)return;const U=window.devicePixelRatio||1;N.width=G*U,N.height=D*U,N.style.width=`${G}px`,N.style.height=`${D}px`;const q=N.getContext("2d",{willReadFrequently:!0});if(q&&q.scale(U,U),F){F.width=G*U,F.height=D*U,F.style.width=`${G}px`,F.style.height=`${D}px`;const ee=F.getContext("2d",{willReadFrequently:!0});ee&&ee.scale(U,U)}m.value=[]}function C(N){const F=r.value;if(!F)return{x:0,y:0};const H=F.getBoundingClientRect();return{x:N.clientX-H.left,y:N.clientY-H.top}}function V(){const N=r.value;return N?N.getContext("2d",{willReadFrequently:!0}):null}function _(){const N=l.value;return N?N.getContext("2d",{willReadFrequently:!0}):null}function w(){const N=l.value;if(!N)return;const F=window.devicePixelRatio||1,H=N.getContext("2d",{willReadFrequently:!0});H&&(H.setTransform(1,0,0,1,0,0),H.clearRect(0,0,N.width,N.height),H.scale(F,F))}function $(){const N=_();if(N){if(w(),N.globalCompositeOperation="source-over",N.strokeStyle=d.strokeColor,N.lineWidth=d.strokeWidth,N.lineCap="round",N.lineJoin="round",d.tool==="line")N.beginPath(),N.moveTo(y,k),N.lineTo(h,f),N.stroke();else if(d.tool==="rect"){const F=Math.min(y,h),H=Math.min(k,f),he=Math.abs(h-y),G=Math.abs(f-k);N.strokeRect(F,H,he,G)}else if(d.tool==="circle"){const F=Math.sqrt((h-y)**2+(f-k)**2);N.beginPath(),N.arc(y,k,Math.max(F,1),0,2*Math.PI),N.stroke()}else if(d.tool==="polygon"&&g.value.length>0){const F=g.value;N.beginPath(),N.moveTo(F[0].x,F[0].y);for(let H=1;H<F.length;H++)N.lineTo(F[H].x,F[H].y);N.lineTo(h,f),N.stroke()}}}function L(N){N.strokeStyle=d.strokeColor,N.lineWidth=d.strokeWidth,N.lineCap="round",N.lineJoin="round"}function Y(){const N=r.value;if(!N)return;const F=N.getContext("2d",{willReadFrequently:!0});if(!F)return;const H=F.getImageData(0,0,N.width,N.height);m.value=[...m.value.slice(-19),H]}function Q(N){if(!r.value)return;const{x:F,y:H}=C(N);y=F,k=H,h=F,f=H;const he=V();if(he){if(d.tool==="pen"||d.tool==="eraser"){Y(),a.value=!0,d.tool==="eraser"?(he.globalCompositeOperation="destination-out",he.lineWidth=u.value):(he.globalCompositeOperation="source-over",L(he)),he.beginPath(),he.moveTo(F,H);return}if(d.tool==="paint"){Y(),a.value=!0,he.globalCompositeOperation="source-over",he.fillStyle=d.strokeColor,be(he,F,H);return}if(d.tool==="line"||d.tool==="rect"||d.tool==="circle"){Y(),a.value=!0;return}if(d.tool==="polygon"){g.value=[...g.value,{x:F,y:H}],h=F,f=H,$();return}}}function j(N){const{x:F,y:H}=C(N);h=F,f=H,d.tool==="eraser"&&(s.value={x:F,y:H},i.value=!0);const he=V();if(he){if(d.tool==="pen"&&a.value){he.globalCompositeOperation="source-over",L(he),he.lineTo(F,H),he.stroke();return}if(d.tool==="eraser"&&a.value){he.globalCompositeOperation="destination-out",he.lineWidth=u.value,he.lineTo(F,H),he.stroke();return}if(d.tool==="paint"&&a.value){he.globalCompositeOperation="source-over",he.fillStyle=d.strokeColor,be(he,F,H);return}a.value&&(d.tool==="line"||d.tool==="rect"||d.tool==="circle")&&$(),d.tool==="polygon"&&g.value.length>0&&$()}}function te(){i.value=!1}function de(){d.tool==="polygon"&&ne()}function be(N,F,H){const he=Math.max(d.strokeWidth*2.5,8),G=12+Math.floor(d.strokeWidth);for(let D=0;D<G;D++){const U=Math.random()*2*Math.PI,q=he*Math.random(),ee=F+Math.cos(U)*q,z=H+Math.sin(U)*q,oe=1+Math.random()*2;N.beginPath(),N.arc(ee,z,oe,0,2*Math.PI),N.fill()}}function ae(){if(!a.value)return;const N=V();if(!N){a.value=!1;return}if(d.tool==="paint"){w(),a.value=!1,N.globalCompositeOperation="source-over";return}if(d.tool==="line")N.globalCompositeOperation="source-over",L(N),N.beginPath(),N.moveTo(y,k),N.lineTo(h,f),N.stroke();else if(d.tool==="rect"){N.globalCompositeOperation="source-over",L(N);const F=Math.min(y,h),H=Math.min(k,f),he=Math.abs(h-y),G=Math.abs(f-k);N.strokeRect(F,H,he,G)}else if(d.tool==="circle"){N.globalCompositeOperation="source-over",L(N);const F=Math.sqrt((h-y)**2+(f-k)**2);N.beginPath(),N.arc(y,k,Math.max(F,1),0,2*Math.PI),N.stroke()}w(),a.value=!1,N.globalCompositeOperation="source-over"}function ne(){const N=V(),F=g.value;if(!N||F.length<2){g.value=[],w();return}Y(),N.globalCompositeOperation="source-over",L(N),N.beginPath(),N.moveTo(F[0].x,F[0].y);for(let H=1;H<F.length;H++)N.lineTo(F[H].x,F[H].y);N.closePath(),N.stroke(),g.value=[],w(),N.globalCompositeOperation="source-over"}function v(){const N=r.value;if(!N||m.value.length===0)return;const F=N.getContext("2d",{willReadFrequently:!0});if(!F)return;const H=m.value[m.value.length-1];m.value=m.value.slice(0,-1),F.setTransform(1,0,0,1,0,0),F.putImageData(H,0,0);const he=window.devicePixelRatio||1;F.scale(he,he)}function M(){const N=r.value;if(!N)return;const F=N.getContext("2d",{willReadFrequently:!0});if(!F)return;const H=window.devicePixelRatio||1;F.setTransform(1,0,0,1,0,0),F.clearRect(0,0,N.width,N.height),F.scale(H,H),g.value=[],m.value=[],w()}function B(){return r.value}return e.watch(()=>d.tool,(N,F)=>{F==="polygon"&&N!=="polygon"&&(g.value=[],w())}),e.onMounted(()=>{p().then(()=>{var F;x();const N=(F=o.value)==null?void 0:F.parentElement;N&&typeof ResizeObserver<"u"&&(b=new ResizeObserver(x),b.observe(N))})}),e.onBeforeUnmount(()=>{b==null||b.disconnect(),b=null}),n({clear:M,getCanvas:B,finishPolygon:ne,undo:v,canUndo:()=>m.value.length>0}),(N,F)=>(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:j,onMouseup:ae,onDblclick:de,onMouseleave:F[0]||(F[0]=()=>{te(),ae()})},[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(c.value)},null,4),[[e.vShow,t.tool==="eraser"&&i.value]])],34))}}),[["__scopeId","data-v-8a5ff1c1"]]),vy={class:"add-data-modal__dialog bg-white rounded-2xl shadow-2xl border border-slate-200 w-full max-w-5xl max-h-[90vh] flex flex-col overflow-hidden"},Ly={class:"flex items-center justify-between px-6 py-4 border-b border-slate-200"},Ty={class:"grid grid-cols-1 lg:grid-cols-2 min-h-0 flex-1"},Ay={class:"px-6 py-5 border-b lg:border-b-0 lg:border-r border-slate-200 overflow-y-auto"},My={class:"block mb-4"},Fy={class:"block mb-4"},Dy={key:0,class:"mb-4"},Py={key:1,class:"mb-4"},zy={class:"block mb-4"},Iy={class:"relative"},Ry={key:0,class:"absolute left-0 right-0 top-full z-10 mt-1 max-h-48 overflow-y-auto rounded-lg border border-slate-200 bg-white shadow-lg"},jy=["onMousedown"],Oy={key:0,class:"px-3 py-2 text-sm text-slate-500"},Uy={key:1,class:"px-3 py-2 text-sm text-slate-500"},qy={class:"flex flex-col items-center text-center gap-3 px-4 py-8"},Hy={class:"w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center"},Wy={class:"text-sm text-slate-600 leading-relaxed"},Yy={key:0,class:"text-sm font-medium text-slate-700"},Gy=["accept"],Zy={key:2,class:"mb-4 text-sm text-red-600"},Ky={class:"flex items-center gap-3"},Xy=["disabled"],Jy=["disabled"],Qy={class:"px-6 py-5 bg-slate-50 overflow-y-auto flex flex-col justify-center"},eh={class:"rounded-xl border border-slate-200 bg-white p-4 space-y-2"},th={class:"text-sm text-slate-700"},nh={class:"text-sm text-slate-700"},oh={key:0,class:"text-sm text-slate-700"},rh={class:"text-sm text-slate-500 leading-relaxed"},mr="client-layer-preview",ko="add-data-preview",Wl="add-data",wo="4326",lh=Fe(e.defineComponent({name:"MapAddDataPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Ke(),{registerClientLayer:l}=tr(),{activateTemporaryLayer:s,deactivateTemporaryLayer:i,clearTemporaryLayers:d}=Nn(r.map),u=e.ref("file"),c=gd,p=Vl(),a=e.ref(""),g=e.ref(""),m=e.ref(null),y=e.ref(wo),k=e.ref("EPSG:4326"),h=e.ref([{id:wo,text:"EPSG:4326"}]),f=e.ref(null),b=e.ref(""),x=e.ref(!1),C=e.ref(!1),V=e.ref(!1),_=e.ref(!1),w=e.ref(null);let $=null;const L=e.computed(()=>a.value.trim()?u.value==="geometry"?!!g.value.trim():!!(m.value&&y.value):!1),Y=e.computed(()=>L.value),Q=e.computed(()=>{if(!f.value)return null;const U=Array.isArray(f.value.features)?f.value.features:[],q=[...new Set(U.map(oe=>{var ye;return(ye=oe==null?void 0:oe.geometry)==null?void 0:ye.type}).filter(Boolean))].join(", ")||"—",ee=Qo(f.value),z=ee?`${ee[0][1].toFixed(5)}, ${ee[0][0].toFixed(5)} — ${ee[1][1].toFixed(5)}, ${ee[1][0].toFixed(5)}`:null;return{featureCount:U.length,geometryTypes:q,boundsText:z}});function j(U){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:U}))}function te(){i(mr,ko),j({action:"deactivate",owner:ko,spec:{id:mr}})}function de(U){const q={id:mr,title:a.value.trim()||"Попередній перегляд",type:"geojson",data:U};s(q,{},ko),j({action:"activate",owner:ko,spec:q});const ee=Qo(U);ee&&r.fitBounds&&r.fitBounds(ee,{padding:48,duration:600})}function be(U){if(!U||typeof U!="object")return null;const q=U,ee=q.id??q.srid??q.code??q.value;if(ee==null||ee==="")return null;const z=String(ee),oe=q.text??q.name??q.title??q.label,ye=oe?String(oe):`EPSG:${z}`;return{id:z,text:ye.includes(z)?ye:`${ye} (${z})`}}async function ae(U="",q=!1){try{V.value=!0;const ee=U.trim(),z=ee?`/api/suggest/srid?key=${encodeURIComponent(ee)}`:"/api/suggest/srid",oe=await fetch(z);if(!oe.ok){h.value=[];return}const ye=await oe.json(),T=(Array.isArray(ye==null?void 0:ye.data)?ye.data:Array.isArray(ye)?ye:[]).map(be).filter(Boolean);if(T.length){if(h.value=T,q){const X=T.find(fe=>fe.id===wo)||T[0];ne(X,!1)}return}h.value=[]}catch(ee){console.error("Failed to load SRID classifier:",ee)}finally{V.value=!1}}function ne(U,q=!0){y.value=U.id,k.value=U.text,q&&(C.value=!1)}function v(){const U=k.value.trim(),q=h.value.find(ee=>ee.id===y.value);(!q||U!==q.id&&U!==q.text)&&(y.value=""),C.value=!0,$&&clearTimeout($),$=setTimeout(()=>{ae(U)},300)}function M(){setTimeout(()=>{C.value=!1},150)}function B(U){var ee;const q=[U,U==null?void 0:U.data,U==null?void 0:U.result,U==null?void 0:U.geojson];for(const z of q){const oe=El(z);if((ee=oe==null?void 0:oe.features)!=null&&ee.length)return oe}return null}async function N(){var ee,z;if(b.value="",u.value==="geometry"){let oe;try{oe=JSON.parse(g.value.trim())}catch{throw new Error("Некоректний JSON у полі геометрії")}const ye=El(oe);if(!((ee=ye==null?void 0:ye.features)!=null&&ee.length))throw new Error("Не вдалося розпізнати геометрію GeoJSON");return ye}if(!m.value)throw new Error(`Оберіть файл (${p})`);const U=await xd(m.value,y.value),q=B(U);if(!((z=q==null?void 0:q.features)!=null&&z.length))throw new Error("Не вдалося розпізнати геометрію у файлі");return q}async function F(){x.value=!0,b.value="";try{const U=await N();f.value=U,te(),de(U)}catch(U){f.value=null,te(),b.value=(U==null?void 0:U.message)||"Не вдалося підготувати попередній перегляд"}finally{x.value=!1}}async function H(){if(!f.value&&(await F(),!f.value))return;const U=`client-layer-${Date.now()}`,q={id:U,title:a.value.trim(),type:"geojson",data:f.value};te(),s(q,{},Wl),j({action:"activate",owner:Wl,spec:q});const ee=Qo(f.value),z=a.value.trim();l({id:U,name:z,bounds:ee,data:f.value}),window.dispatchEvent(new CustomEvent(Vn,{detail:{id:U,name:z,bounds:ee}})),ee&&r.fitBounds&&r.fitBounds(ee,{padding:48,duration:600}),o("close")}function he(U){if(!U){m.value=null;return}if(!Nl(U)){b.value=`Підтримуються формати: ${p}`,m.value=null,f.value=null,te();return}m.value=U,f.value=null,te(),b.value=""}function G(U){var ee;const q=U.target;he(((ee=q.files)==null?void 0:ee[0])||null)}function D(U){var q,ee;_.value=!1,he(((ee=(q=U.dataTransfer)==null?void 0:q.files)==null?void 0:ee[0])||null)}return e.watch(u,()=>{f.value=null,b.value="",te()}),e.onMounted(()=>{ae(wo,!0)}),e.onBeforeUnmount(()=>{$&&clearTimeout($),te()}),(U,q)=>(e.openBlock(),e.createElementBlock("div",{class:"add-data-modal fixed inset-0 z-[1200] flex items-center justify-center p-4 pointer-events-auto",onClick:q[9]||(q[9]=e.withModifiers(ee=>o("close"),["self"]))},[e.createElementVNode("div",vy,[e.createElementVNode("div",Ly,[q[10]||(q[10]=e.createElementVNode("h2",{class:"text-lg font-semibold text-slate-800"},"Додавання даних",-1)),e.createElementVNode("button",{type:"button",class:"w-8 h-8 inline-flex items-center justify-center rounded-lg text-slate-500 hover:bg-slate-100 hover:text-slate-700","aria-label":"Закрити",onClick:q[0]||(q[0]=ee=>o("close"))},[e.createVNode(e.unref(ge.X),{size:18})])]),e.createElementVNode("div",Ty,[e.createElementVNode("div",Ay,[e.createElementVNode("label",My,[q[12]||(q[12]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Формат даних "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":q[1]||(q[1]=ee=>u.value=ee),class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50"},[...q[11]||(q[11]=[e.createElementVNode("option",{value:"file"},"Файл",-1),e.createElementVNode("option",{value:"geometry"},"Геометрія",-1)])],512),[[e.vModelSelect,u.value]])]),e.createElementVNode("label",Fy,[q[13]||(q[13]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":q[2]||(q[2]=ee=>a.value=ee),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"Введіть назву"},null,512),[[e.vModelText,a.value]])]),u.value==="geometry"?(e.openBlock(),e.createElementBlock("div",Dy,[q[14]||(q[14]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Геометрія (GeoJSON) "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":q[3]||(q[3]=ee=>g.value=ee),rows:"10",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm font-mono text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50 resize-y",placeholder:'{"type":"Polygon","coordinates":[[[30.5,50.4],[30.6,50.4],[30.6,50.5],[30.5,50.5],[30.5,50.4]]]}'},null,512),[[e.vModelText,g.value]]),q[15]||(q[15]=e.createElementVNode("p",{class:"mt-1.5 text-xs text-slate-500"}," Вставте GeoJSON-геометрію, Feature або FeatureCollection. ",-1))])):(e.openBlock(),e.createElementBlock("div",Py,[e.createElementVNode("label",zy,[q[16]||(q[16]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Проекція "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.createElementVNode("div",Iy,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":q[4]||(q[4]=ee=>k.value=ee),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"EPSG:4326",autocomplete:"off",onFocus:q[5]||(q[5]=ee=>C.value=!0),onInput:v,onBlur:M},null,544),[[e.vModelText,k.value]]),C.value?(e.openBlock(),e.createElementBlock("div",Ry,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,ee=>(e.openBlock(),e.createElementBlock("button",{key:ee.id,type:"button",class:"block w-full px-3 py-2 text-left text-sm text-slate-700 hover:bg-blue-50 hover:text-blue-700",onMousedown:e.withModifiers(z=>ne(ee),["prevent"])},e.toDisplayString(ee.text),41,jy))),128)),!h.value.length&&!V.value?(e.openBlock(),e.createElementBlock("p",Oy," Нічого не знайдено ")):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("p",Uy," Пошук... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["add-data-modal__dropzone",{"add-data-modal__dropzone--active":_.value}]),onDragover:q[6]||(q[6]=e.withModifiers(ee=>_.value=!0,["prevent"])),onDragleave:q[7]||(q[7]=e.withModifiers(ee=>_.value=!1,["prevent"])),onDrop:e.withModifiers(D,["prevent"]),onClick:q[8]||(q[8]=ee=>{var z;return(z=w.value)==null?void 0:z.click()})},[e.createElementVNode("div",qy,[e.createElementVNode("div",Hy,[e.createVNode(e.unref(ge.Upload),{size:22})]),e.createElementVNode("p",Wy," Ви можете підключити власний файл у форматах "+e.toDisplayString(e.unref(p))+". Для цього перетягніть файл зі свого сховища у цю область або завантажте з комп'ютера ",1),q[17]||(q[17]=e.createElementVNode("p",{class:"text-xs text-slate-400"},"Максимальний розмір: 50MB",-1)),m.value?(e.openBlock(),e.createElementBlock("p",Yy,e.toDisplayString(m.value.name),1)):e.createCommentVNode("",!0)]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:w,type:"file",accept:e.unref(c),class:"hidden",onChange:G},null,40,Gy)],34)])),b.value?(e.openBlock(),e.createElementBlock("p",Zy,e.toDisplayString(b.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Ky,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-white bg-slate-800 hover:bg-slate-900 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!Y.value||x.value,onClick:H}," Додати ",8,Xy),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-slate-700 border border-slate-300 bg-white hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!L.value||x.value,onClick:F}," Попередній перегляд ",8,Jy)])]),e.createElementVNode("div",Qy,[Q.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[q[21]||(q[21]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Попередній перегляд ",-1)),e.createElementVNode("div",eh,[e.createElementVNode("p",th,[q[18]||(q[18]=e.createElementVNode("span",{class:"font-medium"},"Об'єктів:",-1)),e.createTextVNode(" "+e.toDisplayString(Q.value.featureCount),1)]),e.createElementVNode("p",nh,[q[19]||(q[19]=e.createElementVNode("span",{class:"font-medium"},"Тип:",-1)),e.createTextVNode(" "+e.toDisplayString(Q.value.geometryTypes),1)]),Q.value.boundsText?(e.openBlock(),e.createElementBlock("p",oh,[q[20]||(q[20]=e.createElementVNode("span",{class:"font-medium"},"Межі:",-1)),e.createTextVNode(" "+e.toDisplayString(Q.value.boundsText),1)])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[q[22]||(q[22]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Немає даних для попереднього перегляду ",-1)),e.createElementVNode("p",rh,[u.value==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Для продовження завантажте файл та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Для продовження вставте геометрію та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64))])],64))])])])]))}}),[["__scopeId","data-v-d53011ce"]]),Yl=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var g,m;const n=t,o=((m=(g=e.getCurrentInstance())==null?void 0:g.appContext.config.globalProperties)==null?void 0:m.$settings)||null,{map:r,ready:l}=Ke();let s=null;function i(){s==null||s.remove(),s=null}function d(y){if(!y)return null;if(typeof y=="string")try{y=JSON.parse(y)}catch{return null}return y.type==="FeatureCollection"?y:y.type==="Feature"?{type:"FeatureCollection",features:[y]}:y.type&&Array.isArray(y.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:y,properties:{}}]}:Array.isArray(y.features)?{type:"FeatureCollection",features:y.features}:y.geometry?d(y.geometry):null}function u(y){var f,b,x;return{type:"line",color:"#8e4484",width:2,opacity:((((x=(b=(f=y==null?void 0:y.features)==null?void 0:f[0])==null?void 0:b.geometry)==null?void 0:x.type)||"").includes("Polygon"),.95)}}async function c(y){const k=await fetch(y);if(!k.ok)throw new Error(String(k.status));return k.json()}async function p(y,k){if(y){const h=/^https?:\/\//.test(y)?y:new URL(y,location.origin).toString(),f=await c(h).catch(()=>null),b=d(f);if(b)return b}if(k){const h=await c(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(k)}`).catch(()=>null),f=d(h);if(f)return f}return null}async function a(){var f,b,x,C;if(!n.layerId||!r.value){i();return}typeof l=="function"&&await l().catch(()=>{});const y=n.boundary??((f=n.settingsMap)==null?void 0:f.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,k=n.katottg??((x=n.settingsMap)==null?void 0:x.katottg)??((C=o==null?void 0:o.map)==null?void 0:C.katottg)??null;if(!y&&!k){i();return}const h=await p(y,k);if(!h){i();return}i(),s=qe(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:u(h)},r)}return e.watch(()=>{var y,k;return[n.layerId,n.boundary,n.katottg,(y=n.settingsMap)==null?void 0:y.boundary,(k=n.settingsMap)==null?void 0:k.katottg,r.value]},()=>{a()},{immediate:!0}),e.onBeforeUnmount(i),(y,k)=>null}}),ah={key:3,class:"absolute bottom-16 right-4 z-[120] pointer-events-auto"},sh={key:4,class:"absolute bottom-4 right-4 z-[120] flex items-end gap-2 pointer-events-auto"},ih={class:"absolute top-[6.5px] right-[6.5px] z-[130] flex flex-col items-end gap-1 pointer-events-auto"},ch=["aria-label","disabled"],dh={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"},uh=["aria-label"],fh={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"},mh=["aria-label"],ph={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"},gh=["aria-label"],yh={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"},hh=["aria-label"],bh={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"},xh={class:"map-widget__overlay-grid"},kh={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},wh={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},_h={class:"map-widget__stack"},Eh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Ch={class:"map-widget__stack map-widget__stack--bottom"},Nh={key:0,class:"map-widget__state"},Vh={key:1,class:"map-widget__state map-widget__state--error"},_o=Fe(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var Uo,wn,Xn,qo;const n=t;console.log("props.data",n.data);const o=He.useRoute(),r=He.useRouter(),l=e.ref(null),s=e.ref({}),i=e.ref(null),d=e.ref(!1),u=e.ref(null),c=e.ref(!1),p=e.ref([]),a=e.ref([]),g=e.ref(null),m=e.ref(!1),{resolveMapLegendItems:y}=Ml(),k=Hl(),h=e.ref(null),f=e.computed(()=>h.value==="route"),b=e.computed(()=>h.value==="ruler"),x=e.computed(()=>h.value==="height"),C=e.computed(()=>h.value==="draw"),V=e.computed(()=>h.value==="geolocation"),_=e.computed(()=>h.value==="add-data"),w=e.ref(null),$=e.ref("general"),L=e.ref(null),Y=e.ref(null),Q=e.ref(null),j=e.ref("pen"),te=e.ref("#2563eb"),de=e.ref(3),be=e.ref([]),ae=e.ref(null),ne=e.ref(null),v=e.ref([]),M=e.ref(!1),B=e.ref(null),N=e.ref(!1),F=e.ref(null),H=e.computed(()=>n.id||"main"),he=e.computed(()=>{var R,le;return{height:((R=n.height)==null?void 0:R.trim())||((le=s.value)==null?void 0:le.height)||"calc(100vh - 65px)"}}),G=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.name)??null}),D=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.description)??null}),U=e.computed(()=>{var R;return Ae((R=s.value)==null?void 0:R.maps)}),q=e.computed(()=>{var le,Te;const R=((le=s.value)==null?void 0:le.minZoom)??((Te=s.value)==null?void 0:Te.minzoom)??null;return typeof R=="number"?R:null}),ee=e.computed(()=>{var le,Te;const R=((le=s.value)==null?void 0:le.maxZoom)??((Te=s.value)==null?void 0:Te.maxzoom)??null;return typeof R=="number"?R:typeof n.maxZoom=="number"?n.maxZoom:20}),z=e.ref(null),oe=e.computed(()=>{if(!z.value)return null;const{lng:R,lat:le}=z.value;return`${le.toFixed(6)}, ${R.toFixed(6)}`}),ye=e.computed(()=>{var R;return((R=l.value)==null?void 0:R.ctx)??null}),we=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.minimap)??null});function T(R){a.value=R.basemaps,g.value=R.selectedId}function X(){m.value=!m.value}function fe(){m.value=!1}function ie(R){if(!R||typeof R!="object")return R;const le=Wt(R.center);return le?{...R,center:le}:R}const ce=((wn=(Uo=e.getCurrentInstance())==null?void 0:Uo.appContext.config.globalProperties)==null?void 0:wn.$settings)||null;function pe(R){if(R==null)return null;const le=Number(typeof R=="string"?R.trim():R);return Number.isFinite(le)?le:null}const K=Wt((Xn=ce==null?void 0:ce.map)==null?void 0:Xn.center),Z=pe((qo=ce==null?void 0:ce.map)==null?void 0:qo.zoom),ke=e.computed(()=>{const R=(ce==null?void 0:ce.map)||null,le=(R==null?void 0:R.boundary)??null,Te=(R==null?void 0:R.katottg)??null;return!le&&!Te?null:{boundary:le,katottg:Te}});function ve(R){return typeof R=="string"&&R.trim()?R.trim().toLowerCase():"top-left"}function Ae(R){return Array.isArray(R)?R:R&&typeof R=="object"?Object.values(R).filter(Boolean):[]}const $e=e.computed(()=>{var R;return Ae((R=s.value)==null?void 0:R.widgets)}),Je=e.computed(()=>$e.value.some(R=>(R==null?void 0:R.type)==="catalog"));function Re(R){return y(R,{hasCatalogWidget:Je.value})}const at=e.computed(()=>$e.value.some(R=>(R==null?void 0:R.type)==="basemaps")),et=e.computed(()=>$e.value.some(R=>(R==null?void 0:R.type)==="layers")),nt=["left","right"],P=e.computed(()=>{const R={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},le={"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 $e.value.forEach(Te=>{const De=ve(Te.position),Be=le[De]??{side:"left",align:"top"};R[Be.side][Be.align].push(Te)}),R});function me(R){return Array.isArray(R)?R[0]??null:typeof R=="string"?R:null}async function A(){var le;await e.nextTick();const R=(le=l.value)==null?void 0:le.ctx;return R?(R.ready&&await R.ready(),R):null}function W(){var R,le,Te;return((Te=(le=(R=l.value)==null?void 0:R.ctx)==null?void 0:le.map)==null?void 0:Te.value)??null}function J(){const R=W();if(!R)return null;const le=R.getCenter();return{z:R.getZoom().toFixed(2),x:le.lng.toFixed(5),y:le.lat.toFixed(5)}}async function xe(){var Te;const R=await A(),le=(Te=R==null?void 0:R.map)==null?void 0:Te.value;le&&(typeof q.value=="number"&&le.setMinZoom(q.value),typeof ee.value=="number"&&le.setMaxZoom(ee.value))}async function Ve(){var Be;if(i.value)return;const R=await A(),le=(Be=R==null?void 0:R.map)==null?void 0:Be.value;if(!le)return;const Te=le.getCenter(),De=le.getZoom();i.value={center:[Te.lng,Te.lat],zoom:De}}function I(){if(Oe.value)return;const R=J();if(!R)return;const le=me(o.query.x),Te=me(o.query.y),De=me(o.query.z);le===R.x&&Te===R.y&&De===R.z||(Qe.value=R,r.replace({query:{...o.query,...R}}).catch(()=>{}))}function se(R,le,Te=1e-6){return Math.abs(R-le)<=Te}async function re(){var S;if(Xe())return;const R=await A(),le=(S=R==null?void 0:R.map)==null?void 0:S.value;if(!R||!le)return;const Te=parseFloat(me(o.query.x)??""),De=parseFloat(me(o.query.y)??""),Be=parseFloat(me(o.query.z)??""),Ie=!Number.isNaN(Te),je=!Number.isNaN(De),Le=!Number.isNaN(Be);let E=!1;Oe.value=!0;try{if(Ie&&je){const O=le.getCenter();(!se(O.lng,Te)||!se(O.lat,De))&&(le.setCenter([Te,De]),E=!0)}if(Le){const O=le.getZoom();se(O,Be,.001)||(le.setZoom(Be),E=!0)}(!Ie||!je||!Le||E)&&I()}finally{Oe.value=!1}}let Ne=null,Se=null;const Oe=e.ref(!1),Qe=e.ref(null);function Xe(){const R=Qe.value;if(!R)return!1;const le=me(o.query.x),Te=me(o.query.y),De=me(o.query.z);return le===R.x&&Te===R.y&&De===R.z?(Qe.value=null,!0):!1}function st(R){const le=R==null?void 0:R.lngLat;le&&(z.value={lng:le.lng,lat:le.lat})}let ct=null;function wt(R){typeof window>"u"||window.dispatchEvent(new CustomEvent(so,{detail:R}))}function Ft(R){if(!R)return null;if(typeof R=="string")try{return JSON.parse(R)}catch{return null}return R}async function yn(R){const le=await fetch(`/api/map-format?${R.toString()}`);if(!le.ok)throw new Error(`API returned ${le.status}`);return le.json()}function Ut(){const R=W();return R?Object.entries(qe()).filter(([,le])=>{var O,ue,_e,Ee,Me,ze,Ue;const Te=(ue=(O=le==null?void 0:le.opts)==null?void 0:O.source)==null?void 0:ue.type,De=(Ee=(_e=le==null?void 0:le.opts)==null?void 0:_e.layer)==null?void 0:Ee.type,Be=(((Me=le==null?void 0:le.opts)==null?void 0:Me.service)||"").toString().toLowerCase(),Ie=Array.isArray(le==null?void 0:le.card)?le.card.length>0:!!(le!=null&&le.card),je=Array.isArray(le==null?void 0:le.popup)?le.popup.length>0:!!(le!=null&&le.popup),Le=(ze=le==null?void 0:le.ids)==null?void 0:ze.sourceId;if(Te!=="raster"&&De!=="raster"||Be!=="cartocss"&&!Ie&&!je||!Le||!R.getSource(Le))return!1;const S=(((Ue=R.getStyle())==null?void 0:Ue.layers)||[]).filter(Ge=>Ge.source===Le);return S.length?S.some(Ge=>{try{return R.getLayoutProperty(Ge.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([le])=>le):[]}function hn(R){const le=W();return le?(le.queryRenderedFeatures(R==null?void 0:R.point)||[]).filter(De=>{var Le,E,S,O,ue;if(!((Le=De==null?void 0:De.properties)!=null&&Le.id))return!1;const Be=qe(De.source);if(!Be)return!1;const Ie=(S=(E=Be==null?void 0:Be.opts)==null?void 0:E.source)==null?void 0:S.type,je=(ue=(O=Be==null?void 0:Be.opts)==null?void 0:O.layer)==null?void 0:ue.type;return Ie!=="raster"&&je!=="raster"}):[]}async function Jr(R){var Ie,je,Le,E,S;const le=(Ie=R==null?void 0:R.lngLat)==null?void 0:Ie.lng,Te=(je=R==null?void 0:R.lngLat)==null?void 0:je.lat;if(typeof le!="number"||typeof Te!="number")return[];const De=Ut();if(!De.length)return[];const Be=[];for(let O=0;O<De.length;O+=1){const ue=De[O],_e=new URLSearchParams({layer:ue,lat:Te.toFixed(6),lng:le.toFixed(6)});try{const Ee=await yn(_e),Me=Ft(((Le=Ee==null?void 0:Ee.data)==null?void 0:Le.geom)??(Ee==null?void 0:Ee.geom)??null),ze=((E=Ee==null?void 0:Ee.data)==null?void 0:E.id)??(Ee==null?void 0:Ee.id);if(ze!=null){const Ue=await yn(new URLSearchParams({layer:ue,id:String(ze)})),Ge=typeof(Ue==null?void 0:Ue.html)=="string"?Ue.html:null,ot=Ft(((S=Ue==null?void 0:Ue.data)==null?void 0:S.geom)??(Ue==null?void 0:Ue.geom)??null);if(Ge||ot){Be.push({html:Ge,geometry:ot??Me,infoToken:`external:${ue},${String(ze)}`});continue}}Ll({html:Ee==null?void 0:Ee.html})&&Be.push({html:Ee.html,geometry:Me,infoToken:null})}catch{}}return Be}async function bn(R){var Be,Ie;const le=R==null?void 0:R.lngLat;if(h.value==="height"&&le){await k.measureAt({lat:le.lat,lng:le.lng});return}p.value.includes("route")&&f.value&&le&&((Be=w.value)==null||Be.addPoint({lat:le.lat,lng:le.lng})),p.value.includes("ruler")&&b.value&&le&&((Ie=L.value)==null||Ie.addPoint({lat:le.lat,lng:le.lng}));const Te=hn(R),De=await Jr(R).catch(()=>[]);wt({features:Te,externalItems:De})}function Qr(){var R,le;h.value==="ruler"?(v.value=[],M.value=!1,(R=L.value)==null||R.clearPoints(),h.value=null):(h.value==="route"&&(be.value=[],ae.value=null,(le=w.value)==null||le.clearPoints()),B.value=null,F.value=null,h.value="ruler")}function Io(){if(h.value==="height"){k.reset(),h.value=null;return}k.reset(),h.value="height"}function el(){var R,le,Te;h.value==="route"?(be.value=[],ae.value=null,(R=w.value)==null||R.clearPoints(),h.value=null):(h.value==="ruler"&&(v.value=[],M.value=!1,(le=L.value)==null||le.clearPoints()),B.value=null,F.value=null,be.value=[],ae.value=null,(Te=w.value)==null||Te.clearPoints(),h.value="route")}function tl(){h.value=null,v.value=[],M.value=!1}function Hn(){k.reset(),h.value=null}function nl(){h.value=null,be.value=[],ae.value=null,ne.value=null}function ol(){var R;h.value==="draw"?h.value=null:(h.value==="route"&&(be.value=[],ae.value=null,(R=w.value)==null||R.clearPoints()),B.value=null,F.value=null,h.value="draw")}function rl(){h.value==="add-data"?h.value=null:(B.value=null,F.value=null,h.value="add-data")}function ll(){var R;if(h.value==="geolocation"&&B.value!=null){Yn();return}if(h.value==="route"&&(be.value=[],ae.value=null,(R=w.value)==null||R.clearPoints()),F.value=null,N.value=!0,!navigator.geolocation){F.value="Геолокація не підтримується браузером",N.value=!1;return}navigator.geolocation.getCurrentPosition(le=>{const Te=le.coords.latitude,De=le.coords.longitude;B.value={lat:Te,lng:De},F.value=null,N.value=!1,h.value="geolocation",A().then(Be=>{Be!=null&&Be.flyTo&&Be.flyTo({center:[De,Te],zoom:15})})},()=>{F.value="Не вдалося визначити місце розташування",N.value=!1},{enableHighAccuracy:!0})}function Wn(){h.value=null,B.value=null,F.value=null}function Yn(){const R=B.value;R!=null&&A().then(le=>{le!=null&&le.flyTo&&le.flyTo({center:[R.lng,R.lat],zoom:15})})}function Ro(R){v.value=R}function Gn(R){be.value=R}function xn(R){ae.value=(R==null?void 0:R.geometry)??null,ne.value=null}function jo(R){ne.value=R}function al(R){if(!R)return;const le=[];if(R.type==="LineString"?le.push(...R.coordinates):R.coordinates.forEach(De=>le.push(...De)),!le.length)return;const Te=le.reduce((De,[Be,Ie])=>(De[0]=[Math.min(De[0][0],Be),Math.min(De[0][1],Ie)],De[1]=[Math.max(De[1][0],Be),Math.max(De[1][1],Ie)],De),[[le[0][0],le[0][1]],[le[0][0],le[0][1]]]);A().then(De=>{var Be;(Be=De==null?void 0:De.fitBounds)==null||Be.call(De,Te,{padding:72,duration:600,maxZoom:16})})}function Oo(){var R;(R=Q.value)==null||R.clear()}function Zn(){var R;(R=Q.value)==null||R.finishPolygon()}function kn(){var R;(R=Q.value)==null||R.undo()}function sl(){var Be,Ie,je,Le;const R=(je=(Ie=(Be=l.value)==null?void 0:Be.ctx)==null?void 0:Ie.map)==null?void 0:je.value,le=(Le=Q.value)==null?void 0:Le.getCanvas();if(!R||!le)return;const Te=(E,S)=>{const O=document.createElement("a");O.download=S,O.rel="noopener",typeof E=="string"?O.href=E:(O.href=URL.createObjectURL(E),setTimeout(()=>URL.revokeObjectURL(O.href),100)),document.body.appendChild(O),O.click(),document.body.removeChild(O)},De=()=>{const E=R.getCanvas();if(!E)return;const S=E.width,O=E.height;if(S<=0||O<=0)return;const ue=document.createElement("canvas");ue.width=S,ue.height=O;const _e=ue.getContext("2d");if(!_e)return;_e.drawImage(E,0,0),_e.drawImage(le,0,0,le.width,le.height,0,0,S,O);const Ee=`map-drawing-${Date.now()}.png`;ue.toBlob(Me=>{if(Me){Te(Me,Ee);return}try{const ze=ue.toDataURL("image/png");Te(ze,Ee)}catch{const ze=document.createElement("canvas");ze.width=le.width,ze.height=le.height;const Ue=ze.getContext("2d");Ue&&(Ue.drawImage(le,0,0),ze.toBlob(Ge=>Ge&&Te(Ge,Ee),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(De))}async function il(){const R=await A();R!=null&&R.on&&(Ne==null||Ne(),Ne=R.on("moveend",I),Se==null||Se(),Se=R.on("mousemove",st),ct==null||ct(),ct=R.on("click",bn))}e.onUnmounted(()=>{Ne==null||Ne(),Ne=null,Se==null||Se(),Se=null,ct==null||ct(),ct=null});async function Et(R=!1,le=!1){var De,Be;le||(c.value=!1,u.value=null,z.value=null);const Te=R||!n.data;le||(d.value=Te);try{const Ie=Te?await(async()=>{const O=await fetch(`/api/gis-map/${encodeURIComponent(H.value)}`);if(!O.ok)throw new Error(`Помилка завантаження (${O.status})`);return O.json()})():n.data;Te||(c.value=!0);const je=Wt(Ie.center)??K,Le=Ae(Ie.layers).map(O=>ie(O)),E=pe(Ie.zoom)??Z;s.value={...Ie,center:je??null,zoom:E??Ie.zoom??null,layers:Le,widgets:Ie.widgets},p.value=Ie.tools||["home","print","ruler","draw","add-data"];const S=await A();S&&(je&&((De=S.setCenter)==null||De.call(S,je)),E!=null&&((Be=S.setZoom)==null||Be.call(S,E)),i.value||await Ve()),await xe(),await re(),le||await il(),c.value=!0}catch(Ie){u.value=(Ie==null?void 0:Ie.message)||"Не вдалося завантажити карту"}finally{Te&&!le&&(d.value=!1)}}const Kn=e.computed(()=>{var De;const R=new Map;return Ae((De=s.value)==null?void 0:De.layers).forEach(Be=>{if(!(Be!=null&&Be.id))return;const Ie=ie(Be)||Be;R.set(Be.id,{...Ie})}),$e.value.filter(Be=>(Be==null?void 0:Be.type)==="layers").flatMap(Be=>{var Ie;return Ae((Ie=Be==null?void 0:Be.config)==null?void 0:Ie.layers)}).forEach(Be=>{if(!(Be!=null&&Be.id))return;const Ie=R.get(Be.id)||{},je=ie(Be)||Be;R.set(Be.id,{...Ie,...je,actions:Be.actions||Ie.actions||null,name:Ie.name||Be.name||Be.title||Ie.title||Be.id,title:Ie.title||Be.title||Ie.name||null,visible:Ie.visible??Be.visible??!0})}),Array.from(R.values())}),qt=e.ref([]);function tn(R){qt.value.includes(R)?qt.value=qt.value.filter(le=>le!==R):qt.value.push(R)}const rt=e.computed(()=>R=>qt.value.includes(R.id));return e.watch([q,ee],()=>{xe()},{immediate:!0}),e.watch(H,()=>{Et(!0)}),e.watch(()=>n.data,R=>{R&&Et(!1,!0)},{deep:!0}),e.onMounted(()=>{Et()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{re()}),e.watch(()=>ae.value,R=>{!R||!f.value||al(R)},{deep:!0}),(R,le)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(he.value)},[le[10]||(le[10]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(to,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var Te,De,Be,Ie;return[at.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(rn,{key:0,class:"hidden",onStateChange:T})),c.value&&!d.value&&!et.value?e.withDirectives((e.openBlock(),e.createBlock(or,{key:1,layers:Kn.value,onAction:le[0]||(le[0]=je=>tn(je.layerId))},null,8,["layers"])),[[e.vShow,!1]]):e.createCommentVNode("",!0),ke.value?(e.openBlock(),e.createBlock(Yl,{key:2,"layer-id":"app-boundary",boundary:ke.value.boundary,katottg:ke.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),ye.value&&p.value.includes("draw")&&C.value?(e.openBlock(),e.createElementBlock("div",ah,[e.createVNode($y,{ref_key:"drawingPanelRef",ref:Y,onClose:le[1]||(le[1]=je=>h.value=null),onClear:Oo,onDownload:sl,onFinishPolygon:Zn,onUndo:kn,"onUpdate:tool":le[2]||(le[2]=je=>j.value=je),"onUpdate:strokeColor":le[3]||(le[3]=je=>te.value=je),"onUpdate:strokeWidth":le[4]||(le[4]=je=>de.value=je)},null,512)])):e.createCommentVNode("",!0),ye.value?(e.openBlock(),e.createElementBlock("div",sh,[oe.value?(e.openBlock(),e.createBlock(Am,{key:0,coordinates:oe.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(Dm,{"map-context":ye.value,options:we.value},null,8,["map-context","options"]),p.value.includes("ruler")&&b.value?(e.openBlock(),e.createBlock(Ul,{key:1,ref_key:"rulerPanelRef",ref:L,onClose:tl,onTabChange:le[5]||(le[5]=je=>$.value=je),onPointsChange:Ro,onShapeClosedChange:le[6]||(le[6]=je=>M.value=je)},null,512)):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createBlock(uy,{key:2,onClose:Hn})):e.createCommentVNode("",!0),p.value.includes("geolocation")&&V.value?(e.openBlock(),e.createBlock(Yg,{key:3,position:B.value,onClose:Wn,onRecenter:Yn},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",ih,[e.createVNode(vm),p.value.includes("home")?(e.openBlock(),e.createBlock(Yt,{key:0,center:((Te=s.value)==null?void 0:Te.center)||((De=i.value)==null?void 0:De.center)||null,zoom:((Be=s.value)==null?void 0:Be.zoom)??((Ie=i.value)==null?void 0:Ie.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),p.value.includes("compare")?(e.openBlock(),e.createBlock(_m,{key:1,"has-compare-options":a.value.length>1,"is-compare-open":m.value,onToggle:X},null,8,["has-compare-options","is-compare-open"])):e.createCommentVNode("",!0),p.value.includes("print")?(e.openBlock(),e.createBlock(xm,{key:2})):e.createCommentVNode("",!0),p.value.includes("route")?(e.openBlock(),e.createBlock(qp,{key:3,ref_key:"routePanelRef",ref:w,active:f.value,onToggle:el,onClose:nl,onPointsChange:Gn,onInstructionHover:jo,onRouteChange:xn},null,8,["active"])):e.createCommentVNode("",!0),p.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:4,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",V.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":V.value?"Вимкнути геолокацію":"Ваше розташування",disabled:N.value,onClick:e.withModifiers(ll,["stop"])},[e.createElementVNode("span",dh,e.toDisplayString(V.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(ge.MapPin),{class:"w-4 h-4"})],10,ch)):e.createCommentVNode("",!0),p.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:5,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",b.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":b.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(Qr,["stop"])},[e.createElementVNode("span",fh,e.toDisplayString(b.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(ge.Ruler),{class:"w-4 h-4"})],10,uh)):e.createCommentVNode("",!0),p.value.includes("height")?(e.openBlock(),e.createElementBlock("button",{key:6,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",x.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти",onClick:e.withModifiers(Io,["stop"])},[e.createElementVNode("span",ph,e.toDisplayString(x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти"),1),e.createVNode(e.unref(ge.TrendingUp),{class:"w-4 h-4"})],10,mh)):e.createCommentVNode("",!0),p.value.includes("draw")?(e.openBlock(),e.createElementBlock("button",{key:7,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",C.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":C.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(ol,["stop"])},[e.createElementVNode("span",yh,e.toDisplayString(C.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(ge.Pen),{class:"w-4 h-4"})],10,gh)):e.createCommentVNode("",!0),p.value.includes("add-data")?(e.openBlock(),e.createElementBlock("button",{key:8,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",_.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":_.value?"Закрити додавання даних":"Додавання даних",onClick:e.withModifiers(rl,["stop"])},[e.createElementVNode("span",bh,e.toDisplayString(_.value?"Закрити додавання даних":"Додавання даних"),1),e.createVNode(e.unref(ge.Upload),{class:"w-4 h-4"})],10,hh)):e.createCommentVNode("",!0)]),c.value&&b.value&&v.value.length>0?(e.openBlock(),e.createBlock(ql,{key:5,points:v.value,"is-shape-closed":M.value,"label-mode":$.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),c.value&&p.value.includes("height")&&x.value?(e.openBlock(),e.createBlock(my,{key:6,point:e.unref(k).point.value},null,8,["point"])):e.createCommentVNode("",!0),c.value&&be.value.length>0?(e.openBlock(),e.createBlock(Hp,{key:7,points:be.value,"route-geometry":ae.value,"hover-geometry":ne.value},null,8,["points","route-geometry","hover-geometry"])):e.createCommentVNode("",!0),c.value&&B.value!=null?(e.openBlock(),e.createBlock(Gg,{key:8,position:B.value},null,8,["position"])):e.createCommentVNode("",!0),c.value&&C.value?(e.openBlock(),e.createBlock(Sy,{key:9,ref_key:"drawingCanvasRef",ref:Q,tool:j.value,"stroke-color":te.value,"stroke-width":de.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[_.value?(e.openBlock(),e.createBlock(lh,{key:0,onClose:le[7]||(le[7]=je=>h.value=null)})):e.createCommentVNode("",!0)])),c.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:10},[e.createElementVNode("div",xh,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(nt,je=>e.createElementVNode("div",{key:je,class:e.normalizeClass(["map-widget__side",`map-widget__side--${je}`])},[je==="left"?(e.openBlock(),e.createElementBlock("div",kh)):e.createCommentVNode("",!0),P.value[je].top.length?(e.openBlock(),e.createElementBlock("div",wh,[e.createElementVNode("div",_h,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value[je].top,Le=>{var E,S,O,ue,_e,Ee,Me;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Le.id||Le.type,class:"map-overlay__item"},[Le.type==="info"?(e.openBlock(),e.createBlock(_l,{key:0,title:((E=Le.config)==null?void 0:E.title)||Le.title||null,content:((S=Le.config)==null?void 0:S.content)||"",links:U.value,"map-name":G.value,"map-description":D.value},null,8,["title","content","links","map-name","map-description"])):Le.type==="catalog"?(e.openBlock(),e.createBlock(Fl,{key:1,api:((O=Le.config)==null?void 0:O.api)||null},null,8,["api"])):Le.type==="layers"&&!d.value?(e.openBlock(),e.createBlock(or,{key:2,layers:Kn.value,onAction:le[8]||(le[8]=ze=>tn(ze.layerId)),config:Le.config},null,8,["layers","config"])):Le.type==="basemaps"?(e.openBlock(),e.createBlock(rn,{key:3,layers:((ue=Le.config)==null?void 0:ue.layers)||null,"default-layer":((_e=Le.config)==null?void 0:_e.default)||null,title:Le.title||((Ee=Le.config)==null?void 0:Ee.title)||null,onStateChange:T},null,8,["layers","default-layer","title"])):Le.type==="legend"?(e.openBlock(),e.createBlock(ar,{key:4,items:Re(Le)},null,8,["items"])):Le.type==="filters"&&rt.value(Le)?(e.openBlock(),e.createBlock(sr,{key:5,"layer-id":(Me=Le.config)==null?void 0:Me.layer,onClose:tn},null,8,["layer-id"])):Le.type==="dataset"||Le.type==="attribute"?(e.openBlock(),e.createBlock(Dl,{key:6,config:Le.config},null,8,["config"])):Le.type==="search"?(e.openBlock(),e.createBlock(zl,{key:7,config:Le.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Le.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),P.value[je].bottom.length?(e.openBlock(),e.createElementBlock("div",Eh,[e.createElementVNode("div",Ch,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value[je].bottom,Le=>{var E,S,O,ue,_e,Ee,Me;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Le.id||Le.type,class:"map-overlay__item"},[Le.type==="info"?(e.openBlock(),e.createBlock(_l,{key:0,title:((E=Le.config)==null?void 0:E.title)||Le.title||null,content:((S=Le.config)==null?void 0:S.content)||"",links:U.value,"map-name":G.value,"map-description":D.value},null,8,["title","content","links","map-name","map-description"])):Le.type==="catalog"?(e.openBlock(),e.createBlock(Fl,{key:1,api:((O=Le.config)==null?void 0:O.api)||null},null,8,["api"])):Le.type==="layers"&&!d.value?(e.openBlock(),e.createBlock(or,{key:2,layers:Kn.value,onAction:le[9]||(le[9]=ze=>tn(ze.layerId)),config:Le.config},null,8,["layers","config"])):Le.type==="basemaps"?(e.openBlock(),e.createBlock(rn,{key:3,layers:((ue=Le.config)==null?void 0:ue.layers)||null,"default-layer":((_e=Le.config)==null?void 0:_e.default)||null,title:Le.title||((Ee=Le.config)==null?void 0:Ee.title)||null,onStateChange:T},null,8,["layers","default-layer","title"])):Le.type==="legend"?(e.openBlock(),e.createBlock(ar,{key:4,items:Re(Le)},null,8,["items"])):Le.type==="filters"&&rt.value(Le)?(e.openBlock(),e.createBlock(sr,{key:5,"layer-id":(Me=Le.config)==null?void 0:Me.layer,onClose:tn},null,8,["layer-id"])):Le.type==="dataset"||Le.type==="attribute"?(e.openBlock(),e.createBlock(Dl,{key:6,config:Le.config},null,8,["config"])):Le.type==="search"?(e.openBlock(),e.createBlock(zl,{key:7,config:Le.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Le.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(Sl),e.createVNode(lr,{"map-id":H.value},null,8,["map-id"]),p.value.includes("compare")?(e.openBlock(),e.createBlock(qm,{key:0,"compare-basemaps":a.value,"is-compare-open":m.value,"selected-basemap-id":g.value,onClose:fe},null,8,["compare-basemaps","is-compare-open","selected-basemap-id"])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)]}),_:1},512),d.value?(e.openBlock(),e.createElementBlock("div",Nh,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",Vh,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-b88845f8"]]),Bh=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function vn(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,s]=n.split("-");if(!r||!l||!s)return t;const i=parseInt(l,10),d=Bh[i]||l;let u=`${parseInt(s,10)} ${d} ${r}`;if(o){const c=o.split(".")[0],[p,a,g]=c.split(":");p&&a&&g?u+=`, ${p}:${a}:${g}`:p&&a?u+=`, ${p}:${a}`:p&&(u+=`, ${p}`)}return u}function Ln(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 $h={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"},Sh={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"},vh={class:"flex flex-col gap-2 md:flex-row md:items-center"},Lh={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},Th={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},Ah={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"},Mh={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},Fh={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"},Dh={class:"p-3 md:p-3.5 lg:p-4 pt-2"},Ph={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},zh={class:"text-gray-500 shrink-0 md:max-w-[50%]"},Ih={class:"font-medium flex flex-wrap gap-1"},Rh={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},jh=["href"],Oh=["href"],Gl=e.defineComponent({__name:"template-1",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),d=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,g)=>{if(g)return a[g]},c=a=>{const g=u(a,n.id_key);return`${n.path}?id=${g}`},p=(a,g)=>{const m=u(a,n.id_key);return`/map?layers=${g}&info=${g},${m}`};return(a,g)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var y,k,h;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",$h,[e.createElementVNode("div",Sh,[e.createElementVNode("div",vh,[e.createElementVNode("h2",Lh,e.toDisplayString(m[`${(y=l.value)==null?void 0:y.name}_text`]||m[(k=l.value)==null?void 0:k.name]||m[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Th,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("div",Ah,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Mh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("span",Fh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Dh,[e.createElementVNode("div",Ph,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>{var b;return e.openBlock(),e.createElementBlock("div",{key:f.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",zh,e.toDisplayString((f==null?void 0:f.ua)||f.label||f.name)+": ",1),e.createElementVNode("span",Ih,[Array.isArray(m[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(vn)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=m[(f==null?void 0:f.name)+"_data"])==null?void 0:b.text)||m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Rh,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:p(m,m==null?void 0:m.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"},[...g[0]||(g[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,jh)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:c(m),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"},[...g[1]||(g[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,Oh))])])}),128))}}),Uh={class:"p-0"},qh={class:"border-l-4 border-l-slate-400"},Hh={class:"p-4"},Wh={class:"flex flex-wrap items-center gap-2 mb-3"},Yh={class:"text-lg font-bold"},Gh={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"},Zh={key:1,class:"flex"},Kh={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"},Xh={class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 text-sm border-t pt-3"},Jh={class:"text-xs text-gray-500 mb-1"},Qh={class:"font-medium"},e0={class:"flex justify-end gap-2 mt-3 border-t pt-3"},t0=["href"],n0=["href"],Zl=e.defineComponent({__name:"template-2",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),d=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,g)=>{if(g)return a[g]},c=a=>{const g=u(a,n.id_key);return`${n.path}?id=${g}`},p=(a,g)=>{const m=u(a,n.id_key);return`/map?layers=${g}&info=${g},${m}`};return(a,g)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var y,k,h;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Uh,[e.createElementVNode("div",qh,[e.createElementVNode("div",Hh,[e.createElementVNode("div",Wh,[e.createElementVNode("h2",Yh,e.toDisplayString(m[`${(y=l.value)==null?void 0:y.name}_text`]||m[(k=l.value)==null?void 0:k.name]||m[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("div",Gh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Zh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-wrap gap-1 ml-2"},[m[f.name]?(e.openBlock(),e.createElementBlock("span",Kh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Xh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>{var b;return e.openBlock(),e.createElementBlock("div",{key:f.name},[e.createElementVNode("p",Jh,e.toDisplayString(f.ua),1),e.createElementVNode("p",Qh,[Array.isArray(m[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[f==null?void 0:f.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(vn)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=m[(f==null?void 0:f.name)+"_data"])==null?void 0:b.text)||m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",e0,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:p(m,m==null?void 0:m.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"},[...g[0]||(g[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,t0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:c(m),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"},[...g[1]||(g[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,n0))])])])])])}),128))}}),o0={class:"space-y-4"},r0={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},l0={class:"flex-1"},a0={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},s0={class:"col-span-1 lg:col-span-4"},i0={class:"flex items-start"},c0={class:"flex flex-col"},d0={class:"font-bold text-xs lg:text-sm"},u0={key:0,class:"flex flex-wrap gap-1 mt-1"},f0={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},m0={key:1,class:"flex flex-wrap gap-1 mt-1"},p0={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"},g0={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},y0={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},h0={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},b0={class:"truncate font-medium text-xs lg:text-sm"},x0={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},k0=["href"],w0=["href"],Kl=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=g=>(g==null?void 0:g.service_id)&&(g==null?void 0:g.is_map)&&g[n.id_key]&&(g==null?void 0:g.geom),l=e.computed(()=>n.columns.find(g=>g.meta==="title")),s=e.computed(()=>n.columns.filter(g=>g.meta==="category")),i=e.computed(()=>n.columns.filter(g=>g.meta==="tags")),d=e.computed(()=>n.columns.filter(g=>g.meta!=="title")),u=e.computed(()=>"bg-blue-500"),c=(g,m)=>{if(m)return g[m]},p=g=>{const m=c(g,n.id_key);return`${n.path}?id=${m}`},a=(g,m)=>{const y=c(g,n.id_key);return`/map?layers=${m}&info=${m},${y}`};return(g,m)=>(e.openBlock(),e.createElementBlock("div",o0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,y=>{var k,h,f;return e.openBlock(),e.createElementBlock("div",{key:y.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",r0,[e.createElementVNode("div",l0,[e.createElementVNode("div",a0,[e.createElementVNode("div",s0,[e.createElementVNode("div",i0,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",u.value])},null,2),e.createElementVNode("div",c0,[e.createElementVNode("p",d0,e.toDisplayString(y[`${(k=l.value)==null?void 0:k.name}_text`]||y[(h=l.value)==null?void 0:h.name]||y[(f=l.value)==null?void 0:f.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",u0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[y[b.name]?(e.openBlock(),e.createElementBlock("span",f0,e.toDisplayString(y[`${b.name}_text`]||y[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",m0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[y[b.name]?(e.openBlock(),e.createElementBlock("span",p0,e.toDisplayString(y[`${b.name}_text`]||y[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",g0,[e.createElementVNode("div",y0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,b=>{var x;return e.openBlock(),e.createElementBlock("div",{key:b.name},[e.createElementVNode("p",h0,e.toDisplayString(b.ua),1),e.createElementVNode("p",b0,[Array.isArray(y[b.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(y[b.name],(C,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(C),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[b.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(y[b.name])||"Немає даних"),1)],64)):b.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(vn)(y[b.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((x=y[b.name+"_data"])==null?void 0:x.text)||y[b.name+"_text"]||y[b.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",x0,[!t.hideDetailsButton&&r(y)?(e.openBlock(),e.createElementBlock("a",{key:0,href:a(y,y.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"},[...m[0]||(m[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,k0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:p(y),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"},[...m[1]||(m[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,w0))])])])}),128))]))}}),_0={class:"flex flex-col space-y-1.5 p-6 pb-2"},E0={class:"flex items-center gap-2 flex-wrap"},C0={class:"tracking-tight text-lg font-medium"},N0={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"},V0={key:1,class:"flex"},B0={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"},$0={class:"p-6 pt-0 pb-4"},S0={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},v0={class:"text-sm text-gray-500"},L0={class:"font-medium"},T0={class:"flex items-center p-6 pt-0 gap-2"},A0=["href"],M0=["href"],Xl=e.defineComponent({__name:"template-4",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),d=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,g)=>{if(g)return a[g]},c=a=>{const g=u(a,n.id_key);return`${n.path}?id=${g}`},p=(a,g)=>{const m=u(a,n.id_key);return`/map?layers=${g}&info=${g},${m}`};return(a,g)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var y,k,h;return e.openBlock(),e.createElementBlock("div",{key:m.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",_0,[e.createElementVNode("div",E0,[e.createElementVNode("h3",C0,e.toDisplayString(m[`${(y=l.value)==null?void 0:y.name}_text`]||m[(k=l.value)==null?void 0:k.name]||m[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("div",N0,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",V0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-wrap gap-1 ml-2"},[m[f.name]?(e.openBlock(),e.createElementBlock("span",B0,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",$0,[e.createElementVNode("div",S0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>{var b;return e.openBlock(),e.createElementBlock("div",{key:f.name},[e.createElementVNode("p",v0,e.toDisplayString(f.ua),1),e.createElementVNode("p",L0,[Array.isArray(m[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[f==null?void 0:f.name],(x,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(vn)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=m[(f==null?void 0:f.name)+"_data"])==null?void 0:b.text)||m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",T0,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:p(m,m==null?void 0:m.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,A0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:c(m),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,M0))])])}),128))}}),F0={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},D0={key:0,class:"w-full lg:w-auto lg:col-span-1"},P0=["src"],z0={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},I0={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},R0={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},j0={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},O0={class:"flex flex-wrap gap-2 lg:gap-0"},U0={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"},q0={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},H0={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},W0={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},Y0=["innerHTML"],G0={class:"text-gray-500 font-medium md:font-normal"},Z0={class:"text-gray-600 break-words line-clamp-2"},K0={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"},X0={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},J0={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},Q0={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"},eb={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"},tb={class:"w-full space-y-2"},nb=["href"],ob=["href"],Jl=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=m=>(m==null?void 0:m.service_id)&&(m==null?void 0:m.is_map)&&m[n.id_key]&&(m==null?void 0:m.geom),l=e.computed(()=>n.columns.find(m=>m.meta==="title")),s=e.computed(()=>n.columns.filter(m=>m.meta==="category")),i=e.computed(()=>n.columns.filter(m=>m.meta==="tags")),d=e.computed(()=>n.columns.filter(m=>m.meta!=="title")),u=e.computed(()=>n.columns.find(m=>m.meta==="image")),c=e.computed(()=>n.columns.find(m=>m.meta==="desc")||n.columns.find(m=>m.name==="description")),p=(m,y)=>{if(y)return m[y]},a=m=>{const y=p(m,n.id_key);return`${n.path}?id=${y}`},g=(m,y)=>{const k=p(m,n.id_key);return`/map?layers=${y}&info=${y},${k}`};return(m,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,k=>{var h,f,b,x,C,V,_,w,$;return e.openBlock(),e.createElementBlock("div",{key:k.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",F0,[u.value?(e.openBlock(),e.createElementBlock("div",D0,[k[(h=u.value)==null?void 0:h.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:k[(f=u.value)==null?void 0:f.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,P0)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",z0,[...y[0]||(y[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",I0,[e.createElementVNode("div",R0,[e.createElementVNode("h3",j0,e.toDisplayString(k[`${(b=l.value)==null?void 0:b.name}_text`]||k[(x=l.value)==null?void 0:x.name]||k[(C=l.value)==null?void 0:C.label]||"Не вказано"),1),e.createElementVNode("div",O0,[Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,L=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:L.name},[k[L.name]?(e.openBlock(),e.createElementBlock("div",U0,e.toDisplayString(k[`${L.name}_text`]||k[L.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",q0,e.toDisplayString(((_=k[((V=c.value)==null?void 0:V.name)+"_data"])==null?void 0:_.text)||k[((w=c.value)==null?void 0:w.name)+"_text"]||k[($=c.value)==null?void 0:$.name]),1),e.createElementVNode("div",H0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,L=>{var Y;return e.openBlock(),e.createElementBlock("div",{key:L.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",W0,[L.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:L.icon},null,8,Y0)):e.createCommentVNode("",!0),e.createElementVNode("span",G0,e.toDisplayString((L==null?void 0:L.ua)||L.label||L.name)+":",1)]),e.createElementVNode("span",Z0,[Array.isArray(k[L==null?void 0:L.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(k[L==null?void 0:L.name],(Q,j)=>(e.openBlock(),e.createElementBlock("span",{key:j,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},[L.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(k[L==null?void 0:L.name])||"Немає даних"),1)],64)):L.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(vn)(k[L==null?void 0:L.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((Y=k[(L==null?void 0:L.name)+"_data"])==null?void 0:Y.text)||k[(L==null?void 0:L.name)+"_text"]||k[L==null?void 0:L.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",K0,[e.createElementVNode("p",X0," Теги: "+e.toDisplayString(i.value.length&&k[i.value[0].name]?"":"відсутні"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",J0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,L=>(e.openBlock(),e.createElementBlock("div",{key:L.name,class:"flex flex-wrap gap-1"},[k[L.name]?(e.openBlock(),e.createElementBlock("span",Q0,e.toDisplayString(k[`${L.name}_text`]||k[L.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",eb,[e.createElementVNode("div",tb,[!t.hideDetailsButton&&r(k)?(e.openBlock(),e.createElementBlock("a",{key:0,href:g(k,k==null?void 0:k.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," На карті ",8,nb)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(k),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," Детальніше ",8,ob))])])])])}),128))}});function rb(t){t.component("MapCustom",_o)}const lb={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},ab={key:0,class:"flex items-center gap-2 flex-shrink-0"},sb={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},an=e.defineComponent({__name:"TableFormHeader",props:{variant:{default:"table"},title:{default:""}},setup(t){const n=t,o=e.computed(()=>n.variant==="table"?"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[24px]":"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[16px]"),r=e.computed(()=>n.variant==="form"?"font-medium":"");return(l,s)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[l.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",lb,[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",ab,[e.renderSlot(l.$slots,"actions")])):e.createCommentVNode("",!0)],2),l.$slots.description?(e.openBlock(),e.createElementBlock("p",sb,[e.renderSlot(l.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),ib={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},cb={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"},db={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},ub={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},fb={class:"p-3 border-b border-gray-200"},mb={class:"flex flex-col sm:flex-row gap-2"},pb={class:"entity-table-root"},gb={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},yb={key:0,class:"gap-2 inline-flex"},hb=["onClick"],bb={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"},xb={class:"text-sm text-gray-500"},kb={class:"font-medium text-gray-700"},wb={class:"font-medium text-gray-700"},_b={class:"font-medium text-gray-700"},Eb={class:"flex items-center justify-end gap-3"},Eo=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=He.useRoute(),r=He.useRouter(),l=t,s=e.computed(()=>l.entityKey||String(o.name??"").split("-")[0]),i=e.computed(()=>{var F;let N=(((F=o.matched[o.matched.length-1])==null?void 0:F.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return N.startsWith("/")||(N=`/${N}`),N}),d=e.computed(()=>l.entityBasePath||i.value),u=e.computed(()=>{var N;const B=((N=o.matched[o.matched.length-1])==null?void 0:N.path)||"";return/:id\??/.test(B)&&/:action\??/.test(B)}),c=e.computed(()=>{var N,F;return(N=o.meta)!=null&&N.title?o.meta.title:o.name?o.name:((F=o.path)==null?void 0:F.replace(/^\//,""))||""||"GIS"}),p=e.computed(()=>{var B;return((B=o.meta)==null?void 0:B.description)||""}),a=e.computed(()=>{const B=String(c.value||"").trim();return B?`Пошук ${B}...`:"Пошук..."}),g=e.ref([]),m=e.ref(!0),y=e.ref([]),k=e.ref([]),h=e.ref({}),f=e.ref([]),b=e.ref(String(o.query.search??"")),x=e.ref(Math.max(1,Number(o.query.page)||1)),C=e.ref(15),V=e.ref(0),_=e.computed(()=>V.value>0),w=e.computed(()=>V.value?(x.value-1)*C.value+1:0),$=e.computed(()=>V.value?Math.min(x.value*C.value,V.value):0);function L(B){const N=new URLSearchParams;return Object.entries(B).forEach(([F,H])=>{if(!(H==null||H==="")){if(Array.isArray(H)){H.forEach(he=>{he!=null&&he!==""&&N.append(F,String(he))});return}N.append(F,String(H))}}),N.toString()}function Y(){return u.value?`${d.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function Q(B){if(u.value)return`${d.value}/${B}/edit`;const N=String(o.name??"").split("_")[0];return N==="services"?`/gis.datasets/${B}/edit`:`/gis.${N}/edit/${B}`}const j=async()=>{const B=`/api/data/gis.${s.value}.table`;if(!B){g.value=[],m.value=!1;return}try{m.value=!0;const N=L({...h.value,page:x.value,limit:C.value}),F=await fetch(N?`${B}?${N}`:B);if(!F.ok)throw new Error(`Rows fetch failed: ${F.status}`);const H=await F.json();g.value=H.rows||[],V.value=Number(H.filtered??H.total??H.count??g.value.length)||0,y.value=l.columnsConfig.length?l.columnsConfig:H.columns||[],k.value=H.filters||[],m.value=!1,f.value=H.actions,H.card!==!1&&y.value.length&&(u.value?y.value[0].link=`${d.value}/{id}`:y.value[0].link||(y.value[0].link=`/${o.name}/{id}`))}catch{g.value=[],m.value=!1}};function te(B){h.value=B,x.value=1,M(),j()}e.onMounted(()=>{j(),document.title=c.value}),e.watch(()=>o.name,()=>{x.value=1,b.value="",j(),document.title=c.value}),e.watch(()=>o.query,B=>{const N=Math.max(1,Number(B.page)||1),F=String(B.search??""),H=N!==x.value,he=F!==b.value;!H&&!he||(x.value=N,b.value=F,h.value={...h.value,search:F||void 0},j())});async function de(B,N,F){const H=await fetch(`/api/form/gis.${s.value}.table/${B.id}`);if(!H.ok)throw new Error(`Form fetch failed: ${H.status}`);const G=(await H.json()).token,D={[N]:F},U=await fetch(`/api/table/${G}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(D)});if(!U.ok)throw Ce.notify({type:"error",title:"Помилка збереження",message:`Поле "${N}" не оновлено`}),new Error(`Save failed: ${U.status}`);Ce.notify({title:"Збережено",message:`Поле "${N}" оновлено`})}function be(B,N){h.value={...h.value,[B]:N},x.value=1,M(),j()}function ae(B){be((B==null?void 0:B.name)||"search",(B==null?void 0:B.value)??b.value)}function ne(B){b.value="",be(B||"search",void 0)}function v(B){!B||B===x.value||(x.value=B,M(),j())}function M(){const B={...o.query,page:String(x.value),...b.value?{search:b.value}:{}};b.value||delete B.search,r.replace({query:B})}return(B,N)=>(e.openBlock(),e.createElementBlock("div",ib,[e.createVNode(an,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",cb,[e.createVNode(e.unref(ge.RefreshCw),{size:16}),N[2]||(N[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:N[0]||(N[0]=F=>e.unref(r).push(Y())),class:"hover:cursor-pointer flex items-center gap-1.5 px-3 py-1.5 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors text-sm"},[e.createVNode(e.unref(ge.Plus),{size:16}),N[3]||(N[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[p.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",db,[e.createElementVNode("div",ub,[e.createElementVNode("div",fb,[e.createElementVNode("div",mb,[e.createVNode(e.unref(Qn.FilterField),{modelValue:b.value,"onUpdate:modelValue":N[1]||(N[1]=F=>b.value=F),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:ae,onClear:ne,placeholder:a.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Qn.Filter),{schema:k.value,value:h.value,onChange:te,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",pb,[e.createVNode(e.unref(n),{rows:g.value,columns:y.value,loading:m.value,router:e.unref(r),selectable:!1,onCellUpdate:de,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:F,value:H,column:he})=>[e.renderSlot(B.$slots,"badge",{row:F,value:H,column:he},()=>[e.createElementVNode("span",gb,e.toDisplayString((H==null?void 0:H.text)||H||"-"),1)],!0)]),action:e.withCtx(({row:F})=>[e.renderSlot(B.$slots,"action",{row:F},()=>[f.value.includes("add")?(e.openBlock(),e.createElementBlock("div",yb,[e.createElementVNode("button",{onClick:H=>e.unref(r).push(Q(F.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(eo)],8,hb)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),_.value?(e.openBlock(),e.createElementBlock("div",bb,[e.createElementVNode("div",xb,[N[4]||(N[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",kb,e.toDisplayString(w.value),1),N[5]||(N[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",wb,e.toDisplayString($.value),1),N[6]||(N[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",_b,e.toDisplayString(V.value),1)]),e.createElementVNode("div",Eb,[e.createVNode(e.unref(Ce.VsPagination),{total:V.value,page:x.value,"page-size":C.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"})),Cb={class:"mx-1"},Nb={class:"flex items-center gap-2 mt-[0.4rem]"},Vb={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},Bb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},$b={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"},Sb={class:"vs-form w-full"},Tn=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityCreatePage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=He.useRouter(),i=He.useRoute(),d=t,u=e.ref({}),c=e.ref(""),p=e.computed(()=>i.path.replace(/\/(add|new)$/,"")),a=e.computed(()=>{var h;return((h=s.resolve(p.value).meta)==null?void 0:h.title)??""}),g=e.computed(()=>a.value?`Додати в ${a.value.toLowerCase()}`:"Додати"),m=e.computed(()=>{var h;return((h=i.meta)==null?void 0:h.description)??""});function y(){s.push(p.value||"/")}async function k(){if(!l.value){Ce.notify({type:"error",title:"Error",message:"Create token is missing."});return}const h=u.value.validate();if(h){Ce.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([b,x])=>`${b}: ${x}`).join(`
3
- `)});return}const f=await fetch("/api/table/"+l.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!f.ok){Ce.notify({type:"error",title:"Error",message:`Error code: ${f.status}`});return}await f.json(),Ce.notify({title:"Success!",message:"Object created."}),s.back()}return e.onMounted(async()=>{const h=d.entityKey||String(i.name??"").split("-")[0],f=await fetch(`/api/form/gis.${h}.table`).then(b=>b.json());l.value=f.token,c.value=f.id,r.value=f.schema,document.title=g.value}),(h,f)=>{const b=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(an,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(b,{to:p.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",Cb,[e.createVNode(e.unref(ge.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),f[2]||(f[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Nb,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:y,"aria-label":"Назад"},[e.createVNode(e.unref(ge.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(a.value||"Створення"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:y}," Назад "),e.createElementVNode("button",{onClick:k,class:"cursor-pointer inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 hover:bg-blue-700 border border-transparent rounded-lg gap-x-2 hover:text-white"}," Зберегти ")]),_:2},[m.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Vb,[e.createElementVNode("div",Bb,[e.createElementVNode("div",$b,[e.createElementVNode("div",Sb,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":f[0]||(f[0]=x=>o.value=x),form:u.value,"onUpdate:form":f[1]||(f[1]=x=>u.value=x),schema:r.value,style:{primaryColor:"blue"},formId:c.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),vb={class:"mx-1"},Lb={class:"mx-1"},Tb={class:"flex items-center gap-2 mt-[0.4rem]"},Ab={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},Mb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Fb={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"},Db={class:"vs-form w-full"},An=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityEditPage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=e.ref({}),i=e.ref(""),d=He.useRoute(),u=He.useRouter(),p=t.entityKey||String(d.name??"").split("-")[0],{id:a}=d.params,g=e.computed(()=>d.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),m=e.computed(()=>a?`${g.value}/${a}`:g.value||"/"),y=e.computed(()=>{var b;return((b=u.resolve(g.value).meta)==null?void 0:b.title)??""}),k=e.computed(()=>{var b;return((b=d.meta)==null?void 0:b.description)??""});function h(){u.push(g.value||"/")}async function f(){const b=s.value.validate();if(b){Ce.notify({type:"warning",title:"Validation",message:Object.entries(b).map(([C,V])=>`${C}: ${V}`).join(`
4
- `)});return}if(!l.value){Ce.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const x=await fetch(`/api/table/${l.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!x.ok){Ce.notify({type:"error",title:"Error",message:`Error code: ${x.status}`});return}await x.json(),Ce.notify({title:"Success!",message:"Your changes have been saved."}),u.back()}return e.onMounted(async()=>{const b=await fetch(`/api/form/gis.${p}.table/${a}`).then(C=>C.json());o.value=b.data,l.value=b.token,r.value=b.schema;const x=b.data;i.value=(x==null?void 0:x.name)||(x==null?void 0:x.title)||(x==null?void 0:x.register_key)||(x==null?void 0:x.map_key)||""}),(b,x)=>{const C=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(an,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[g.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(C,{to:g.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(y.value),1)]),_:1},8,["to"]),e.createElementVNode("span",vb,[e.createVNode(e.unref(ge.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(C,{to:m.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Lb,[e.createVNode(e.unref(ge.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),x[2]||(x[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Редагування",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Tb,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:h,"aria-label":"Назад"},[e.createVNode(e.unref(ge.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(i.value||y.value||"Редагування"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:h}," Назад "),e.createElementVNode("button",{onClick:f,class:"cursor-pointer inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 hover:bg-blue-700 border border-transparent rounded-lg gap-x-2 hover:text-white"}," Зберегти ")]),_:2},[k.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Ab,[e.createElementVNode("div",Mb,[e.createElementVNode("div",Fb,[e.createElementVNode("div",Db,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":x[0]||(x[0]=V=>o.value=V),form:s.value,"onUpdate:form":x[1]||(x[1]=V=>s.value=V),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Pb={class:"flex items-center justify-center col-span-3 gap-2"},zb={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},Ib=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(p=>p.VsModal)),r=t,l=e.useModel(t,"columns"),s=e.ref(!1),i=e.ref({}),d=e.ref({...r.data||{}});e.watch(()=>r.data,p=>{d.value={...p||{}}},{deep:!0});const u=()=>l.value=l.value.filter((p,a)=>a!==r.index),c=async()=>{const p=i.value.validate();if(p){Ce.notify({type:"warning",title:"Validation",message:Object.entries(p).map(([a,g])=>`${a}: ${g}`).join(`
5
- `)});return}l.value[r.index]=d.value,s.value=!1};return(p,a)=>(e.openBlock(),e.createElementBlock("div",Pb,[e.createElementVNode("button",{onClick:a[0]||(a[0]=g=>{s.value=!0}),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:text-accent-foreground h-8 w-8 rounded-full hover:bg-gray-100"},[e.createVNode(e.unref(ge.Edit),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-8 w-8 rounded-full hover:bg-red-100 text-red-600 hover:text-red-700"},[e.createVNode(e.unref(ge.Trash),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:s.value,"onUpdate:visible":a[4]||(a[4]=g=>s.value=g),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",zb,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:a[3]||(a[3]=g=>s.value=!1)}," Скасувати "),e.createElementVNode("button",{class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300",onClick:c}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:d.value,"onUpdate:values":a[1]||(a[1]=g=>d.value=g),schema:t.scheme,form:i.value,"onUpdate:form":a[2]||(a[2]=g=>i.value=g)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),Rb={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")})}},jb={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"},Ql=t=>jb[t==null?void 0:t.toLowerCase()]||"gray",Ob=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],ea=t=>{var n;return Ob.includes((n=t||"")==null?void 0:n.toLowerCase())},Ub={},qb={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-type",__v0_r:"0,5361,5384"};function Hb(t,n){return e.openBlock(),e.createElementBlock("svg",qb,[...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 Wb=Fe(Ub,[["render",Hb]]),Yb={},Gb={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-hash",__v0_r:"0,5361,5384"};function Zb(t,n){return e.openBlock(),e.createElementBlock("svg",Gb,[...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 Kb=Fe(Yb,[["render",Zb]]),Xb={},Jb={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function Qb(t,n){return e.openBlock(),e.createElementBlock("svg",Jb,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const ex=Fe(Xb,[["render",Qb]]),tx={},nx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function ox(t,n){return e.openBlock(),e.createElementBlock("svg",nx,[...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 rx=Fe(tx,[["render",ox]]),lx={},ax={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-code",__v0_r:"0,5361,5384"};function sx(t,n){return e.openBlock(),e.createElementBlock("svg",ax,[...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 ix=Fe(lx,[["render",sx]]),cx={},dx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-toggle-left",__v0_r:"0,5361,5384"};function ux(t,n){return e.openBlock(),e.createElementBlock("svg",dx,[...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 fx=Fe(cx,[["render",ux]]),mx={},px={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-file-text",__v0_r:"0,5361,5384"};function gx(t,n){return e.openBlock(),e.createElementBlock("svg",px,[...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 yx=Fe(mx,[["render",gx]]),hx={},bx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-image",__v0_r:"0,5361,5384"};function xx(t,n){return e.openBlock(),e.createElementBlock("svg",bx,[...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 kx=Fe(hx,[["render",xx]]),wx={},_x={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Ex(t,n){return e.openBlock(),e.createElementBlock("svg",_x,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Cx=Fe(wx,[["render",Ex]]),Nx={},Vx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Bx(t,n){return e.openBlock(),e.createElementBlock("svg",Vx,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const $x=Fe(Nx,[["render",Bx]]),Sx={},vx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function Lx(t,n){return e.openBlock(),e.createElementBlock("svg",vx,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const Tx=Fe(Sx,[["render",Lx]]),Ax={},Mx={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 Fx(t,n){return e.openBlock(),e.createElementBlock("svg",Mx,[...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 Dx=Fe(Ax,[["render",Fx]]),Px={},zx={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 Ix(t,n){return e.openBlock(),e.createElementBlock("svg",zx,[...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 Rx=Fe(Px,[["render",Ix]]),jx={},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:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Ux(t,n){return e.openBlock(),e.createElementBlock("svg",Ox,[...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 qx=Fe(jx,[["render",Ux]]),Hx={},Wx={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 Yx(t,n){return e.openBlock(),e.createElementBlock("svg",Wx,[...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 Gx=Fe(Hx,[["render",Yx]]),Zx={},Kx={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function Xx(t,n){return e.openBlock(),e.createElementBlock("svg",Kx,[...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 ta={IconText:Wb,IconNumber:Kb,IconDate:ex,IconDatetime:rx,IconRichtext:ix,IconBoolean:fx,IconFile:yx,IconImage:kx,IconArray:Cx,IconSelect:$x,IconSlug:Tx,IconDatalist:Dx,IconReference:Rx,IconReferenceList:qx,IconBadge:Gx,IconCheck:Fe(Zx,[["render",Xx]])},Jx={key:0,class:"flex items-center justify-between mb-6"},Qx={class:"flex justify-end w-full"},e1={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},t1={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},n1={class:"table-fixed w-full text-[13px]"},o1={class:"bg-gray-50 border-b border-gray-200"},r1={key:0},l1=["onDragstart","onDragover","onDrop"],a1={key:0,class:"flex w-fit items-center gap-2 text-left"},s1={class:"flex-1 min-w-0"},i1={class:"font-medium text-gray-900 truncate"},c1={class:"text-xs text-gray-500"},d1={key:1,class:"flex items-center justify-center"},u1={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"},f1={key:1,class:"text-gray-500 text-sm"},m1={key:3},p1={class:"px-6 py-4"},g1={key:1},y1=["colspan"],Pt=Fe(e.defineComponent({__name:"vs-datatable",props:e.mergeModels({columnsScheme:{},formScheme:{},addButton:{type:Boolean,default:!0},mainColWidth:{default:""}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t,{expose:n}){function o(_){return _.charAt(0).toUpperCase()+_.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(_=>_.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),i=t,d=e.ref({}),u=e.ref(!1),c=e.ref({}),p=e.ref(null),a=e.useSlots(),g=_=>!!(_&&a[_]);n({openCreateDialog:()=>{u.value=!0}});const m=e.computed({get(){return Array.isArray(s.value)?s.value:s.value&&Array.isArray(s.value.columns)?s.value.columns:[]},set(_){Array.isArray(s.value)?s.value=_:s.value&&Array.isArray(s.value.columns)&&(s.value.columns=_)}}),y=e.computed(()=>{const _=i.columnsScheme.map(w=>w.key);return _.includes("name")&&_.includes("label")||_.includes("id")&&_.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...i.columnsScheme.filter(w=>!["name","id","label"].includes(w.key))]:i.columnsScheme});function k(){u.value=!1,c.value={},p.value=null}async function h(){const _=d.value.validate();if(_){Ce.notify({type:"warning",title:"Validation",message:Object.entries(_).map(([w,$])=>`${w}: ${$}`).join(`
6
- `)});return}if(p.value===null)m.value=[...m.value,{...c.value}];else{const w=[...m.value];w[p.value]={...c.value},m.value=w}k()}const f=e.ref(null),b=e.ref(null),x=_=>{f.value=_},C=_=>{b.value=_},V=_=>{if(f.value===null||f.value===_){f.value=null,b.value=null;return}const w=[...m.value],[$]=w.splice(f.value,1);w.splice(_,0,$),m.value=w,f.value=null,b.value=null};return(_,w)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",Jx,[e.createElementVNode("div",Qx,[e.createElementVNode("button",{onClick:w[0]||(w[0]=$=>u.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",e1,[e.createElementVNode("div",t1,[e.createElementVNode("table",n1,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,$=>(e.openBlock(),e.createElementBlock("col",{key:$.key,style:e.normalizeStyle($.type==="main"?`width: ${t.mainColWidth}`:$.width?`width: ${$.width}`:"auto")},null,4))),128)),w[5]||(w[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",o1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,$=>(e.openBlock(),e.createElementBlock("th",{key:$.key,class:"px-6 py-4"},e.toDisplayString($.label),1))),128)),w[6]||(w[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),m.value.length?(e.openBlock(),e.createElementBlock("tbody",r1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,($,L)=>(e.openBlock(),e.createElementBlock("tr",{key:$.id||$.name||L,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":f.value===L,"border-t-2 border-b-2 border-blue-500 bg-blue-50":b.value===L}]),draggable:"true",onDragstart:Y=>x(L),onDragover:e.withModifiers(Y=>C(L),["prevent"]),onDrop:Y=>V(L)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,Y=>(e.openBlock(),e.createElementBlock("td",{key:Y.key,class:"px-6 py-4 align-middle text-center"},[Y.type==="main"?(e.openBlock(),e.createElementBlock("div",a1,[w[7]||(w[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(ea)($.format==="yes/no"?"check":$.format||$.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(Ql)($.format==="yes/no"?"check":$.format||$.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent($.format==="yes/no"?"icon-check":e.unref(ta)["Icon"+o($.format||$.type)]||e.unref(ta).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",s1,[e.withDirectives((e.openBlock(),e.createElementBlock("p",i1,[e.createTextVNode(e.toDisplayString($.name||$.id),1)])),[[e.unref(Rb)]]),e.createElementVNode("p",c1,e.toDisplayString($.ua||$.label||$.name||$.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[Y.slot&&g(Y.slot)?e.renderSlot(_.$slots,Y.slot,{key:0,row:$,column:Y,value:$[Y.key],rowIndex:L},void 0,!0):Y.type==="color"?(e.openBlock(),e.createElementBlock("div",d1,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${$[Y.key]}]`])},null,2)])):["format","type","meta"].includes(Y.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[$[Y.key]?(e.openBlock(),e.createElementBlock("span",u1,e.toDisplayString($[Y.key]),1)):(e.openBlock(),e.createElementBlock("span",f1,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",m1,e.toDisplayString($[Y.key]),1))],64))]))),128)),e.createElementVNode("td",p1,[e.createVNode(Ib,{columns:m.value,"onUpdate:columns":w[1]||(w[1]=Y=>m.value=Y),data:$,index:L,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,l1))),128))])):(e.openBlock(),e.createElementBlock("tr",g1,[e.createElementVNode("td",{colspan:y.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,y1)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:u.value,"onUpdate:visible":w[3]||(w[3]=$=>u.value=$)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:k,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"}," Скасувати "),e.createElementVNode("button",{type:"button",onClick:h,class:"px-4 py-2 rounded bg-blue-600 text-white"}," Зберегти1 ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{ref_key:"form",ref:d,modelValue:c.value,"onUpdate:modelValue":w[2]||(w[2]=$=>c.value=$),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),h1={class:"p-4 text-[13px]"},b1={class:"grid grid-cols-2 gap-x-6 gap-y-2"},x1=["id","checked","onChange"],k1={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},w1={class:"font-medium text-gray-900 truncate"},_1={class:"text-xs text-gray-500"},E1={key:0,class:"text-xs text-[#B2C9D6]"},C1={class:"flex justify-end gap-2 p-4 border-t w-full"},sn=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,s=n,i=e.defineAsyncComponent(()=>import("@opengis/core").then(x=>x.VsModal)),d=e.computed(()=>Array.isArray(l.fields)?l.fields.filter(Boolean):[]),u=x=>(x==null?void 0:x.name)??(x==null?void 0:x.id)??(x==null?void 0:x.key)??(x==null?void 0:x.code)??(x==null?void 0:x.field)??(x==null?void 0:x.value)??"",c=x=>String(u(x)??"").trim(),p=x=>(x==null?void 0:x.title)??(x==null?void 0:x.label)??c(x),a=x=>String((x==null?void 0:x.type)??"").trim(),g=e.computed(()=>new Set(r.value.map(x=>String(x??"").trim()))),m=x=>g.value.has(c(x)),y=x=>{const C=c(x);if(!C)return;const V=new Set(g.value);V.has(C)?V.delete(C):V.add(C),r.value=Array.from(V)},k=e.computed(()=>l.confirmText||"Імпортувати"),h=e.computed(()=>l.cancelText||"Скасувати"),f=()=>{o.value=!1,s("cancel")},b=()=>{s("confirm"),o.value=!1};return(x,C)=>(e.openBlock(),e.createBlock(e.unref(i),{visible:o.value,"onUpdate:visible":C[0]||(C[0]=V=>o.value=V),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",C1,[e.createElementVNode("button",{onClick:f,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(h.value),1),e.createElementVNode("button",{onClick:b,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(k.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",h1,[e.createElementVNode("div",b1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,V=>(e.openBlock(),e.createElementBlock("label",{key:c(V),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${c(V)}`,checked:m(V),onChange:_=>y(V)},null,40,x1),e.createElementVNode("div",k1,[e.unref(ea)(V.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(Ql)(V.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${V.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",w1,e.toDisplayString(c(V)),1),e.createElementVNode("p",_1,e.toDisplayString(p(V)),1),a(V)?(e.openBlock(),e.createElementBlock("p",E1,e.toDisplayString(a(V)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function cn(t){return t==null?"":String(t).trim()}function zt(t){return cn((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 dn(t,n,o){const r=Array.isArray(t)?[...t]:[],l=Array.isArray(n)?n:[],{selectedKeys:s,resolveKey:i}=o,d=new Set;for(const a of s){const g=cn(a);g&&d.add(g)}if(d.size===0)return[];const u=a=>cn(i(a)),c=[],p=new Set;for(const a of r){const g=u(a);!g||!d.has(g)||(c.push(a),p.add(g))}for(const a of l){const g=u(a);!g||p.has(g)||!d.has(g)||(c.push(a),p.add(g))}return c}const N1={class:"vs-form"},V1={class:"vs-form__body auto-rows-max container"},B1={class:"flex flex-wrap"},$1={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},S1={class:"h-fit w-full flex flex-wrap"},v1={class:"w-full"},L1=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:[]),s=b=>zt(b||{}),i=e.defineAsyncComponent(()=>import("@opengis/form")),d=e.ref(),u=e.ref(!1),c=e.ref([]),p=()=>{const b=g.value.map(x=>s(x)).filter(x=>x.length>0);c.value=[...b],u.value=!0},a=e.computed(()=>{var b,x;return((b=n.value)==null?void 0:b.token)||((x=n.value)==null?void 0:x.id)||"register-form"}),g=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:[]}}),m=e.computed({get:()=>n.value||{},set:b=>{var C;const x=Array.isArray((C=n.value)==null?void 0:C.columns)?n.value.columns:[];n.value={...n.value,...b,columns:x}}});e.watch(()=>d.value,b=>{o.value=b||null},{immediate:!0}),e.watch(u,b=>{b||(c.value=[])});const y=()=>{const b=new Set(c.value.map(V=>cn(V)).filter(V=>V.length>0)),x=Array.isArray(g.value)?[...g.value]:[],C=l.value.filter(V=>b.has(s(V))).map(V=>{const _=s(V),w=V.title??V.label??_;return{...V,name:_,label:w,type:V.type||"text",meta:V.meta??"features"}});g.value=dn(x,C,{selectedKeys:c.value,resolveKey:s}),u.value=!1,c.value=[]},k={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}},h=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],f={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,x)=>(e.openBlock(),e.createElementBlock("div",N1,[e.createElementVNode("div",V1,[e.createElementVNode("div",B1,[e.createElementVNode("div",$1,[(e.openBlock(),e.createBlock(e.unref(i),{ref_key:"formEl",ref:d,key:a.value,schema:k,modelValue:m.value,"onUpdate:modelValue":x[0]||(x[0]=C=>m.value=C)},null,8,["modelValue"]))]),e.createElementVNode("div",S1,[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"},[...x[4]||(x[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",v1,[e.createVNode(Pt,{modelValue:g.value,"onUpdate:modelValue":x[1]||(x[1]=C=>g.value=C),"columns-scheme":h,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(sn,{visible:u.value,"onUpdate:visible":x[2]||(x[2]=C=>u.value=C),selection:c.value,"onUpdate:selection":x[3]||(x[3]=C=>c.value=C),fields:l.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:y},null,8,["visible","selection","fields"])]))}}),T1={class:"vs-form"},A1={class:"vs-form__body auto-rows-max container"},M1={class:"flex flex-wrap"},F1={class:"h-fit w-full flex flex-wrap"},D1={class:"w-full"},P1=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:[]),s=m=>zt(m||{}),i=e.ref(!1),d=e.ref([]),u=()=>{const m=c.value.map(y=>s(y)).filter(y=>y.length>0);d.value=[...m],i.value=!0},c=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:m=>{n.value||(n.value={}),n.value.filters=Array.isArray(m)?m:[]}});e.watch(i,m=>{m||(d.value=[])});const p=()=>{const m=new Set(d.value.map(h=>cn(h)).filter(h=>h.length>0)),y=Array.isArray(c.value)?[...c.value]:[],k=l.value.filter(h=>m.has(s(h))).map(h=>({name:s(h),label:h.title??h.label??s(h),type:h.type||"text"}));c.value=dn(y,k,{selectedKeys:d.value,resolveKey:s}),i.value=!1,d.value=[]},a=[{key:"id",label:"Name"},{key:"label",label:"Назва"},{key:"type",label:"Тип"}],g={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}),(m,y)=>(e.openBlock(),e.createElementBlock("div",T1,[e.createElementVNode("div",A1,[e.createElementVNode("div",M1,[y[4]||(y[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",F1,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:u,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"},[...y[3]||(y[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",D1,[e.createVNode(Pt,{modelValue:c.value,"onUpdate:modelValue":y[0]||(y[0]=k=>c.value=k),"columns-scheme":a,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(sn,{visible:i.value,"onUpdate:visible":y[1]||(y[1]=k=>i.value=k),selection:d.value,"onUpdate:selection":y[2]||(y[2]=k=>d.value=k),fields:l.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:p},null,8,["visible","selection","fields"])]))}}),z1={class:"vs-form"},I1={class:"vs-form__body auto-rows-max container"},R1={class:"flex flex-wrap"},j1={class:"h-fit w-full flex flex-wrap"},O1={class:"w-full"},U1=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:[]),s=m=>zt(m||{}),i=e.ref(!1),d=e.ref([]),u=()=>{const m=c.value.map(y=>s(y)).filter(y=>y.length>0);d.value=[...m],i.value=!0},c=e.computed({get:()=>n.value.card,set:m=>{n.value||(n.value={}),n.value.card=Array.isArray(m)?m:[]}});e.watch(i,m=>{var y;if(m){const k=((y=c.value)==null?void 0:y.map(h=>h.name))||[];d.value=[...k]}});const p=()=>{const m=new Set(d.value.map(h=>cn(h)).filter(h=>h.length>0)),y=Array.isArray(c.value)?[...c.value]:[],k=l.value.filter(h=>m.has(s(h))).map(h=>{const f=s(h),b=h.title??h.label??f;return{...h,name:f,label:b,format:h.format||h.type||"text",meta:h.meta||"title"}});c.value=dn(y,k,{selectedKeys:d.value,resolveKey:s}),i.value=!1,d.value=[]},a=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"format",label:"Формат",type:"text"}],g={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(m,y)=>(e.openBlock(),e.createElementBlock("div",z1,[e.createElementVNode("div",I1,[e.createElementVNode("div",R1,[y[4]||(y[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",j1,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:u,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"},[...y[3]||(y[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",O1,[e.createVNode(Pt,{modelValue:c.value,"onUpdate:modelValue":y[0]||(y[0]=k=>c.value=k),"columns-scheme":a,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(sn,{visible:i.value,"onUpdate:visible":y[1]||(y[1]=k=>i.value=k),selection:d.value,"onUpdate:selection":y[2]||(y[2]=k=>d.value=k),fields:l.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:p},null,8,["visible","selection","fields"])]))}}),na={template1:Gl,template2:Zl,template3:Kl,template4:Xl,template5:Jl},q1={class:"space-y-4"},H1={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},W1={class:"text-lg font-semibold mb-4"},Y1={class:"bg-white"},G1={key:1,class:"text-gray-400 text-center py-12"},Z1={key:2,class:"text-gray-400 text-center py-12"},K1=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}},s=e.computed(()=>{var p;return Array.isArray((p=o.value)==null?void 0:p.columns)?o.value.columns:[]}),i=e.computed(()=>{var p;return((p=o.value)==null?void 0:p.view)||"template1"}),d=e.computed(()=>na[i.value]||na.template1),u=e.computed(()=>{var g;const p=(g=o.value)==null?void 0:g.view;if(!p)return"template1";const a=r.find(m=>m.id===p);return(a==null?void 0:a.text)||p}),c=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(a=>{var g,m;return{...a,service_id:(g=o.value)==null?void 0:g.service_id,is_map:(m=o.value)==null?void 0:m.is_map}}));return(p,a)=>(e.openBlock(),e.createElementBlock("div",q1,[e.createElementVNode("div",H1,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:l,modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=g=>o.value=g)},null,8,["modelValue"]))]),e.createElementVNode("h2",W1," Превʼю таблиці ("+e.toDisplayString(u.value)+") ",1),e.createElementVNode("div",Y1,[d.value&&c.value.length&&s.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.value),{items:c.value,columns:s.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:i.value},null,8,["items","columns","hide-details-button"])):c.value.length?(e.openBlock(),e.createElementBlock("div",Z1," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",G1," Немає даних для превʼю "))])]))}}),X1={class:"w-full mb-6"},J1={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},Q1=["onClick"],oa=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,s)=>(e.openBlock(),e.createElementBlock("div",X1,[e.createElementVNode("div",J1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,i=>(e.openBlock(),e.createElementBlock("button",{key:i.id,onClick:d=>r(i.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",i.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(i.name),11,Q1))),128))])]))}}),ek={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},tk={class:"mx-1"},nk={class:"text-gray-900 font-semibold"},ok={key:0,class:"text-center py-12 mt-6 px-[24px]"},rk={key:1,class:"px-[24px] overflow-y-auto"},lk={class:"space-y-6"},ak=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=He.useRoute(),o=He.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),l=e.computed(()=>{var f;return((f=o.resolve(r.value).meta)==null?void 0:f.title)??""}),s=e.computed(()=>{var f;return((f=g.value)==null?void 0:f.name)||"Налаштування реєстру"}),i=e.ref("list"),d=e.ref(""),u=e.ref(!0),c=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],p={list:L1,filters:P1,card:U1,preview:K1},a=c.map(f=>f.id),g=e.ref({columns:[],filters:[],card:[],tableData:[]}),m=e.ref([]),y=async()=>{var b;if(!((b=g.value)==null?void 0:b.token)){Ce.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const x=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(g.value)});if(!x.ok)throw new Error(`Failed to save content: ${x.status}`);Ce.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(x){Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(x)}},k=async f=>{try{const x=await(await fetch(`/api/gis-registry/${f}`)).json(),C=Array.isArray(x==null?void 0:x.rows)?x.rows:[];g.value.tableData=C.slice(0,3)}catch(b){console.error("Помилка завантаження превʼю:",b)}},h=async()=>{var f,b;try{u.value=!0;const C=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),V=((f=C==null?void 0:C.rows)==null?void 0:f[0])||{};d.value=V.register_key||"",g.value={...V,columns:Array.isArray(V.columns)?V.columns:[],filters:Array.isArray(V.filters)?V.filters:[],card:Array.isArray(V.card)?V.card:[],tableData:Array.isArray(V.tableData)?V.tableData:[]},(b=C==null?void 0:C.tokens)!=null&&b.edit&&(g.value.token=C.tokens.edit),m.value=Array.isArray(C==null?void 0:C.fields)?C.fields:[]}catch(x){console.error("Помилка завантаження даних:",x)}finally{u.value=!1}};return e.onMounted(async()=>{const f=n.query.tab;typeof f=="string"&&a.includes(f)&&(i.value=f),await h(),d.value&&await k(d.value)}),e.watch(i,f=>{n.query.tab!==f&&o.replace({query:{...n.query,tab:f}})}),e.watch(()=>n.query.tab,f=>{typeof f=="string"&&a.includes(f)&&i.value!==f&&(i.value=f)}),e.watch(()=>n.params.id,async(f,b)=>{!f||f===b||(await h(),d.value&&await k(d.value))}),(f,b)=>{const x=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",ek,[e.createVNode(an,{variant:"form",title:s.value},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(x,{to:r.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value),1)]),_:1},8,["to"]),e.createElementVNode("span",tk,[e.createVNode(e.unref(ge.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",nk,e.toDisplayString(s.value),1)]),description:e.withCtx(()=>[...b[3]||(b[3]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:b[0]||(b[0]=C=>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:y,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"]),u.value?(e.openBlock(),e.createElementBlock("div",ok,[...b[4]||(b[4]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",rk,[e.createVNode(oa,{tabs:c,activeTab:i.value,"onUpdate:activeTab":b[1]||(b[1]=C=>i.value=C)},null,8,["activeTab"]),e.createElementVNode("div",lk,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(p[i.value]),{data:g.value,"onUpdate:data":b[2]||(b[2]=C=>g.value=C),fields:m.value,"hide-details-button":t.hideDetailsButton,key:i.value},null,40,["data","fields","hide-details-button"]))])]))])}}})},Symbol.toStringTag,{value:"Module"}));/*! js-yaml 5.2.1 https://github.com/nodeca/js-yaml @license MIT */var Ye=Symbol("NOT_RESOLVED"),pr=Symbol("MERGE_KEY");function ft(t,n){return{tagName:t,nodeKind:"scalar",implicit:n.implicit??!1,matchByTagPrefix:n.matchByTagPrefix??!1,implicitFirstChars:n.implicitFirstChars??null,resolve:n.resolve,identify:n.identify??null,represent:n.represent??(o=>String(o)),representTagName:n.representTagName??null}}function gr(t,n){const o=n.finalize===void 0;return{tagName:t,nodeKind:"sequence",implicit:!1,matchByTagPrefix:n.matchByTagPrefix??!1,create:n.create,addItem:n.addItem,finalize:n.finalize??(r=>r),carrierIsResult:o,identify:n.identify??null,represent:n.represent??(r=>r),representTagName:n.representTagName??null}}function Co(t,n){const o=n.finalize===void 0;return{tagName:t,nodeKind:"mapping",implicit:!1,matchByTagPrefix:n.matchByTagPrefix??!1,create:n.create,addPair:n.addPair,has:n.has,keys:n.keys,get:n.get,finalize:n.finalize??(r=>r),carrierIsResult:o,identify:n.identify??null,represent:n.represent??(r=>r),representTagName:n.representTagName??null}}var sk=ft("tag:yaml.org,2002:str",{resolve:t=>t,identify:t=>typeof t=="string"}),ik=["","~","null","Null","NULL"],ck=ft("tag:yaml.org,2002:null",{implicit:!0,implicitFirstChars:["","~","n","N"],resolve:t=>ik.indexOf(t)!==-1?null:Ye,identify:t=>t===null,represent:()=>"null"}),dk=ft("tag:yaml.org,2002:null",{implicit:!0,implicitFirstChars:["n"],resolve:(t,n)=>t==="null"||n&&t===""?null:Ye,identify:t=>t===null,represent:()=>"null"}),uk=["","~","null","Null","NULL"],fk=ft("tag:yaml.org,2002:null",{implicit:!0,implicitFirstChars:["","~","n","N"],resolve:t=>uk.indexOf(t)!==-1?null:Ye,identify:t=>t===null,represent:()=>"null"}),mk=["true","True","TRUE"],pk=["false","False","FALSE"],gk=ft("tag:yaml.org,2002:bool",{implicit:!0,implicitFirstChars:["t","T","f","F"],resolve:t=>mk.indexOf(t)!==-1?!0:pk.indexOf(t)!==-1?!1:Ye,identify:t=>Object.prototype.toString.call(t)==="[object Boolean]",represent:t=>t?"true":"false"}),yk=["true"],hk=["false"],bk=ft("tag:yaml.org,2002:bool",{implicit:!0,implicitFirstChars:["t","f"],resolve:t=>yk.indexOf(t)!==-1?!0:hk.indexOf(t)!==-1?!1:Ye,identify:t=>Object.prototype.toString.call(t)==="[object Boolean]",represent:t=>t?"true":"false"}),xk=["true","True","TRUE","y","Y","yes","Yes","YES","on","On","ON"],kk=["false","False","FALSE","n","N","no","No","NO","off","Off","OFF"],wk=ft("tag:yaml.org,2002:bool",{implicit:!0,implicitFirstChars:["y","Y","n","N","t","T","f","F","o","O"],resolve:t=>xk.indexOf(t)!==-1?!0:kk.indexOf(t)!==-1?!1:Ye,identify:t=>Object.prototype.toString.call(t)==="[object Boolean]",represent:t=>t?"true":"false"}),_k=new RegExp("^(?:0o[0-7]+|0x[0-9a-fA-F]+|[-+]?[0-9]+)$"),Ek=new RegExp("^(?:[-+]?0b[0-1]+|[-+]?0o[0-7]+|[-+]?0x[0-9a-fA-F]+|[-+]?[0-9]+)$");function Ck(t){let n=t,o=1;return(n[0]==="-"||n[0]==="+")&&(n[0]==="-"&&(o=-1),n=n.slice(1)),n.startsWith("0b")?o*parseInt(n.slice(2),2):n.startsWith("0o")?o*parseInt(n.slice(2),8):n.startsWith("0x")?o*parseInt(n.slice(2),16):o*parseInt(n,10)}function Nk(t,n){if(n){if(!Ek.test(t))return Ye}else if(!_k.test(t))return Ye;const o=Ck(t);return Number.isFinite(o)?o:Ye}var ra=ft("tag:yaml.org,2002:int",{implicit:!0,implicitFirstChars:["-","+",..."0123456789"],resolve:Nk,identify:t=>Number.isInteger(t)&&!Object.is(t,-0)&&t.toString(10).indexOf("e")<0,represent:t=>t.toString(10)}),Vk=new RegExp("^-?(?:0|[1-9][0-9]*)$"),Bk=new RegExp("^(?:[-+]?0b[0-1]+|[-+]?0o[0-7]+|[-+]?0x[0-9a-fA-F]+|[-+]?[0-9]+)$");function $k(t){let n=t,o=1;return(n[0]==="-"||n[0]==="+")&&(n[0]==="-"&&(o=-1),n=n.slice(1)),n.startsWith("0b")?o*parseInt(n.slice(2),2):n.startsWith("0o")?o*parseInt(n.slice(2),8):n.startsWith("0x")?o*parseInt(n.slice(2),16):o*parseInt(n,10)}function Sk(t,n){if(n){if(!Bk.test(t))return Ye}else if(!Vk.test(t))return Ye;const o=$k(t);return Number.isFinite(o)?o:Ye}var vk=ft("tag:yaml.org,2002:int",{implicit:!0,implicitFirstChars:["-",..."0123456789"],resolve:Sk,identify:t=>Number.isInteger(t)&&!Object.is(t,-0)&&t.toString(10).indexOf("e")<0,represent:t=>t.toString(10)}),Lk=new RegExp("^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?0x[0-9a-fA-F_]+|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+|[-+]?(?:0|[1-9][0-9_]*))$");function Tk(t){let n=t.replace(/_/g,""),o=1;if((n[0]==="-"||n[0]==="+")&&(n[0]==="-"&&(o=-1),n=n.slice(1)),n.startsWith("0b"))return o*parseInt(n.slice(2),2);if(n.startsWith("0x"))return o*parseInt(n.slice(2),16);if(n.includes(":")){let r=0;for(const l of n.split(":"))r=r*60+Number(l);return o*r}return n!=="0"&&n[0]==="0"?o*parseInt(n,8):o*parseInt(n,10)}function Ak(t){if(!Lk.test(t))return Ye;const n=Tk(t);return Number.isFinite(n)?n:Ye}var yr=ft("tag:yaml.org,2002:int",{implicit:!0,implicitFirstChars:["-","+",..."0123456789"],resolve:Ak,identify:t=>Number.isInteger(t)&&!Object.is(t,-0)&&t.toString(10).indexOf("e")<0,represent:t=>t.toString(10)}),Mk=new RegExp("^(?:[-+]?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|[-+]?\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),Fk=new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Dk(t){if(!Mk.test(t))return Ye;let n=t.toLowerCase();const o=n[0]==="-"?-1:1;if("+-".includes(n[0])&&(n=n.slice(1)),n===".inf")return o===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;if(n===".nan")return NaN;const r=o*parseFloat(n);return Number.isFinite(r)||Fk.test(t)?r:Ye}function Pk(t){if(isNaN(t))return".nan";if(t===Number.POSITIVE_INFINITY)return".inf";if(t===Number.NEGATIVE_INFINITY)return"-.inf";if(Object.is(t,-0))return"-0.0";const n=t.toString(10);return/^[-+]?[0-9]+e/.test(n)?n.replace("e",".e"):n}var la=ft("tag:yaml.org,2002:float",{implicit:!0,implicitFirstChars:["-","+",".",..."0123456789"],resolve:Dk,identify:t=>typeof t=="number"&&(!Number.isInteger(t)||Object.is(t,-0)||t.toString(10).indexOf("e")>=0),represent:Pk}),zk=new RegExp("^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$"),Ik=new RegExp("^(?:[-+]?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|[-+]?\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Rk(t,n){if(n){if(!Ik.test(t))return Ye;let r=t.toLowerCase();const l=r[0]==="-"?-1:1;if("+-".includes(r[0])&&(r=r.slice(1)),r===".inf")return l===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;if(r===".nan")return NaN;const s=l*parseFloat(r);return Number.isFinite(s)?s:Ye}if(!zk.test(t))return Ye;const o=Number(t);return Number.isFinite(o)?o:Ye}function jk(t){if(isNaN(t))return".nan";if(t===Number.POSITIVE_INFINITY)return".inf";if(t===Number.NEGATIVE_INFINITY)return"-.inf";if(Object.is(t,-0))return"-0.0";const n=t.toString(10);return/^[-+]?[0-9]+e/.test(n)?n.replace("e",".e"):n}var Ok=ft("tag:yaml.org,2002:float",{implicit:!0,implicitFirstChars:["-",..."0123456789"],resolve:Rk,identify:t=>typeof t=="number"&&(!Number.isInteger(t)||Object.is(t,-0)||t.toString(10).indexOf("e")>=0),represent:jk}),Uk=new RegExp("^(?:[-+]?(?:(?:[0-9][0-9_]*)?\\.[0-9_]*)(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),qk=new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Hk(t){if(!Uk.test(t))return Ye;let n=t.toLowerCase().replace(/_/g,"");const o=n[0]==="-"?-1:1;if("+-".includes(n[0])&&(n=n.slice(1)),n===".inf")return o===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;if(n===".nan")return NaN;let r=0;if(n.includes(":")){for(const l of n.split(":"))r=r*60+Number(l);r*=o}else r=o*parseFloat(n);return Number.isFinite(r)||qk.test(t)?r:Ye}function Wk(t){if(isNaN(t))return".nan";if(t===Number.POSITIVE_INFINITY)return".inf";if(t===Number.NEGATIVE_INFINITY)return"-.inf";if(Object.is(t,-0))return"-0.0";const n=t.toString(10);return/^[-+]?[0-9]+e/.test(n)?n.replace("e",".e"):n}var hr=ft("tag:yaml.org,2002:float",{implicit:!0,implicitFirstChars:["-","+",".",..."0123456789"],resolve:Hk,identify:t=>typeof t=="number"&&(!Number.isInteger(t)||Object.is(t,-0)||t.toString(10).indexOf("e")>=0),represent:Wk}),Yk=ft("tag:yaml.org,2002:merge",{implicit:!0,implicitFirstChars:["<"],resolve:(t,n)=>t==="<<"||n&&t===""?pr:Ye}),Gk=/^[A-Za-z0-9+/]*={0,2}$/;function Zk(t){const n=t.replace(/\s/g,"");if(n.length%4!==0||!Gk.test(n))return Ye;const o=atob(n),r=new Uint8Array(o.length);for(let l=0;l<o.length;l++)r[l]=o.charCodeAt(l);return r}function Kk(t){let n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return btoa(n)}var Xk=ft("tag:yaml.org,2002:binary",{resolve:Zk,identify:t=>Object.prototype.toString.call(t)==="[object Uint8Array]",represent:Kk}),Jk=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Qk=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 ew(t){let n=Jk.exec(t);if(n===null&&(n=Qk.exec(t)),n===null)return Ye;const o=+n[1],r=+n[2]-1,l=+n[3];if(!n[4]){const p=new Date(Date.UTC(o,r,l));return p.getUTCFullYear()!==o||p.getUTCMonth()!==r||p.getUTCDate()!==l?Ye:p}const s=+n[4],i=+n[5],d=+n[6];let u=0;if(s>23||i>59||d>59)return Ye;if(n[7]){let p=n[7].slice(0,3);for(;p.length<3;)p+="0";u=+p}const c=new Date(Date.UTC(o,r,l,s,i,d,u));if(c.getUTCFullYear()!==o||c.getUTCMonth()!==r||c.getUTCDate()!==l)return Ye;if(n[9]){const p=+n[10],a=+(n[11]||0);if(p>23||a>59)return Ye;const g=(p*60+a)*6e4;c.setTime(c.getTime()-(n[9]==="-"?-g:g))}return c}var tw=ft("tag:yaml.org,2002:timestamp",{implicit:!0,implicitFirstChars:[..."0123456789"],resolve:ew,identify:t=>t instanceof Date,represent:t=>t.toISOString()}),nw=gr("tag:yaml.org,2002:seq",{create:()=>[],addItem:(t,n)=>{t.push(n)},identify:Array.isArray});function No(t){if(t===null||typeof t!="object"||Array.isArray(t))return!1;const n=Object.getPrototypeOf(t);return n===null||n===Object.prototype}function br(t,n){const o={};for(const r of n)t[r]!==void 0&&(o[r]=t[r]);return o}var ow=gr("tag:yaml.org,2002:omap",{create:()=>({list:[],seen:new Set}),addItem:(t,n)=>{let o;if(n instanceof Map){if(n.size!==1)return"cannot resolve an ordered map item";o=n.keys().next().value}else if(No(n)){const r=Object.keys(n);if(r.length!==1)return"cannot resolve an ordered map item";o=r[0]}else return"cannot resolve an ordered map item";return t.seen.has(o)?"duplicate key in ordered map":(t.seen.add(o),t.list.push(n),"")},finalize:t=>t.list}),rw=gr("tag:yaml.org,2002:pairs",{create:()=>[],addItem:(t,n)=>{if(n instanceof Map)return n.size!==1?"cannot resolve a pairs item":(t.push(n.entries().next().value),"");if(Object.prototype.toString.call(n)!=="[object Object]")return"cannot resolve a pairs item";const o=n,r=Object.keys(o);return r.length!==1?"cannot resolve a pairs item":(t.push([r[0],o[r[0]]]),"")}}),lw=Co("tag:yaml.org,2002:map",{create:()=>({}),identify:No,represent:t=>{const n=new Map;for(const o of Object.keys(t))n.set(o,t[o]);return n},addPair:(t,n,o)=>{if(n!==null&&typeof n=="object")return"object-based map does not support complex keys";const r=String(n);return r==="__proto__"?Object.defineProperty(t,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[r]=o,""},has:(t,n)=>n!==null&&typeof n=="object"?!1:Object.prototype.hasOwnProperty.call(t,String(n)),keys:t=>Object.keys(t),get:(t,n)=>t[String(n)]}),aw=Co("tag:yaml.org,2002:set",{create:()=>new Set,identify:t=>t instanceof Set,represent:t=>{const n=new Map;for(const o of t)n.set(o,null);return n},addPair:(t,n,o)=>o!==null?"cannot resolve a set item":(t.add(n),""),has:(t,n)=>t.has(n),keys:t=>t.keys(),get:()=>null});function sw(){return{scalar:{},sequence:{},mapping:{}}}function iw(){return{scalar:[],sequence:[],mapping:[]}}function cw(t){const n=[];for(const o of t){let r=n.length;for(let l=0;l<n.length;l++){const s=n[l];if(s.nodeKind===o.nodeKind&&s.tagName===o.tagName&&s.matchByTagPrefix===o.matchByTagPrefix){r=l;break}}n[r]=o}return n}var Vo=class ls{constructor(n){ut(this,"tags");ut(this,"implicitScalarTags");ut(this,"implicitScalarByFirstChar");ut(this,"implicitScalarAnyFirstChar");ut(this,"defaultScalarTag");ut(this,"defaultSequenceTag");ut(this,"defaultMappingTag");ut(this,"exact");ut(this,"prefix");const o=cw(n),r=[],l=sw(),s=iw();for(const p of o){if(p.nodeKind==="scalar"&&p.implicit){if(p.matchByTagPrefix)throw new Error("Implicit scalar tags cannot match by tag prefix");r.push(p)}switch(p.nodeKind){case"scalar":p.matchByTagPrefix?s.scalar.push(p):l.scalar[p.tagName]=p;break;case"sequence":p.matchByTagPrefix?s.sequence.push(p):l.sequence[p.tagName]=p;break;case"mapping":p.matchByTagPrefix?s.mapping.push(p):l.mapping[p.tagName]=p;break}}const i=r.filter(p=>p.implicitFirstChars===null),d=new Set;for(const p of r)if(p.implicitFirstChars!==null)for(const a of p.implicitFirstChars)d.add(a);const u=new Map;for(const p of d)u.set(p,r.filter(a=>a.implicitFirstChars===null||a.implicitFirstChars.indexOf(p)!==-1));const c=l.scalar["tag:yaml.org,2002:str"];if(!c)throw new Error("schema does not define the default scalar tag (tag:yaml.org,2002:str)");this.tags=o,this.implicitScalarTags=r,this.implicitScalarByFirstChar=u,this.implicitScalarAnyFirstChar=i,this.defaultScalarTag=c,this.defaultSequenceTag=l.sequence["tag:yaml.org,2002:seq"],this.defaultMappingTag=l.mapping["tag:yaml.org,2002:map"],this.exact=l,this.prefix=s}withTags(...n){let o=[];for(const r of n)o=o.concat(r);return new ls([...this.tags,...o])}},xr=new Vo([sk,nw,lw]);new Vo([...xr.tags,dk,bk,vk,Ok]);var dw=new Vo([...xr.tags,ck,gk,ra,la]),uw=new Vo([...xr.tags,fk,wk,yr,hr,tw,Yk,Xk,ow,rw,aw]);Co("tag:yaml.org,2002:map",{create:()=>new Map,addPair:(t,n,o)=>(t.set(n,o),""),has:(t,n)=>t.has(n),keys:t=>t.keys(),get:(t,n)=>t.get(n),identify:t=>t instanceof Map||No(t),represent:t=>{if(t instanceof Map)return t;const n=new Map,o=t;for(const r of Object.keys(o))n.set(r,o[r]);return n}});function aa(t){if(Array.isArray(t)){const n=Array.prototype.slice.call(t);for(let o=0;o<n.length;o++){if(Array.isArray(n[o]))return null;typeof n[o]=="object"&&Object.prototype.toString.call(n[o])==="[object Object]"&&(n[o]="[object Object]")}return String(n)}return typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"?"[object Object]":String(t)}Co("tag:yaml.org,2002:map",{create:()=>({}),identify:No,represent:t=>{const n=new Map;for(const o of Object.keys(t))n.set(o,t[o]);return n},addPair:(t,n,o)=>{const r=aa(n);return r===null?"nested arrays are not supported inside keys":(r==="__proto__"?Object.defineProperty(t,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[r]=o,"")},has:(t,n)=>{const o=aa(n);return o!==null&&Object.prototype.hasOwnProperty.call(t,o)},keys:t=>Object.keys(t),get:(t,n)=>t[String(n)]});var fw={maxLength:79,indent:1,linesBefore:3,linesAfter:2};function kr(t,n,o,r,l){let s="",i="";const d=Math.floor(l/2)-1;return r-n>d&&(s=" ... ",n=r-d+s.length),o-r>d&&(i=" ...",o=r+d-i.length),{str:s+t.slice(n,o).replace(/\t/g,"→")+i,pos:r-n+s.length}}function wr(t,n){return" ".repeat(Math.max(n-t.length,0))+t}function mw(t,n){if(!t.buffer)return null;const o={...fw,...n},r=/\r?\n|\r|\0/g,l=[0],s=[];let i,d=-1;for(;i=r.exec(t.buffer);)s.push(i.index),l.push(i.index+i[0].length),t.position<=i.index&&d<0&&(d=l.length-2);d<0&&(d=l.length-1);let u="";const c=Math.min(t.line+o.linesAfter,s.length).toString().length,p=o.maxLength-(o.indent+c+3);for(let g=1;g<=o.linesBefore&&!(d-g<0);g++){const m=kr(t.buffer,l[d-g],s[d-g],t.position-(l[d]-l[d-g]),p);u=`${" ".repeat(o.indent)}${wr((t.line-g+1).toString(),c)} | ${m.str}
1
+ (function(Ze,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router"),require("lucide-vue-next"),require("@opengis/core"),require("@opengis/filter"),require("@opengis/form")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router","lucide-vue-next","@opengis/core","@opengis/filter","@opengis/form"],e):(Ze=typeof globalThis<"u"?globalThis:Ze||self,e(Ze.MapCustom={},Ze.Vue,Ze.vueRouter,Ze.lucide,Ze.openGIScore,Ze.openGISfilter,Ze.openGISform))})(this,(function(Ze,e,He,he,Ce,eo,fl){"use strict";var e$=Object.defineProperty;var t$=(Ze,e,He)=>e in Ze?e$(Ze,e,{enumerable:!0,configurable:!0,writable:!0,value:He}):Ze[e]=He;var ut=(Ze,e,He)=>t$(Ze,typeof e!="symbol"?e+"":e,He);const En=e.defineComponent({__name:"BaseEntityWrapper",props:{components:{},createParam:{default:"new"},editAction:{default:"edit"},entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=t,o=He.useRoute(),r=e.useSlots(),l=e.computed(()=>{const s=String(o.params.id??""),i=String(o.params.action??"");return s?i===n.editAction?n.components.edit:s===n.createParam?n.components.create:n.components.card:n.components.table});return(s,i)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.value),{"entity-key":n.entityKey,"entity-base-path":n.entityBasePath,"columns-config":n.columnsConfig},e.createSlots({_:2},[e.renderList(e.unref(r),(d,u)=>({name:u,fn:e.withCtx(c=>[e.renderSlot(s.$slots,u,e.normalizeProps(e.guardReactiveProps(c)))])}))]),1032,["entity-key","entity-base-path","columns-config"]))}}),as="registers",ss="/gis.registers",is=e.defineComponent({__name:"RegistersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>ck)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Ключ",name:"register_key",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];return(d,u)=>(e.openBlock(),e.createBlock(En,{components:s,"entity-key":as,"entity-base-path":ss,"columns-config":i,"create-param":"new","edit-action":"edit"}))}}),cs="services",ds="/gis.datasets",us=e.defineComponent({__name:"DatasetsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>fC)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Група",name:"group_id",format:"badge",width:220},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];function d(u){const c=String((u==null?void 0:u.text)||u||"").toLowerCase();return c.includes("error")||c.includes("inactive")?"bg-red-100 text-red-800":c.includes("warning")||c.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(u,c)=>(e.openBlock(),e.createBlock(En,{components:s,"entity-key":cs,"entity-base-path":ds,"columns-config":i,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:p})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",d(p)])},e.toDisplayString((p==null?void 0:p.text)||p||"-"),3)]),_:1}))}}),fs="rasters",ms="/gis.rasters",ps=e.defineComponent({__name:"RastersWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>$C)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>RN)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Джерело",name:"source_path",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120}];return(d,u)=>(e.openBlock(),e.createBlock(En,{components:s,"entity-key":fs,"entity-base-path":ms,"columns-config":i,"create-param":"new","edit-action":"edit"}))}}),gs="cartocss",ys="/gis.cartocss",hs=e.defineComponent({__name:"CartocssWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>tB)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",width:280},{ua:"Опис",name:"description",format:"text",width:320},{ua:"Група",name:"group_id",format:"badge",width:220},{ua:"Джерело",name:"source_path",format:"text",width:240},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"enabled",edit:!0,format:"boolean",width:120}];function d(u){const c=String((u==null?void 0:u.text)||u||"").toLowerCase();return c.includes("error")||c.includes("inactive")?"bg-red-100 text-red-800":c.includes("warning")||c.includes("pending")?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}return(u,c)=>(e.openBlock(),e.createBlock(En,{components:s,"entity-key":gs,"entity-base-path":ys,"columns-config":i,"create-param":"new","edit-action":"edit"},{badge:e.withCtx(({value:p})=>[e.createElementVNode("span",{class:e.normalizeClass(["inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium",d(p)])},e.toDisplayString((p==null?void 0:p.text)||p||"-"),3)]),_:1}))}}),Fe=(t,n)=>{const o=t.__vccOpts||t;for(const[r,l]of n)o[r]=l;return o},bs={},xs={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 ks(t,n){return e.openBlock(),e.createElementBlock("svg",xs,[...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 to=Fe(bs,[["render",ks]]),ws={class:"gap-2 inline-flex"},_s=["href"],Es="maps",ml="/gis.maps",Cs=Fe(e.defineComponent({__name:"MapsWrapper",setup(t){const n=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Eo)),o=e.defineAsyncComponent(()=>Promise.resolve().then(()=>An)),r=e.defineAsyncComponent(()=>Promise.resolve().then(()=>Mn)),l=e.defineAsyncComponent(()=>Promise.resolve().then(()=>HB)),s={table:n,create:o,edit:r,card:l},i=[{ua:"Назва",name:"name",meta:"title",link:"/gis.maps/{id}",width:320},{ua:"Опис",name:"description",format:"text",width:360},{ua:"Публічний",name:"is_public",edit:!0,format:"boolean",width:120},{ua:"Активний",name:"is_active",edit:!0,format:"boolean",width:120},{ua:"Карта",name:"id",format:"link",link:"/maps/{id}",getCellData:()=>"",width:80,align:"center"}];return(d,u)=>(e.openBlock(),e.createBlock(En,{components:s,"entity-key":Es,"entity-base-path":ml,"columns-config":i,"create-param":"new","edit-action":"edit"},{action:e.withCtx(({row:c})=>[e.createElementVNode("div",ws,[e.createElementVNode("a",{href:`${ml}/${c.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(to)],8,_s)])]),_:1}))}}),[["__scopeId","data-v-d576dfc7"]]),Ns={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%]"},Vs={class:"pt-0 mt-0"},Bs={key:0,class:"flex items-center justify-center py-12"},$s={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Ss={key:2,class:"text-center py-12 text-gray-500"},vs={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},Ls=["onClick"],Ts={class:"flex items-start justify-between"},As={class:"flex items-start gap-3"},Ms={class:"flex-1 min-w-0"},Fs={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},Ds=["onClick"],Ps={class:"relative"},zs=["onClick"],Is={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"},Rs={class:"text-xs text-gray-600 line-clamp-2"},js={class:"flex items-center gap-2 shrink-0"},Os={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},Us={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},Ho=30,qs=Fe(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=He.useRouter(),i=He.useRoute(),d=e.ref(Number(i.query.page)||1),u=e.ref(!1),c=e.ref(0),p=e.ref([]),a=e.computed(()=>{const w=(d.value-1)*Ho,B=w+Ho;return p.value.slice(w,B)}),g=e.ref(!0),m=e.ref(null),y=e.ref(null);let k=null,h=null;const f=(w="",B="")=>{const v=new URLSearchParams,K=w.trim();K&&v.set("search",K);const J=(B||"").trim();J&&v.set("type",J);const O=v.toString();return O?`/api/user-cls?${O}`:"/api/user-cls"},b=async(w="",B="")=>{try{g.value=!0,m.value=null;const v=f(w,B),K=await fetch(v);if(!K.ok)throw new Error(`HTTP error: ${K.status}`);const J=await K.json();if(p.value=J.data,!w.trim())c.value=J.data.length;else if(c.value===0){const O=await fetch(f("",B));if(O.ok){const ne=await O.json();c.value=ne.data.length}}l("update:counts",{filtered:p.value.length,total:c.value})}catch(v){m.value=v instanceof Error?v.message:"Failed to load classifiers",console.error("Error fetching classifiers:",v)}finally{g.value=!1}};e.onMounted(()=>{u.value=!0,b(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([w,B])=>{k&&clearTimeout(k),k=setTimeout(()=>{b(w,B??""),d.value=1},300)});const x=w=>{s.push({name:"classifier-detail",params:{name:w.name}})},N=()=>{b(r.search,r.type??"")},V=async w=>{try{await navigator.clipboard.writeText(w),y.value=w,h&&clearTimeout(h),h=setTimeout(()=>{y.value=null},500)}catch(B){console.error("Failed to copy text: ",B)}};n({refetch:N});const _=w=>{d.value=w,s.replace({query:{...i.query,page:String(w)}})};return(w,B)=>(e.openBlock(),e.createElementBlock("div",Ns,[e.createElementVNode("div",Vs,[g.value?(e.openBlock(),e.createElementBlock("div",Bs,[e.createVNode(e.unref(he.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):m.value?(e.openBlock(),e.createElementBlock("div",$s,e.toDisplayString(m.value),1)):p.value.length===0?(e.openBlock(),e.createElementBlock("div",Ss," Нічого не знайдено ")):e.createCommentVNode("",!0),p.value.length>0?(e.openBlock(),e.createElementBlock("div",vs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(v,K)=>(e.openBlock(),e.createElementBlock("div",{key:K,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:J=>x(v)},[e.createElementVNode("div",Ts,[e.createElementVNode("div",As,[v.type==="sql"?(e.openBlock(),e.createBlock(e.unref(he.Layers),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(he.Code),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",Ms,[e.createElementVNode("div",Fs,[e.createElementVNode("h4",{onClick:e.withModifiers(J=>V(v.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(v.name),9,Ds),e.createElementVNode("div",Ps,[e.createElementVNode("button",{onClick:e.withModifiers(J=>V(v.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(he.ClipboardCopy),{width:14,height:14,"stroke-width":2})],8,zs),y.value===v.name?(e.openBlock(),e.createElementBlock("div",Is," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",Rs,e.toDisplayString(v.description||"Опис відсутній"),1)])]),e.createElementVNode("div",js,[v.type!="sql"?(e.openBlock(),e.createElementBlock("span",Os,e.toDisplayString(v.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(he.ChevronRight),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,Ls))),128))])):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",Us,[e.createVNode(e.unref(Ce.VsPagination),{total:p.value.length,page:d.value,"page-size":Ho,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":_,onPageChange:_},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-3556f06d"]]),Hs={class:"bg-white rounded-lg shadow-xl max-w-md w-full overflow-hidden"},Ws={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},Ys={class:"text-lg font-semibold text-gray-900"},Gs={key:0,class:"p-6 flex items-center justify-center"},Zs={key:1,class:"p-6"},Ks={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Xs={class:"flex items-center gap-3 mt-6 pt-6 border-t border-gray-200"},Js=["disabled"],Qs=["disabled"],ei=e.defineComponent({__name:"DictModale",props:{editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,l=n,s=e.computed(()=>!!r.editData),i=e.ref(null),d=e.ref({name:"",description:"",alias:[]}),u=e.computed(()=>[{name:"name",type:"text",label:"Назва (унікальна)",placeholder:"Назва класифікатора",validators:["required"],disabled:s.value,hint:"Використовується як ідентифікатор в API"},{name:"description",type:"textarea",label:"Опис",placeholder:"Опис довідника"},{name:"alias",type:"tags",label:"Аліас",placeholder:"Аліас",addButtonText:"Додати аліас"}]),c=e.ref([]),p=e.ref(!1),a=e.ref(!1),g=e.ref(null),m=async h=>{try{a.value=!0;const f=await fetch(`/api/suggest/${encodeURIComponent(h)}`);if(!f.ok)throw new Error(`HTTP error: ${f.status}`);const b=await f.json();c.value=b.data||[]}catch(f){console.error("Error fetching suggest data:",f),c.value=[]}finally{a.value=!1}};e.onMounted(async()=>{r.editData&&(d.value={name:r.editData.name,description:r.editData.description||"",alias:r.editData.alias||[]},await m(r.editData.name))});const y=async()=>{var f,b;const h=(b=(f=i.value)==null?void 0:f.validate)==null?void 0:b.call(f);if(h){Ce.notify({type:"warning",title:"Валідація",message:Object.entries(h).map(([x,N])=>`${x}: ${N}`).join(`
2
+ `)});return}if(d.value.name.trim())try{p.value=!0,g.value=null;const x={name:d.value.name.trim(),description:d.value.description.trim()||null,alias:d.value.alias.length>0?d.value.alias:null,data:c.value.length>0?c.value:[]},N=s.value?`/api/user-cls/${encodeURIComponent(d.value.name.trim())}`:"/api/user-cls",V=await fetch(N,{method:s.value?"PUT":"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(x)});if(!V.ok){const _=await V.json().catch(()=>({}));throw new Error(_.message||`HTTP error: ${V.status}`)}l("created"),l("close")}catch(x){let N="Помилка створення довідника";x instanceof Error?N=x.message:s.value&&(N="Помилка оновлення довідника"),Ce.notify({type:"error",title:"Помилка",message:N}),console.error("Error saving classifier:",x)}finally{p.value=!1}},k=()=>{const h=document.createElement("input");h.type="file",h.accept=".json",h.onchange=f=>{var V;const b=(V=f.target.files)==null?void 0:V[0];if(!b)return;const x=b.name.replace(/\.json$/i,"").trim(),N=new FileReader;N.onload=async _=>{try{const w=JSON.parse(_.target.result);if(!Array.isArray(w))throw new Error("Файл повинен містити масив обʼєктів");p.value=!0,g.value=null;const v=await fetch("/api/user-cls",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:x,description:null,alias:null,data:w})});if(!v.ok){const K=await v.json().catch(()=>({}));throw new Error(K.message||`HTTP error: ${v.status}`)}Ce.notify({title:"Імпорт успішний",type:"success",message:`Створено класифікатор "${x}" з ${w.length} записами`}),l("created"),l("close")}catch(w){Ce.notify({title:"Помилка імпорту",type:"error",message:w.message||"Некоректний формат файлу"})}finally{p.value=!1}},N.readAsText(b)},h.click()};return(h,f)=>(e.openBlock(),e.createElementBlock("div",{onClick:f[3]||(f[3]=e.withModifiers(b=>l("close"),["self"])),class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4"},[e.createElementVNode("div",Hs,[e.createElementVNode("div",Ws,[e.createElementVNode("h3",Ys,e.toDisplayString(s.value?"Редагувати довідник":"Створити довідник"),1),e.createElementVNode("button",{onClick:f[0]||(f[0]=b=>l("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(he.X),{width:20,height:20,"stroke-width":2,class:"lucide lucide-x-icon lucide-x"})])]),a.value?(e.openBlock(),e.createElementBlock("div",Gs,[e.createVNode(e.unref(he.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):(e.openBlock(),e.createElementBlock("div",Zs,[e.createVNode(e.unref(o),{ref_key:"formRef",ref:i,schema:u.value,values:d.value,"onUpdate:values":f[1]||(f[1]=b=>d.value=b)},null,8,["schema","values"]),g.value?(e.openBlock(),e.createElementBlock("div",Ks,e.toDisplayString(g.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Xs,[e.createElementVNode("button",{type:"button",onClick:y,disabled:p.value,class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[p.value?(e.openBlock(),e.createBlock(e.unref(he.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(p.value?"Збереження...":"Зберегти"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(p.value?"Створення...":"Створити"),1)],64))],8,Js),e.createElementVNode("button",{type:"button",onClick:k,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Імпорт "),e.createElementVNode("button",{type:"button",onClick:f[2]||(f[2]=b=>l("close")),disabled:p.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50"}," Скасувати ",8,Qs)])]))])]))}}),ti={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},ni={class:""},oi={class:"text-2xl font-bold mb-2 flex items-center gap-2"},ri={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},li={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},ai={class:"w-full md:w-auto"},si=["value"],ii={class:"relative w-full lg:w-[16rem]"},ci={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},di={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},ui=["value"],fi=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=d=>{const u=d.target.value;r("update:filter",u)},s=e.ref(!1),i=()=>{r("refresh")};return(d,u)=>(e.openBlock(),e.createElementBlock("div",ti,[e.createElementVNode("div",ni,[e.createElementVNode("h1",oi,[u[4]||(u[4]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",ri,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),u[5]||(u[5]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",li,[e.createElementVNode("div",ai,[u[7]||(u[7]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:l},[...u[6]||(u[6]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,si)]),e.createElementVNode("div",ii,[e.createElementVNode("div",ci,[e.createElementVNode("div",di,[e.createVNode(e.unref(he.Search),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:u[0]||(u[0]=c=>d.$emit("update:modelValue",c.target.value))},null,40,ui),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:u[1]||(u[1]=c=>d.$emit("update:modelValue",""))},[e.createVNode(e.unref(he.X),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:u[2]||(u[2]=c=>s.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(he.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),u[8]||(u[8]=e.createTextVNode(" Додати ",-1))]),s.value?(e.openBlock(),e.createBlock(ei,{key:0,onClose:u[3]||(u[3]=c=>s.value=!1),onCreated:i})):e.createCommentVNode("",!0)])]))}}),mi={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},pi={key:0,class:"flex items-center justify-center py-12"},gi={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},yi={key:2,class:"text-center py-12 text-gray-500"},hi={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},bi={class:"bg-gray-50 border-b border-gray-200"},xi={class:"divide-y divide-gray-200"},ki={class:"px-4 py-3 w-1/12"},wi={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},_i={class:"px-4 py-3 text-sm text-gray-600 font-mono"},Ei={class:"px-4 py-3 w-1/12"},Ci={class:"flex gap-1"},Ni=["onClick"],Vi=["onClick"],Bi=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},emits:["edit"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=y=>{l("edit",y)},i=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-5/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"},{key:"actions",label:"Дії",width:"w-1/12",align:"text-left"}],d=e.ref([]),u=e.ref(!0),c=e.ref(null),p=e.computed(()=>{var k;if(!((k=r.search)!=null&&k.trim()))return d.value;const y=r.search.toLowerCase().trim();return d.value.filter(h=>{var f,b;return((f=h.text)==null?void 0:f.toLowerCase().includes(y))||((b=h.id)==null?void 0:b.toLowerCase().includes(y))})}),a=async y=>{try{u.value=!0,c.value=null;const k=await fetch(`/api/suggest/${encodeURIComponent(y)}`);if(!k.ok)throw new Error(`HTTP error: ${k.status}`);const h=await k.json();d.value=h.data}catch(k){c.value=k instanceof Error?k.message:"Failed to load items",console.error("Error fetching suggest items:",k)}finally{u.value=!1}},g=async(y,k)=>{Ce.confirm({title:"Підтвердіть дію",type:"error",message:"Ви впевнені, що хочете видалити даний обʼєкт?",onConfirm:async()=>{const h=await fetch(`/api/user-cls/${y}/${k}`,{method:"DELETE"});if(!h.ok){Ce.notify({type:"error",title:"Помилка",message:(await h.json()).error||"Something went wrong"});return}Ce.notify({title:"Видалено",type:"success",message:"Обʼєкт успішно видалено"}),a(y)}})};return e.onMounted(()=>{r.classifierName&&a(r.classifierName)}),e.watch(()=>r.classifierName,y=>{y&&a(y)}),n({refetch:()=>{a(r.classifierName)}}),(y,k)=>(e.openBlock(),e.createElementBlock("div",mi,[u.value?(e.openBlock(),e.createElementBlock("div",pi,[e.createVNode(e.unref(he.Loader2),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):c.value?(e.openBlock(),e.createElementBlock("div",gi,e.toDisplayString(c.value),1)):d.value.length===0?(e.openBlock(),e.createElementBlock("div",yi," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",hi,[e.createElementVNode("thead",bi,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,h=>e.createElementVNode("th",{key:h.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[h.width,h.align]])},e.toDisplayString(h.label),3)),64))])]),e.createElementVNode("tbody",xi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,h=>(e.openBlock(),e.createElementBlock("tr",{key:h.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",ki,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:h.color})},null,4)]),e.createElementVNode("td",wi,e.toDisplayString(h.text),1),e.createElementVNode("td",_i,e.toDisplayString(h.id),1),e.createElementVNode("td",Ei,[e.createElementVNode("div",Ci,[e.createElementVNode("button",{onClick:f=>s(h),class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати"},[e.createVNode(e.unref(he.PenLine),{size:14,"stroke-width":2})],8,Ni),e.createElementVNode("button",{onClick:f=>g(t.classifierName,h.id),class:"p-1 text-gray-400 hover:text-red-600 transition-all rounded hover:bg-red-50",title:"Видалити"},[e.createVNode(e.unref(he.Trash2),{size:14,"stroke-width":2})],8,Vi)])])]))),128))])]))]))}}),$i={class:"bg-white rounded-lg shadow-xl max-w-md w-full max-h-[90vh] overflow-y-auto"},Si={class:"sticky top-0 bg-white border-b border-gray-200 px-6 py-4 flex items-center justify-between"},vi={class:"text-lg font-semibold text-gray-900"},Li={class:"space-y-5"},Ti={class:"space-y-3"},Ai={class:"grid grid-cols-6 gap-2"},Mi=["onClick"],Fi={key:0,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-3 text-sm mt-4"},Di={class:"flex items-center gap-3 pt-6"},Pi=["disabled"],zi=["disabled"],Ii=e.defineComponent({__name:"TableAddModale",props:{classifierName:{},editData:{}},emits:["close","created"],setup(t,{emit:n}){const o=t,r=n,l=["rgb(44, 94, 255)","rgb(187, 224, 168)","rgb(255, 165, 0)","rgb(139, 92, 246)","rgb(239, 68, 68)","rgb(84, 171, 82)","rgb(107, 114, 128)","rgb(236, 72, 153)","rgb(255, 216, 117)","rgb(96, 193, 235)","rgb(20, 184, 166)","rgb(209, 115, 168)"],s=e.ref(null),i=e.ref(!1),d=e.ref(null),u=e.reactive({id:"",text:""});e.onMounted(()=>{o.editData&&(u.id=o.editData.id||"",u.text=o.editData.text,s.value=o.editData.color||null)});const c=async()=>{if(u.text.trim())try{i.value=!0,d.value=null;const p=await fetch(`/api/suggest/${encodeURIComponent(o.classifierName)}`);if(!p.ok)throw new Error(`HTTP error: ${p.status}`);const g=(await p.json()).data||[],m={id:u.id.trim(),text:u.text.trim(),color:s.value||null};let y;o.editData?y=g.map(h=>{var f;return h.id===((f=o.editData)==null?void 0:f.id)?m:h}):y=[...g,m];const k=await fetch(`/api/user-cls/${encodeURIComponent(o.classifierName)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.classifierName,data:y})});if(!k.ok){const h=await k.json().catch(()=>({}));throw new Error(h.message||`HTTP error: ${k.status}`)}r("created"),r("close")}catch(p){d.value=p instanceof Error?p.message:"Помилка збереження",console.error("Error saving record:",p)}finally{i.value=!1}};return(p,a)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createElementVNode("div",{class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 p-4",onClick:a[4]||(a[4]=e.withModifiers(g=>r("close"),["self"]))},[e.createElementVNode("div",$i,[e.createElementVNode("div",Si,[e.createElementVNode("h2",vi,e.toDisplayString(t.editData?"Редагувати запис":"Додати запис"),1),e.createElementVNode("button",{onClick:a[0]||(a[0]=g=>r("close")),class:"text-gray-400 hover:text-gray-600 transition-colors"},[e.createVNode(e.unref(he.X),{width:20,height:20,"stroke-width":2,class:""})])]),e.createElementVNode("form",{class:"p-6",onSubmit:e.withModifiers(c,["prevent"])},[e.createElementVNode("div",Li,[e.createElementVNode("div",null,[a[6]||(a[6]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"}," Колір ",-1)),e.createElementVNode("div",Ti,[e.createElementVNode("div",Ai,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,g=>e.createElementVNode("button",{key:g,type:"button",class:e.normalizeClass(["w-full aspect-square rounded-lg border-2 transition-all",s.value===g?"border-gray-900 scale-110":"border-gray-300 hover:border-gray-400"]),style:e.normalizeStyle({backgroundColor:g}),onClick:m=>s.value=g},null,14,Mi)),64))]),a[5]||(a[5]=e.createElementVNode("div",{class:"relative"},[e.createElementVNode("button",{type:"button",class:"text-sm text-sky-600 hover:text-sky-700"}," Обрати інший колір ")],-1))])]),e.createElementVNode("div",null,[a[7]||(a[7]=e.createElementVNode("label",{for:"id",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Код "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[1]||(a[1]=g=>u.id=g),type:"text",id:"id",placeholder:"Введіть код",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.id]])]),e.createElementVNode("div",null,[a[8]||(a[8]=e.createElementVNode("label",{for:"name",class:"block text-sm font-medium text-gray-700 mb-2"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":a[2]||(a[2]=g=>u.text=g),type:"text",id:"name",placeholder:"Введіть назву",class:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-sky-500 focus:border-transparent text-sm text-[#2e3338]",required:""},null,512),[[e.vModelText,u.text]])])]),d.value?(e.openBlock(),e.createElementBlock("div",Fi,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Di,[e.createElementVNode("button",{type:"submit",disabled:i.value||!u.text.trim(),class:"flex-1 px-4 py-2.5 bg-sky-600 text-white rounded-lg hover:bg-sky-700 transition-colors text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2"},[i.value?(e.openBlock(),e.createBlock(e.unref(he.Loader2),{key:0,width:16,height:16,"stroke-width":2,class:"animate-spin"})):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(i.value?"Збереження...":t.editData?"Зберегти зміни":"Зберегти"),1)],8,Pi),e.createElementVNode("button",{type:"button",onClick:a[3]||(a[3]=g=>r("close")),disabled:i.value,class:"flex-1 px-4 py-2.5 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium disabled:opacity-50 disabled:cursor-not-allowed"}," Скасувати ",8,zi)])],32)])])]))}}),Ri={class:"space-y-6 flex-1 overflow-y-auto p-0"},ji={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},Oi={class:"text-gray-900"},Ui={class:"flex items-start justify-between mb-6"},qi={class:"flex-1 mr-4"},Hi={class:"text-2xl font-bold text-gray-900"},Wi={key:0,class:"flex items-center gap-2 group mt-1"},Yi={class:"text-sm text-gray-500"},Gi={key:1,class:"flex items-center gap-2 mt-1"},Zi=["disabled"],Ki=["disabled"],Xi={class:"flex items-center gap-3"},Ji={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4 grid grid-cols-2 justify-between"},Qi={class:"relative max-w-md grid"},ec={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},tc={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},nc=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=He.useRouter(),o=He.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),s=e.ref(null),i=e.ref(null),d=e.ref(""),u=e.ref(""),c=e.ref(""),p=e.ref(!1),a=e.ref(!1),g=e.ref(null),m=async()=>{var _;try{const w=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!w.ok)return;const v=(_=(await w.json()).data)==null?void 0:_[0];v&&(u.value=v.description||"")}catch(w){console.error("Error fetching classifier details:",w)}},y=()=>{c.value=u.value,p.value=!0,e.nextTick(()=>{var _;(_=g.value)==null||_.focus()})},k=()=>{p.value=!1,c.value=""},h=async()=>{try{a.value=!0;const B=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],v={name:r.value,description:c.value.trim()||null,data:B},K=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});if(!K.ok)throw new Error(`HTTP error: ${K.status}`);u.value=c.value,p.value=!1}catch(_){console.error("Error saving description:",_)}finally{a.value=!1}};e.onMounted(()=>{m()}),e.watch(r,()=>{m()});const f=()=>{s.value=null,l.value=!0},b=_=>{s.value=_,l.value=!0},x=()=>{l.value=!1,s.value=null},N=()=>{var _;(_=i.value)==null||_.refetch()},V=async()=>{try{const _=await fetch(`/api/suggest/${encodeURIComponent(r.value)}`);if(!_.ok)throw new Error(`HTTP error: ${_.status}`);const B=(await _.json()).data||[],v=new Blob([JSON.stringify(B,(O,ne)=>ne===null?void 0:ne,2)],{type:"application/json"}),K=URL.createObjectURL(v),J=document.createElement("a");J.href=K,J.download=`${r.value}.json`,document.body.appendChild(J),J.click(),document.body.removeChild(J),URL.revokeObjectURL(K),Ce.notify({title:"Експорт завершено",type:"success",message:"Файл успішно експортовано"})}catch(_){console.error("Error exporting classifier to json:",_),Ce.notify({title:"Помилка",type:"error",message:"Не вдалося експортувати дані"})}};return(_,w)=>(e.openBlock(),e.createElementBlock("div",Ri,[e.createElementVNode("div",null,[e.createElementVNode("div",ji,[e.createElementVNode("button",{onClick:w[0]||(w[0]=B=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),w[4]||(w[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",Oi,e.toDisplayString(r.value),1)]),e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("h1",Hi,e.toDisplayString(r.value),1),p.value?(e.openBlock(),e.createElementBlock("div",Gi,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:g,"onUpdate:modelValue":w[1]||(w[1]=B=>c.value=B),type:"text",class:"text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",onKeydown:[e.withKeys(h,["enter"]),e.withKeys(k,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,c.value]]),e.createElementVNode("button",{onClick:h,disabled:a.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(he.Check),{width:18,height:18,"stroke-width":2})],8,Zi),e.createElementVNode("button",{onClick:k,disabled:a.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(he.X),{width:18,height:18,"stroke-width":2})],8,Ki)])):(e.openBlock(),e.createElementBlock("div",Wi,[e.createElementVNode("p",Yi,e.toDisplayString(u.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:y,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(he.SquarePen),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",Xi,[e.createElementVNode("button",{onClick:f,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(he.Plus),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),w[5]||(w[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:w[2]||(w[2]=B=>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",Ji,[e.createElementVNode("div",Qi,[e.createElementVNode("div",ec,[e.createElementVNode("div",tc,[e.createVNode(e.unref(he.Search),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":w[3]||(w[3]=B=>d.value=B),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,d.value]])])]),e.createElementVNode("button",{onClick:V,class:"justify-self-end border p-2 rounded-lg w-fit text-sm bg-stone-100/50 hover:bg-white hover:shadow-sm transition-colors"}," Експорт ")]),l.value?(e.openBlock(),e.createBlock(Ii,{key:0,"classifier-name":r.value,"edit-data":s.value,onClose:x,onCreated:N},null,8,["classifier-name","edit-data"])):e.createCommentVNode("",!0),e.createVNode(Bi,{ref_key:"detailsTableRef",ref:i,"classifier-name":r.value,search:d.value,onEdit:b},null,8,["classifier-name","search"])]))}}),oc={class:"flex-col justify-between h-full"},rc={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},lc=e.defineComponent({__name:"index",setup(t){const n=He.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),s=e.ref({filtered:0,total:0}),i=u=>{s.value=u},d=()=>{var u;(u=l.value)==null||u.refetch()};return(u,c)=>(e.openBlock(),e.createElementBlock("div",oc,[e.createElementVNode("div",rc,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(fi,{key:0,modelValue:o.value,"onUpdate:modelValue":c[0]||(c[0]=p=>o.value=p),filter:r.value,"onUpdate:filter":c[1]||(c[1]=p=>r.value=p),counts:s.value,onRefresh:d},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(nc,{key:2})):(e.openBlock(),e.createBlock(qs,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":i},null,8,["search","type"]))]),c[2]||(c[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),ac={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},sc={class:"w-full bg-white relative"},ic={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},cc={key:0,class:"bg-white divide-y divide-gray-200"},dc={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},uc=["onClick"],fc={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},mc={key:1,class:"px-6 py-3.5"},pc={class:"text-sm font-semibold text-gray-900"},gc={class:"text-xs text-gray-400 mt-0.5"},yc={key:0,class:"inline-flex items-center cursor-pointer"},hc={class:"relative"},bc=["checked","onChange"],xc=["checked","onChange"],kc={class:"px-6 py-3"},wc={class:"ml-6"},_c={class:"text-sm text-black font-medium"},Ec={class:"text-xs text-gray-400 mt-0.5"},Cc=["checked","onChange"],Nc={key:1},Vc=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),i=e.ref({}),d=e.ref({}),u=e.computed(()=>{var x;return((x=r.data)==null?void 0:x.routers)||[]});e.watch(()=>r.modelValue,x=>{const N={};(x||[]).forEach(V=>{N[V.id]=new Set(V.actions||[])}),d.value=N},{immediate:!0});function c(){const x=Object.entries(d.value).map(([N,V])=>({id:N,actions:Array.from(V)}));l("update:modelValue",x)}function p(x){return x?x.id||x.path||x.table||x.ua||JSON.stringify(x):""}function a(x){return x?x.id||x.ua||x.name:""}function g(x){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[x]||x}function m(x,N){var _;const V=p(x);return((_=d.value[V])==null?void 0:_.has(N))||!1}function y(x){const N=a(x);return i.value[N]===!0}function k(x){const N=a(x);i.value[N]=!y(x)}function h(x,N){var V;return(V=x.menu)!=null&&V.length?x.menu.every(_=>m(_,N)):m(x,N)}function f(x,N,V){var _;if((_=x.menu)!=null&&_.length){const w={...d.value};x.menu.forEach(B=>{const v=p(B),K=new Set(w[v]||[]);V?K.add(N):K.delete(N),w[v]=K}),d.value=w,c()}}function b(x,N,V){const _=p(x),w=new Set(d.value[_]||[]);V?w.add(N):w.delete(N),d.value={...d.value,[_]:w},c()}return n({getSelected:()=>r.modelValue}),(x,N)=>{var V;return e.openBlock(),e.createElementBlock("div",ac,[e.createElementVNode("table",sc,[e.createElementVNode("thead",ic,[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(s.value,_=>(e.openBlock(),e.createElementBlock("th",{key:_,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(g(_)),1))),128))])]),(V=u.value)!=null&&V.length?(e.openBlock(),e.createElementBlock("tbody",cc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,_=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:p(_)},[e.createElementVNode("tr",dc,[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:w=>k(_)},[e.createElementVNode("button",fc,[e.createVNode(e.unref(he.ChevronDown),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":y(_)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(_.ua),1)])],8,uc)):(e.openBlock(),e.createElementBlock("td",mc,[e.createElementVNode("div",pc,e.toDisplayString(_.ua),1),e.createElementVNode("div",gc,e.toDisplayString(_.path||_.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,w=>(e.openBlock(),e.createElementBlock("td",{key:w,class:"px-4 py-3.5 text-center"},[_!=null&&_.menu?(e.openBlock(),e.createElementBlock("label",yc,[e.createElementVNode("div",hc,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:h(_,w),onChange:B=>f(_,w,B.target.checked)},null,40,bc),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:m(_,w),onChange:B=>b(_,w,B.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,xc))]))),128))]),_!=null&&_.menu&&y(_)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.menu,w=>(e.openBlock(),e.createElementBlock("tr",{key:p(w),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",kc,[e.createElementVNode("div",wc,[e.createElementVNode("div",_c,e.toDisplayString(w.ua),1),e.createElementVNode("div",Ec,e.toDisplayString(w.path||w.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,B=>(e.openBlock(),e.createElementBlock("td",{key:B,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:m(w,B),onChange:v=>b(w,B,v.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,Cc)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",Nc,[...N[2]||(N[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),Bc={class:"flex flex-col gap-4 mt-2 mx-2"},$c={class:"flex items-center gap-3"},Sc={class:"flex-1 relative"},vc=e.defineComponent({__name:"VsPermissions",setup(t){const n=He.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),s=e.ref([]),i=e.ref(["edit"]),d=e.computed(()=>c(l.value)),u=e.computed(()=>{const g=o.value.toLowerCase().trim();return g?d.value.map(m=>{const y=String(m.ua||"").toLowerCase().includes(g),k=(m.menu||[]).filter(h=>String(h.ua||"").toLowerCase().includes(g));return y?{...m,menu:m.menu}:k.length?{...m,menu:k}:null}).filter(Boolean):d.value}),c=g=>{const m=g.categories||[],y=g.layers||[],k=m.map(f=>{const b=y.filter(x=>x.category_id===f.category_id).map(x=>({id:String(x.layer_id),ua:x.name,path:String(x.layer_id)}));return b.length?{ua:f.name,menu:b,id:String(f.category_id)}:null}).filter(Boolean),h=y.filter(f=>!f.category_id).map(f=>({ua:f.name,id:String(f.layer_id),path:String(f.layer_id)}));return h.length&&k.push({ua:"Без категорії",menu:h,id:"noCategory"}),k},p=async()=>{const[g,m]=await Promise.all([fetch("/api/catalog").then(y=>y.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(y=>y.json())]);l.value=g,s.value=((m==null?void 0:m.layer_list)||[]).filter(y=>y.service_id).map(y=>({id:String(y.service_id),actions:y.actions||[]}))},a=async()=>{var y,k;const m=(((k=(y=r.value)==null?void 0:y.getSelected)==null?void 0:k.call(y))||s.value).filter(h=>{var f;return(f=h.actions)==null?void 0:f.length}).map(h=>({service_id:h.id,actions:h.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)}).then(h=>h.json()).then(h=>{Ce.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(h=>{Ce.notify({title:"Помилка",message:h.message,type:"error"})})};return e.onMounted(p),(g,m)=>(e.openBlock(),e.createElementBlock("div",Bc,[e.createElementVNode("div",$c,[e.createElementVNode("div",Sc,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=y=>o.value=y),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:m[1]||(m[1]=y=>g.$router.back())}," Повернутися "),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700",onClick:a}," Зберегти ")]),e.createVNode(Vc,{ref_key:"accessRef",ref:r,data:{routers:u.value},modelValue:s.value,"onUpdate:modelValue":m[2]||(m[2]=y=>s.value=y),actions:i.value},null,8,["data","modelValue","actions"])]))}});function nn(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function Wt(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=nn(t[0]),o=nn(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return Wt(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=nn(o),s=nn(r);if(l!=null&&s!=null)return[l,s]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=nn(n),l=nn(o);return r!=null&&l!=null?[r,l]:null}return null}const pl=Symbol("MapContext");function Lc(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],s=()=>{r=!0,l.length&&l.forEach(m=>m())},i=()=>{const m=t.container;return typeof m=="string"?document.getElementById(m):(m==null?void 0:m.value)!==void 0?m.value:m},d=()=>r?Promise.resolve():new Promise(m=>l.push(m)),u=(m,y)=>{if(m==null)return y;const k=Number(typeof m=="string"?m.trim():m);return Number.isFinite(k)?k:y},c=m=>{if(!n.value||!m)return;const y=Wt(m.center);y&&n.value.setCenter(y);const k=n.value.getZoom(),h=u(m.zoom,k);if(h!==k&&n.value.setZoom(h),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const f=n.value.getMaxZoom(),b=u(m.maxZoom,f);b!==f&&n.value.setMaxZoom(b)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const f=n.value.getMinZoom(),b=u(m.minZoom,f);b!==f&&n.value.setMinZoom(b)}m.bounds&&n.value.fitBounds(m.bounds,{animate:!1})},p=async()=>{var N,V,_,w,B,v,K;if(typeof window>"u"||n.value)return;const m=i();if(!m)throw new Error("Map container not found");const y=e.unref(t.settings)||null,k=Wt((N=y==null?void 0:y.map)==null?void 0:N.center)||[30,50],h=u((V=y==null?void 0:y.map)==null?void 0:V.zoom,7),f=u((_=y==null?void 0:y.map)==null?void 0:_.maxZoom,20),x={...{attributionControl:!1,center:k,zoom:h,maxZoom:f,minZoom:4},...t.mapOptions||{},container:m};x.maxZoom==null&&(x.maxZoom=f),n.value=new maplibregl.Map(x),(w=t.controls)!=null&&w.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var ne;const J=n.value.getContainer(),O=(ne=J==null?void 0:J.querySelector)==null?void 0:ne.call(J,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");O&&typeof n.value.easeTo=="function"&&O.addEventListener("click",de=>{de.preventDefault(),de.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(B=t.controls)!=null&&B.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(v=t.controls)!=null&&v.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(K=t.controls)!=null&&K.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var J;c((J=e.unref(t.settings))==null?void 0:J.map),o.value=!0,s()})};e.watch(()=>{var m;return(m=e.unref(t.settings))==null?void 0:m.map},m=>{c(m)},{deep:!0});const a=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(p),e.onUnmounted(a);const g={map:n,ready:d,flyTo:m=>{var y;return(y=n.value)==null?void 0:y.flyTo(m)},fitBounds:(m,y)=>{var k;return(k=n.value)==null?void 0:k.fitBounds(m,y)},setCenter:m=>{var y;return(y=n.value)==null?void 0:y.setCenter(m)},setZoom:m=>{var y;return(y=n.value)==null?void 0:y.setZoom(m)},addControl:(m,y)=>{var k;return(k=n.value)==null?void 0:k.addControl(m,y)},removeControl:m=>{var y;return(y=n.value)==null?void 0:y.removeControl(m)},on:(m,y,k)=>{var h,f;return typeof y=="string"?((h=n.value)==null||h.on(m,y,k),()=>{var b;return(b=n.value)==null?void 0:b.off(m,y,k)}):((f=n.value)==null||f.on(m,y),()=>{var b;return(b=n.value)==null?void 0:b.off(m,y)})},off:(m,y,k)=>{var h,f;typeof y=="string"?(h=n.value)==null||h.off(m,y,k):(f=n.value)==null||f.off(m,y)},project:m=>{var y;return(y=n.value)==null?void 0:y.project(m)},unproject:m=>{var y;return(y=n.value)==null?void 0:y.unproject(m)}};return e.provide(pl,g),g}function Ke(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(pl);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const gl=Symbol.for("gis.settingsRef");function Wo(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[gl];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[gl]=o),o}const Tc={class:"map-view-slot"},no=Fe(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=Wo(),i=Lc({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!1,scale:!0},settings:s});async function d(){var a;await e.nextTick();const p=(a=i.map)==null?void 0:a.value;p!=null&&p.resize&&p.resize()}function u(){typeof ResizeObserver>"u"||l.value||!r.value||(l.value=new ResizeObserver(()=>{d()}),l.value.observe(r.value))}function c(){var p;(p=l.value)==null||p.disconnect(),l.value=null}return e.onMounted(()=>{d(),u(),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",d),c()}),n({ctx:i}),(p,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapper",ref:r,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.createElementVNode("div",{ref_key:"el",ref:o,class:"map-view-canvas"},null,512),e.createElementVNode("div",Tc,[e.renderSlot(p.$slots,"default",{},void 0,!0)])],512))}}),[["__scopeId","data-v-d415aafd"]]),Ac=["Noto Sans Regular"],Mc=12,Fc="#0f172a",Dc="#fff",Pc=14;function it(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 zc(t){return t?Array.isArray(t)?t:[t]:Ac}function Yo(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 Ic(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 Rc(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 jc(t,n={}){if(!t)return[];const o=it(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Ic(o);if(!r)return[];const l=r,s=(n.geometry||t.type||"point").toString().toLowerCase(),i=it(t,["text-font","textFont"]),d=Yo(it(t,["text-size","textSize"]),Mc),u=it(t,["text-allow-overlap","textAllowOverlap"]),c=it(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),p=it(t,["text-maxzoom","textMaxZoom","maxzoom"]),a=it(t,["text-color","textColor"])||Fc,g=it(t,["text-halo-color","textHaloColor"])||Dc,m=it(t,["text-halo-width","textHaloWidth"]),y=it(t,["text-halo-blur","textHaloBlur"]),k=it(t,["text-offset","textOffset"]),h=it(t,["text-anchor","textAnchor"]),f=it(t,["text-justify","textJustify"]),b=it(t,["text-letter-spacing","textLetterSpacing"]),x=it(t,["text-transform","textTransform"]),N=it(t,["symbol-placement","symbolPlacement"]),V=it(t,["symbol-spacing","symbolSpacing"]),_=it(t,["text-rotation-alignment","textRotationAlignment"]),w=it(t,["text-pitch-alignment","textPitchAlignment"]),B=it(t,["text-opacity","textOpacity"]),v={"text-field":l,"text-font":zc(i),"text-size":d,"text-allow-overlap":u??!1};k&&(v["text-offset"]=k),s!=="line"&&(v["text-anchor"]=h??"center"),f&&(v["text-justify"]=f),b!==void 0&&(v["text-letter-spacing"]=b),x&&(v["text-transform"]=x),V!==void 0&&(v["symbol-spacing"]=V),s==="line"?(v["symbol-placement"]=N||"line",v["text-rotation-alignment"]=_||"map",v["text-pitch-alignment"]=w||"map"):(_&&(v["text-rotation-alignment"]=_),w&&(v["text-pitch-alignment"]=w),N&&(v["symbol-placement"]=N)),h&&s==="line"&&(v["text-anchor"]=h);const K={"text-color":a,"text-opacity":B??1};K["text-halo-color"]=g,m!==void 0&&(K["text-halo-width"]=m),y!==void 0&&(K["text-halo-blur"]=y);const J={type:"symbol",layout:v,paint:K},O=Yo(c,Pc);if(J.minzoom=O,p!==void 0){const de=Yo(p,void 0);de!==void 0&&(J.maxzoom=de)}const ne=Rc(n.filter,n.excludeClusters);return ne&&(J.filter=ne),[J]}const Ct="#9ca3af";function Go(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const yl=new WeakMap,Oc={};function Uc(t){if(!t||t.__layerStoreMode!=="isolated")return Oc;const n=yl.get(t);if(n)return n;const o={};return yl.set(t,o),o}function Zo(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,Ct]}return null}function oo(t){return/^(https?:|data:|blob:)/i.test(t)||t.startsWith("/")||t.startsWith("./")||t.startsWith("../")||t.includes("/")&&/\.(svg|png|jpe?g|gif|webp)(?:[?#].*)?$/i.test(t)}function qc(t){return oo(t)?t:`/api/gis-icon/${t}`}function Ko(t){return/\.svg(?:[?#].*)?$/i.test(t)||/^data:image\/svg\+xml/i.test(t)}function ro(t,n){return n?`${t}__${String(n).replace("#","")}`:t}function Hc(t,n){return t.replace(/currentColor/gi,n).replace(/\bfill=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`fill=${r}${n}${r}`).replace(/\bstroke=(['"])([^'"]+)\1/gi,(o,r,l)=>/^(none|currentColor|url\()/i.test(l)?o:`stroke=${r}${n}${r}`)}async function Wc(t,n){const o=await fetch(t);if(!o.ok)throw new Error(`Failed to fetch SVG image: ${t}`);const r=await o.text(),l=n?Hc(r,n):r,s=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(l)}`;return hl(s)}function hl(t){return new Promise((n,o)=>{const r=new Image;r.crossOrigin="anonymous",r.onload=()=>n(r),r.onerror=()=>o(new Error(`Failed to load image: ${t}`)),r.src=t})}function Yc(t){const n=t.iconSet&&typeof t.iconSet=="object"?t.iconSet:null,o=t.colors&&typeof t.colors=="object"?Object.entries(t.colors):[],r=!!(t.colorAttr&&o.length),l=d=>{if(!r)return d;const u=o.flatMap(([c,p])=>[c,ro(d,p)]);return["match",["get",t.colorAttr],...u,ro(d,Ct)]};if(t.iconAttr&&n){const d=Object.entries(n).flatMap(([u,c])=>{if(r&&typeof c=="string"){const p=t.colors[u];return[u,ro(c,typeof p=="string"?p:Ct)]}return[u,c]});return["match",["get",t.iconAttr],...d,r&&t.icon?l(t.icon):t.icon||Object.values(n)[0]]}if(!t.icon||!t.colors)return null;if(oo(t.icon))return l(t.icon);const s=[],i=t.icon.split("+")[0];return Object.values(t.colors).forEach(d=>{s.push(`${i}+${d.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((d,[u,c],p)=>d.concat([u,s[p]]),[]),t.icon]}function on(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function Gc(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],s=["has","point_count"],i=["!",s],c={type:"circle",maxzoom:r,filter:s,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},p={type:"symbol",maxzoom:r,filter:s,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},a={...n,filter:["all",i,n.filter||!0]};return[c,p,a]}function bl(t,n){const o=Zo(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||Ct,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=Gc(t,r);return l||r}function Zc(t){const n=Zo(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||Ct,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||Ct}}}function Kc(t){return{type:"line",paint:{"line-color":Zo(t)||t.color||Ct,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Xc(t){const n=Yc(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 xl(t,n={}){if(!t)return[];if(!Jc(t))return[];const o=[];t.icon&&on(o,Xc(t)),t.pointZoom&&on(o,bl(t,t.pointZoom)),t.type==="polygon"?on(o,Zc(t)):t.type==="line"?on(o,Kc(t)):on(o,bl(t));const l=n.sourceType!=="raster"?jc(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return on(o,l),o.filter(Boolean)}function Jc(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 kl(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){const l=Go(t);if(l&&o&&(l.filter=o),l)return xl(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const s={type:"point",color:Ct};return o&&(s.filter=o),xl(s,{sourceType:n})}return[]}function Qc(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}function Xo(t){if(typeof t!="string")return t;const n=t.trim();if(!n)return"";if(n==="null")return null;if(n==="true")return!0;if(n==="false")return!1;const o=Number(n);return Number.isFinite(o)&&n!==""?o:n}function Cn(t){if(t==null)return!0;if(Array.isArray(t))return t.length===0;if(typeof t!="string")return!1;const n=t.trim();return n===""||n==="[]"}function ed(t){if(t==null)return null;if(Array.isArray(t))return t;if(typeof t=="object"){const l=Object.entries(t).filter(([,i])=>!Cn(i));if(!l.length)return null;const s=l.map(([i,d])=>{if(Array.isArray(d)){const c=d.map(p=>Xo(p)).filter(p=>!Cn(p));return c.length?["in",["get",i],["literal",c]]:null}const u=Xo(d);return Cn(u)?null:["==",["get",i],u]}).filter(Boolean);return s.length?s.length===1?s[0]:["all",...s]:null}if(typeof t!="string")return null;const n=t.trim();if(!n)return null;const o=n.split("|").map(l=>l.trim()).filter(Boolean);if(!o.length)return null;const r=o.map(l=>{const s=l.indexOf("=");if(s<=0)return null;const i=l.slice(0,s).trim(),d=l.slice(s+1).trim();if(!i||Cn(d))return null;const u=d.split(",").map(c=>Xo(c)).filter(c=>!Cn(c));return u.length?u.length>1?["in",["get",i],["literal",u]]:["==",["get",i],u[0]]:null}).filter(Boolean);return r.length?r.length===1?r[0]:["all",...r]:null}function td(t,n){return n?!t||t===!0?n:Array.isArray(t)&&t[0]==="all"?[...t,n]:["all",t,n]:t??null}async function wl(t,n){var d;const o=new Set,r=new Map,l=n!=null&&n.colors&&typeof n.colors=="object"?Object.entries(n.colors):[],s=!!(n!=null&&n.colorAttr&&l.length),i=(u,c)=>{const p=ro(u,c);o.add(p),c&&r.set(p,c)};if(n!=null&&n.icon&&i(n.icon),n!=null&&n.iconSet&&typeof n.iconSet=="object"&&Object.values(n.iconSet).forEach(u=>{if(!(typeof u!="string"||!u.trim())){if(!s){i(u);return}if(Ko(u)){l.forEach(([,c])=>{i(u,String(c))}),i(u,Ct);return}i(u),l.forEach(([,c])=>{i(u,String(c))})}}),n!=null&&n.icon&&(n!=null&&n.colors)&&!oo(n.icon)){const u=n.icon.split("+")[0];Object.values(n.colors||{}).forEach(c=>{o.add(`${u}+${String(c).replace("#","")}.png`)})}n!=null&&n.icon&&(n!=null&&n.colors)&&oo(n.icon)&&Ko(String(n.icon))&&(Object.values(n.colors||{}).forEach(u=>{i(n.icon,String(u))}),i(n.icon,Ct)),await Promise.allSettled(Array.from(o).map(async u=>{if(t.getImage(u))return;const c=r.get(u)||null,p=u.split("__")[0],a=qc(p),g=Ko(p)?await Wc(a,c):await hl(a);t.addImage(u,g)})),(d=t.triggerRepaint)==null||d.call(t)}function qe(t,n,o){var te;const r=Uc(o);if(!t)return r;if(!n)return r[t];const{map:l,ready:s=()=>Promise.resolve()}=Ke(o),i=t||((te=n.layer)==null?void 0:te.id),d=n.sourceId??t;function u(D){var T;const Q={...D};return Q.point&&(Q.source=Qc(Q.point)),!Q.layer&&((T=Q.source)==null?void 0:T.type)==="raster"&&(Q.layer={id:d,type:"raster",source:d}),Q.layer&&!Q.layer.source&&Object.assign(Q.layer,{source:d}),Q}let c=u({...n}),p=!1,a=!1;const g=new Map,m=(D=!0)=>{var T,E,L;if(!l.value)return;(((L=(E=(T=l.value).getStyle)==null?void 0:E.call(T))==null?void 0:L.layers)??[]).filter(A=>A.source===i).forEach(A=>{l.value.removeLayer(A.id)}),c.source&&D&&l.value.getSource(d)&&l.value.removeSource(d)},y=async()=>{var D,Q,T,E,L,A,me,I,F,z,H,oe;if(!(a||!l.value)){if(c.source&&!l.value.getSource(d)&&l.value.addSource(d,c.source),!l.value.getLayer(i)){const R=c.beforeId===0?(Q=(D=l.value.getStyle().layers)==null?void 0:D[0])==null?void 0:Q.id:c.beforeId;((E=(T=c.layer)==null?void 0:T.style)!=null&&E.icon||(A=(L=c.layer)==null?void 0:L.style)!=null&&A.iconSet)&&await wl(l.value,c.layer.style);const ee=((me=c.source)==null?void 0:me.type)||((I=c.layer)==null?void 0:I.type),ge=c.layer&&(c.layer.type||c.layer.ref)?c.layer:null,we=(F=c.layer)==null?void 0:F.style,S=((z=c.layer)==null?void 0:z["source-layer"])||((H=c.source)==null?void 0:H["source-layer"])||c.sourceLayer||d,Y=c.style||we,ue=kl(Y,{sourceType:ee,filter:(oe=c.layer)==null?void 0:oe.filter,allowFallback:!ge});if(!ue.length){if(ge){const ie={...ge,id:ge.id||i,source:ge.source||d};ee==="vector"&&S&&(ie["source-layer"]=ie["source-layer"]||S),l.value.addLayer(ie,R),g.set(ie.id,ie.filter??null)}return}ue.forEach((ie,ce)=>{const ye={...ie,id:`${i}${ce||""}`,source:d};ee==="vector"&&S&&(ye["source-layer"]=S),l.value.addLayer(ye,R),g.set(ye.id,ye.filter??null)})}p=!0}};s().then(y);const k=(D,Q)=>l.value?(l.value.on(D,i,Q),()=>{var T;return(T=l.value)==null?void 0:T.off(D,i,Q)}):()=>{},h=D=>{const Q=l.value;if(!Q)return;const T=Q.getStyle(),E=T==null?void 0:T.layers;if(!(E!=null&&E.length))return;const L=D?"visible":"none";E.filter(A=>A.source===d||A.id===i||typeof A.id=="string"&&A.id.startsWith(String(i))).forEach(A=>{Q.setLayoutProperty(A.id,"visibility",L)})},f=(D=!0)=>{l.value&&(m(D),a=!0)},b=async D=>{D&&(c=u({...D}),de.opts=c,de.card=c.card,de.popup=c.popup),!a&&(p=!1,m(!0),await s(),await y())},x=async D=>{var L,A,me,I,F;if(!l.value)return;(D!=null&&D.icon||D!=null&&D.iconSet)&&await wl(l.value,D);const Q=((L=c.source)==null?void 0:L.type)||((A=c.layer)==null?void 0:A.type),T=((me=c.layer)==null?void 0:me["source-layer"])||((I=c.source)==null?void 0:I["source-layer"])||c.sourceLayer||d,E=kl(D,{sourceType:Q,filter:(F=c.layer)==null?void 0:F.filter,allowFallback:!0});m(!1),E.forEach((z,H)=>{var R;const oe={...z,id:`${i}${H}`,source:((R=c.layer)==null?void 0:R.source)||d};Q==="vector"&&T&&(oe["source-layer"]=oe["source-layer"]||T),l.value.addLayer(oe)}),p=!0},N=D=>{l.value&&Object.entries(D).forEach(([Q,T])=>{l.value.setPaintProperty(i,Q,T)})},V=(D,Q,T)=>{const E=l.value;if(E)switch(Q){case"raster":E.setPaintProperty(D,"raster-opacity",T);break;case"fill":E.setPaintProperty(D,"fill-opacity",T);break;case"line":E.setPaintProperty(D,"line-opacity",T);break;case"circle":E.setPaintProperty(D,"circle-opacity",T);break;case"symbol":E.setPaintProperty(D,"icon-opacity",T),E.setPaintProperty(D,"text-opacity",T);break}},de={ids:{layerId:i,sourceId:d},isMounted:()=>{var D;return p&&!!((D=l.value)!=null&&D.getLayer(i))},setVisible:h,updatePaint:N,updateLayout:D=>{l.value&&Object.entries(D).forEach(([Q,T])=>{l.value.setLayoutProperty(i,Q,T)})},updateFilter:D=>{l.value&&l.value.setFilter(i,D)},setOpacity:D=>{var E;if(!l.value)return;const T=(((E=l.value.getStyle())==null?void 0:E.layers)||[]).filter(L=>L.source===d);if(!T.length){const L=l.value.getLayer(i);L&&V(i,L.type,D);return}T.forEach(L=>V(L.id,L.type,D))},setData:D=>{if(!l.value)return;const Q=l.value.getSource(d);Q&&"setData"in Q&&Q.setData(D)},setTiles:D=>{if(!l.value)return;const Q=l.value.getSource(d);Q&&"setTiles"in Q&&Q.setTiles(D)},setStyle:x,setFilter:D=>{var E,L,A,me,I,F;if(!l.value)return;if(((E=c.source)==null?void 0:E.type)==="geojson"){const z=ed(D);(((me=(A=(L=l.value).getStyle)==null?void 0:A.call(L))==null?void 0:me.layers)??[]).filter(R=>R.source===d).map(R=>R.id).forEach(R=>{const ee=g.get(R)??null,ge=td(ee,z);l.value.setFilter(R,ge)});return}const T=l.value.getSource(d);if(T&&"setTiles"in T&&((F=(I=c.source)==null?void 0:I.tiles)!=null&&F[0])){const z=c.source.tiles[0];T.setTiles([`${z}${z.includes("?")?"&":"?"}filter=${D}`])}},setFeatureState:(D,Q)=>{l.value&&l.value.setFeatureState({source:d,...D},Q)},removeFeatureState:(D,Q)=>{l.value&&l.value.removeFeatureState({source:d,...D},Q?{key:Q}:void 0)},refresh:b,remove:f,card:c.card,popup:c.popup,opts:c,getSource:()=>{var D;return(D=l.value)==null?void 0:D.getSource(d)},getLayer:()=>{var D;return(D=l.value)==null?void 0:D.getLayer(i)},on:k},xe=()=>{r[t]===de&&delete r[t]},se=de.remove;return de.remove=()=>{xe(),se()},e.getCurrentInstance()&&e.onBeforeUnmount(de.remove),r[t]=de,de}const nd={class:"z-10 relative widget bg-white rounded-lg shadow-md overflow-hidden w-fit self-start max-w-full"},od=["title","onClick"],rd=["src","alt","onError"],ld={key:1,class:"basemap-preview-fallback","aria-hidden":"true"},ad=["title"],rn=Fe(e.defineComponent({__name:"BaseMaps",props:{layers:{},defaultLayer:{},title:{}},emits:["state-change"],setup(t,{emit:n}){var D,Q,T,E,L;const o={z:13,x:4790,y:2762},r={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}};function l(A){if(A)return A.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function s(A,me){let I=A||`layers-${Object.keys(me).length}`,F=1;for(;me[I];)I=`${A}-${F}`,F+=1;return I}function i(A,me,I){const F=(A==null?void 0:A.name)??(A==null?void 0:A.title)??`basemap-${me}`,z=((A==null?void 0:A.id)??F??`basemap-${me}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),H=s(z||`basemap-${me}`,I),oe=(A==null?void 0:A.preview)||(A!=null&&A.url?l(A.url):void 0);return{id:H,title:F,url:A==null?void 0:A.url,preview:oe,overlayUrl:A==null?void 0:A.overlayUrl}}function d(A,me,I=r){let F=[];if(Array.isArray(A)&&A.length>0?F=A:A&&typeof A=="object"&&Object.keys(A).length>0?F=Object.values(A):Array.isArray(me==null?void 0:me.basemaps)&&(F=me.basemaps),!F.length)return I;const z={};return F.forEach((H,oe)=>{const R=i(H,oe,z);z[R.id]={url:R.url,preview:R.preview,title:R.title,overlayUrl:R.overlayUrl}}),z}function u(A,me,I=r){const F=d(A,me,I);return Object.entries(F).map(([z,H])=>({id:z,title:H.title??z,url:H.url,preview:H.preview,overlayUrl:H.overlayUrl}))}const c=t,p=n,a=e.getCurrentInstance(),g=(D=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:D.$settings,m=g==null?void 0:g.map,y=He.useRoute(),k=He.useRouter();function h(){const A=y==null?void 0:y.query;return!A||typeof A!="object"?null:typeof A.basemap=="string"?A.basemap:null}const f=e.computed(()=>h()),b=e.computed(()=>d(c.layers,m,r)),x=e.computed(()=>u(c.layers,m,r)),N=e.ref(f.value??Object.keys(b.value)[0]??"gki"),V=e.ref(N.value!=="none"?N.value:"gki"),_=e.ref({}),w=e.computed(()=>x.value.filter(A=>A.url)),B=e.computed(()=>!!b.value.none),v=e.computed(()=>{const A=b.value[N.value];return!!(A!=null&&A.url)});function K(A){return!!A.preview&&!_.value[A.id]}function J(A){_.value={..._.value,[A]:!0}}const O=qe("base",{source:{type:"raster",tiles:(Q=b.value[N.value])!=null&&Q.url?[(T=b.value[N.value])==null?void 0:T.url]:[],tileSize:256},layer:{id:"base",type:"raster",source:"base"},beforeId:0}),ne=qe("base-overlay",{source:{type:"raster",tiles:(E=b.value[N.value])!=null&&E.overlayUrl?[(L=b.value[N.value])==null?void 0:L.overlayUrl]:[],tileSize:256},layer:{id:"base-overlay",type:"raster",source:"base-overlay",layout:{visibility:"none"}}});function de(A){A!=null&&A.url?(O.setVisible(!0),O.setTiles([A.url])):O.setVisible(!1),A!=null&&A.overlayUrl?(ne.setVisible(!0),ne.setTiles([A.overlayUrl])):ne.setVisible(!1)}function xe(){p("state-change",{basemaps:x.value,selectedId:N.value})}function se(A){var me;b.value[A]&&(A!=="none"&&((me=b.value[A])!=null&&me.url)&&(V.value=A),N.value=A,de(b.value[A]),xe(),typeof window<"u"&&h()!==A&&k.replace({query:{...y==null?void 0:y.query,basemap:A}}).catch(()=>{}))}function te(){var me,I;if(!B.value)return;if(v.value){se("none");return}const A=(me=b.value[V.value])!=null&&me.url?V.value:(I=w.value[0])==null?void 0:I.id;A&&se(A)}return e.watch(()=>w.value.map(A=>`${A.id}:${A.preview??""}`).join("|"),()=>{_.value={}}),e.watch(()=>[b.value,f.value],([A,me])=>{var F;const I=me&&A[me]?me:N.value;A[I]?N.value=I:N.value=Object.keys(A)[0]??I,N.value!=="none"&&((F=A[N.value])!=null&&F.url)&&(V.value=N.value),de(A[N.value]),xe()},{immediate:!0,deep:!0}),e.watch(()=>N.value,()=>{xe()}),e.onBeforeUnmount(()=>{}),(A,me)=>(e.openBlock(),e.createElementBlock("div",nd,[e.createElementVNode("div",{class:e.normalizeClass(["flex items-center gap-1 p-2",{"border-b border-gray-100":A.$slots.default}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.value,I=>(e.openBlock(),e.createElementBlock("button",{key:I.id,type:"button",class:e.normalizeClass(["w-8 h-8 rounded overflow-hidden flex-shrink-0 cursor-pointer border-2",N.value===I.id&&v.value?"border-blue-500":"border-gray-200"]),title:I.title,onClick:F=>se(I.id)},[K(I)?(e.openBlock(),e.createElementBlock("img",{key:0,src:I.preview,alt:I.title,class:"w-full h-full object-cover",onError:F=>J(I.id)},null,40,rd)):(e.openBlock(),e.createElementBlock("span",ld,[e.createVNode(e.unref(he.Map),{class:"w-3.5 h-3.5"})]))],10,od))),128)),B.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"ml-1 p-1 text-gray-400 hover:text-gray-600 rounded transition-colors",title:v.value?"Приховати підложку":"Показати підложку",onClick:te},[v.value?(e.openBlock(),e.createBlock(e.unref(he.Eye),{key:0,class:"w-4 h-4"})):(e.openBlock(),e.createBlock(e.unref(he.EyeOff),{key:1,class:"w-4 h-4"}))],8,ad)):e.createCommentVNode("",!0)],2),e.renderSlot(A.$slots,"default",{},void 0,!0)]))}}),[["__scopeId","data-v-f325443c"]]),sd={class:"mapLayer-info__inner"},id={class:"mapLayer-info__item-label"},Jo=Fe(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const d=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function u(k){if(r.open){g();return}const h=k.currentTarget,f=h==null?void 0:h.closest(".mapLayer-info");if(!f){g();return}l.value=f,r.open=!0,e.nextTick(()=>{c(),m(),requestAnimationFrame(()=>{c()})})}function c(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,N=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(300,window.innerWidth-24),_=s.value.offsetHeight||0;let w=k.left+window.scrollX+(k.width-V)/2;w<f&&(w=f),w+V>b&&(w=Math.max(f,b-V)),r.left=w;let B=k.bottom+window.scrollY+h;B+_>N&&(B=k.top+window.scrollY-_-h,B<x&&(B=Math.max(x,N-_))),B<x&&(B=x),B+_>N&&(B=Math.max(x,N-_)),r.top=B,r.transform="none"}function p(k){var f,b;if(!r.open)return;const h=k.target;(f=l.value)!=null&&f.contains(h)||(b=s.value)!=null&&b.contains(h)||g()}function a(k){k.key==="Escape"&&g()}function g(){y(),r.open=!1,l.value=null,s.value=null}function m(){y(),s.value&&(i=new ResizeObserver(()=>{c()}),i.observe(s.value))}function y(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",p,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c),y()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>c())},{deep:!0}),n({close:g}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(u,["prevent","stop"])},[...h[1]||(h[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(d.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",sd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"mapLayer-info__item"},[e.createElementVNode("div",id,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),cd={key:0,class:"map-info__title"},dd={class:"map-info__actions"},ud={key:0,class:"map-info__menu"},fd=["href"],md=["innerHTML"],_l=Fe(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),s=e.ref(null),i=e.ref({top:0,left:0});He.useRouter();const d=e.ref(!1),u=e.ref(!1),c=e.computed(()=>Array.isArray(n.links)?n.links.filter(N=>(N==null?void 0:N.name)&&(N==null?void 0:N.slug)):[]),p=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),a=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 g(N){return N==null?!1:N.replace(/<[^>]*>/g,"").trim().length>0}const m=e.computed(()=>g(n.content)),y=e.computed(()=>m.value);function k(N){N.stopPropagation(),r.value=!r.value}function h(){const N=l.value;if(!N||!s.value)return;const V=N.getBoundingClientRect(),_=12,w=8,B=window.scrollX+_,v=window.scrollX+window.innerWidth-_,K=window.scrollY+_,J=window.scrollY+window.innerHeight-_,O=s.value.offsetWidth||160,ne=s.value.offsetHeight||0;let de=V.bottom+window.scrollY+w,xe=V.left+window.scrollX;xe+O>v&&(xe=V.right+window.scrollX-O,xe<B&&(xe=B)),xe<B&&(xe=B),de+ne>J&&(de=V.top+window.scrollY-ne-w,de<K&&(de=Math.max(K,J-ne))),de<K&&(de=K),de+ne>J&&(de=Math.max(K,J-ne)),i.value={top:de,left:xe}}function f(N){if(!r.value)return;const V=o.value;if(!V){r.value=!1;return}V.contains(N.target)||(r.value=!1)}e.watch(r,N=>{N?e.nextTick(()=>{h(),requestAnimationFrame(()=>{h()}),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h)}):(window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h))});function b(){d.value=!d.value}function x(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",f,!0),x(),y.value?u.value&&(d.value=!1):d.value=!1,window.addEventListener("resize",x)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",f,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",x)}),(N,V)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[t.title||c.value.length||a.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([m.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",cd,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",dd,[c.value.length?(e.openBlock(),e.createElementBlock("div",ud,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:k,"aria-label":"Показати посилання"},[...V[1]||(V[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:s,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(p.value),onClick:V[0]||(V[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,_=>(e.openBlock(),e.createElementBlock("a",{key:_.slug||_.name,href:`/maps/${_.slug}`,class:"map-info__popover-link"},e.toDisplayString(_.name),9,fd))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),a.value.length?(e.openBlock(),e.createBlock(Jo,{key:1,items:a.value},null,8,["items"])):e.createCommentVNode("",!0),y.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":d.value})},[...V[2]||(V[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!d.value}]),innerHTML:t.content},null,10,md)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-dda78ac6"]]),pd=new Set(["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection"]);function El(t){if(!t||typeof t!="object")return null;const n=t,o=n.type;return o==="FeatureCollection"&&Array.isArray(n.features)?{type:"FeatureCollection",features:n.features.filter(r=>r==null?void 0:r.geometry)}:o==="Feature"&&n.geometry?{type:"FeatureCollection",features:[n]}:typeof o=="string"&&pd.has(o)?{type:"FeatureCollection",features:[{type:"Feature",geometry:n,properties:{}}]}:null}function gd(t){const n=new Set((t.features||[]).map(o=>{var r;return((r=o==null?void 0:o.geometry)==null?void 0:r.type)||""}).filter(Boolean));return[...n].some(o=>o.includes("Polygon"))?"polygon":[...n].some(o=>o.includes("Line"))?"line":"point"}function Nn(t,n=[]){if(!t)return n;if(Array.isArray(t))return t.length>=2&&typeof t[0]=="number"&&typeof t[1]=="number"?(n.push([t[0],t[1]]),n):(t.forEach(o=>Nn(o,n)),n);if(typeof t=="object"){const o=t;Array.isArray(o.coordinates)&&Nn(o.coordinates,n),Array.isArray(o.features)&&o.features.forEach(r=>Nn(r==null?void 0:r.geometry,n)),Array.isArray(o.geometries)&&o.geometries.forEach(r=>Nn(r,n))}return n}function Qo(t){const n=Nn(t);if(!n.length)return null;let o=n[0][0],r=n[0][0],l=n[0][1],s=n[0][1];return n.forEach(([i,d])=>{i<o&&(o=i),i>r&&(r=i),d<l&&(l=d),d>s&&(s=d)}),[[o,l],[r,s]]}const Cl=["zip","shp","kml","gml","geojson","json"],yd=[".zip",".shp",".kml",".gml",".geojson",".json"].join(",");function hd(t){const n=t.toLowerCase().split(".");return n.length>1&&n.pop()||""}function Nl(t){const n=hd(t.name);return Cl.includes(n)}function Vl(){return Cl.map(t=>t.toUpperCase()).join(", ")}function bd(t){let n="";for(let r=0;r<t.length;r+=32768)n+=String.fromCharCode(...t.subarray(r,r+32768));return btoa(n)}async function xd(t){const n=await t.arrayBuffer();return bd(new Uint8Array(n))}async function kd(t,n){if(t.size>52428800)throw new Error("Максимальний розмір файлу — 50MB");if(!Nl(t))throw new Error(`Підтримуються формати: ${Vl()}`);const r=await xd(t),l=await fetch("/api/gis-convert",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file:r,filename:t.name,srid:Number(n)})}),s=await l.json().catch(()=>null);if(!l.ok)throw new Error((s==null?void 0:s.error)||`Помилка обробки файлу (${l.status})`);return s}const xt=e.ref([]);function wd(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const s=n[l];return s!=null?String(s):""}):t}function lo(t){return t==null?"":String(t).trim()}function er(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function _d(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Ed(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 Vn(t){function n(i,d={},u,c){var N,V;const p=lo(i==null?void 0:i.id),a=((N=i==null?void 0:i.title)==null?void 0:N.trim())||p,g=(i==null?void 0:i.type)||(i!=null&&i.data?"geojson":"raster"),m=((V=i==null?void 0:i.url)==null?void 0:V.trim())||"";if(!p||g==="raster"&&!m||g==="geojson"&&!(i!=null&&i.data))return;const y=c??t;if(!y)return;const k=_d(y);if(!k)return;const h=xt.value.findIndex(_=>_.id===p);h!==-1&&(er(xt.value[h]),xt.value.splice(h,1));let f=null;const b=i.beforeId??Ed(k);let x="";try{if(g==="geojson"){const _=gd(i.data),w=i.style||{type:_,color:"#2563eb",stroke:"#1d4ed8",opacity:_==="polygon"?.35:1,width:2,radius:6};f=qe(p,{source:{type:"geojson",data:i.data},style:w,beforeId:b},y)}else{if(x=wd(m,d),!x)return;f=qe(p,{source:{type:"raster",tiles:[x],tileSize:i.tileSize??256,minzoom:i.minzoom??0,maxzoom:i.maxzoom??19},layer:{id:p,type:"raster",source:p,paint:{"raster-opacity":i.opacity??.85}},beforeId:b},y)}}catch(_){const w=(_==null?void 0:_.message)??"";if(!(typeof w=="string"&&w.includes("Map provider")))throw _;return}xt.value=[...xt.value,{id:p,title:a,originalUrl:g==="raster"?m:"",resolvedUrl:g==="raster"?x:"",owner:u??null,handle:f??null}]}function o(i,d){const u=lo(i);if(!u)return;const c=xt.value.findIndex(a=>a.id===u&&(!d||a.owner===d));if(c===-1)return;const[p]=xt.value.splice(c,1);er(p)}function r(i,d,u){var a;const c=lo(i);if(!c)return;const p=xt.value.find(g=>g.id===c&&(!u||g.owner===u));(a=p==null?void 0:p.handle)!=null&&a.setOpacity&&p.handle.setOpacity(d)}function l(i){if(!xt.value.length)return;const d=[];xt.value.forEach(u=>{(i?u.owner===i:!0)?er(u):d.push(u)}),xt.value=d}function s(i,d){const u=lo(i);return u?xt.value.some(c=>c.id===u&&(!d||c.owner===d)):!1}return{temporaryLayers:xt,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:s}}const Nt=e.ref({}),Bn="map:client-layer-added",ao="map:client-layer-removed";function tr(){function t(s){Nt.value={...Nt.value,[s.id]:s}}function n(s){if(!Nt.value[s])return;const i={...Nt.value};delete i[s],Nt.value=i}function o(){Nt.value={}}function r(s){return!!Nt.value[s]}function l(s){return Nt.value[s]??null}return{clientLayers:Nt,registerClientLayer:t,unregisterClientLayer:n,clearClientLayers:o,isClientLayer:r,getClientLayer:l}}const ln=e.ref(null);function Cd(){ln.value=null}function Nd(t){ln.value=t}function Vd(t){return`filter-popover-${t}`}function Bd(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(ln,i=>{n.value=i===o()});function r(){ln.value=o(),n.value=!0}function l(){ln.value===o()&&(ln.value=null),n.value=!1}function s(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:s}}const $d={class:"map-filter"},Sd={class:"map-filter__header"},vd={class:"map-filter__title"},Ld={"aria-hidden":"true"},nr="#map-filter-popover-host",$n=Fe(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean,default:!1},hideTrigger:{type:Boolean,default:!1}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var T;return((T=o.layer)==null?void 0:T.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:s,close:i,toggle:d}=Bd(l),u=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),c=e.ref(null),p=e.ref(null);let a=null;const g=e.ref({}),m=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),y=e.computed(()=>s.value),k=e.computed(()=>{var T;return Array.isArray((T=o.layer)==null?void 0:T.filters)?o.layer.filters:[]}),h=e.computed(()=>k.value.length>0),f=e.computed(()=>{var T;return((T=o.layer)==null?void 0:T.name)??""}),b=e.computed(()=>k.value),x=e.ref(null),N=e.computed(()=>k.value.length),V=e.computed(()=>N.value<=2),_=e.computed(()=>V.value?"body":typeof window>"u"||x.value?nr:"body"),w=e.computed(()=>{if(!y.value||!V.value)return{};const T=typeof window<"u"?window.innerWidth:280,L=Math.max(280,T-16*2);return{position:"absolute",top:`${u.top}px`,left:`${u.left}px`,transform:u.transform,zIndex:1e3,width:"280px",maxWidth:`${L}px`}});function B(){i()}function v(T,E,L=8){const A=window.scrollY+L,me=window.scrollY+window.innerHeight-L;let I=T;return I+E>me&&(I=me-E),I<A&&(I=A),I}function K(){var z,H,oe;if(!c.value||!V.value)return;const T=c.value.getBoundingClientRect(),E=window.scrollX+8,L=window.scrollX+window.innerWidth-8,A=((z=p.value)==null?void 0:z.offsetWidth)||280,me=((H=p.value)==null?void 0:H.offsetHeight)||0;let I=0,F=0;if((oe=o.catalogAnchor)!=null&&oe.value){const R=o.catalogAnchor.value.getBoundingClientRect(),ee=R.top+window.scrollY;I=v(ee,me,8);const ge=R.right+window.scrollX+12,we=L-A,S=E;F=Math.min(Math.max(ge,S),Math.max(S,we))}else{const R=T.bottom+window.scrollY+8;I=v(R,me,8);let ee=T.left+window.scrollX;ee<E&&(ee=E),ee+A>L&&(ee=Math.max(E,L-A)),F=ee}u.left=F,u.top=I,u.transform="none"}function J(){V.value||Q(),d(),s.value&&V.value&&e.nextTick(()=>{K(),te(),requestAnimationFrame(()=>K())})}function O(){o.disabled||J()}e.watch(y,T=>{T&&V.value?e.nextTick(()=>{K(),te(),requestAnimationFrame(()=>K())}):(D(),V.value||Q())}),e.watch(b,()=>{!y.value||!V.value||e.nextTick(()=>K())},{deep:!0}),e.watch(V,T=>{y.value&&(T?e.nextTick(()=>{K(),te()}):(D(),Q()))}),e.watch(()=>o.disabled,T=>{T&&(i(),g.value={})});function ne(){!y.value||!V.value||K()}function de(T){const E=r.value;if(!E)return;const L=qe(E);if(!(L!=null&&L.setFilter))return;g.value=T;const A=Object.entries(T).map(([me,I])=>`${me}=${I}`).join("|");L.setFilter(A)}function xe(T){if(!o.disabled)return;const E=T.currentTarget;if(!E)return;const L=E.getBoundingClientRect();m.left=L.left+L.width/2+window.scrollX,m.top=L.bottom+8+window.scrollY,m.visible=!0}function se(){m.visible=!1}e.onMounted(()=>{Q(),window.addEventListener("resize",ne),window.addEventListener("scroll",ne,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",ne),window.removeEventListener("scroll",ne,!0),D()});function te(){D(),!(!p.value||!V.value)&&(a=new ResizeObserver(()=>{!y.value||!V.value||K()}),a.observe(p.value))}function D(){a&&(a.disconnect(),a=null)}function Q(){typeof window>"u"||typeof document>"u"||(x.value=document.querySelector(nr))}return(T,E)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["mapLayer-filter",{"mapLayer-filter--hidden-trigger":o.hideTrigger}]),ref_key:"anchor",ref:c},[o.hideTrigger?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:0,class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(O,["prevent","stop"]),onMouseenter:xe,onMouseleave:se,onFocus:xe,onBlur:se},[...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)),y.value?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:_.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!V.value}]),style:e.normalizeStyle(w.value),ref_key:"panel",ref:p,onClick:E[1]||(E[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",$d,[e.createElementVNode("div",Sd,[e.createElementVNode("h3",vd,e.toDisplayString(f.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:B},[e.createElementVNode("span",Ld,[e.createVNode(e.unref(he.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:g.value,limit:10,onChange:E[0]||(E[0]=L=>de(L.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[m.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${m.top}px`,left:`${m.left}px`})},e.toDisplayString(m.text),5)):e.createCommentVNode("",!0)]))],2)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-79dd109b"]]),Td={class:"opacity-popover__content"},Ad={class:"opacity-popover__value"},Bl=Fe(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),s=e.ref(null),i=e.reactive({top:0,left:0});function d(){var V;const a=(V=s.value)==null?void 0:V.querySelector("button");if(!a||!l.value)return;const g=a.getBoundingClientRect(),m=260,y=l.value.offsetHeight||60,k=8,h=12,f=window.innerWidth,b=window.innerHeight;let x=g.bottom+k+window.scrollY,N=g.left+window.scrollX;N+m>f-h&&(N=f-m-h+window.scrollX),N<h+window.scrollX&&(N=h+window.scrollX),x+y>b+window.scrollY-h&&(x=g.top-y-k+window.scrollY,x<h+window.scrollY&&(x=b-y-h+window.scrollY)),i.top=x,i.left=N}function u(){o.value=!o.value,o.value&&e.nextTick(d)}function c(){var y;const a=qe(n.layerId),g=(r.value??100)/100;if(a!=null&&a.setOpacity){a.setOpacity(g);return}const m=(y=a==null?void 0:a.getLayer)==null?void 0:y.call(a);if(m)switch(m.type){case"raster":a.updatePaint({"raster-opacity":g});break;case"fill":a.updatePaint({"fill-opacity":g});break;case"line":a.updatePaint({"line-opacity":g});break;case"circle":a.updatePaint({"circle-opacity":g});break;case"symbol":a.updatePaint({"icon-opacity":g});break}}function p(a){var m,y;if(!o.value)return;const g=a.target;(m=l.value)!=null&&m.contains(g)||(y=s.value)!=null&&y.contains(g)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",p),window.addEventListener("scroll",d,!0),window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p),window.removeEventListener("scroll",d,!0),window.removeEventListener("resize",d)}),(a,g)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:s},[e.renderSlot(a.$slots,"trigger",{toggle:u,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",Td,[g[1]||(g[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":g[0]||(g[0]=m=>r.value=m),class:"opacity-popover__range",onInput:c},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",Ad,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-39c90b6d"]]),Md={class:"layers-panel"},Fd={class:"layers-panel__header"},Dd={class:"layers-panel__heading"},Pd={class:"layers-panel__heading-title"},zd={class:"layers-panel__count"},Id={class:"layers-panel__bulk-actions"},Rd={class:"layers-panel__header-actions"},jd={class:"layers-panel__header-controls"},Od={class:"layers-panel__label"},Ud={class:"layers-panel__label-row"},qd=["checked","onChange"],Hd={class:"layers-panel__title-block"},Wd={class:"layers-panel__name"},Yd={class:"layers-panel__meta text-slate-500"},Gd=["onClick"],Zd=["onClick"],Kd={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Xd={key:0,class:"layers-panel__actions"},Jd=["innerHTML","onClick"],$l="map:temporary-layer-request",Qd="#5763ba",or=Fe(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),s=e.ref(!1),i=e.ref(!1),d=Ke(),{temporaryLayers:u,activateTemporaryLayer:c,deactivateTemporaryLayer:p,clearTemporaryLayers:a}=Vn(d.map),{clientLayers:g,isClientLayer:m,getClientLayer:y,unregisterClientLayer:k}=tr(),h=e.computed(()=>{const S=o.layers.map(ie=>({...ie,isTemporary:!1,owner:null,visible:ie.visible!==!1})),Y=u.value.map(ie=>({id:ie.id,name:ie.title,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:ie.owner??null,handle:ie.handle??null,card:ie.card??null,popup:ie.popup??null,style:ie.style??null,group_name:null,count:null,holder:null})),ue=Object.values(g.value).filter(ie=>!Y.some(ce=>ce.id===ie.id)).map(ie=>({id:ie.id,name:ie.name,visible:r.value[ie.id]??!0,actions:[],filters:null,isTemporary:!0,owner:"add-data",handle:qe(ie.id)??null,card:null,popup:null,style:null,group_name:null,count:null,holder:null}));return[...S,...Y,...ue]}),f=e.computed(()=>h.value.length),b=e.computed(()=>h.value.filter(S=>de(S.id)).length),x=e.computed(()=>f.value>0&&b.value===f.value),N=n,V=new Map;function _(S){if(S==null)return"";try{return JSON.stringify(S)}catch{return String(S)}}function w(S){var Y,ue;return _({id:(S==null?void 0:S.id)??null,visible:(S==null?void 0:S.visible)!==!1,service:(S==null?void 0:S.service)??(S==null?void 0:S.service_type)??(S==null?void 0:S.type)??null,data:(S==null?void 0:S.data)??(S==null?void 0:S.geojson)??((Y=S==null?void 0:S.source)==null?void 0:Y.data)??null,tiles:((ue=S==null?void 0:S.source)==null?void 0:ue.tiles)??(S==null?void 0:S.tiles)??null,style:(S==null?void 0:S.style)??null,filter:(S==null?void 0:S.filter)??null})}function B(S,Y){var ie,ce,ye,Z,G,ke,ve,Ae,$e,Je,Re,at,et;return{sourceKind:(((ie=Y==null?void 0:Y.source)==null?void 0:ie.type)||((ce=Y==null?void 0:Y.layer)==null?void 0:ce.type)||S.type||S.service_type||S.service||"").toString().toLowerCase(),sourceSig:_({type:((ye=Y==null?void 0:Y.source)==null?void 0:ye.type)??null,data:((Z=Y==null?void 0:Y.source)==null?void 0:Z.data)??null,tiles:((G=Y==null?void 0:Y.source)==null?void 0:G.tiles)??null,minzoom:((ke=Y==null?void 0:Y.source)==null?void 0:ke.minzoom)??null,maxzoom:((ve=Y==null?void 0:Y.source)==null?void 0:ve.maxzoom)??null,tileSize:((Ae=Y==null?void 0:Y.source)==null?void 0:Ae.tileSize)??null,scheme:(($e=Y==null?void 0:Y.source)==null?void 0:$e.scheme)??null}),styleSig:_(((Je=Y==null?void 0:Y.layer)==null?void 0:Je.style)??null),filterSig:_(((Re=Y==null?void 0:Y.layer)==null?void 0:Re.filter)??null),dataSig:_(((at=Y==null?void 0:Y.source)==null?void 0:at.data)??null),tilesSig:_(((et=Y==null?void 0:Y.source)==null?void 0:et.tiles)??null),visible:S.visible!==!1}}async function v(S=!1){var ue,ie,ce,ye;const Y=new Set;for(let Z=0;Z<o.layers.length;Z++){const G=o.layers[Z],ke=J(G);if(!ke)continue;const ve=B(G,ke),Ae=qe(G.id),$e=V.get(G.id);if(Y.add(G.id),!Ae){if(!S)continue;const Re=qe(G.id,ke,d.map);r.value[G.id]=ve.visible,(ue=Re==null?void 0:Re.setVisible)==null||ue.call(Re,ve.visible),V.set(G.id,ve);continue}if(!$e){r.value[G.id]=ve.visible,V.set(G.id,ve);continue}const Je=$e.sourceKind!==ve.sourceKind||$e.sourceSig!==ve.sourceSig||$e.dataSig!==ve.dataSig||$e.tilesSig!==ve.tilesSig||$e.styleSig!==ve.styleSig||$e.filterSig!==ve.filterSig;if(r.value[G.id]=ve.visible,Je){await((ie=Ae==null?void 0:Ae.refresh)==null?void 0:ie.call(Ae,ke)),(ce=Ae==null?void 0:Ae.setVisible)==null||ce.call(Ae,ve.visible),V.set(G.id,ve);continue}$e.visible!==ve.visible&&((ye=Ae==null?void 0:Ae.setVisible)==null||ye.call(Ae,ve.visible)),V.set(G.id,ve)}V.forEach((Z,G)=>{Y.has(G)||(V.delete(G),G in r.value&&delete r.value[G])})}function K(S,Y){const ue=S.sourceLayer||S["source-layer"];return ue||((S.service_url||S.url||"").toString().includes("/dla/vtile")?"dla":Y)}function J(S){var ke;const Y=S.id;if(!Y)return null;const ue=(S.type||S.service_type||S.service||"").toString().toLowerCase(),ie=ne(S.data??S.geojson??((ke=S.source)==null?void 0:ke.data)??null),ce=ue==="geojson"||!!ie,ye=S.service_url||S.url||null;if(!!ye&&(ue==="tms"||ue==="wmts"||ue==="wms"||ue==="ogc")){const ve=O(ye);return ve?{sourceId:Y,service:ue,source:{type:"raster",tiles:[ve],tileSize:S.tileSize||256,minzoom:S.minzoom??0,maxzoom:S.maxzoom??22,scheme:S.scheme||"xyz"},layer:{id:Y,type:"raster",source:Y},card:S.card,popup:S.popup}:null}if(ce)return ie?{sourceId:Y,service:ue||"geojson",source:{type:"geojson",data:ie},layer:{id:Y,source:Y,style:S.style},card:S.card,popup:S.popup}:null;if(ue==="cartocss"){const ve=S.url?O(S.url):`${location.origin}/api/gis-rtile/${Y}/{z}/{x}/{y}.png`;return ve?{sourceId:Y,service:ue,source:{type:"raster",tiles:[ve],tileSize:S.tileSize||256,minzoom:S.minzoom??0,maxzoom:S.maxzoom??22},layer:{id:Y,type:"raster",source:Y},card:S.card,popup:S.popup}:null}if(ye&&(ue==="vtile"||ue==="vector")){const ve=O(ye);if(!ve)return null;const Ae=K(S,Y);return{sourceId:Y,service:ue,source:{type:"vector",tiles:[ve],minzoom:S.minzoom??0,maxzoom:S.maxzoom??22},layer:{id:Y,source:Y,"source-layer":Ae,style:S.style,filter:S.filter},card:S.card,popup:S.popup}}if(ue==="raster"){const ve=S.url?O(S.url):`${location.origin}/api/gis-rtile/${Y}/{z}/{x}/{y}.png`;return ve?{sourceId:Y,service:ue,source:{type:"raster",tiles:[ve],tileSize:S.tileSize||256,minzoom:S.minzoom??0,maxzoom:S.maxzoom??22},layer:{id:Y,type:"raster",source:Y},card:S.card,popup:S.popup}:null}const G=`${location.origin}/api/vtile/${Y}/ua/{z}/{x}/{y}.vmt`;return{sourceId:Y,service:ue,source:{type:"vector",tiles:[G],minZoom:4,maxZoom:14},layer:{id:Y,source:Y,"source-layer":Y,style:S.style},card:S.card,popup:S.popup}}function O(S){return S?/^https?:\/\//i.test(S)?S:S.startsWith("//")?`${window.location.protocol}${S}`:S.startsWith("/")?`${location.origin}${S}`:`${location.origin}/${S}`:null}function ne(S){if(!S)return null;if(typeof S=="string")try{S=JSON.parse(S)}catch{return null}return 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?ne(S.geometry):null}function de(S){const Y=r.value[S];return Y??!0}function xe(S){var ie,ce;if(!(S!=null&&S.id))return null;const Y=(ie=S.title)==null?void 0:ie.trim();if(!Y)return null;if(S.type==="geojson"||S.data)return S.data?{id:S.id,title:Y,type:"geojson",data:S.data,style:S.style}:null;const ue=(ce=S.url)==null?void 0:ce.trim();return ue?{id:S.id,title:Y,url:ue,tileSize:S.tileSize,minzoom:S.minzoom,maxzoom:S.maxzoom,opacity:S.opacity}:null}function se(S){if(!S)return;const Y=S.owner;if(S.action==="clear"){const ie=u.value.filter(ce=>!Y||ce.owner===Y).map(ce=>ce.id);a(Y),ie.forEach(ce=>{ce in r.value&&delete r.value[ce]});return}const ue=xe(S.spec);if(ue){if(S.action==="activate"){c(ue,S.context||{},Y),r.value[ue.id]=!0;return}S.action==="deactivate"&&(p(ue.id,Y),delete r.value[ue.id])}}function te(S){S instanceof CustomEvent&&se(S.detail)}e.watch(()=>u.value.map(S=>S.id),(S,Y)=>{const ue=new Set(Y||[]),ie=new Set(S);S.forEach(ce=>{ce in r.value||(r.value[ce]=!0)}),ue.forEach(ce=>{ie.has(ce)||delete r.value[ce]})},{immediate:!0});function D(S){return S.owner==="add-data"||m(S.id)}function Q(S){const Y=y(S);if(!(Y!=null&&Y.data))return;const ue={id:Y.id,title:Y.name,type:"geojson",data:Y.data};c(ue,{},"add-data"),se({action:"activate",owner:"add-data",spec:ue})}function T(S,Y){var ie,ce,ye,Z,G;if(D(S)){r.value[S.id]=Y;const ke=qe(S.id);if(!Y){(ie=ke==null?void 0:ke.setVisible)==null||ie.call(ke,!1);return}if((ce=ke==null?void 0:ke.isMounted)!=null&&ce.call(ke)){ke.setVisible(!0);return}Q(S.id);return}if(S.isTemporary){if(!Y){p(S.id,S.owner||void 0),delete r.value[S.id];return}r.value[S.id]=!0;const ke=S.handle||((ye=u.value.find(ve=>ve.id===S.id))==null?void 0:ye.handle);(Z=ke==null?void 0:ke.setVisible)==null||Z.call(ke,!0);return}r.value[S.id]=Y;const ue=qe(S.id);(G=ue==null?void 0:ue.setVisible)==null||G.call(ue,Y)}function E(S,Y){const ue=Y.target;T(S,ue.checked)}function L(S){h.value.forEach(Y=>T(Y,S))}function A(){L(!x.value)}function me(S){return S.isTemporary?[{label:"Назва",value:S.name??null},{label:"Тип",value:"Тимчасовий шар"},S.owner==="add-data"?{label:"Джерело",value:"Завантажені дані"}:S.owner?{label:"Джерело",value:S.owner}:null].filter(Boolean):[{label:"Назва",value:S.name??null},{label:"Назва групи",value:S.group_name||null},{label:"Кількість",value:S.count??null},{label:"Балансоутримувач",value:S.holder??null}]}function I(S){const Y=S.trim();return Y?!!(/^#[\da-fA-F]{3,8}$/.test(Y)||/^rgb\s*\(/.test(Y)||/^rgba\s*\(/.test(Y)||/^hsl\s*\(/.test(Y)||/^hsla\s*\(/.test(Y)||/^[a-zA-Z]+$/.test(Y)&&Y.length<25):!1}function F(S){var Y,ue,ie,ce,ye,Z;if(!S)return null;if(typeof S=="string"){const G=S.trim();return!G||!I(G)?null:G}if(Array.isArray(S)){for(const G of S){const ke=F(G);if(ke)return ke}return null}if(typeof S=="object"){const G=S;return F(G.color??G.fill??G.stroke??G.lineColor??G.fillColor??((Y=G.paint)==null?void 0:Y["fill-color"])??((ue=G.paint)==null?void 0:ue["line-color"])??((ie=G.paint)==null?void 0:ie["circle-color"])??((ce=G.paint)==null?void 0:ce.color)??((ye=G.paint)==null?void 0:ye.lineColor)??((Z=G.paint)==null?void 0:Z.fillColor)??G.paint??G.value)}return null}function z(S){const Y=Array.isArray(S==null?void 0:S.legend)?S.legend[0]:S==null?void 0:S.legend,ue=F(Y);return ue||F(S==null?void 0:S.style)||Qd}function H(S){return{"--layers-panel-checkbox-color":z(S)}}function oe(S){var ce;const{id:Y}=S,ue=S.owner||void 0;p(Y,ue);const ie=qe(Y);(ce=ie==null?void 0:ie.remove)==null||ce.call(ie),(m(Y)||ue==="add-data")&&(k(Y),window.dispatchEvent(new CustomEvent(ao,{detail:{id:Y}}))),delete r.value[Y]}function R(){l.value=!l.value}function ee(){s.value=window.innerWidth<=768}function ge(S){var ue;if(!(S instanceof CustomEvent))return;const Y=(ue=S.detail)==null?void 0:ue.id;Y&&(r.value[Y]=!0)}function we(S){var ue;if(!(S instanceof CustomEvent))return;const Y=(ue=S.detail)==null?void 0:ue.id;Y&&(p(Y),delete r.value[Y])}return e.onMounted(()=>{(async()=>{var S;await((S=d.ready)==null?void 0:S.call(d)),d.map.value&&(await v(!0),i.value=!0)})(),window.addEventListener($l,te),window.addEventListener(Bn,ge),window.addEventListener(ao,we),ee(),s.value&&(l.value=!1),window.addEventListener("resize",ee)}),e.watch(()=>o.layers.map(S=>w(S)).join("|"),()=>{i.value&&v(!1)}),e.onBeforeUnmount(()=>{window.removeEventListener($l,te),window.removeEventListener(Bn,ge),window.removeEventListener(ao,we),window.removeEventListener("resize",ee)}),(S,Y)=>(e.openBlock(),e.createElementBlock("div",Md,[e.createElementVNode("div",Fd,[e.createElementVNode("div",Dd,[e.createElementVNode("div",Pd,[Y[0]||(Y[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",zd," ("+e.toDisplayString(b.value)+" з "+e.toDisplayString(f.value)+") ",1),e.createElementVNode("div",Id,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:A},e.toDisplayString(x.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Rd,[e.createElementVNode("div",jd,[h.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:R,"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})},[...Y[1]||(Y[1]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,ue=>{var ie;return e.openBlock(),e.createElementBlock("div",{key:ue.id,class:"layers-panel__item"},[e.createElementVNode("label",Od,[e.createElementVNode("div",Ud,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:de(ue.id),style:e.normalizeStyle(H(ue)),onChange:ce=>E(ue,ce)},null,44,qd),e.createElementVNode("div",Hd,[e.createElementVNode("span",Wd,e.toDisplayString(ue.name),1)]),e.createElementVNode("div",Yd,[ue.isTemporary?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__remove","aria-label":"Видалити шар",onClick:e.withModifiers(ce=>oe(ue),["stop"])},[...Y[2]||(Y[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])],8,Gd)):e.createCommentVNode("",!0),de(ue.id)&&!ue.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(Bl,{"layer-id":ue.id,class:"flex"},{trigger:e.withCtx(({toggle:ce})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(ce,["prevent","stop"])},[e.createElementVNode("div",Kd,[e.createVNode(e.unref(he.Contrast))])],8,Zd)]),_:1},8,["layer-id"]),e.createVNode($n,{count:Array.isArray(ue.filters)?ue.filters.length:0,layer:ue},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(Jo,{items:me(ue)},null,8,["items"])])])]),(ie=ue.actions)!=null&&ie.length?(e.openBlock(),e.createElementBlock("div",Xd,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ue.actions,ce=>(e.openBlock(),e.createElementBlock("button",{key:ce.widget||ce.id||ce.icon,type:"button",class:"layers-panel__action",innerHTML:ce.icon,onClick:ye=>N("action",{layerId:ce.widget})},null,8,Jd))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-3c399929"]]);function eu(){const{map:t,ready:n}=Ke(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(null);let i=[];function d(){i.forEach(m=>m()),i=[]}const u=m=>{const y=(m==null?void 0:m.properties)||{};return!!(y.cluster||y.point_count||y.point_count_abbreviated)},c=m=>{var f,b;o.value=[m.point.x,m.point.y];const y=t.value.queryRenderedFeatures(m.point);if(!(y!=null&&y.length)){p();return}const k=y.find(x=>!u(x));if(!k){p();return}const h=qe(k.source)||qe((f=k.layer)==null?void 0:f.id);h!=null&&h.popup&&(r.value=((b=h.popup)==null?void 0:b.fields)||h.popup,s.value=k.properties)},p=()=>{r.value=null,s.value=null,o.value=null};async function a(){await n(),t.value&&(d(),t.value.on("mousemove",c),t.value.on("mouseleave",p))}function g(){d(),r.value=null,s.value=null,o.value=null}return n().then(a),{popupCoords:o,popupFields:r,popupValues:s,disable:g,title:l}}const tu={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},nu={class:"space-y-1.5"},ou={class:"font-bold text-slate-700"},ru={class:"text-slate-700"},Sl=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=eu(),{map:s}=Ke(),i=e.ref(null),d=e.ref({left:"-9999px",top:"-9999px"}),u=e.ref({}),c=new Set,p=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function a(f,b){if(b==null||b==="")return b;if((f==null?void 0:f.type)==="number"){const x=typeof b=="number"?b:Number(b);if(Number.isFinite(x))return p.format(x)}return b}function g(f,b,x){const N=f.name||f.label||f.title||`field-${x}`,V=f.label||f.title||f.name||N,_=f.name?b[f.name]:void 0,w=f.name?b[`${f.name}_text`]:void 0;let B;if((f.format==="select"||f.format==="autocomplete")&&f.data&&_!=null){const K=u.value[f.data];K&&(B=K[String(_)])}const v=B??w??_??f.value??null;return{key:N,label:V,value:a(f,v)}}const m=e.computed(()=>{const f=o.value||[],b=r.value||{};return f.filter(x=>(x==null?void 0:x.meta)!=="title").map((x,N)=>g(x,b,N)).filter(x=>x.label)});e.watch([o,r],([f,b])=>{!f||!b||f.forEach(async x=>{if(x.format==="select"||x.format==="autocomplete"){const N=x.data;if(!N)return;if(!u.value[N]&&!c.has(N)){c.add(N);try{const V=await fetch(`/api/suggest/${N}`);if(V.ok){const _=await V.json();if(_!=null&&_.data&&Array.isArray(_.data)){const w={};_.data.forEach(B=>{w[String(B.id)]=B.text}),u.value[N]=w}}}catch(V){console.error(`Failed to fetch suggest for ${N}`,V)}}}})},{deep:!0,immediate:!0});const y=e.computed(()=>{const f=o.value||[],b=r.value||{},x=f.find(N=>(N==null?void 0:N.meta)==="title");return x?g(x,b,0):null}),k=e.computed(()=>{var b;const f=m.value;return(b=y.value)!=null&&b.value?[{...y.value,key:`${y.value.key}-title`,label:"Назва"},...f]:f});function h(){var T,E;if(!k.value.length||!n.value||!i.value){d.value={left:"-9999px",top:"-9999px"};return}const f=i.value,b=f.offsetParent||null,x=(b==null?void 0:b.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},N=((E=(T=s.value)==null?void 0:T.getContainer)==null?void 0:E.call(T))||void 0,V=(N==null?void 0:N.getBoundingClientRect())??x,_=V.left-x.left,w=V.top-x.top,B=f.offsetWidth||0,v=f.offsetHeight||0,K=12,J=8,[O,ne]=n.value;let de=_+O+K,xe=w+ne+K;de+B+J>x.width&&(de=_+O-B-K),xe+v+J>x.height&&(xe=w+ne-v-K);const se=J,te=J,D=Math.max(J,x.width-B-J),Q=Math.max(J,x.height-v-J);de=Math.min(Math.max(de,se),D),xe=Math.min(Math.max(xe,te),Q),d.value={left:`${de}px`,top:`${xe}px`}}return e.watch([n,k],()=>{e.nextTick(()=>h())}),e.onMounted(()=>{window.addEventListener("resize",h)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",h),l()}),(f,b)=>k.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-[130]",style:e.normalizeStyle(d.value)},[e.createElementVNode("div",tu,[e.createElementVNode("div",nu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.key,class:"flex flex-col"},[e.createElementVNode("span",ou,e.toDisplayString(x.label),1),e.createElementVNode("span",ru,e.toDisplayString(x.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function lu(){const t=He.useRoute(),n=He.useRouter(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(!1),i=e.ref([]),d=e.ref(0),u=e.computed(()=>i.value.length),c=e.computed(()=>s.value||!!o.value||!!l.value);let p=!1;function a(){o.value=null,r.value=null,l.value=null,s.value=!1,i.value=[],d.value=0}function g(w,B=0){if(!w.length){a(),V(null);return}i.value=w,m(B)}function m(w){const B=i.value[w];if(!B)return;d.value=w;const v=qe(B.source);h(B,v==null?void 0:v.card)}function y(){d.value>=i.value.length-1||m(d.value+1)}function k(){d.value<=0||m(d.value-1)}async function h(w,B){var J,O,ne,de,xe;if(!((J=w==null?void 0:w.properties)!=null&&J.id))return;const v=new URLSearchParams;v.set("layer",w.source),v.set("id",String((O=w.properties)==null?void 0:O.id));const K=Array.isArray(B)&&B.length>0;s.value=K,l.value=null,o.value=null,r.value=w||null;try{const se=await fetch(`/api/map-format?${v.toString()}`);if(!se.ok)throw new Error(`Failed (${se.status})`);const te=await se.json(),D=Array.isArray(te.columns)?te.columns:[],Q=Array.isArray(B)?B:[];if(!D.length&&!Q.length){console.error("Configure layer in admin"),f();return}const T=te.rows??te.data??{};o.value={rows:T,fields:Q,columns:D,html:te.html||null},p||V(r.value);const E=((ne=te.rows)==null?void 0:ne.geom)??((de=te.data)==null?void 0:de.geom);if(E){const L=typeof E=="string"?JSON.parse(E):E;L&&(r.value={...r.value,geometry:L,properties:{...((xe=r.value)==null?void 0:xe.properties)||{},geom:L,geom_4326:L}})}}catch(se){console.error("Failed to load feature card:",se),f()}finally{s.value=!1}}function f(){a(),V(null)}function b(){a()}_(x()),e.onBeforeUnmount(()=>b());function x(){const w=Array.isArray(t.query.info)?t.query.info[0]:t.query.info;if(typeof w!="string")return null;const B=w.trim();return B.startsWith("external:")?null:B||null}function N(w){var J,O;const B=(w==null?void 0:w.source)??((J=w==null?void 0:w.layer)==null?void 0:J.id),v=(O=w==null?void 0:w.properties)==null?void 0:O.id;return!B||v===void 0||v===null?null:`${B},${v}`.trim()||null}function V(w){const B=N(w),v=x();if(B===v)return;const K={...t.query};B?K.info=B:delete K.info,n.push({query:K}).catch(()=>{})}async function _(w){if(!w){a();return}if(w===N(r.value))return;const[B,v]=w.split(","),K=B==null?void 0:B.trim(),J=v==null?void 0:v.trim();if(!K||!J){a(),V(null);return}p=!0;try{g([{source:K,properties:{id:J}}],0)}finally{p=!1}}return e.watch(()=>x(),w=>{w!==N(r.value)&&(p=!0,_(w).finally(()=>{p=!1}))}),{card:o,cardFeature:r,cardError:l,cardLoading:s,isOpen:c,close:f,openFeature:w=>g(w?[w]:[],0),openFeatures:g,next:y,prev:k,count:u,index:d}}function au(){const{map:t,ready:n}=Ke(),o=e.ref([]),r=e.ref(0),l=e.ref(0),s=e.ref(!1),i=e.ref(null),d=e.ref({}),u=e.ref(null),c=e.ref([]),p=e.computed(()=>o.value[l.value]||null),a=e.computed(()=>o.value.length>0);let g=null;const m=()=>{g==null||g.remove(),g=null},y=B=>B?B.type==="FeatureCollection"?B:B.type==="Feature"?{type:"FeatureCollection",features:[B]}:B.type&&Array.isArray(B.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:B,properties:{}}]}:Array.isArray(B.features)?{type:"FeatureCollection",features:B.features}:B.geometry?y(B.geometry):null:null,k=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=B=>Number(B.toFixed(5)),f=async B=>{if(await n(),!t.value)return;const v=y(B);v&&(m(),g=qe("feature-highlight",{source:{type:"geojson",data:v},style:k()},t))},b=async(B,v,K)=>{var ne,de;const[J,O]=[h(B),h(v)];u.value={x:J,y:O},c.value=K,s.value=!0,i.value=null,o.value=[],d.value={},l.value=0;try{const xe=K.map(async T=>{const E=`/api/map-info-point?x=${J}&y=${O}&layers=${T}`,L=await fetch(E);if(!L.ok)return null;const A=await L.json();if(!A.count)return null;const I=await(await fetch(`${E}&index=0`)).json();return{layerId:T,data:I,count:A.count}}),te=(await Promise.all(xe)).filter(Boolean);if(te.length===0){r.value=0;return}o.value=te.map(T=>T.data);const[D]=o.value;r.value=te.reduce((T,E)=>T+(E.count||0),0),d.value[0]=D;const Q=((ne=D==null?void 0:D.data)==null?void 0:ne.geom_4326)??((de=D==null?void 0:D.data)==null?void 0:de.geom);await f(Q)}catch(xe){i.value=xe.message}finally{s.value=!1}},x=async B=>{if(!u.value||!c.value.length)return;if(d.value[B]){o.value[B]=d.value[B];return}const{x:v,y:K}=u.value,J=c.value.join(","),O=`/api/map-info-point?x=${v}&y=${K}&index=${B}&layers=${J}`;try{s.value=!0;const ne=await fetch(O);if(!ne.ok)throw new Error("Failed to fetch feature by index");const de=await ne.json();o.value[B]=de,d.value[B]=de}catch(ne){i.value=ne.message}finally{s.value=!1}},N=async()=>{l.value<r.value-1&&(l.value+=1,d.value[l.value]||await x(l.value))},V=async()=>{l.value>0&&(l.value-=1,d.value[l.value]||await x(l.value))},_=()=>{o.value=[],r.value=0,l.value=0,d.value={},u.value=null,c.value=[],m()};e.watch(l,async()=>{var v,K;const B=p.value;if(B){const J=((v=B==null?void 0:B.data)==null?void 0:v.geom_4326)??((K=B==null?void 0:B.data)==null?void 0:K.geom);await f(J)}});let w=null;return e.onMounted(async()=>{await n(),t.value&&(w=async B=>{const{lng:v,lat:K}=B.lngLat,J=qe(),ne=Object.entries(J).map(([de,xe])=>{var se,te,D,Q;return{id:de,service:((se=xe==null?void 0:xe.opts)==null?void 0:se.service)??((D=(te=xe==null?void 0:xe.opts)==null?void 0:te.source)==null?void 0:D.service)??null,count:((Q=xe==null?void 0:xe.opts)==null?void 0:Q.count)??null,visible:(()=>{var T;try{return((T=t.value)==null?void 0:T.getLayer(de))?t.value.getLayoutProperty(de,"visibility")!=="none":!0}catch{return!0}})()}}).filter(de=>de.service==="ogc"&&de.visible).map(de=>de.id);ne.length>0&&await b(v,K,ne)},t.value.on("dblclick",w))}),e.onBeforeUnmount(()=>{t.value&&w&&t.value.off("dblclick",w),m()}),{features:o,count:r,index:l,current:p,loading:s,error:i,active:a,next:N,prev:V,close:_}}const vl=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(c){const p=c.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(p)return p;const a=Array.from(c).map(g=>g.charCodeAt(0).toString(16)).join("").slice(0,8);return a?`layer-${a}`:"layer-temp"}const s=e.computed(()=>{var c;return((c=o.id)==null?void 0:c.trim())||l(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function d(){return{id:s.value,title:o.title,url:o.url}}function u(){r("activate",d())}return(c,p)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:u},[e.renderSlot(c.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),rr="map-card:external-payload",so="map-card:click-results",Ll=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,su={key:0,class:"card pointer-events-auto absolute top-4 lg:left-auto right-[52px] md:left-4 z-[130] w-[calc(100%-60px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},iu={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},cu={class:"min-w-0 flex-1"},du={class:"text-base font-semibold text-slate-900 truncate"},uu={key:0,class:"flex gap-1 mt-1"},fu=["disabled"],mu=["disabled"],pu={key:1,class:"flex gap-1 mt-1"},gu=["disabled"],yu=["disabled"],hu={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},bu={key:0,class:"text-center text-xs text-slate-500"},xu={key:1,class:"text-center text-xs text-red-500"},ku={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},wu={class:"divide-y divide-gray-100 py-[5px]"},_u={class:"text-gray-900 sm:col-span-4 font-normal"},Eu={key:0,class:"flex gap-1 flex-wrap"},Cu={key:0,class:"flex flex-col gap-1"},Nu=["href"],Vu=["href"],Bu={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},$u=["innerHTML"],Su=["innerHTML"],vu={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},Lu={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},Tu={class:"text-xs tracking-[0.02em] leading-none"},Au={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},Mu={class:"space-y-1"},Fu={class:"flex items-center cursor-pointer gap-2 flex-1"},Du=["checked","onChange"],Pu={class:"text-[13px] text-gray-600"},zu={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},Iu={key:5,class:"text-center text-xs text-slate-400"},Ru="map:temporary-layer-request",Tl="cardHideEmpty",ju=14,lr=Fe(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=lu(),r=au(),l=He.useRouter(),s=e.ref([]),i=e.ref(0),d=e.computed(()=>s.value[i.value]||null),u=e.computed(()=>{var C;return((C=d.value)==null?void 0:C.type)==="external"?d.value:null}),c=e.computed(()=>s.value.length>0),p=e.computed(()=>{var C,$;return!!(($=(C=u.value)==null?void 0:C.html)!=null&&$.trim())}),a=e.computed(()=>{var C;return((C=u.value)==null?void 0:C.geometry)??null});function g(){s.value=[],i.value=0}function m(C){if(!C)return null;if(typeof C=="string")try{return JSON.parse(C)}catch{return null}return C}function y(){const C=Array.isArray(xe.query.info)?xe.query.info[0]:xe.query.info;return typeof C!="string"?null:C.trim()||null}function k(C){if(!C||!C.startsWith("external:"))return null;const $=C.slice(9),[q,fe]=$.split(","),_e=q==null?void 0:q.trim(),Ee=fe==null?void 0:fe.trim();return!_e||!Ee?null:{layer:_e,id:Ee,token:`external:${_e},${Ee}`}}function h(C){const $=y(),q=(C==null?void 0:C.trim())||null;if($===q)return;const fe={...xe.query};if(q)fe.info=q;else if($!=null&&$.startsWith("external:"))delete fe.info;else return;l.push({query:fe}).catch(()=>{})}function f(C){var q;const $=s.value[C];if(!$){g(),o.close(),rt();return}if(i.value=C,$.type==="feature"){o.openFeature($.feature);return}o.close(),h($.infoToken??null),(q=$.html)!=null&&q.trim()?N():rt()}function b(C,$=0){if(r.close(),s.value=C.map(q=>({type:"external",...q})),!s.value.length){o.close(),h(null),rt();return}f(Math.min(Math.max($,0),s.value.length-1))}function x(C){r.close();const $=Array.isArray(C==null?void 0:C.features)?C.features.filter(Boolean):[],q=Array.isArray(C==null?void 0:C.externalItems)?C.externalItems.filter(fe=>typeof(fe==null?void 0:fe.html)=="string"&&fe.html.trim()):[];if(s.value=[...$.map(fe=>({type:"feature",feature:fe})),...q.map(fe=>({type:"external",...fe}))],!s.value.length){o.close(),h(null),rt();return}f(0)}function N(){return p.value?a.value?(De(a.value),!0):(rt(),!0):(rt(),!1)}const V=C=>{var fe,_e,Ee,Me;const $=C,q=Array.isArray((fe=$.detail)==null?void 0:fe.items)?(_e=$.detail)==null?void 0:_e.items.filter(ze=>typeof(ze==null?void 0:ze.html)=="string"&&ze.html.trim()):[];q.length?b(q,Number(((Ee=$.detail)==null?void 0:Ee.index)??0)):typeof((Me=$.detail)==null?void 0:Me.html)=="string"&&$.detail.html.trim()?b([{html:$.detail.html,geometry:$.detail.geometry??null,infoToken:$.detail.infoToken??null}],0):(g(),o.close(),h(null),rt())},_=C=>{x(C.detail)};e.onMounted(()=>{typeof window>"u"||(window.addEventListener(so,_),window.addEventListener(rr,V))}),e.onBeforeUnmount(()=>{typeof window>"u"||(window.removeEventListener(so,_),window.removeEventListener(rr,V))});const w=e.computed(()=>r.active.value),B=e.computed(()=>w.value||o.isOpen.value||p.value),v=e.computed(()=>w.value?r.loading.value:o.cardLoading.value),K=e.computed(()=>w.value?r.error.value:o.cardError.value),J=e.computed(()=>{var C,$,q;return w.value?((C=r.current.value)==null?void 0:C.html)||null:p.value?(($=u.value)==null?void 0:$.html)||null:((q=o.card.value)==null?void 0:q.html)||null}),O=Ke(),ne=Wo(),de=e.computed(()=>{var C,$;return(($=(C=ne.value)==null?void 0:C.map)==null?void 0:$.cardHideEmpty)??null}),xe=He.useRoute(),{activateTemporaryLayer:se,deactivateTemporaryLayer:te,clearTemporaryLayers:D,isTemporaryLayerActive:Q}=Vn(O.map);function T(C){window.dispatchEvent(new CustomEvent(Ru,{detail:C}))}const E=e.computed(()=>{var C;return((C=o.cardFeature.value)==null?void 0:C.source)??null}),L=e.computed(()=>E.value?`map-card:${E.value}`:"map-card"),A=e.computed(()=>{var fe,_e;const C=o.cardFeature.value,$=(C==null?void 0:C.source)||((fe=C==null?void 0:C.layer)==null?void 0:fe.id),q=((_e=C==null?void 0:C.properties)==null?void 0:_e.id)??(C==null?void 0:C.id);return $&&q!=null?`${$}:${q}`:null}),me=e.ref(null),I=e.ref([]),F=e.ref(0),z=new Map;function H(){if(typeof window>"u")return null;const $=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return $&&$[1]?$[1]:null}const oe=e.computed(()=>{const C=typeof n.mapId=="string"?n.mapId.trim():"";if(C.length)return C;const $=typeof xe.params.slug=="string"?xe.params.slug.trim():"";if($.length)return $;const q=typeof xe.query.slug=="string"?xe.query.slug.trim():"";return q.length?q:H()}),R=e.ref(null),ee=e.ref(null),ge=new Map;function we(C){const $=C.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if($)return $;const q=Array.from(C).map(fe=>fe.charCodeAt(0).toString(16)).join("").slice(0,8);return q?`layer-${q}`:`layer-${Math.random().toString(36).slice(2,8)}`}function S(C){if(typeof C!="string")return"";const $=C.trim();if(!$)return"";if(/^https?:\/\//i.test($))return $;if($.startsWith("//"))return typeof window>"u"?`https:${$}`:`${window.location.protocol}${$}`;const q=typeof window<"u"?window.location.origin:"";return $.startsWith("/")?q?`${q}${$}`:$:q?`${q}/${$}`:$}function Y(C){if(C==null)return[];if(Array.isArray(C))return C.flatMap($=>Y($));if(typeof C=="number")return Number.isFinite(C)?[C]:[];if(typeof C=="string"){const $=C.match(/-?\d+(?:\.\d+)?/g);return!$||!$.length?[]:$.map(q=>Number(q)).filter(q=>Number.isFinite(q))}return[]}function ue(C){const $=Y(C);if($.length<4)return null;const[q,fe,_e,Ee]=$;return[q,fe,_e,Ee].every(Me=>Number.isFinite(Me))?[q,fe,_e,Ee]:null}function ie(C){if(!C)return null;const $=C.trim();if(!$.length)return null;try{const _e=JSON.parse($),Ee=ue(_e);if(Ee)return Ee}catch{}const q=$.match(/-?\d+(?:\.\d+)?/g);if(!q||q.length<4)return null;const fe=q.slice(0,4).map(_e=>Number(_e));return fe.every(_e=>Number.isFinite(_e))?[fe[0],fe[1],fe[2],fe[3]]:null}function ce(C){const $={},q=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let fe;for(;(fe=q.exec(C))!==null;){const _e=fe[1],Ee=fe[2]??fe[3]??fe[4]??"";_e&&($[_e]=Ee)}return $}function ye(C,$){for(const q of $)if(C[q]!=null&&String(C[q]).trim().length)return String(C[q]).trim();return""}function Z(C){if(!(C!=null&&C.length))return;const $=Number(C);return Number.isFinite($)?$:void 0}function G(C){if(typeof C!="string"||!C.length)return[];const $=[],q=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let fe=0,_e;const Ee=new Set,Me=ze=>{let Ue=ze,Ge=2;for(;Ee.has(Ue);)Ue=`${ze}-${Ge}`,Ge+=1;return Ee.add(Ue),Ue};for(;(_e=q.exec(C))!==null;){const[ze,Ue="",Ge=""]=_e,ot=_e.index;if(ot>fe){const rs=C.slice(fe,ot);rs.trim().length&&$.push({type:"html",content:rs})}const tt=ce(Ue),lt=ye(tt,["title"])||"Тимчасовий шар",Ht=S(ye(tt,["url"]));if(!Ht){$.push({type:"html",content:ze}),fe=ot+ze.length;continue}const Qn=ye(tt,["id"]),cl=ye(tt,["button-text","buttonText","show","show-label","showLabel"]),WB=Z(ye(tt,["tile-size","tileSize"])),YB=Z(ye(tt,["minzoom","minZoom"])),GB=Z(ye(tt,["maxzoom","maxZoom"])),ZB=Z(ye(tt,["opacity"])),KB=ie(ye(tt,["bounds","data-bounds","bbox"])),XB=Qn||we(`${lt}-${Ht}`)||we(lt),ns=Me(XB||`layer-${$.length+1}`),dl=Ge.trim(),os=/<[^>]+>/.test(dl),JB=os?dl:null,ul=os?null:dl,QB=cl&&cl.trim().length?cl.trim():ul&&ul.trim().length?ul.trim():void 0;$.push({type:"layer",spec:{id:ns,title:lt,url:Ht,tileSize:WB,minzoom:YB,maxzoom:GB,opacity:ZB,bounds:KB},componentProps:{title:lt,url:Ht,id:ns,buttonText:QB},slotText:JB}),fe=ot+ze.length}if(fe<C.length){const ze=C.slice(fe);ze.trim().length&&$.push({type:"html",content:ze})}return!$.length&&C.trim().length&&$.push({type:"html",content:C}),$}function ke(C){if(!C)return null;const $=typeof C.id=="string"?C.id.trim():"",q=typeof C.title=="string"?C.title.trim():"",fe=S(typeof C.url=="string"?C.url:"");return!$||!fe?null:{id:$,title:q||$,url:fe,tileSize:C.tileSize,minzoom:C.minzoom,maxzoom:C.maxzoom,opacity:C.opacity,bounds:C.bounds}}const ve=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)??{}}),Ae=e.computed(()=>{if(w.value&&r.current.value){const fe=r.current.value,_e=Array.isArray(fe.columns)?fe.columns:[];return _e.length?_e:fe.fields??[]}const C=o.card.value;if(!C)return[];const $=Array.isArray(C.columns)?C.columns:[];return $.length?$:Array.isArray(C.fields)?C.fields:[]}),$e=e.computed(()=>{const C=Ae.value;if(!C.length)return[];const $=ve.value;return C.map(q=>({key:q.name,label:q.ua||q.label||q.title||q.name,value:et($[q.name],q.format||"text",q.type||"text"),format:q.format||"text"}))}),Je=new Set(["—","-","–","−"]);function Re(C){const $=C.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!$)return C;const[,q,fe,_e]=$;return`${_e}.${fe}.${q}`}function at(C){return Number.isFinite(C)?new Intl.NumberFormat("uk-UA").format(C):"—"}function et(C,$,q){if(C==null)return"—";if($==="tags"||$==="file")return C;if(Array.isArray(C))return C.length?C.map(fe=>et(fe,"text","text")).join(", "):"—";if(typeof C=="boolean")return C?"так":"ні";if(q==="number"&&typeof C=="number")return at(C);if(typeof C=="string"){const fe=C.trim();if(!fe.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(fe))return Re(fe);if(q==="number"&&/^-?\d+(?:\.\d+)?$/.test(fe)){const _e=Number(fe);return Number.isFinite(_e)?at(_e):fe}return fe}return String(C)}function nt(C){if(C==null)return!0;if(Array.isArray(C))return C.length===0;if(typeof C=="string"){const $=C.trim();return $.length?Je.has($):!0}return!1}function P(C){if(!C)return[];if(Array.isArray(C))return C;if(typeof C=="string"){const $=C.trim();if($.startsWith("{")&&$.endsWith("}")){const fe=$.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return fe?fe.map(_e=>_e.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}function pe(C){if(C==null)return[];if(Array.isArray(C))return C.filter($=>typeof $=="string").map($=>$.trim()).filter($=>$.length>0&&!Je.has($));if(typeof C=="string"){const $=C.trim();return!$.length||Je.has($)?[]:$.includes(",")?$.split(",").map(q=>q.trim()).filter(q=>q.length>0):[$]}return[]}const M=e.ref(!1),W=e.ref(!0),X=()=>{var C,$;return typeof window>"u"?null:(($=(C=window.localStorage)==null?void 0:C.getItem)==null?void 0:$.call(C,Tl))??null},be=e.ref(X()),Ve=C=>{const $=typeof C=="string"&&C.toLowerCase()==="true";M.value=$,W.value=!$},j=C=>{be.value=C};if(typeof window<"u"){const C=$=>{$.key===Tl&&j($.newValue)};window.addEventListener("storage",C),e.onBeforeUnmount(()=>{window.removeEventListener("storage",C)})}const ae=e.computed(()=>typeof be.value=="string");e.watch(be,C=>{Ve(typeof C=="string"?C:de.value)},{immediate:!0}),e.watch(de,C=>{ae.value||Ve(C)},{immediate:!0});const re=e.computed(()=>$e.value.filter(C=>nt(C.value)).length),Ne=e.computed(()=>M.value&&!W.value?$e.value.filter(C=>!nt(C.value)):$e.value);function Se(C){const $=typeof C=="string"?C:"";if(!$.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:$,hiddenCount:0};const fe=new DOMParser().parseFromString($,"text/html");let _e=0;return fe.querySelectorAll("dd").forEach(Ee=>{var Ue;const Me=((Ue=Ee.textContent)==null?void 0:Ue.trim())??"",ze=Ee.closest("div");if(nt(Me)){_e+=1,ze?ze.remove():Ee.remove();return}}),{sanitized:fe.body.innerHTML,hiddenCount:_e}}const Oe=e.computed(()=>Se(J.value)),Qe=e.computed(()=>J.value?Oe.value.hiddenCount:0),Xe=e.computed(()=>re.value+Qe.value),st=e.computed(()=>{var C;return M.value&&!W.value&&!!((C=J.value)!=null&&C.trim())}),ct=e.computed(()=>M.value&&Xe.value>0),wt=e.computed(()=>W.value?"Приховати пусті значення":"Показати пусті значення"),Ft=e.computed(()=>W.value?he.ChevronUp:he.ChevronDown);function hn(){W.value=!W.value}const Ut=e.computed(()=>{const C=st.value?Oe.value.sanitized:J.value??"";return G(C)}),bn=e.computed(()=>Ut.value.filter(C=>C.type==="layer"));function Jr(C){return Array.isArray(C)?C.map(($,q)=>{const fe=S(typeof($==null?void 0:$.url)=="string"?$.url:""),_e=typeof($==null?void 0:$.geohub)=="string"&&$.geohub.trim().length?`/api-hub/tms/${$.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",Ee=(($==null?void 0:$.name)||($==null?void 0:$.title)||($==null?void 0:$.label)||`Шар ${q+1}`).toString(),Me=($==null?void 0:$.id)!=null?String($.id):we(`${Ee}-${q+1}`),ze=($==null?void 0:$.buttonText)||($==null?void 0:$.button_text)||null,Ue=($==null?void 0:$.description)||($==null?void 0:$.subtitle)||null,Ge=fe||S(_e)||"";if(!Ge)return null;const ot=typeof($==null?void 0:$.layer_id)=="string"&&$.layer_id.trim().length?$.layer_id.trim():null,tt={id:Me,title:Ee,url:Ge,layer_id:ot,subtitle:Ue,buttonText:ze||void 0};typeof($==null?void 0:$.tileSize)=="number"&&(tt.tileSize=$.tileSize),typeof($==null?void 0:$.tile_size)=="number"&&(tt.tileSize=$.tile_size),typeof($==null?void 0:$.minzoom)=="number"&&(tt.minzoom=$.minzoom),typeof($==null?void 0:$.maxzoom)=="number"&&(tt.maxzoom=$.maxzoom),typeof($==null?void 0:$.opacity)=="number"&&(tt.opacity=$.opacity);const lt=ue(($==null?void 0:$.bounds)??($==null?void 0:$.bbox)??null);return lt&&(tt.bounds=lt),tt}).filter(Boolean):[]}const xn=e.computed(()=>{var fe,_e;const C=o.card.value,$=r.current.value,q=[(fe=C==null?void 0:C.rows)==null?void 0:fe.layers,C==null?void 0:C.layers,(_e=$==null?void 0:$.data)==null?void 0:_e.layers,$==null?void 0:$.layers];for(const Ee of q){const Me=Jr(Ee);if(Me.length)return Me}return[]}),Qr=e.computed(()=>Ut.value.length>0||$e.value.length>0||xn.value.length>0),Io=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function el(){const C={},$=R.value;if($&&typeof $=="object"&&Object.entries($).forEach(([q,fe])=>{typeof fe=="string"&&(C[q]=fe)}),E.value&&(C.layer=E.value),!C.geohub){const q=typeof($==null?void 0:$.geohub)=="string"?$.geohub:null,fe=typeof($==null?void 0:$.geohub_key)=="string"?$.geohub_key:null,_e=typeof($==null?void 0:$.geohubId)=="string"?$.geohubId:null;C.geohub=q||fe||_e||C.layer||""}return C}async function tl(){const C=E.value;if(!C)return R.value=null,ee.value=null,null;if(ee.value===C&&R.value)return R.value;if(ge.has(C)){const $=ge.get(C);return R.value=$,ee.value=C,$}try{const $=await fetch(`/api/gis-service/${encodeURIComponent(C)}`);if(!$.ok)return null;const q=await $.json();return ge.set(C,q),R.value=q,ee.value=C,q}catch{return null}}async function Wn(C){var Ue,Ge,ot,tt;if(!(C!=null&&C.id))return;await tl();const $=el(),q=bn.value.find(lt=>lt.spec.id===C.id),fe=xn.value.find(lt=>lt.id===C.id),_e=(q==null?void 0:q.spec)||ke(fe)||ke(C),Ee=(q==null?void 0:q.spec.bounds)??(fe==null?void 0:fe.bounds);if(!_e||Q(_e.id,L.value))return;const Me=(fe==null?void 0:fe.layer_id)||((Ge=(Ue=q==null?void 0:q.spec.url)==null?void 0:Ue.match(/\/api\/gis-rtile\/([^/]+)\//))==null?void 0:Ge[1])||((tt=(ot=_e.url)==null?void 0:ot.match(/\/api\/gis-rtile\/([^/]+)\//))==null?void 0:tt[1])||null;if(Me){const lt=typeof window<"u"?window.location.origin:"";try{await fetch(`${lt}/api/gis-xml/${Me}`)}catch{}}const ze=L.value||void 0;me.value=ze??null,se(_e,$,ze),T({action:"activate",owner:ze,spec:_e,context:$}),nl(Ee)}async function nl(C){var Ee;if(!(C!=null&&C.length))return;const[$,q,fe,_e]=C;[$,q,fe,_e].every(Me=>Number.isFinite(Me))&&typeof O.fitBounds=="function"&&(await((Ee=O.ready)==null?void 0:Ee.call(O)),O.fitBounds([[$,q],[fe,_e]],{padding:48,maxZoom:18}))}function ol(C){if(!C)return;const $=Yn()||void 0;te(C,$),T({action:"deactivate",owner:$,spec:{id:C}})}function rl(C){return Q(C,Yn())}function ll(C,$){const q=$.target;!!(q!=null&&q.checked)?Wn(C):ol(C.id)}function Yn(){return me.value||L.value||null}e.watch(E,(C,$)=>{C!==$&&(R.value=null,ee.value=null)});const{next:Gn,prev:Ro,count:Zn,index:kn}=r,jo=e.computed(()=>o.count.value),al=e.computed(()=>o.index.value),Oo=e.computed(()=>w.value?!1:c.value?s.value.length>1:jo.value>1),Kn=e.computed(()=>w.value?Zn.value:c.value?s.value.length:jo.value),wn=e.computed(()=>w.value?kn.value:c.value?i.value:al.value),sl=()=>{if(c.value){if(i.value>=s.value.length-1)return;f(i.value+1);return}o.next()},il=()=>{if(c.value){if(i.value<=0)return;f(i.value-1);return}o.prev()};function Et(){const C=Yn();C&&(D(C),T({action:"clear",owner:C}),me.value=null)}function Xn(){g(),o.close(),r.close(),Et(),h(null)}e.watch(B,(C,$)=>{!C&&$&&(Et(),rt())});function qt(){!o.isOpen.value&&!r.active.value&&Et()}e.watch(()=>o.isOpen.value,()=>{qt()}),e.watch(()=>r.active.value,()=>{qt()}),e.watch(E,(C,$)=>{C&&$&&C!==$&&Et()}),e.watch(kn,(C,$)=>{C!==$&&Et()}),e.watch(A,(C,$)=>{C&&$&&C!==$&&Et()});function tn(C){if(!C)return null;if(C.geometry)return C.geometry;const $=(C==null?void 0:C.data)??(C==null?void 0:C.properties);return $!=null&&$.geom_4326?$.geom_4326:$!=null&&$.geom?$.geom:null}function rt(){I.value.length&&(I.value.forEach((C,$)=>{var q;(q=C==null?void 0:C.remove)==null||q.call(C,$===0)}),I.value=[])}function Uo(C){var q,fe,_e;const $=(C==null?void 0:C.type)||((_e=(fe=(q=C==null?void 0:C.features)==null?void 0:q[0])==null?void 0:fe.geometry)==null?void 0:_e.type)||"";return $.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}}]:$.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 _n=null;function Jn(){return y()}function qo(C){var _e,Ee;if(!C)return null;const $=(C==null?void 0:C.source)??((_e=C==null?void 0:C.layer)==null?void 0:_e.id),q=((Ee=C==null?void 0:C.properties)==null?void 0:Ee.id)??(C==null?void 0:C.id);return!$||q===void 0||q===null?null:`${$},${q}`.trim()||null}function U(C,$){if(C){if(Array.isArray(C)){if(C.length>=2&&typeof C[0]=="number"&&typeof C[1]=="number"){$.push([C[0],C[1]]);return}C.forEach(q=>U(q,$));return}typeof C=="object"&&(Array.isArray(C.coordinates)&&U(C.coordinates,$),Array.isArray(C.features)&&C.features.forEach(q=>U(q==null?void 0:q.geometry,$)))}}function le(C){var ze,Ue;if(!C)return null;const $=C.type==="FeatureCollection"?(Ue=(ze=C.features)==null?void 0:ze[0])==null?void 0:Ue.geometry:C.type==="Feature"?C.geometry:C,q=[];if(U($,q),!q.length)return null;let fe=q[0][0],_e=q[0][0],Ee=q[0][1],Me=q[0][1];return q.forEach(([Ge,ot])=>{Ge<fe&&(fe=Ge),Ge>_e&&(_e=Ge),ot<Ee&&(Ee=ot),ot>Me&&(Me=ot)}),[(fe+_e)/2,(Ee+Me)/2]}async function Te(C,$){var Ee;const q=Jn();if(!q||q.startsWith("external:"))return;const fe=qo(C);if(!fe||fe!==q||_n===q)return;const _e=le($);_e&&(await((Ee=O.ready)==null?void 0:Ee.call(O)),O.flyTo({center:_e,zoom:ju}),_n=q)}function De(C){var _e;if(!C){rt();return}const $=(_e=O.map)==null?void 0:_e.value,q={type:"FeatureCollection",features:[{type:"Feature",geometry:C,properties:{}}]};rt();const fe=Uo(C);if(I.value=fe.map((Ee,Me)=>qe(`feature-card-highlight${Me||""}`,{...Me===0?{source:{type:"geojson",data:q}}:{},sourceId:"feature-card-highlight",layer:{id:`feature-card-highlight${Me||""}`,type:Ee.type,source:"feature-card-highlight",paint:Ee.paint}},O.map)),$!=null&&$.moveLayer){const Ee=()=>{try{I.value.forEach(Ge=>{var tt;const ot=(tt=Ge==null?void 0:Ge.ids)==null?void 0:tt.layerId;ot&&$.moveLayer(ot)})}catch{}},Me=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(Ee)}):setTimeout(Ee,0)};Me();const ze=()=>Me();$.once("styledata",ze);const Ue=()=>{Me(),$.off("styledata",ze),$.off("idle",Ue)};$.on("idle",Ue)}}function Be(C){var fe,_e;const $=(C==null?void 0:C.source)||((fe=C==null?void 0:C.layer)==null?void 0:fe.id)||"unknown",q=((_e=C==null?void 0:C.properties)==null?void 0:_e.id)??(C==null?void 0:C.id)??"unknown";return`${$}:${q}`}async function Ie(C){var Ee,Me,ze,Ue,Ge;if(!C)return null;const $=tn(C);if($)return $;const q=((Ee=C==null?void 0:C.properties)==null?void 0:Ee.id)??(C==null?void 0:C.id);if(!q)return null;const fe=Be(C);if(z.has(fe))return z.get(fe);const _e=[oe.value,C==null?void 0:C.source,(Me=C==null?void 0:C.layer)==null?void 0:Me.id].map(ot=>typeof ot=="string"?ot.trim():"").filter(Boolean);for(const ot of _e)try{const tt=await fetch(`/api/map-features/${encodeURIComponent(ot)}/${encodeURIComponent(String(q))}`);if(!tt.ok)continue;const lt=await tt.json(),Ht=((ze=lt==null?void 0:lt.data)==null?void 0:ze.geom)||((Ue=lt==null?void 0:lt.data)==null?void 0:Ue.geometry)||((Ge=lt==null?void 0:lt.data)==null?void 0:Ge.geom_4326)||null,Qn=typeof Ht=="string"?JSON.parse(Ht):Ht;if(Qn)return z.set(fe,Qn),Qn}catch{continue}return null}async function je(C){F.value+=1;const $=F.value;if(N())return;if(!C||w.value){rt();return}if(!Io.value){rt();return}const q=await Ie(C);if($===F.value){if(!q){rt();return}De(q),Te(C,q)}}async function Le(C){var q,fe,_e;const $=k(C);if(!$){(q=y())!=null&&q.startsWith("external:")&&(g(),rt());return}if(((fe=u.value)==null?void 0:fe.infoToken)===$.token){N();return}try{const Ee=await fetch(`/api/map-format?layer=${encodeURIComponent($.layer)}&id=${encodeURIComponent($.id)}`);if(!Ee.ok)throw new Error(`Failed (${Ee.status})`);const Me=await Ee.json(),ze=typeof(Me==null?void 0:Me.html)=="string"?Me.html:null,Ue=m(((_e=Me==null?void 0:Me.data)==null?void 0:_e.geom)??(Me==null?void 0:Me.geom)??null);if(!ze&&!Ue){g(),rt();return}b([{html:ze,geometry:Ue,infoToken:$.token}],0)}catch{g(),rt()}}return e.watch(()=>o.cardFeature.value,C=>{je(C)},{immediate:!0}),e.watch(()=>o.index.value,()=>{w.value||je(o.cardFeature.value)}),e.watch(w,C=>{if(C){p.value||rt();return}if(p.value){N();return}je(o.cardFeature.value)}),e.watch(oe,()=>{if(p.value){N();return}!w.value&&o.cardFeature.value&&je(o.cardFeature.value)}),e.watch(Io,C=>{N()||(C?je(o.cardFeature.value):rt())}),e.watch(()=>Jn(),C=>{if(_n=null,C!=null&&C.startsWith("external:")){Le(C);return}u.value&&(g(),rt())},{immediate:!0}),e.watch(u,C=>{var $;if(!(($=C==null?void 0:C.html)!=null&&$.trim())){rt();return}N()}),e.onBeforeUnmount(()=>{Et(),rt()}),(C,$)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[B.value?(e.openBlock(),e.createElementBlock("div",su,[e.createElementVNode("div",iu,[e.createElementVNode("div",cu,[e.createElementVNode("p",du,[w.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(wn.value+1)+" / "+e.toDisplayString(Kn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[Oo.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(wn.value+1)+" / "+e.toDisplayString(Kn.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),w.value&&e.unref(Zn)>1?(e.openBlock(),e.createElementBlock("div",uu,[e.createElementVNode("button",{onClick:$[0]||($[0]=(...q)=>e.unref(Ro)&&e.unref(Ro)(...q)),disabled:e.unref(kn)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(he.ArrowLeft),{class:"h-4 w-4"})],8,fu),e.createElementVNode("button",{onClick:$[1]||($[1]=(...q)=>e.unref(Gn)&&e.unref(Gn)(...q)),disabled:e.unref(kn)===e.unref(Zn)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(he.ArrowRight),{class:"h-4 w-4"})],8,mu)])):!w.value&&Oo.value?(e.openBlock(),e.createElementBlock("div",pu,[e.createElementVNode("button",{onClick:il,disabled:wn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(he.ArrowLeft),{class:"h-4 w-4"})],8,gu),e.createElementVNode("button",{onClick:sl,disabled:wn.value>=Kn.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(he.ArrowRight),{class:"h-4 w-4"})],8,yu)])):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:Xn}," ✕ ")]),e.createElementVNode("div",hu,[v.value?(e.openBlock(),e.createElementBlock("div",bu," Завантаження даних… ")):K.value?(e.openBlock(),e.createElementBlock("div",xu,e.toDisplayString(K.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[$e.value.length?(e.openBlock(),e.createElementBlock("div",ku,[e.createElementVNode("dl",wu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ne.value,q=>(e.openBlock(),e.createElementBlock("div",{key:q.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-10 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",_u,e.toDisplayString(q.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-6 font-normal",[q.format==="badge"?"font-semibold text-yellow-800":"",q.format==="file"?"whitespace-normal":"whitespace-pre-wrap"]])},[q.format==="tags"?(e.openBlock(),e.createElementBlock("div",Eu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P(q.value),(fe,_e)=>(e.openBlock(),e.createElementBlock("span",{key:_e,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(fe),1))),128))])):q.format==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[pe(q.value).length?(e.openBlock(),e.createElementBlock("div",Cu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(pe(q.value),(fe,_e)=>(e.openBlock(),e.createElementBlock("div",{key:_e,class:"flex gap-x-2"},[e.createElementVNode("a",{class:"flex items-center gap-x-2 border py-2 px-3 shadow rounded-xl cursor-pointer w-[42px] y-[34px]",href:fe,target:"_blank",rel:"noopener"},[...$[2]||($[2]=[e.createElementVNode("img",{src:"https://cdn.softpro.ua/assets/eye.svg",alt:"eye"},null,-1)])],8,Nu),e.createElementVNode("a",{download:"1",class:"flex items-center gap-x-2 border py-2 px-3 shadow rounded-xl cursor-pointer w-[42px] y-[34px]",href:fe,target:"_blank",rel:"noopener"},[...$[3]||($[3]=[e.createElementVNode("img",{src:"https://cdn.softpro.ua/assets/file-up.svg",alt:"generate"},null,-1)])],8,Vu)]))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("—")],64))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(q.value),1)],64))],2)]))),128))])])):Ut.value.length?(e.openBlock(),e.createElementBlock("div",Bu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ut.value,(q,fe)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:fe},[q.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:q.content},null,8,$u)):(e.openBlock(),e.createBlock(vl,{key:1,title:q.componentProps.title,url:q.componentProps.url,id:q.componentProps.id,"button-text":q.componentProps.buttonText,onActivate:Wn},e.createSlots({_:2},[q.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:q.slotText},null,8,Su)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),bn.value.length?(e.openBlock(),e.createElementBlock("div",vu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(bn.value,q=>(e.openBlock(),e.createBlock(vl,{key:q.spec.id,title:q.componentProps.title,url:q.componentProps.url,id:q.spec.id,"button-text":q.componentProps.buttonText,onActivate:Wn},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),ct.value?(e.openBlock(),e.createElementBlock("div",Lu,[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:hn},[e.createElementVNode("span",Tu,e.toDisplayString(wt.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Ft.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),xn.value.length?(e.openBlock(),e.createElementBlock("div",Au,[$[5]||($[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",Mu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(xn.value,q=>(e.openBlock(),e.createElementBlock("div",{key:q.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Fu,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:rl(q.id),onChange:fe=>ll(q,fe)},null,40,Du),$[4]||($[4]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Pu,e.toDisplayString(q.title),1)]),q.subtitle?(e.openBlock(),e.createElementBlock("div",zu,e.toDisplayString(q.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Qr.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Iu," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-e2cf1510"]]),Ou={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%"}},Uu={class:"flex flex-col gap-1 p-5"},qu={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},ar=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Ke(),l=e.ref([]);let s=null;function i(p){return p?p.map((a,g)=>{var k;const m=(a==null?void 0:a.name)||(a==null?void 0:a.label)||(a==null?void 0:a.title)||(a==null?void 0:a.id)||`Layer ${g+1}`,y=(a==null?void 0:a.color)||(a==null?void 0:a.fill)||((k=a==null?void 0:a.paint)==null?void 0:k.color)||"#3388ff";return{id:`${m}-${g}`,label:m,color:y}}):[]}function d(p){return p!=null&&p.layers?p.layers.filter(a=>{const g=a.paint||{};return g["fill-color"]||g["line-color"]||g["circle-color"]}).map((a,g)=>{var k;const m=a.paint||{},y=m["fill-color"]||m["line-color"]||m["circle-color"]||"#3388ff";return{id:a.id||`layer-${g}`,label:((k=a.metadata)==null?void 0:k.title)||a.id||`Layer ${g+1}`,color:y}}):[]}async function u(){var g;await r();const p=o.value;if(!p)return;const a=(g=p.getStyle)==null?void 0:g.call(p);l.value=d(a)}function c(){o.value&&(s==null||s())}return e.watch(()=>n.items,async p=>{p!=null?(l.value=i(p),s==null||s()):(await r(),c(),u())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),c(),u())}),e.onBeforeUnmount(()=>{s==null||s(),s=null}),(p,a)=>l.value.length?(e.openBlock(),e.createElementBlock("div",Ou,[e.createElementVNode("div",Uu,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.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:g.color})},null,4),e.createElementVNode("span",qu,[e.createElementVNode("span",null,e.toDisplayString(g.label),1)])]))),128))])])):e.createCommentVNode("",!0)}}),Hu={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"},sr=Fe(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",Hu,[e.createVNode($n,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-f32d2c71"]]),io=e.ref({}),co=e.ref([]);function Wu(t){const n={};t.forEach(o=>{o!=null&&o.id&&(n[o.id]=o)}),io.value=n}function Yu(t){co.value=[...t]}function Gu(){io.value={},co.value=[]}function Zu(t){return t.legend?(Array.isArray(t.legend)?t.legend:[t.legend]).filter(Boolean):[]}const Al=e.computed(()=>{const t=[];return co.value.forEach(n=>{const o=io.value[n];o&&Zu(o).forEach(r=>{t.push({...r,name:r.name??r.label??o.name,label:r.label??r.name??o.name})})}),t});function Ku(t,n={}){const o=t==null?void 0:t.config;return Array.isArray(o)?o:o&&typeof o=="object"&&Array.isArray(o.items)?o.items:(o&&typeof o=="object"?o.source:void 0)==="catalog"||n.hasCatalogWidget?Al.value:[]}function Ml(){return{layersById:io,selectedLayerIds:co,catalogLegendItems:Al,registerCatalogLayers:Wu,setCatalogSelectedLayerIds:Yu,resetMapCatalogLegend:Gu,resolveMapLegendItems:Ku}}const Xu={class:"catalog-tab__search relative mt-[10px]"},Ju={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%)"}},Qu={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},ef={key:0,class:"text-sm text-gray-400 text-center mt-6"},tf=["onClick"],nf={class:"flex items-center gap-x-3"},of={class:"max-w-[260px] text-[14px] text-[#4b5563]"},rf={class:"text-xs opacity-60 text-[#4b5563]"},lf={class:"flex items-center cursor-pointer gap-2 flex-1"},af=["checked","onChange"],sf={class:"text-[13px] text-gray-600 max-w-[260px]"},cf={class:"flex items-center gap-2"},df=Fe(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),d=new Intl.Collator("uk",{sensitivity:"base"}),u=e.computed(()=>{const f=o.search.trim().toLowerCase();return o.catalog.groups.map(b=>{const x=b.layers.filter(N=>{const V=k(N);return V?f?V.toLowerCase().includes(f):!0:!1}).sort((N,V)=>d.compare(k(N),k(V)));return{...b,layers:x}}).filter(b=>b.layers.length>0).sort((b,x)=>d.compare(b.name,x.name))}),c=e.computed({get:()=>o.search,set:f=>r("update:search",f)});function p(f){l[f]=!l[f],Cd()}function a(f){return!!l[f]}function g(f,b){if(o.selected.includes(b)){i.visible=!1,i.layerId=null;return}const x=f.currentTarget;if(!x)return;const N=x.getBoundingClientRect(),V=typeof window<"u"?window.scrollX:0,_=typeof window<"u"?window.scrollY:0;i.left=N.left+N.width/2+V,i.top=N.bottom+8+_,i.layerId=b,i.visible=!0}function m(){i.visible=!1,i.layerId=null}function y(f){return[{label:"Назва",value:h(f.name)},{label:"Сервіс",value:h(f.service)},{label:"Посилання",value:h(f.url),breakLine:!0}]}function k(f){return typeof(f==null?void 0:f.name)=="string"?f.name.trim():""}function h(f){return f==null||f===""?null:String(f)}return e.watch(()=>o.selected?o.selected.slice():[],f=>{!i.visible||!i.layerId||f.includes(i.layerId)&&(i.visible=!1,i.layerId=null)}),(f,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:s,class:"catalog-tab"},[e.createElementVNode("div",Xu,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=x=>c.value=x),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,c.value]]),(e.openBlock(),e.createElementBlock("svg",Ju,[...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",Qu,[u.value.length===0?(e.openBlock(),e.createElementBlock("div",ef," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,x=>(e.openBlock(),e.createElementBlock("div",{key:x.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:N=>p(x.id)},[e.createElementVNode("div",nf,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",a(x.id)?"rotate-90":""])},[...b[2]||(b[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",of,e.toDisplayString(x.name),1)]),e.createElementVNode("div",rf,e.toDisplayString(x.layers.length),1)],8,tf),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.layers,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",lf,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(N.id),onChange:V=>f.$emit("toggle-layer",N.id,V.target.checked,N)},null,40,af),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",sf,e.toDisplayString(N.name),1)]),e.createElementVNode("div",cf,[Array.isArray(N.filters)&&N.filters.length?(e.openBlock(),e.createBlock($n,{key:0,count:N.filters.length,layer:N,disabled:!t.selected.includes(N.id),onMouseenter:V=>g(V,N.id),onMouseleave:m,onFocus:V=>g(V,N.id),onBlur:m},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(Jo,{items:y(N)},null,8,["items"])])]))),128))],512),[[e.vShow,a(x.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${i.top}px`,left:`${i.left}px`})},e.toDisplayString(i.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-36ed2aad"]]),uf={class:"flex flex-col gap-0"},ff={class:"text-xs text-slate-600 font-semibold"},mf=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let i=null;const d=e.computed(()=>{if(!r.open)return{display:"none"};const k=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${k}px`,maxWidth:`${k}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function u(){if(r.open){g();return}if(!l.value){g();return}r.open=!0,e.nextTick(()=>{c(),m(),requestAnimationFrame(()=>{c()})})}function c(){if(!r.open||!l.value||!s.value)return;const k=l.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,x=window.scrollY+h,N=window.scrollY+window.innerHeight-h,V=s.value.offsetWidth||Math.min(460,window.innerWidth-24),_=s.value.offsetHeight||0;let w=k.left+window.scrollX+(k.width-V)/2;w<f&&(w=f),w+V>b&&(w=Math.max(f,b-V)),r.left=w;let B=k.bottom+window.scrollY+h;B+_>N&&(B=k.top+window.scrollY-_-h,B<x&&(B=Math.max(x,N-_))),B<x&&(B=x),B+_>N&&(B=Math.max(x,N-_)),r.top=B,r.transform="none"}function p(k){var f,b;if(!r.open)return;const h=k.target;(f=l.value)!=null&&f.contains(h)||(b=s.value)!=null&&b.contains(h)||g()}function a(k){k.key==="Escape"&&g()}function g(){y(),r.open=!1,l.value=null,s.value=null}function m(){y(),s.value&&(i=new ResizeObserver(()=>{c()}),i.observe(s.value))}function y(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",p,!0),document.addEventListener("keydown",a),window.addEventListener("scroll",c,!0),window.addEventListener("resize",c)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",p,!0),document.removeEventListener("keydown",a),window.removeEventListener("scroll",c,!0),window.removeEventListener("resize",c),y()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>c())},{deep:!0}),n({close:g}),(k,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(u,["prevent","stop"])},[e.renderSlot(k.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(d.value),ref_key:"popoverEl",ref:s,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",uf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",ff,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),pf={class:"selected-tab"},gf={class:"selected-tab__actions"},yf={key:0,class:"selected-tab__scroll"},hf=["onDragstart","onDragover","onDrop"],bf={class:"selected-tab__item-header"},xf={class:"selected-tab__item-info"},kf=["checked","onChange"],wf={class:"selected-tab__item-name"},_f={class:"selected-tab__item-controls"},Ef=["onClick"],Cf={class:"selected-tab__menu-inner"},Nf=Fe(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{},clientLayers:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),i=e.ref(null),d=new Map,u=e.reactive({top:0,left:0}),c=e.ref(null),p=e.reactive({top:0,left:0}),a=e.ref(null),g=new Map,m=e.reactive({});function y(T){var L,A;const E=(L=o.clientLayers)==null?void 0:L[T];if(E){const me=E.bounds?[E.bounds[0][0],E.bounds[0][1],E.bounds[1][0],E.bounds[1][1]]:null;return{id:E.id,name:E.name,service:"geojson",isClient:!0,extent:me}}for(const me of((A=o.catalog)==null?void 0:A.groups)??[]){const I=me.layers.find(F=>F.id===T);if(I)return I}return null}function k(T){var L;const E=(L=y(T))==null?void 0:L.filters;return Array.isArray(E)&&E.length>0}function h(T){!T||!k(T)||(c.value=null,e.nextTick(()=>{Nd(Vd(T))}))}e.watch(()=>o.selected,T=>{T.forEach(E=>{l[E]==null&&(l[E]=100)})},{immediate:!0});function f(){if(!s.value)return;const T=d.get(s.value);if(!T)return;const E=T.getBoundingClientRect();u.top=E.bottom+8+window.scrollY,u.left=E.left+window.scrollX}e.watch(()=>o.selected,T=>{T.forEach(E=>{m[E]==null&&(m[E]=!0)})},{immediate:!0});function b(T,E){var A;if(m[T]=E,(A=o.clientLayers)!=null&&A[T]){r("toggle-layer",T,E);return}const L=qe(T);L&&L.setVisible(E)}function x(T,E){E?g.set(T,E):g.delete(T)}function N(T){c.value=c.value===T?null:T,c.value&&e.nextTick(()=>{V(T),requestAnimationFrame(()=>{V(T)})})}function V(T){const E=g.get(T);if(!E||!a.value)return;const L=E.getBoundingClientRect(),A=12,me=6,I=window.scrollX+A,F=window.scrollX+window.innerWidth-A,z=window.scrollY+A,H=window.scrollY+window.innerHeight-A,oe=a.value.offsetWidth||190,R=a.value.offsetHeight||0;let ee=L.bottom+window.scrollY+me,ge=L.left+window.scrollX;ge+oe>F&&(ge=L.right+window.scrollX-oe,ge<I&&(ge=I)),ge<I&&(ge=I),ee+R>H&&(ee=L.top+window.scrollY-R-me,ee<z&&(ee=Math.max(z,H-R))),ee<z&&(ee=z),ee+R>H&&(ee=Math.max(z,H-R)),p.top=ee,p.left=ge}function _(T){const E=qe(T);E&&E.remove(),r("remove",T),c.value=null}function w(T){const E=T.target,L=s.value,A=c.value;if(L){const me=i.value,I=d.get(L);if(me&&me.contains(E)||I&&I.contains(E))return;s.value=null}if(A){const me=a.value,I=g.get(A);if(me&&me.contains(E)||I&&I.contains(E))return;c.value=null}}function B(){s.value&&f(),c.value&&V(c.value)}e.onMounted(()=>{document.addEventListener("click",w),window.addEventListener("resize",B),window.addEventListener("scroll",B,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",w),window.removeEventListener("resize",B),window.removeEventListener("scroll",B,!0)});const{map:v}=Ke();function K(T){var I,F,z,H,oe,R;if(!T)return;const E=qe(T),L=y(T);if(!E&&!L)return;if(((I=L==null?void 0:L.extent)==null?void 0:I.length)===4&&((F=v.value)!=null&&F.fitBounds)){const ee=L.extent.map(ge=>Number(ge));if(ee.every(ge=>Number.isFinite(ge))){const[ge,we,S,Y]=ee;v.value.fitBounds([[ge,we],[S,Y]],{padding:40}),c.value=null;return}}const A=(H=(z=o.clientLayers)==null?void 0:z[T])==null?void 0:H.bounds;if(A&&((oe=v.value)!=null&&oe.fitBounds)){v.value.fitBounds(A,{padding:40}),c.value=null;return}(R=E==null?void 0:E.getSource)!=null&&R.call(E)&&(c.value=null)}const J=e.ref(null),O=e.ref(null);function ne(T,E){J.value=E,O.value=E,T.dataTransfer&&(T.dataTransfer.effectAllowed="move",T.dataTransfer.setData("text/plain",String(E)))}function de(T){O.value=T}function xe(T,E){if(T.preventDefault(),J.value===null||J.value===E){J.value=null,O.value=null;return}const A=[...o.selected],[me]=A.splice(J.value,1);A.splice(E,0,me),r("reorder",A),J.value=null,O.value=null}function se(){J.value=null,O.value=null}function te(T){return T==null||T===""?null:String(T)}function D(T,E){return!Array.isArray(T)||T.length===0?null:`${T.length} ${E}`}function Q(T){var ee,ge,we,S,Y,ue;const E=qe(T),L=y(T);if(!E&&!L)return[];const A=(L==null?void 0:L.name)||((ge=(ee=E==null?void 0:E.opts)==null?void 0:ee.layer)==null?void 0:ge.name)||null,me=(L==null?void 0:L.service)||((we=E==null?void 0:E.opts)==null?void 0:we.service)||null,I=(S=E==null?void 0:E.getSource)==null?void 0:S.call(E),F=I&&"tiles"in I?(Y=I.tiles)==null?void 0:Y[0]:(L==null?void 0:L.url)||null,z=(L==null?void 0:L.source_path)||null,H=(E==null?void 0:E.popup)||(L==null?void 0:L.popup),oe=(E==null?void 0:E.card)||(L==null?void 0:L.card),R=(L==null?void 0:L.filters)||((ue=E==null?void 0:E.opts)==null?void 0:ue.filters);return[{label:"Назва",value:te(A)},{label:"Сервіс",value:te(L!=null&&L.isClient?"Завантажені дані":me)},{label:"Посилання",value:te(F),breakLine:!0},{label:"Джерело",value:te(z),breakLine:!0},{label:"Popup",value:D(H,"полів")},{label:"Картка",value:D(oe,"полів")},{label:"Фільтри",value:D(R,"фільтрів")}]}return(T,E)=>(e.openBlock(),e.createElementBlock("div",pf,[e.createElementVNode("div",gf,[e.createElementVNode("button",{class:"selected-tab__add",onClick:E[0]||(E[0]=L=>r("select-layer"))},[...E[4]||(E[4]=[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",yf,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.selected,(L,A)=>{var me,I,F;return e.openBlock(),e.createElementBlock("div",{key:L,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":J.value===A,"selected-tab__item--over":O.value===A}]),draggable:"true",onDragstart:z=>ne(z,A),onDragover:e.withModifiers(z=>de(A),["prevent"]),onDrop:z=>xe(z,A),onDragend:se},[e.createElementVNode("div",bf,[e.createElementVNode("div",xf,[E[5]||(E[5]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:m[L]??!0,onChange:z=>b(L,z.target.checked)},null,40,kf),e.createElementVNode("span",wf,e.toDisplayString(((me=y(L))==null?void 0:me.name)||"Шар"),1)]),e.createElementVNode("div",_f,[k(L)?(e.openBlock(),e.createBlock($n,{key:0,"hide-trigger":"",count:(F=(I=y(L))==null?void 0:I.filters)==null?void 0:F.length,layer:y(L)},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createVNode(Bl,{"layer-id":L},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:z=>x(L,z),onClick:e.withModifiers(z=>N(L),["stop"])},[...E[6]||(E[6]=[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,Ef)])])],42,hf)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[c.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:a,class:"selected-tab__menu",style:e.normalizeStyle({top:p.top+"px",left:p.left+"px"})},[e.createElementVNode("div",Cf,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:E[1]||(E[1]=L=>K(c.value))},[...E[7]||(E[7]=[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(mf,{items:Q(c.value)},{default:e.withCtx(()=>[...E[8]||(E[8]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)])]),_:1},8,["items"]),c.value&&k(c.value)?(e.openBlock(),e.createElementBlock("button",{key:0,class:"selected-tab__menu-item",onClick:E[2]||(E[2]=L=>h(c.value))},[...E[9]||(E[9]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})],-1),e.createTextVNode(" Фільтр ",-1)])])):e.createCommentVNode("",!0),E[11]||(E[11]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:E[3]||(E[3]=L=>_(c.value))},[...E[10]||(E[10]=[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-a1c8f746"]]),Vf={class:"filter-tab"},Bf={key:0,class:"filter-tab__header"},$f={class:"filter-tab__title"},Sf={key:1,class:"filter-tab__content rounded-md"},vf={class:"filter-tab__scroll"},Lf={key:2,class:"filter-tab__empty"},Tf=Fe(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,s=e.computed(()=>{var u;return((u=r.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>s.value.length>0);function d(u){l("change",u.data)}return(u,c)=>(e.openBlock(),e.createElementBlock("div",Vf,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Bf,[e.createElementVNode("div",null,[e.createElementVNode("p",$f,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",Sf,[e.createElementVNode("div",vf,[e.createVNode(e.unref(o),{view:"vertical",schema:s.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:c[0]||(c[0]=p=>d(p))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",Lf,[...c[1]||(c[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),Af={class:"flex items-center justify-between mb-1"},Mf={class:"flex items-center gap-2"},Ff={class:"text-lg font-semibold text-gray-800"},Df={key:0},Pf={key:1,class:"block text-sm font-normal text-gray-500"},zf={class:"flex items-center gap-2"},If={class:"flex mb-4 border-b border-gray-200"},Rf={class:"map-catalog-widget__body"},Fl=Fe(e.defineComponent({__name:"MapCatalogWidget",setup(t){const{registerCatalogLayers:n,setCatalogSelectedLayerIds:o,resetMapCatalogLegend:r}=Ml(),l=He.useRoute(),s=He.useRouter();function i(){const R=l.query["catalog-tab"];return(Array.isArray(R)?R[0]:R)==="selected"?"selected":"catalog"}const d=e.ref(i()),u=e.ref({groups:[]}),c=e.ref([]),p=e.ref(""),{map:a}=Ke(),{clientLayers:g,isClientLayer:m,getClientLayer:y,unregisterClientLayer:k,clearClientLayers:h}=tr(),f=e.reactive({}),b=e.ref(null),x=e.ref(!1),N=e.ref(!1),{activateTemporaryLayer:V}=Vn(a);function _(R){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"activate",owner:"add-data",spec:R}}))}function w(R,ee){var Y,ue;const ge=g.value[R]||y(R),we=qe(R);if(!ee){(Y=we==null?void 0:we.setVisible)==null||Y.call(we,!1);return}if((ue=we==null?void 0:we.isMounted)!=null&&ue.call(we)){we.setVisible(!0);return}if(!(ge!=null&&ge.data))return;const S={id:ge.id,title:ge.name,type:"geojson",data:ge.data};V(S,{},"add-data"),_(S)}function B(R){const ee=g.value[R];if(ee){const ge=ee.bounds?[ee.bounds[0][0],ee.bounds[0][1],ee.bounds[1][0],ee.bounds[1][1]]:null;return{id:ee.id,name:ee.name,service:"geojson",isClient:!0,extent:ge}}return u.value.groups.map(ge=>ge.layers.find(we=>we.id===R)).find(Boolean)||null}function v(R){return typeof(R==null?void 0:R.name)=="string"&&R.name.trim().length>0}function K(){const R=b.value;if(!R)return;delete f[R];const ee=qe(R);ee!=null&&ee.setFilter&&ee.setFilter("")}function J(R,ee){const ge=qe(R);if(f[R]={...ee},!(ge!=null&&ge.setFilter))return;const we=Object.entries(ee).filter(([,S])=>S!=null&&S!=="").map(([S,Y])=>`${S}=${Y}`);ge.setFilter(we.join("|"))}function O(R){const ee=b.value;ee&&J(ee,R)}function ne(R){const ee=R.url;let ge=null;if(ee&&(ge=ee.startsWith("http")?ee:`${window.location.origin}${ee}`),!ge)return null;const we=(R.service||"").toString().toLowerCase(),S=R.count??null;return we&&we!=="vtile"?{service:we,count:S,source:{type:"raster",tiles:[ge],tileSize:256,minzoom:0,maxzoom:20}}:{service:we,count:S,source:{type:"vector",tiles:[ge],minzoom:0,maxzoom:14},layer:{style:R.style},card:R.card,popup:R.popup}}function de(R,ee,ge){var ue;const we=ge??B(R);if(!we)return;if(we.isClient){w(R,ee),ee&&!c.value.includes(R)&&c.value.push(R);return}const S=ne(we);if(!S)return;const Y=qe(we.id,S,a);if(Y)if(Y.setVisible(ee),ee){if(!c.value.includes(R)&&(c.value.push(R),(ue=a.value)!=null&&ue.getLayer(R)))try{a.value.moveLayer(R)}catch(ie){console.warn("Cannot move new layer",R,ie)}}else c.value=c.value.filter(ie=>ie!==R),b.value===R&&(K(),b.value=null)}function xe(){c.value.forEach(R=>{var ge;const ee=qe(R);ee&&ee.setVisible(!1),m(R)&&((ge=ee==null?void 0:ee.remove)==null||ge.call(ee),k(R))}),c.value=[],h()}function se(R){var ge;const ee=qe(R);(ge=ee==null?void 0:ee.remove)==null||ge.call(ee),m(R)&&(k(R),window.dispatchEvent(new CustomEvent(ao,{detail:{id:R}})),window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:{action:"deactivate",spec:{id:R},owner:"add-data"}}))),c.value=c.value.filter(we=>we!==R),b.value===R&&(K(),b.value=null)}function te(R){if(!(R instanceof CustomEvent))return;const{id:ee}=R.detail||{};!ee||typeof ee!="string"||(c.value.includes(ee)||c.value.push(ee),d.value="selected")}function D(R){c.value=[...R],e.nextTick(()=>{var S;if(!a.value)return;const ee=((S=a.value.getStyle())==null?void 0:S.layers)??[];let ge;const we=Y=>ee.filter(ue=>{var ie,ce;return(ue==null?void 0:ue.source)===Y||(ue==null?void 0:ue.id)===Y||((ce=(ie=ue==null?void 0:ue.id)==null?void 0:ie.startsWith)==null?void 0:ce.call(ie,`${Y}`))}).map(ue=>ue.id);for(let Y=R.length-1;Y>=0;Y-=1){const ue=R[Y],ie=we(ue);ie.length&&(ie.forEach(ce=>{var ye;if((ye=a.value)!=null&&ye.getLayer(ce))try{a.value.moveLayer(ce,ge)}catch(Z){console.warn("Cannot move layer",ce,Z)}}),ge=ie[0])}})}function Q(R){!R||!Array.isArray(R.filters)||R.filters.length===0||c.value.includes(R.id)&&(b.value=R.id,f[R.id]||(f[R.id]={}),d.value="filter")}function T(){d.value="catalog"}const E=e.computed(()=>b.value?B(b.value):null),L=e.computed(()=>{const R=b.value;return R?f[R]??{}:{}}),A=e.computed(()=>u.value.groups.reduce((R,ee)=>R+ee.layers.filter(v).length,0)),me=e.computed(()=>d.value==="selected"?"Вибрані шари":d.value==="filter"?"Фільтр шарів":"Каталог"),I=e.computed(()=>d.value==="selected"?c.value.length:d.value==="catalog"?A.value:null),F=e.computed(()=>{var R;return d.value==="filter"?((R=E.value)==null?void 0:R.name)??"":""});async function z(){const ee=await(await fetch("/api/gis-layer-list")).json(),ge=new Map;ee.forEach(Y=>{const ue=Y.group_id??"other";ge.has(ue)||ge.set(ue,{id:ue,name:Y.group_name||"Інші шари",layers:[]}),ge.get(ue).layers.push(Y)}),u.value={groups:Array.from(ge.values())},n(u.value.groups.flatMap(Y=>Y.layers)),o(c.value);const we=l.query.layers;if(!we)return;const S=Array.isArray(we)?we[0]:we;typeof S=="string"&&S.split(",").forEach(Y=>{const ue=Y.trim();if(!ue)return;const ie=B(ue);ie&&de(ue,!0,ie)})}e.watch(b,R=>{!R&&d.value==="filter"&&(d.value="catalog")}),e.watch(E,R=>{!R&&b.value&&(b.value=null)}),e.watch(c,R=>{const ee=R.filter(we=>!m(we));o(ee);const ge={...l.query};ee.length?ge.layers=ee.join(","):delete ge.layers,s.replace({query:ge}).catch(()=>{})},{deep:!0});function H(){x.value=!x.value}function oe(){N.value=window.innerWidth<=768}return e.onMounted(()=>{z(),oe(),N.value&&(x.value=!1),window.addEventListener("resize",oe),window.addEventListener(Bn,te)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",oe),window.removeEventListener(Bn,te),r()}),(R,ee)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",x.value&&(d.value==="selected"||I.value>1)?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",Af,[e.createElementVNode("div",Mf,[ee[4]||(ee[4]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",Ff,[e.createTextVNode(e.toDisplayString(me.value)+" ",1),I.value!==null?(e.openBlock(),e.createElementBlock("span",Df,"("+e.toDisplayString(I.value)+")",1)):e.createCommentVNode("",!0),F.value?(e.openBlock(),e.createElementBlock("span",Pf,e.toDisplayString(F.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",zf,[e.createElementVNode("button",{onClick:xe,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...ee[5]||(ee[5]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-d52c3963><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-d52c3963></path><path d="M21 3v5h-5" data-v-d52c3963></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-d52c3963></path><path d="M8 16H3v5" data-v-d52c3963></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:H,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":x.value})},[...ee[6]||(ee[6]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!x.value}])},[e.createElementVNode("div",If,[e.createElementVNode("button",{onClick:ee[0]||(ee[0]=ge=>d.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",d.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:ee[1]||(ee[1]=ge=>d.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",d.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Rf,[d.value==="catalog"?(e.openBlock(),e.createBlock(df,{key:0,class:"map-catalog-widget__scroll",catalog:u.value,selected:c.value,search:p.value,"onUpdate:search":ee[2]||(ee[2]=ge=>p.value=ge),onToggleLayer:de,onOpenFilter:Q},null,8,["catalog","selected","search"])):d.value==="selected"?(e.openBlock(),e.createBlock(Nf,{key:1,catalog:u.value,selected:c.value,"client-layers":e.unref(g),onToggleLayer:de,onSelectLayer:ee[3]||(ee[3]=ge=>d.value="catalog"),onReorder:D,onRemove:se},null,8,["catalog","selected","client-layers"])):(e.openBlock(),e.createBlock(Tf,{key:2,layer:E.value,value:L.value,onChange:O,onClose:T},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-d52c3963"]]),jf={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Of={class:"flex items-start justify-between gap-3 p-5 pb-3"},Uf={class:"inline-block text-xl font-semibold text-gray-800"},qf={key:0,class:"mt-1 text-sm text-gray-500"},Hf={class:"flex items-center gap-[6px]"},Wf={class:"px-5 pb-5 space-y-6"},Yf={key:0,class:"space-y-2"},Gf={class:"flex flex-wrap gap-4"},Zf=["value"],Kf={key:1,class:"text-sm text-gray-500"},Xf={key:2,class:"text-sm text-gray-500"},Jf={class:"text-4xl font-medium text-gray-800"},Qf={class:"space-y-[14px]"},em={class:"flex items-center gap-[10px] text-gray-600"},tm={class:"font-medium text-gray-700"},nm={class:"flex items-center justify-end text-end gap-3"},om={class:"font-medium text-gray-800"},rm={class:"min-w-[40px] font-medium text-[#3C3C4399]"},Dl=Fe(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),s=e.ref([]),i=e.ref(null),d=e.ref(null),u=e.ref(null),c=e.ref(null),p=e.ref(null),a=e.ref({}),g=e.ref(null);function m(se){return se&&JSON.parse(JSON.stringify(se))}const y=e.computed(()=>{const se=o.config.layer;if(typeof se!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const te=se.trim();if(!te)throw new Error("MapAttributeWidget: `layer` must be non-empty");return te}),k=e.computed(()=>{const{list:se,attribute:te}=o.config;if(Array.isArray(se)&&se.length)return se.map(D=>({id:(D==null?void 0:D.id)!=null?String(D.id).trim():"",text:(D==null?void 0:D.text)!=null&&String(D.text).trim()||null})).filter(D=>D.id.length);if(Array.isArray(te))return te.map(D=>D!=null?String(D).trim():"").filter(D=>D.length).map(D=>({id:D,text:null}));if(typeof te=="string"){const D=te.trim();if(!D)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:D,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>k.value.map(se=>({id:se.id,label:se.text||a.value[se.id]||se.id})));e.watch(k,se=>{if(!se.length){g.value=null,s.value=[];return}(!g.value||!se.some(te=>te.id===g.value))&&(g.value=se[0].id)},{immediate:!0});const f=e.computed(()=>{var se;return g.value||((se=k.value[0])==null?void 0:se.id)||null});e.watch(y,()=>{var se,te;(te=(se=d.value)==null?void 0:se.remove)==null||te.call(se),d.value=null,u.value=null,c.value=null,p.value=null,a.value={}});const b=e.computed(()=>{var se;return(se=c.value)!=null&&se.length?{id:y.value,name:u.value,filters:c.value}:null}),x=e.computed(()=>{var se,te;return((te=(se=b.value)==null?void 0:se.filters)==null?void 0:te.length)||0});async function N(se){var Q;const te=await fetch(`/api/gis-service/${encodeURIComponent(se)}`);if(!te.ok){let T="Не вдалося завантажити налаштування шару";try{const E=await te.json();T=((Q=E==null?void 0:E.message)==null?void 0:Q.error)||(E==null?void 0:E.message)||T}catch{}throw new Error(T)}const D=await te.json();return u.value=(D==null?void 0:D.name)||null,c.value=Array.isArray(D==null?void 0:D.filters)?D.filters:null,p.value=m((D==null?void 0:D.style)||{}),a.value=((D==null?void 0:D.attributes)||[]).reduce((T,E)=>{const L=typeof(E==null?void 0:E.name)=="string"?E.name.trim():"",A=typeof(E==null?void 0:E.ua)=="string"?E.ua.trim():"";return L&&(T[L]=A||L),T},{}),D}function V(se,te){let D=qe(se);if(!D){const Q=`${location.origin}/api/vtile/${se}/ua/{z}/{x}/{y}.vmt`;D=qe(se,{source:{type:"vector",tiles:[Q],minzoom:0,maxzoom:14},layer:{id:se,source:se,"source-layer":se,style:(te==null?void 0:te.style)||{}},card:te==null?void 0:te.card,popup:te==null?void 0:te.popup})}return d.value=D,D}async function _(se,te){var T;const D=`/api/gis-service/${encodeURIComponent(se)}/${encodeURIComponent(te)}`,Q=await fetch(D);if(!Q.ok){let E="Не вдалося отримати статистику";try{const L=await Q.json();E=((T=L==null?void 0:L.message)==null?void 0:T.error)||(L==null?void 0:L.message)||E}catch{}throw new Error(E)}return Q.json()}function w(se){const te=new Map;return se&&(se.rules||[]).forEach(Q=>{const T=(Q==null?void 0:Q.value)??(Q==null?void 0:Q.id);T!=null&&te.set(String(T),Q)}),te}function B(se,te,D,Q,T){if(typeof(te==null?void 0:te.color)=="string"&&te.color.trim())return te.color.trim();const E=o.config.colors||{};if(E[se])return E[se];const A=w(D==null?void 0:D.style).get(se);return typeof(A==null?void 0:A.color)=="string"&&A.color.trim()?A.color.trim():n[T%n.length]}function v(se,te,D,Q){var T;return(te==null?void 0:te.text)||(te==null?void 0:te.label)||(te==null?void 0:te.name)||(te==null?void 0:te[`${Q}_text`])||((T=w(D==null?void 0:D.style).get(se))==null?void 0:T.label)||se}function K(se,te,D,Q){if(!se)return;const T=m((te==null?void 0:te.style)||p.value)||{},E=Q.trim();if(!E)return;const L={...T.colors||{},...o.config.colors||{}};E===Q&&D.forEach(A=>{A.color.trim()&&(L[A.id]=A.color)}),se.setStyle({...T,type:T.type||"polygon",colorAttr:E,opacity:.8,colors:L})}async function J(){var E,L;s.value=[],i.value=null;const se=y.value,te=f.value;if(!te)return;l.value=!0;const D=await N(se);V(se,D);const Q=await _(se,te),T=Array.isArray(Q==null?void 0:Q.rows)?Q.rows.map((A,me)=>{const I=(A==null?void 0:A.id)??(A==null?void 0:A.value),F=I!=null?String(I):"";if(!F)return null;const z=v(F,A,D,te),H=Number((A==null?void 0:A.count)??0)||0,oe=B(F,A,D,te,me);return{id:F,label:z,count:H,color:oe}}).filter(Boolean):[];s.value=T,i.value=((E=Q==null?void 0:Q.field)==null?void 0:E.label)||((L=Q==null?void 0:Q.field)==null?void 0:L.name)||null,K(d.value,D,T,te),l.value=!1}e.watch(()=>[y.value,f.value],()=>{J()},{immediate:!0});const O=e.computed(()=>"Набори даних"),ne=e.computed(()=>s.value.reduce((se,te)=>se+te.count,0)),de=e.computed(()=>{var D;const se=f.value;return((D=h.value.find(Q=>Q.id===se))==null?void 0:D.label)||null||i.value||se||null});function xe(se){return ne.value?`${(se/ne.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var se,te;(te=(se=d.value)==null?void 0:se.remove)==null||te.call(se)}),(se,te)=>r.value?(e.openBlock(),e.createElementBlock("div",jf,[e.createElementVNode("div",Of,[e.createElementVNode("div",null,[e.createElementVNode("h2",Uf,e.toDisplayString(O.value),1),de.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",qf,e.toDisplayString(de.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Hf,[b.value?(e.openBlock(),e.createBlock($n,{key:0,class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",count:x.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:te[1]||(te[1]=D=>r.value=!1)},[...te[3]||(te[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",Wf,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",Yf,[e.createElementVNode("div",Gf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,D=>(e.openBlock(),e.createElementBlock("label",{key:D.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:D.id,"onUpdate:modelValue":te[2]||(te[2]=Q=>g.value=Q)},null,8,Zf),[[e.vModelRadio,g.value]]),e.createElementVNode("span",null,e.toDisplayString(D.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Kf,"Завантаження…")):s.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Jf,e.toDisplayString(ne.value),1),e.createElementVNode("ul",Qf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,D=>(e.openBlock(),e.createElementBlock("li",{key:D.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",em,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:D.color})},null,4),e.createElementVNode("span",tm,e.toDisplayString(D.label),1)]),e.createElementVNode("div",nm,[e.createElementVNode("span",om,e.toDisplayString(D.count),1),e.createElementVNode("span",rm,e.toDisplayString(xe(D.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Xf,"Дані відсутні"))])])):(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:te[0]||(te[0]=D=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),lm=["title"],am={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"},sm=["onClick"],im=["placeholder"],cm={class:"absolute inset-y-0 right-2 flex items-center gap-1"},dm={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},um={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},fm={class:"max-h-[60vh] overflow-auto"},mm={key:0,class:"divide-y divide-gray-100"},pm=["onClick"],gm={key:1,class:"px-3 py-3 text-xs text-gray-500"},Pl="mapSearchAddressHistory",uo="search-marker-source",ir="search-marker-layer",Sn="search-geom-source",vn="search-geom-layer-fill",fo="search-geom-layer-line",ym=12,hm="https://data.softpro.ua/api-user/gis-url-proxy",bm="https://data.softpro.ua/api/parcel",xm="https://nominatim.openstreetmap.org/search",zl=Fe(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(M,W){if(typeof document>"u")return;let X=null;const be=8,Ve=()=>{const ae=String((W==null?void 0:W.value)??"");if(!ae)return;X=document.createElement("div"),X.textContent=ae,Object.assign(X.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(X);const re=M.getBoundingClientRect();X.style.left=`${re.right+window.scrollX+be}px`,X.style.top=`${re.top+window.scrollY+(re.height-X.offsetHeight)/2}px`},j=()=>{X!=null&&X.parentNode&&X.parentNode.removeChild(X),X=null};M.addEventListener("mouseenter",Ve),M.addEventListener("mouseleave",j),Object.assign(M,{tooltipRightHandlers:{show:Ve,hide:j}})},unmounted(M){if(typeof document>"u")return;const W=M.tooltipRightHandlers;W&&(M.removeEventListener("mouseenter",W.show),M.removeEventListener("mouseleave",W.hide))}},o=t,r=Ke(),l=e.getCurrentInstance();function s(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function i(){var be,Ve,j;const M=(be=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:be.$settings,W=(Ve=M==null?void 0:M.map)==null?void 0:Ve.searchViewbox;if(W)return W;const X=s();return(j=X==null?void 0:X.map)==null?void 0:j.searchViewbox}function d(){var Ve,j,ae;const M=(Ve=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:Ve.$settings,W=(j=M==null?void 0:M.map)==null?void 0:j.addressSuggest;if(typeof W=="string"&&W.trim())return W.trim();const X=s(),be=(ae=X==null?void 0:X.map)==null?void 0:ae.addressSuggest;if(typeof be=="string"&&be.trim())return be.trim()}const u=!!d(),c=!!i(),p=e.computed(()=>{const M=["xy","parcel"];return u&&M.push("address"),c&&M.push("nominatim"),M}),a=e.computed(()=>{var X,be;const M=p.value,W=(be=(X=o.config)==null?void 0:X.tools)==null?void 0:be.filter(Ve=>M.includes(Ve));return W&&W.length?W:M}),g=e.computed(()=>{var M,W;return((W=(M=o.config)==null?void 0:M.placeholder)==null?void 0:W.trim())||"Пошук…"}),m=e.ref(a.value[0]);e.watch(a,M=>{M.includes(m.value)||(m.value=M[0])});const y=e.ref(""),k=e.ref(!1),h=e.ref(null),f=e.ref(null),b=e.ref(null),x=e.ref(null),N=e.ref([]),V=e.ref(null),_=e.ref(!1),w=e.ref([]),B=e.computed(()=>(m.value==="address"||m.value==="nominatim")&&_.value),v=e.computed(()=>{var M;return((M=o.config)==null?void 0:M.addressDebounceMs)??1e3});let K=null;const J=e.ref(!1),O=e.computed(()=>y.value.trim().length>0?N.value:w.value),ne=e.computed(()=>y.value.trim().length?`Знайдено ${N.value.length}`:"Історія пошуку"),de=e.computed(()=>y.value.trim().length?"Нічого не знайдено":"Історія порожня");function xe(){var M,W;if(typeof window>"u")return[];try{const X=(W=(M=window.localStorage)==null?void 0:M.getItem)==null?void 0:W.call(M,Pl);if(!X)return[];const be=JSON.parse(X);return Array.isArray(be)?be:[]}catch{return[]}}function se(M){var W,X;typeof window>"u"||(X=(W=window.localStorage)==null?void 0:W.setItem)==null||X.call(W,Pl,JSON.stringify(M))}function te(M){const X=[M,...w.value.filter(be=>be.id!==M.id)].slice(0,10);w.value=X,se(X)}function D(){var W;const M=(W=r.map)==null?void 0:W.value;M&&(M.getLayer(ir)&&M.removeLayer(ir),M.getSource(uo)&&M.removeSource(uo))}function Q(){var W;const M=(W=r.map)==null?void 0:W.value;M&&(M.getLayer(vn)&&M.removeLayer(vn),M.getLayer(fo)&&M.removeLayer(fo),M.getSource(Sn)&&M.removeSource(Sn))}function T(M){var Ve,j,ae,re;if(!((Ve=o.config)!=null&&Ve.showMarker)||!M)return;const W=(j=r.map)==null?void 0:j.value;if(!W)return;Q(),L();const X={type:"Feature",geometry:M,properties:{}};W.addSource(Sn,{type:"geojson",data:X});const be=((ae=o.config)==null?void 0:ae.geometryColor)||((re=o.config)==null?void 0:re.markerColor)||"#3B82F6";W.addLayer({id:vn,type:"fill",source:Sn,paint:{"fill-color":be,"fill-opacity":.3}}),W.addLayer({id:fo,type:"line",source:Sn,paint:{"line-color":be,"line-width":1,"line-opacity":1}}),A(W)}let E=null;function L(){E&&(cancelAnimationFrame(E),E=null)}function A(M){const X=performance.now();function be(Ve){if(!M.getLayer(vn))return;const ae=(Ve-X)%1200/1200,re=Math.sin(ae*Math.PI),Ne=.2+re*.3,Se=1+re*1;M.setPaintProperty(vn,"fill-opacity",Ne),M.setPaintProperty(fo,"line-width",Se),E=requestAnimationFrame(be)}E=requestAnimationFrame(be)}function me(M,W){var Ve,j,ae;if(!((Ve=o.config)!=null&&Ve.showMarker))return;D(),Q();const X=(j=r.map)==null?void 0:j.value;if(!X)return;if(W){T(W);return}const be=((ae=o.config)==null?void 0:ae.markerColor)||"#3B82F6";X.addSource(uo,{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:[M.lng,M.lat]},properties:{}}}),X.addLayer({id:ir,type:"circle",source:uo,paint:{"circle-radius":7,"circle-color":be,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}})}const I=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function F(){var j;if(!x.value)return;const M=x.value.getBoundingClientRect(),W=(j=b.value)==null?void 0:j.getBoundingClientRect(),X=(W==null?void 0:W.width)??M.width,be=((W==null?void 0:W.left)??M.left)+window.scrollX,Ve=M.bottom+window.scrollY+ym;I.left=`${be}px`,I.top=`${Ve}px`,I.width=`${X}px`,I.display="block"}const z=()=>{B.value&&F()};function H(){K&&(clearTimeout(K),K=null)}e.watch(m,()=>{y.value="",k.value=!1,N.value=[],_.value=!1,H(),J.value=!1,D(),Q()}),e.watch(B,M=>{M?e.nextTick(()=>{F()}):I.display="none"}),e.watch(y,M=>{if(m.value!=="address"&&m.value!=="nominatim"){N.value=[],H();return}if(!M.trim()){N.value=[],_.value=w.value.length>0,H();return}H(),_.value=!0,K=window.setTimeout(()=>{Re(M).catch(W=>{const X=(W==null?void 0:W.message)||"Помилка пошуку адреси";Ce.notify({type:"error",title:"Пошук адреси",message:X})})},v.value)});function oe(M){var be;const W=[];f.value&&W.push(f.value),M instanceof HTMLElement&&W.push(M);const X=(be=h.value)==null?void 0:be.querySelectorAll("li");X==null||X.forEach(Ve=>{W.push(Ve)}),W.forEach(Ve=>{Ve.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function R(M){k.value&&oe(M.target),k.value=!k.value}function ee(M,W){oe(W==null?void 0:W.target),m.value=M}function ge(){y.value="",N.value=[],_.value=!1,J.value=!1,D(),Q()}function we(M){const W=M.target;if(k.value){const X=h.value;X&&!X.contains(W)&&(oe(W),k.value=!1)}if(B.value){const X=V.value,be=x.value;X&&!X.contains(W)&&(!be||!be.contains(W))&&(_.value=!1)}}e.onMounted(()=>{w.value=xe(),window.addEventListener("click",we,!0),window.addEventListener("scroll",z,!0),window.addEventListener("resize",z)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",we,!0),window.removeEventListener("scroll",z,!0),window.removeEventListener("resize",z),H(),D(),Q()});function S(M){return M==="xy"?"Координати":M==="parcel"?"Кадастр":M==="nominatim"?"Nominatim":"Адресний"}function Y(M){switch(M){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 ue(M){const W=M.replace(/[,]+/g," ").trim();if(!W)return null;const X=W.split(/\s+/).filter(Boolean);if(X.length<2)return null;const be=X.slice(0,2).map(Number);if(!be.every(Oe=>Number.isFinite(Oe)))return null;let[Ve,j]=be,ae=Ve,re=j;const Ne=Oe=>Math.abs(Oe)<=90,Se=Oe=>Math.abs(Oe)<=180;if(!Ne(ae)||!Se(re))if(Ne(re)&&Se(ae))ae=j,re=Ve;else return null;return{lat:ae,lng:re}}function ie(M){return((M==null?void 0:M.items)||[]).map((X,be)=>{var Ve,j,ae;return{id:String((X==null?void 0:X.id)??be),title:(X==null?void 0:X.title)||((Ve=X==null?void 0:X.address)==null?void 0:Ve.label)||"Знайдений обʼєкт",lat:Number((j=X==null?void 0:X.position)==null?void 0:j.lat),lng:Number((ae=X==null?void 0:X.position)==null?void 0:ae.lng)}})}function ce(M){const W=(M==null?void 0:M.result)||(M==null?void 0:M.data)||M;if(!W)return[];const X=W.geom_centroid;if(!X||!Array.isArray(X.coordinates))return[];const[be,Ve]=X.coordinates;return!Number.isFinite(Ve)||!Number.isFinite(be)?[]:[{id:"parcel",title:W.cadnum||W.cad_num||"Земельна ділянка",lat:Ve,lng:be,geom:W.geom||null}]}function ye(M){return(Array.isArray(M==null?void 0:M.features)?M.features:[]).map((X,be)=>{var Oe,Qe,Xe;const Ve=(Oe=X==null?void 0:X.geometry)==null?void 0:Oe.coordinates,j=Number(Ve==null?void 0:Ve[0]),ae=Number(Ve==null?void 0:Ve[1]);if(!Number.isFinite(ae)||!Number.isFinite(j))return null;const re=(X==null?void 0:X.properties)||{},Ne=((Qe=re==null?void 0:re.geocoding)==null?void 0:Qe.label)||(re==null?void 0:re.display_name)||(re==null?void 0:re.label)||"Адреса";return{id:String(((Xe=re==null?void 0:re.geocoding)==null?void 0:Xe.place_id)||(re==null?void 0:re.place_id)||be),title:Ne,lat:ae,lng:j}}).filter(X=>!!X)}function Z(M){return Number.isFinite(M.lat)&&Number.isFinite(M.lng)}function G(M){const W=Number(M);return Number.isFinite(W)?W:null}function ke(M){var Ve,j,ae,re,Ne,Se;const W=G(M.lng)??G(M.lon)??G(M.longitude)??G(M.x),X=G(M.lat)??G(M.latitude)??G(M.y);if(W!=null&&X!=null)return{lat:X,lng:W};const be=((Ve=M==null?void 0:M.geometry)==null?void 0:Ve.coordinates)??((j=M==null?void 0:M.geom_centroid)==null?void 0:j.coordinates)??((ae=M==null?void 0:M.centroid)==null?void 0:ae.coordinates)??((Ne=(re=M==null?void 0:M.geojson)==null?void 0:re.geometry)==null?void 0:Ne.coordinates)??((Se=M==null?void 0:M.geom)==null?void 0:Se.coordinates);if(Array.isArray(be)&&be.length>=2){const Oe=G(be[0]),Qe=G(be[1]);if(Oe!=null&&Qe!=null)return{lat:Qe,lng:Oe}}return null}function ve(M){return(Array.isArray(M==null?void 0:M.data)?M.data:[]).map((X,be)=>{const Ve=ke(X),j=String(X.text??X.title??X.label??X.name??X.address??X.display_name??X.id??"Адреса"),ae=String(X.id??X.code??X.value??be);return Ve?{id:ae,title:j,...Ve}:{id:ae,title:j}}).filter(X=>!!(X!=null&&X.title))}function Ae(M){const W=d();if(!W)return null;if(W.includes(":name"))return W.replace(":name",encodeURIComponent(M));try{const X=new URL(W,window.location.origin);return M.trim()&&X.searchParams.set("q",M),X.toString()}catch{return W}}async function $e(M){const W=Ae(M);if(!W)return[];const X=await fetch(W);if(!X.ok)throw new Error(`HTTP ${X.status}`);const be=await X.json();return ve(be)}async function Je(M){const W=new URL(xm);W.searchParams.set("format","geojson"),W.searchParams.set("q",M),W.searchParams.set("addressdetails","1"),W.searchParams.set("bounded","1");const X=i();X&&W.searchParams.set("viewbox",X);const be=await fetch(W.toString());if(!be.ok)throw new Error(`HTTP ${be.status}`);const Ve=await be.json();return ye(Ve)}async function Re(M){if(N.value=[],H(),m.value==="address"){if(!d()){Ce.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const be=await $e(M);if(!be.length){Ce.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=be;return}const W=await Je(M);if(!W.length){Ce.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}N.value=W}async function at(M){if(Z(M)){P(M),te(M);return}Ce.notify({type:"warning",title:"Пошук адреси",message:"Геометрія для обраної адреси відсутня"})}function et(){m.value!=="address"&&m.value!=="nominatim"||y.value.trim().length||w.value.length&&(_.value=!0,e.nextTick(()=>{F()}))}function nt(M){const X=M.replace(/\s+/g,"").split(":");if(console.log(X),X.length!==4)return!1;const be=[10,2,3,4];return X.every((Ve,j)=>Ve.length===be[j]&&/^\d+$/.test(Ve))}function P(M){var X,be;const W=((X=o.config)==null?void 0:X.zoom)??17;(be=r.flyTo)==null||be.call(r,{center:[M.lng,M.lat],zoom:W}),me(M,M.geom),J.value=!0}async function pe(){const M=y.value.trim();if(M){if(m.value==="xy"){const W=ue(M);if(!W){Ce.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}P(W);return}if(m.value==="address"||m.value==="nominatim"){try{await Re(M)}catch(W){const X=(W==null?void 0:W.message)||"Помилка пошуку адреси";Ce.notify({type:"error",title:"Пошук адреси",message:X})}return}try{const W=new URL(m.value==="here"?hm:bm);if(m.value==="here")W.searchParams.set("searchtext",M);else{if(!nt(M)){Ce.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}W.searchParams.set("cadnum",M)}const X=await fetch(W.toString());if(!X.ok)throw new Error(`HTTP ${X.status}`);const be=await X.json(),Ve=m.value==="here"?ie(be):ce(be);if(!Ve.length)Ce.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const j=Ve[0];P(j)}}catch(W){const X=(W==null?void 0:W.message)||"Помилка пошуку";Ce.notify({type:"error",title:"Пошук",message:X})}}}return(M,W)=>(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(pe,["prevent"])},[a.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:h,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:R},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:f,class:"block w-full truncate",title:S(m.value)},[e.createTextVNode(e.toDisplayString(S(m.value)),1)],8,lm)),[[n,Y(m.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":k.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...W[3]||(W[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),k.value?(e.openBlock(),e.createElementBlock("div",am,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,X=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:X,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:be=>ee(X,be)},[e.createTextVNode(e.toDisplayString(S(X)),1)],8,sm)),[[n,Y(X)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:x,class:"relative flex-1 min-w-[140px]"},[m.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(fl.VsInputMask),{key:0,modelValue:y.value,"onUpdate:modelValue":W[0]||(W[0]=X=>y.value=X),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",J.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":W[1]||(W[1]=X=>y.value=X),placeholder:g.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",J.value?"!pr-14":"!pr-8"]),onFocus:et},null,42,im)),[[e.vModelText,y.value,void 0,{trim:!0}]]),e.createElementVNode("div",cm,[J.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:ge},[...W[4]||(W[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),W[5]||(W[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))]),B.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:V,class:"vs-select__options mt-1 bg-white border border-gray-300 rounded-lg shadow-lg text-sm text-gray-900 z-50",style:e.normalizeStyle(I)},[e.createElementVNode("div",dm,[e.createElementVNode("span",um,e.toDisplayString(ne.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:W[2]||(W[2]=X=>_.value=!1)}," ✕ ")]),e.createElementVNode("div",fm,[O.value.length?(e.openBlock(),e.createElementBlock("ul",mm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.value,X=>(e.openBlock(),e.createElementBlock("li",{key:X.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:be=>at(X)},e.toDisplayString(X.title),9,pm))),128))])):(e.openBlock(),e.createElementBlock("div",gm,e.toDisplayString(de.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-c278e4f1"]]),km="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",wm="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",_m=Fe(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Ke(),s=e.ref(null),i=e.ref(null),d=e.ref(null),u=e.ref(null);let c=null;function p(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function a(_){if(Array.from(document.styleSheets).some(v=>{var K;return(K=v==null?void 0:v.href)==null?void 0:K.includes(_)}))return;const B=document.createElement("link");B.rel="stylesheet",B.href=_,document.head.appendChild(B)}function g(_){return new Promise((w,B)=>{const v=Array.from(document.scripts).find(J=>J.src===_);if(v){if(v._loaded)return w();v.addEventListener("load",()=>w()),v.addEventListener("error",()=>B(new Error(`Failed ${_}`)));return}const K=document.createElement("script");K.src=_,K.async=!0,K.onload=()=>{K._loaded=!0,w()},K.onerror=()=>B(new Error(`Failed ${_}`)),document.head.appendChild(K)})}function m(){var w,B,v;const _=window;return _.MapboxExportControl||((w=_.mapboxgl)==null?void 0:w.MapboxExportControl)||((B=_.mapboxglExport)==null?void 0:B.MapboxExportControl)||((v=_.mapboxglExport)==null?void 0:v.default)||null}function y(){const _=document.createElementNS("http://www.w3.org/2000/svg","svg");return _.setAttribute("xmlns","http://www.w3.org/2000/svg"),_.setAttribute("viewBox","0 0 24 24"),_.setAttribute("width","18"),_.setAttribute("height","18"),_.setAttribute("fill","none"),_.setAttribute("stroke","currentColor"),_.setAttribute("stroke-width","2"),_.setAttribute("stroke-linecap","round"),_.setAttribute("stroke-linejoin","round"),_.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((B,v)=>{const K=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(B).forEach(([J,O])=>{K.setAttribute(J,O)}),_.appendChild(K)}),_}function k(){const _=document.createElement("button");_.id="print-btn",_.type="button",_.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),_.setAttribute("aria-label","Друк карти");const w=y(),B=document.createElement("span");return B.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(" "),B.textContent="Друк карти",B.setAttribute("aria-hidden","true"),_.appendChild(w),_.appendChild(B),_.addEventListener("click",v=>{v.stopPropagation(),h()}),u.value=_,_}function h(){if(!d.value)return;d.value.style.display==="block"?b():f()}function f(){var _,w,B;d.value&&(d.value.style.display="block",(_=u.value)==null||_.classList.add("scale-105","shadow-xl"),(w=i.value)==null||w.toggleCrosshair(!0),(B=i.value)==null||B.togglePrintableArea(!0),document.addEventListener("click",x))}function b(){var _,w,B;d.value&&(d.value.style.display="none",(_=u.value)==null||_.classList.remove("scale-105","shadow-xl"),(w=i.value)==null||w.toggleCrosshair(!1),(B=i.value)==null||B.togglePrintableArea(!1),document.removeEventListener("click",x))}function x(_){const w=s.value;w&&(_.target&&w.contains(_.target)||b())}function N(_){const w={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};_.querySelectorAll("label, option").forEach(v=>{var J;const K=(J=v.textContent)==null?void 0:J.trim();K&&w[K]&&(v.textContent=w[K])});const B=_.querySelector("button");B&&(B.textContent="Друкувати")}function V(_){const w=_.querySelector(".mapboxgl-export-list");if(!w||!s.value)return;d.value=w;const B=_.querySelector("button");if(B&&(B.style.display="none"),_.style.display="none",!u.value){const K=k();s.value.appendChild(K)}w.style.display="none";const v="_printControlBound";if(!w[v]){const K=J=>J.stopPropagation();w.addEventListener("click",K),w.addEventListener("mousedown",K),w[v]=!0}s.value.appendChild(w),N(w)}return e.onMounted(async()=>{await(o==null?void 0:o());const _=n.value;if(!_)return;a(km),p();try{await g(wm)}catch(v){console.warn("[MapPrintControl] load error",v);return}const w=m();if(!w)return;const B=new w({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=B,typeof B.onAdd=="function"){const v=B.onAdd.bind(B);B.onAdd=K=>{const J=v(K);return setTimeout(()=>J&&V(J),50),J}}r?r(B,"top-right"):_.addControl(B,"top-right"),c=v=>{v.key==="Escape"&&b()},document.addEventListener("keyup",c)}),e.onBeforeUnmount(()=>{b(),c&&(document.removeEventListener("keyup",c),c=null);const _=n.value;if(i.value)try{l?l(i.value):_==null||_.removeControl(i.value)}catch{}i.value=null}),(_,w)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),Em=["aria-label"],Cm={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"},Nm=e.defineComponent({__name:"MapCompareControl",props:{hasCompareOptions:{type:Boolean},isCompareOpen:{type:Boolean}},emits:["toggle"],setup(t){return(n,o)=>t.hasCompareOptions?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",t.isCompareOpen?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок",onClick:o[0]||(o[0]=e.withModifiers(r=>n.$emit("toggle"),["stop"]))},[e.createElementVNode("span",Cm,e.toDisplayString(t.isCompareOpen?"Вимкнути порівняння":"Порівняння підложок"),1),e.createVNode(e.unref(he.Columns2),{class:"w-4 h-4"})],10,Em)):e.createCommentVNode("",!0)}}),Vm={class:"map-center-control"},Bm=["aria-label"],$m={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Yt=Fe(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Ke(),l=e.ref(null),s=e.ref(null),i=e.ref(null),d=e.ref(null),u=Wo(),c=e.computed(()=>{var b;return((b=u.value)==null?void 0:b.map)??null});function p(b){if(Array.isArray(b)&&b.length>=2){const[x,N]=b.slice(0,2).map(V=>Number(V));return Number.isNaN(x)||Number.isNaN(N)?null:[x,N]}if(b&&typeof b=="object"){const x=b,N=x.lng??x.lon??x.long??x.x,V=x.lat??x.y;if(N!=null&&V!=null){const _=Number(N),w=Number(V);if(!Number.isNaN(_)&&!Number.isNaN(w))return[_,w]}}if(typeof b=="string"){const x=b.split(",").map(N=>Number(N.trim()));if(x.length>=2&&x.every(N=>!Number.isNaN(N)))return[x[0],x[1]]}return null}function a(b){const x=p(b);x&&(l.value=x)}function g(b){const x=Number(b);Number.isNaN(x)||(s.value=x)}e.watch(()=>n.center,b=>a(b),{immediate:!0}),e.watch(()=>n.zoom,b=>g(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{i.value=p(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const x=Number(b);d.value=Number.isNaN(x)?null:x},{immediate:!0}),e.watch(()=>{var b;return(b=c.value)==null?void 0:b.center},b=>{a(b)},{immediate:!0}),e.watch(()=>{var b;return(b=c.value)==null?void 0:b.zoom},b=>{g(b)},{immediate:!0});const m=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),y=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),k=e.computed(()=>!!i.value);e.onMounted(async()=>{await(r==null?void 0:r());const b=o.value;if(b){if(!l.value){const x=b.getCenter();l.value=[x.lng,x.lat]}s.value==null&&(s.value=b.getZoom())}});function h(){const b=o.value;if(!b)return;const x=l.value||(()=>{const V=b.getCenter();return[V.lng,V.lat]})(),N=s.value??b.getZoom();b.flyTo({center:x,zoom:N})}function f(){const b=o.value;if(!b||!i.value)return;const x=d.value??s.value??b.getZoom();b.flyTo({center:i.value,zoom:x})}return(b,x)=>(e.openBlock(),e.createElementBlock("div",Vm,[k.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(h,["stop"])},[x[0]||(x[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(he.House),{class:"w-4 h-4"})])),k.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":y.value,onClick:e.withModifiers(f,["stop"])},[e.createElementVNode("span",$m,e.toDisplayString(m.value),1),e.createVNode(e.unref(he.MapPin),{class:"w-4 h-4"})],8,Bm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),Sm={class:"map-navigation-control"},vm=["disabled"],Lm=["disabled"],Tm=["disabled"],Am=Fe(e.defineComponent({__name:"MapNavigationControl",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1),l=e.ref(0),s=e.ref(0),i=e.computed(()=>({transform:`scale(${(1+s.value/70).toFixed(5)}) rotateZ(0deg) rotateX(${s.value}deg) rotateZ(${l.value}deg)`}));function d(){var g,m;const a=n.value;a&&(l.value=Number(((g=a.getBearing)==null?void 0:g.call(a))??0),s.value=Number(((m=a.getPitch)==null?void 0:m.call(a))??0))}e.onMounted(async()=>{var g,m,y;await(o==null?void 0:o());const a=n.value;r.value=!!a,d(),(g=a==null?void 0:a.on)==null||g.call(a,"rotate",d),(m=a==null?void 0:a.on)==null||m.call(a,"pitch",d),(y=a==null?void 0:a.on)==null||y.call(a,"load",d)}),e.onBeforeUnmount(()=>{var g,m,y;const a=n.value;(g=a==null?void 0:a.off)==null||g.call(a,"rotate",d),(m=a==null?void 0:a.off)==null||m.call(a,"pitch",d),(y=a==null?void 0:a.off)==null||y.call(a,"load",d)});function u(){const a=n.value;a!=null&&a.zoomIn&&a.zoomIn()}function c(){const a=n.value;a!=null&&a.zoomOut&&a.zoomOut()}function p(){const a=n.value;a!=null&&a.easeTo&&a.easeTo({bearing:0,pitch:0})}return(a,g)=>(e.openBlock(),e.createElementBlock("div",Sm,[e.createElementVNode("button",{type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",disabled:!r.value,"aria-label":"Zoom in",title:"Zoom in",onClick:e.withModifiers(u,["stop"])},[g[0]||(g[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(he.Plus),{class:"w-4 h-4","stroke-width":2.25})],8,vm),e.createElementVNode("button",{type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",disabled:!r.value,"aria-label":"Zoom out",title:"Zoom out",onClick:e.withModifiers(c,["stop"])},[g[1]||(g[1]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Мінус зум",-1)),e.createVNode(e.unref(he.Minus),{class:"w-4 h-4","stroke-width":2.25})],8,Lm),e.createElementVNode("button",{type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",disabled:!r.value,"aria-label":"Reset north",title:"Reset north",onClick:e.withModifiers(p,["stop"])},[g[2]||(g[2]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Компас",-1)),e.createVNode(e.unref(he.Navigation2),{class:"w-4 h-4","stroke-width":2.25,"aria-hidden":"true",style:e.normalizeStyle(i.value)},null,8,["style"])],8,Tm)]))}}),[["__scopeId","data-v-14b11a99"]]),Mm={class:"cursor-coordinates"},Fm={class:"cursor-coordinates__text"},Dm=Fe(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Mm,[e.createElementVNode("span",Fm,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),Pm={class:"minimap__wrapper"},mo="minimap-viewport",zm="minimap-viewport-layer",Im=Fe(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var x,N,V,_;const n=t,o=((N=(x=e.getCurrentInstance())==null?void 0:x.appContext.config.globalProperties)==null?void 0:N.$settings)||null,r=Wt((V=o==null?void 0:o.map)==null?void 0:V.center)||[30,50],l=e.ref(null),s=e.shallowRef(null),i=(_=n.options)==null?void 0:_.active,d=e.ref(i===void 0?!1:!!i);function u(w,B){return typeof w=="number"&&Number.isFinite(w)?w:B}const c=e.computed(()=>{var J,O;const w=(J=n.options)==null?void 0:J.width,B=(O=n.options)==null?void 0:O.height,v=u(n.width??w,210),K=u(n.height??B,150);return{width:`${v}px`,height:`${K}px`}});function p(){var B,v;const w=(v=(B=n.mapContext)==null?void 0:B.map)==null?void 0:v.value;if(!w||typeof w.getStyle!="function")return null;try{const K=w.getStyle();return K?JSON.parse(JSON.stringify(K)):null}catch{return null}}let a=null;function g(){var J;if(typeof window>"u"||s.value||!l.value)return;const w=p(),B=r,v={container:l.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:B,zoom:((J=n.options)==null?void 0:J.zoom)??3,interactive:!1,attributionControl:!1},K={...v,...n.options??{}};K.container=v.container,s.value=new maplibregl.Map(K),s.value.on("load",()=>{y(),h()})}function m(){if(!s.value)return;const w=p();w&&(s.value.once("styledata",()=>{y(),h()}),s.value.setStyle(w))}function y(){if(s.value){if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{y(),h()});return}s.value.getSource(mo)||(s.value.addSource(mo,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),s.value.addLayer({id:zm,type:"fill",source:mo,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function k(){d.value=!d.value,d.value&&e.nextTick(()=>{var w;return(w=s.value)==null?void 0:w.resize()})}function h(){var ne,de;const w=(de=(ne=n.mapContext)==null?void 0:ne.map)==null?void 0:de.value;if(!s.value||!w||!w.getBounds)return;if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{h()});return}const B=w.getBounds();if(!B)return;const v=B.getNorthEast(),K=B.getSouthWest();if(!v||!K)return;const J=[[K.lng,v.lat],[v.lng,v.lat],[v.lng,K.lat],[K.lng,K.lat],[K.lng,v.lat]],O=s.value.getSource(mo);if(!O){y();return}O.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[J]},properties:{}})}function f(){var v;const w=n.mapContext,B=(v=w==null?void 0:w.map)==null?void 0:v.value;!(w!=null&&w.on)||!B||(a==null||a(),a=w.on("move",h),h())}async function b(){const w=n.mapContext;if(w){if(typeof w.ready=="function")try{await w.ready()}catch{return}f()}}return e.onMounted(()=>{g(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var w,B;return(B=(w=n.mapContext)==null?void 0:w.map)==null?void 0:B.value},()=>{s.value&&(m(),b())}),e.watch(c,()=>{s.value&&e.nextTick(()=>{var w;return(w=s.value)==null?void 0:w.resize()})}),e.watch(()=>n.options,()=>{var B;a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null);const w=(B=n.options)==null?void 0:B.active;typeof w=="boolean"&&(d.value=w),e.nextTick(()=>{g(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{a==null||a(),a=null,s.value&&(s.value.remove(),s.value=null)}),(w,B)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":d.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:k},[e.createVNode(e.unref(he.ArrowUpLeft))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",Pm,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(c.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,d.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),Rm={key:0,class:"pointer-events-none absolute inset-0 z-[90]"},jm={class:"pointer-events-auto absolute right-[54px] top-[103px] z-[131] flex items-start gap-2"},Om={class:"compare-panel min-w-[220px] overflow-hidden rounded-[10px]"},Um={class:"max-h-[260px] overflow-auto pb-1"},qm=["onClick"],Hm={class:"mt-1 border-t border-slate-200 p-2"},Wm="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.css",Il="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-compare@0.5.0/dist/maplibre-gl-compare.min.js",gt="compare-base",yt="compare-base-overlay",Ym=Fe(e.defineComponent({__name:"MapCompare",props:{compareBasemaps:{},isCompareOpen:{type:Boolean},selectedBasemapId:{}},emits:["close"],setup(t,{emit:n}){const o=t,r=n,{map:l,ready:s}=Ke(),i=e.ref(null),d=e.ref(null),u=e.ref(null),c=e.ref(!1),p=e.ref(null);p.__layerStoreMode="isolated";const a=e.ref(null),g=e.ref(!1),m=e.ref(!1),y=e.ref(!1);let k=null,h=null,f=null,b=!1,x="";const N=new Map,V=e.computed(()=>o.compareBasemaps||[]);let _=null;function w(){var F;if(typeof window>"u"||(F=window.maplibregl)!=null&&F.Compare)return Promise.resolve();if(!Array.from(document.styleSheets).some(z=>{var H;return!!((H=z==null?void 0:z.href)!=null&&H.includes("maplibre-gl-compare.min.css"))})){const z=document.createElement("link");z.rel="stylesheet",z.href=Wm,document.head.appendChild(z)}return _||(_=new Promise((z,H)=>{var ee;if((ee=window.maplibregl)!=null&&ee.Compare){z();return}const oe=Array.from(document.querySelectorAll("script")).find(ge=>ge.src===Il);if(oe){oe.addEventListener("load",()=>z(),{once:!0}),oe.addEventListener("error",()=>H(new Error("Failed to load map compare script")),{once:!0});return}const R=document.createElement("script");R.src=Il,R.async=!0,R.onload=()=>z(),R.onerror=()=>{R.remove(),H(new Error("Failed to load map compare script"))},document.head.appendChild(R)}),_)}function B(){var I,F,z;k==null||k(),k=null,h==null||h(),h=null,f==null||f(),f=null,N.forEach(H=>{var oe;return(oe=H==null?void 0:H.remove)==null?void 0:oe.call(H)}),N.clear(),m.value=!1,y.value=!1,x="",(I=a.value)==null||I.remove(),a.value=null,(z=(F=p.value)==null?void 0:F.remove)==null||z.call(F),p.value=null,g.value=!1}function v(I){try{return JSON.stringify(I??null)}catch{return""}}function K(I,F){var H;if(!I||!F)return;(Array.isArray((H=I.listImages)==null?void 0:H.call(I))?I.listImages():[]).forEach(oe=>{var ee,ge,we;if(!oe||(ee=F.hasImage)!=null&&ee.call(F,oe))return;const R=(ge=I.getImage)==null?void 0:ge.call(I,oe);if(R)try{(we=F.addImage)==null||we.call(F,oe,R)}catch{}})}function J(I){var F;try{return((F=I==null?void 0:I.getStyle)==null?void 0:F.call(I))??null}catch{return null}}function O(I){if(I==null)return I;try{return JSON.parse(JSON.stringify(I))}catch{return I}}function ne(I){if(!I)return null;try{if(typeof I.serialize=="function"){const F=I.serialize();if((F==null?void 0:F.data)!=null)return F.data;if((F==null?void 0:F.tiles)!=null)return F.tiles}}catch{}return I._data!=null?I._data:I.data!=null?I.data:null}function de(I,F){const z=J(I),H=(z==null?void 0:z.sources)||{};Object.entries(H).forEach(([oe,R])=>{var we,S;const ee=(we=I==null?void 0:I.getSource)==null?void 0:we.call(I,oe),ge=(S=F==null?void 0:F.getSource)==null?void 0:S.call(F,oe);if(!(!ee||!ge)&&(R==null?void 0:R.type)==="geojson"&&typeof ge.setData=="function"){const Y=ne(ee);Y!=null&&ge.setData(O(Y))}})}function xe(I,F){return!I||["base","base-overlay",gt,yt].includes(I)?!1:!!(F!=null&&F.opts)}function se(){const I=p;if(!(I!=null&&I.value)||!g.value)return;const F=qe(void 0,void 0,l);Object.entries(F).forEach(([z,H])=>{var ee;if(!xe(z,H))return;const oe=O(H.opts)||{},R=qe(z,void 0,I);if(!R){const ge=qe(z,oe,I);N.set(z,ge);return}N.set(z,R),v(R.opts)!==v(oe)&&((ee=R.refresh)==null||ee.call(R,oe))})}function te(I){var F;try{const z=(F=I==null?void 0:I.getStyle)==null?void 0:F.call(I);return z?JSON.parse(JSON.stringify(z)):null}catch{return null}}function D(I,F){const z=te(I)||{version:8,sources:{},layers:[]};if(z.sources||(z.sources={}),z.layers||(z.layers=[]),F!=null&&F.url){z.sources[gt]={type:"raster",tiles:[F.url],tileSize:256};const H=z.layers.find(oe=>oe.id===gt);H?(H.type="raster",H.source=gt,H.layout||(H.layout={}),H.layout.visibility="visible"):z.layers.unshift({id:gt,type:"raster",source:gt})}if(F!=null&&F.overlayUrl){z.sources[yt]={type:"raster",tiles:[F.overlayUrl],tileSize:256};const H=z.layers.find(oe=>oe.id===yt);if(H)H.type="raster",H.source=yt,H.layout||(H.layout={}),H.layout.visibility="visible";else{const oe=z.layers.findIndex(ee=>ee.id===gt),R=oe>=0?oe+1:0;z.layers.splice(R,0,{id:yt,type:"raster",source:yt})}}return z}function Q(I){var we,S,Y,ue,ie,ce,ye,Z,G,ke,ve,Ae,$e,Je,Re;if(!p.value)return;const F=p.value,z=(we=F.getSource)==null?void 0:we.call(F,gt),H=(S=F.getSource)==null?void 0:S.call(F,yt),oe=!!((Y=F.getLayer)!=null&&Y.call(F,gt)),R=!!((ue=F.getLayer)!=null&&ue.call(F,yt)),ee=J(F),ge=(ce=(ie=ee==null?void 0:ee.layers)==null?void 0:ie[0])==null?void 0:ce.id;if(!(I!=null&&I.url)){oe&&((ye=F.setLayoutProperty)==null||ye.call(F,gt,"visibility","none")),R&&((Z=F.setLayoutProperty)==null||Z.call(F,yt,"visibility","none"));return}oe&&((G=F.setLayoutProperty)==null||G.call(F,gt,"visibility","visible")),z!=null&&z.setTiles?z.setTiles([I.url]):z||((ke=F.addSource)==null||ke.call(F,gt,{type:"raster",tiles:[I.url],tileSize:256}),(ve=F.addLayer)==null||ve.call(F,{id:gt,type:"raster",source:gt},ge)),I.overlayUrl?(R&&((Ae=F.setLayoutProperty)==null||Ae.call(F,yt,"visibility","visible")),H!=null&&H.setTiles?H.setTiles([I.overlayUrl]):H||(($e=F.addSource)==null||$e.call(F,yt,{type:"raster",tiles:[I.overlayUrl],tileSize:256}),(Je=F.addLayer)==null||Je.call(F,{id:yt,type:"raster",source:yt}))):R&&((Re=F.setLayoutProperty)==null||Re.call(F,yt,"visibility","none")),(!z||typeof z.setTiles!="function")&&F.setStyle(D(J(F),I))}function T(){if(!p.value||!g.value)return;const I=V.value.find(F=>F.id===u.value);Q(I)}async function E(){const I=l.value,F=p.value;if(!I||!F||!g.value)return;const z=V.value.find(ee=>ee.id===u.value),H=J(I),oe=D(H,z),R=v(oe);!R||R===x||(x=R,F.setStyle(oe),K(I,F),de(I,F),y.value=!1,await new Promise(ee=>{var ge,we;if((ge=F.isStyleLoaded)!=null&&ge.call(F)){ee();return}(we=F.once)==null||we.call(F,"load",()=>ee())}),se())}function L(){y.value=!0,!b&&(b=!0,queueMicrotask(()=>{b=!1,E()}))}function A(){y.value&&E()}async function me(){var S,Y,ue,ie,ce,ye,Z,G;if(!o.isCompareOpen||a.value||p.value||(await(s==null?void 0:s()),await e.nextTick(),!l.value||!i.value||!d.value))return;await w();const I=l.value,F=V.value.find(ke=>ke.id===u.value),z=D({},F),H=(S=I.getCenter)==null?void 0:S.call(I),oe=(Y=I.getZoom)==null?void 0:Y.call(I),R=((ue=I.getBearing)==null?void 0:ue.call(I))??0,ee=((ie=I.getPitch)==null?void 0:ie.call(I))??0;p.value=new maplibregl.Map({container:d.value,style:z,center:H,zoom:oe,bearing:R,pitch:ee,attributionControl:!1,interactive:!1}),g.value=!1,await new Promise(ke=>{var ve,Ae;if(!p.value){ke();return}if((Ae=(ve=p.value).isStyleLoaded)!=null&&Ae.call(ve)){g.value=!0,A(),ke();return}p.value.once("load",()=>{g.value=!0,A(),ke()})});const ge=(ce=window.maplibregl)==null?void 0:ce.Compare;if(!ge){B(),r("close");return}a.value=new ge(I,p.value,"#comparison-container",{mousemove:!1});const we=()=>{o.isCompareOpen&&L()};I.on("styledata",we),I.on("sourcedata",we),I.on("idle",we),k=()=>I.off("styledata",we),h=()=>I.off("sourcedata",we),f=()=>I.off("idle",we),await E(),K(I,p.value),de(I,p.value),(ye=I.resize)==null||ye.call(I),(G=(Z=p.value).resize)==null||G.call(Z)}return e.watch(()=>o.isCompareOpen,async I=>{if(I){await me();return}B()}),e.watch(()=>l.value,async(I,F)=>{!o.isCompareOpen||!I||I===F||(B(),await me())}),e.watch(()=>[o.isCompareOpen,V.value,o.selectedBasemapId],([I,F,z])=>{var oe;if(!I||u.value&&F.some(R=>R.id===u.value))return;const H=F.find(R=>R.id!==z);u.value=(H==null?void 0:H.id)||((oe=F[0])==null?void 0:oe.id)||null},{immediate:!0,deep:!0}),e.watch(()=>u.value,()=>{var I,F,z,H;if(p.value){if((F=(I=p.value).isStyleLoaded)!=null&&F.call(I)){g.value=!0,T();return}(H=(z=p.value).once)==null||H.call(z,"load",()=>{g.value=!0,T()})}}),e.onBeforeUnmount(()=>{B()}),(I,F)=>t.isCompareOpen?(e.openBlock(),e.createElementBlock("div",Rm,[e.createElementVNode("div",jm,[e.createElementVNode("div",Om,[e.createElementVNode("button",{type:"button",class:"compare-panel__head",onClick:F[0]||(F[0]=z=>c.value=!c.value)},[F[3]||(F[3]=e.createStaticVNode('<span class="compare-panel__head-left" data-v-06bedfe8><svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-70" data-v-06bedfe8><path d="m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z" data-v-06bedfe8></path><path d="m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65" data-v-06bedfe8></path><path d="m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65" data-v-06bedfe8></path></svg><span class="text-[12px] font-semibold text-slate-900" data-v-06bedfe8>Підложки для порівняння</span></span>',1)),(e.openBlock(),e.createElementBlock("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:e.normalizeClass(["compare-panel__chevron shrink-0 text-slate-400",c.value?"compare-panel__chevron--collapsed":""])},[...F[2]||(F[2]=[e.createElementVNode("path",{d:"m6 9 6 6 6-6"},null,-1)])],2))]),e.withDirectives(e.createElementVNode("div",null,[F[5]||(F[5]=e.createElementVNode("div",{class:"px-3 pb-1 pt-2 text-[10px] font-bold uppercase tracking-[0.07em] text-slate-400"}," Базова карта ",-1)),e.createElementVNode("div",Um,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,z=>(e.openBlock(),e.createElementBlock("button",{key:z.id,type:"button",class:e.normalizeClass(["compare-panel__item",z.id===u.value?"compare-panel__item--active":""]),onClick:H=>u.value=z.id},[e.createElementVNode("span",{class:e.normalizeClass(["compare-panel__radio",z.id===u.value?"compare-panel__radio--active":""])},null,2),e.createElementVNode("span",{class:e.normalizeClass(["text-[12px]",z.id===u.value?"font-semibold text-slate-900":"font-normal text-slate-600"])},e.toDisplayString(z.title),3)],10,qm))),128))]),e.createElementVNode("div",Hm,[e.createElementVNode("button",{type:"button",class:"flex h-[30px] w-full items-center justify-center gap-1.5 rounded-[7px] border border-slate-200 bg-white text-[12px] font-medium text-slate-700 transition-colors hover:bg-slate-50",onClick:F[1]||(F[1]=z=>r("close"))},[...F[4]||(F[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1),e.createTextVNode(" Закрити ",-1)])])])],512),[[e.vShow,!c.value]])])]),e.createElementVNode("div",{id:"comparison-container",ref_key:"containerRef",ref:i,class:"absolute inset-0 overflow-hidden z-[90]"},[e.createElementVNode("div",{id:"after",ref_key:"afterRef",ref:d,class:"map-compare"},null,512)],512)])):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-06bedfe8"]]);function cr(t){return[t.lng,t.lat]}function Rl(t){if(!Array.isArray(t)||t.length<2)return null;const n=Number(t[0]),o=Number(t[1]);return Number.isFinite(n)&&Number.isFinite(o)?[n,o]:null}function dr(t){if(!t||typeof t!="object")return null;const n=t;if(n.type==="LineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Rl(r)).filter(r=>!!r);return o.length>=2?{type:"LineString",coordinates:o}:null}if(n.type==="MultiLineString"&&Array.isArray(n.coordinates)){const o=n.coordinates.map(r=>Array.isArray(r)?r.map(l=>Rl(l)).filter(l=>!!l):[]).filter(r=>r.length>=2);return o.length?o.length===1?{type:"LineString",coordinates:o[0]}:{type:"MultiLineString",coordinates:o}:null}return null}function Gm(t){return t?t.type==="LineString"?t.coordinates:t.coordinates.flatMap(n=>n):[]}function Zm(t,n){for(const o of n){const r=t[t.length-1];r&&r[0]===o[0]&&r[1]===o[1]||t.push(o)}}function Km(t){const n=[];for(const o of t)Zm(n,Gm(o.geometry));return n.length>=2?{type:"LineString",coordinates:n}:null}function ur(t){const n=Math.max(0,t);return n>=1e3?`${(n/1e3).toFixed(1)} км`:`${Math.round(n)} м`}function jl(t){const n=Math.max(0,Math.round(t));if(n<60)return`${n} с`;const o=Math.floor(n/60);if(o<60)return`${o} хв`;const r=Math.floor(o/60),l=o%60;return l>0?`${r} год ${l} хв`:`${r} год`}function Xm(t){const n=Number(t);return Number.isFinite(n)&&n>0?n:null}function Jm(t){const n=Number((t==null?void 0:t.totalDistanceMeters)??0);if(Number.isFinite(n)&&n>0)return ur(n);const o=(t==null?void 0:t.distance)??"",r=Number(o);if(Number.isFinite(r)&&r>0)return ur(r);const l=String(o).trim();return l||""}function Qm(t){const n=Number((t==null?void 0:t.time_for_route)??0);if(Number.isFinite(n)&&n>0)return jl(n);const o=(t==null?void 0:t.time_for_route)??"",r=String(o).trim();return r||""}function ep(t){const n=Xm(t);return n!=null?jl(n):""}function tp(t){const n=Number(t);return Number.isFinite(n)&&n>0?ur(n):String(t??"").trim()}function np(t){return t?{title:t.title,distanceText:"",durationText:"",icon:t.icon,tone:t.tone,geometry:null}:null}function po(t){const n=t.toLowerCase();return n.includes("left")||n.includes("slight left")||n.includes("sharp left")}function go(t){const n=t.toLowerCase();return n.includes("right")||n.includes("slight right")||n.includes("sharp right")}function op(t,n){const o=t.toLowerCase(),r=n.toLowerCase();return o.includes("depart")?"depart":o.includes("arriv")?"arrive":o.includes("roundabout")||r.includes("uturn")||r.includes("u-turn")?"roundabout":po(r)||o.includes("left")?"left":go(r)||o.includes("right")?"right":o.includes("straight")||r.includes("straight")||o.includes("merge")||o.includes("new name")?"straight":"unknown"}function rp(t){const n=t.maneuver&&typeof t.maneuver=="object"?t.maneuver:{},o=String(n.type??t.type??"").trim(),r=String(n.modifier??t.modifier??"").trim(),l=String(t.name??t.ref??"").trim(),s=String(t.text??t.instruction??t.description??"").trim();if(s)return{title:s,icon:op(o,r),tone:o.toLowerCase().includes("arriv")?"end":o.toLowerCase().includes("depart")?"start":"neutral"};const i=o.toLowerCase(),d=r.toLowerCase(),u=l?` на ${l}`:"",c=l?` по ${l}`:"",p=po(d)?"ліворуч":go(d)?"праворуч":"",a=p?` ${p}`:"";return i.includes("depart")?{title:p?l?`Виїдьте${a}${u}`:`Виїдьте${a}`:l?`Виїдьте${u}`:"Почніть рух",icon:"depart",tone:"start"}:i.includes("arriv")?{title:"Ви прибули до пункту призначення",icon:"arrive",tone:"end"}:i.includes("roundabout")?{title:l?`На кільці${c}`:"На кільці",icon:"roundabout",tone:"neutral"}:d.includes("uturn")||d.includes("u-turn")?{title:l?`Розверніться${u}`:"Розверніться",icon:"roundabout",tone:"neutral"}:i.includes("merge")?{title:l?`Злийтеся${c}`:"Злийтеся з потоком",icon:"straight",tone:"neutral"}:i.includes("fork")?po(d)?{title:l?`На розвилці тримайтеся ліворуч${u}`:"На розвилці тримайтеся ліворуч",icon:"left",tone:"neutral"}:go(d)?{title:l?`На розвилці тримайтеся праворуч${u}`:"На розвилці тримайтеся праворуч",icon:"right",tone:"neutral"}:{title:l?`На розвилці${u}`:"На розвилці",icon:"straight",tone:"neutral"}:i.includes("new name")?{title:l?`Продовжуйте по ${l}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:i.includes("end of road")?po(d)?{title:l?`У кінці дороги поверніть ліворуч${u}`:"У кінці дороги поверніть ліворуч",icon:"left",tone:"neutral"}:go(d)?{title:l?`У кінці дороги поверніть праворуч${u}`:"У кінці дороги поверніть праворуч",icon:"right",tone:"neutral"}:{title:l?`У кінці дороги${u}`:"У кінці дороги",icon:"straight",tone:"neutral"}:i.includes("turn")&&d.includes("left")?{title:l?`Поверніть ліворуч${u}`:"Поверніть ліворуч",icon:"left",tone:"neutral"}:i.includes("turn")&&d.includes("right")?{title:l?`Поверніть праворуч${u}`:"Поверніть праворуч",icon:"right",tone:"neutral"}:i.includes("straight")||d.includes("straight")?{title:l?`Продовжуйте${c}`:"Продовжуйте прямо",icon:"straight",tone:"neutral"}:{title:l?`Рухайтесь${c}`:"Рухайтесь далі",icon:"unknown",tone:"neutral"}}function lp(t){return(Array.isArray(t==null?void 0:t.instructions)?t.instructions:Array.isArray(t==null?void 0:t.instruction)?t.instruction:Array.isArray(t==null?void 0:t.legs)?t.legs.flatMap(o=>{const r=o&&typeof o=="object"?o:null;return Array.isArray(r==null?void 0:r.steps)?r.steps:[]}):[]).map(o=>{if(!o||typeof o!="object")return null;const r=o,l=r.maneuver&&typeof r.maneuver=="object"?r.maneuver:{},s=rp(r),i=dr(r.geometry??null);return{title:s.title,distanceText:tp(r.distance??r.length??l.distance??0),durationText:ep(r.duration??r.time??r.duration_seconds??r.durationSeconds??0),icon:s.icon,tone:s.tone,geometry:i}}).filter(o=>!!o)}function ap(t,n){const o=cr(t[0].coords),r=cr(t[t.length-1].coords),l=new URLSearchParams({from:`${o[0]},${o[1]}`,to:`${r[0]},${r[1]}`}),s=String((n==null?void 0:n.mode)??"").trim();if(s&&l.set("mode",s),t.length>2){const i=t.slice(1,-1).map(d=>{const[u,c]=cr(d.coords);return`${u},${c}`}).join(";");i&&l.set("via",i)}return l}async function sp(t,n){const o=await fetch(`/api/routes?${ap(t,n).toString()}`,{credentials:"include"});if(!o.ok)throw new Error(`Route API returned ${o.status}`);return await o.json()}async function ip(t,n){if(t.length<2)return{geometry:null,source:"api",distanceText:"",durationText:"",durationSeconds:null,instructions:[],note:null};const o=await sp(t,n),r=Array.isArray(o)?o[0]:Array.isArray(o==null?void 0:o.routes)?o.routes[0]:o!=null&&o.route&&typeof o.route=="object"?o.route:o,l=lp(r),s=Number((r==null?void 0:r.time_for_route)??(o==null?void 0:o.time_for_route)??0),i=Km(l)??dr((r==null?void 0:r.geom)??(r==null?void 0:r.geom_simplify)??(r==null?void 0:r.geometry)??null)??dr((o==null?void 0:o.geom)??(o==null?void 0:o.geom_simplify)??(o==null?void 0:o.geometry)??null);return{geometry:i,source:"api",distanceText:Jm(r),durationText:Qm(r),durationSeconds:Number.isFinite(s)?s:null,startInstruction:np(l[0]),instructions:l,note:i?null:"Сервер маршруту не повернув геометрію."}}const cp={class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex-shrink-0 overflow-hidden pointer-events-auto w-72"},dp={class:"px-4 pt-4 pb-3"},up={class:"flex items-center justify-between gap-2 mb-3"},fp={class:"flex items-center gap-2 min-w-0"},mp={class:"w-7 h-7 bg-blue-500 rounded-xl flex items-center justify-center flex-shrink-0"},pp={class:"flex items-center gap-1.5 flex-shrink-0"},gp={key:0,class:"flex items-center gap-1 px-2 py-1 bg-blue-50 rounded-lg border border-blue-100 animate-fade-in"},yp={class:"text-xs font-bold text-blue-700 tabular-nums"},hp={class:"relative flex flex-col gap-2"},bp={class:"relative"},xp={class:"flex items-center justify-center relative z-10"},kp=["disabled"],wp={class:"relative"},_p={class:"flex items-stretch gap-0.5 rounded-xl border p-0.5 bg-gray-100 border-gray-200"},Ep=["aria-label","aria-pressed","onClick"],Cp={class:"text-[9px] font-semibold leading-none tabular-nums text-blue-500"},Np=["aria-label","aria-pressed"],Vp={key:0,class:"text-xs text-gray-500"},Bp={key:1,class:"text-xs text-rose-600"},$p={key:2,class:"text-xs text-amber-700"},Sp={class:"px-4 pb-4 flex gap-2"},vp=["disabled"],Lp={key:0,class:"bg-white/95 backdrop-blur-xl rounded-2xl shadow-[0_20px_50px_rgba(15,23,42,0.18)] border border-white/60 flex min-h-0 h-auto max-h-[250px] flex-[1_1_auto] flex-col overflow-hidden pointer-events-auto animate-slide-up"},Tp={class:"flex items-center justify-between px-4 py-2.5 border-b border-gray-100 flex-shrink-0"},Ap={class:"text-xs text-gray-400"},Mp={class:"min-h-0 flex-1 overflow-y-auto overflow-x-hidden pb-1 scrollbar-thin"},Fp={class:"min-h-0 py-1 animate-fade-in"},Dp={class:"flex flex-col gap-0.5"},Pp=["onMouseenter"],zp={class:"flex-1 min-w-0"},Ip={class:"flex items-start justify-between gap-2"},Rp={class:"text-sm leading-snug font-medium text-gray-700"},jp={key:0,class:"text-xs flex-shrink-0 font-semibold mt-0.5 text-gray-400"},Op={key:0,class:"text-xs mt-0.5 text-gray-400"},Up=e.defineComponent({name:"RoutePanel",__name:"index",emits:["close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"car",label:"Автомобіль",icon:he.Car,factor:1},{id:"walk",label:"Пішохід",icon:he.PersonStanding,factor:6.5},{id:"bike",label:"Велосипед",icon:he.Bike,factor:2.2},{id:"transit",label:"Громадський транспорт",icon:he.Bus,factor:1.8},{id:"flight",label:"Авіарейс",icon:he.PlaneTakeoff,factor:.45}],s=e.ref([]),i=e.ref(""),d=e.ref(""),u=e.ref("car"),c=e.ref(!1),p=e.ref(""),a=e.ref(""),g=e.ref(""),m=e.ref(null),y=e.ref(null),k=e.ref([]),h=e.ref(null),f=e.ref(null),b=e.ref(null),x=e.ref(null),N=e.ref(null);let V=null;const _=e.computed(()=>{if(N.value!==null)return{height:`${N.value}px`,maxHeight:`${N.value}px`}});let w=1,B=0;const v=e.computed(()=>s.value.length>=2),K=e.computed(()=>{const ie=[];return y.value&&ie.push(y.value),ie.push(...k.value),ie}),J=e.computed(()=>K.value.length);function O(ie){return ie?`${ie.coords.lng.toFixed(6)}, ${ie.coords.lat.toFixed(6)}`:""}function ne(){i.value=O(s.value[0]),d.value=O(s.value[1])}function de(){return s.value.map(ie=>({id:ie.id,coords:{...ie.coords}}))}function xe(){r("points-change",de())}function se(ie){r("instruction-hover",ie)}function te(ie){r("route-change",ie?{geometry:ie.geometry,source:ie.source,distanceText:ie.distanceText,durationText:ie.durationText,note:ie.note}:null)}function D({loading:ie=!1}={}){f.value=null,a.value="",g.value="",m.value=null,y.value=null,k.value=[],h.value=null,p.value="",c.value=ie,b.value=null,se(null),te(null)}function Q(){const ie=w;return w+=1,ie}function T(ie){const ce=ie.replace(/[^\d.,+\-\s]/g," ").match(/-?\d+(?:\.\d+)?/g);if(!ce||ce.length<2)return null;const ye=Number(ce[0]),Z=Number(ce[1]);return!Number.isFinite(ye)||!Number.isFinite(Z)||Math.abs(Z)>90||Math.abs(ye)>180?null:{lat:Z,lng:ye}}function E(ie,ce){var Z,G;const ye=s.value.slice(0,2);ie===0?ye[0]={id:((Z=ye[0])==null?void 0:Z.id)??Q(),coords:{lat:ce.lat,lng:ce.lng}}:ye[0]?ye[1]={id:((G=ye[1])==null?void 0:G.id)??Q(),coords:{lat:ce.lat,lng:ce.lng}}:ye[0]={id:Q(),coords:{lat:ce.lat,lng:ce.lng}},s.value=ye.filter(Boolean).slice(0,2),ne(),xe(),D()}function L(ie){s.value.length===0?s.value=[{id:Q(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value.length===1?s.value=[s.value[0],{id:Q(),coords:{lat:ie.lat,lng:ie.lng}}]:s.value=[s.value[0],{id:s.value[1].id,coords:{lat:ie.lat,lng:ie.lng}}],ne(),xe(),D()}function A(ie){ie===0?s.value=s.value.length>1?[s.value[1]]:[]:s.value=s.value.slice(0,1),ne(),xe(),D()}function me(){s.value.length<2||(s.value=[s.value[1],s.value[0]],ne(),xe(),D())}function I(ie){const ce=ie===0?i.value:d.value,ye=T(ce);if(!ye){ne();return}E(ie,ye)}async function F(){if(s.value.length<2){D();return}const ie=++B;c.value=!0,p.value="";const ce=de();try{const ye=await ip(ce,{mode:u.value});if(ie!==B)return;f.value=ye.geometry,a.value=ye.distanceText,g.value=ye.durationText,m.value=ye.durationSeconds,y.value=ye.startInstruction,k.value=ye.instructions,h.value=ye.note,c.value=!1,b.value=null,se(null),te(ye)}catch(ye){if(ie!==B)return;c.value=!1,p.value=ye instanceof Error?ye.message:"Не вдалося побудувати маршрут",h.value=null,f.value=null,y.value=null,b.value=null,se(null),te(null)}}const z=ie=>{const ce=(ie??[]).map(ye=>({id:ye.id??Q(),coords:{...ye.coords}}));s.value=ce.slice(0,2),w=s.value.length?Math.max(...s.value.map(ye=>ye.id))+1:1,ne(),xe(),D()};function H(ie){var Z;const ce=m.value;if(!ce||!Number.isFinite(ce))return ie==="car"&&g.value||"—";const ye=((Z=l.find(G=>G.id===ie))==null?void 0:Z.factor)??1;return we(ce*ye)}function oe(ie){switch(ie){case"depart":return he.Navigation;case"arrive":return he.MapPin;case"left":return he.ArrowLeft;case"right":return he.ArrowRight;case"straight":return he.ArrowUp;case"roundabout":return he.RotateCcw;default:return he.Route}}function R(ie){return ie==="start"?{icon:"bg-emerald-50 text-emerald-600"}:ie==="end"?{icon:"bg-red-50 text-red-500"}:{icon:"bg-gray-100 text-gray-500"}}function ee(ie){var ce;b.value=ie,se(((ce=k.value[ie-1])==null?void 0:ce.geometry)??null)}function ge(){b.value=null,se(null)}function we(ie){const ce=Math.max(0,Math.round(ie));if(ce<60)return`${ce} с`;const ye=Math.floor(ce/60);if(ye<60)return`${ye} хв`;const Z=Math.floor(ye/60),G=ye%60;return G>0?`${Z} год ${G} хв`:`${Z} год`}function S(){Y(),r("close")}function Y(){s.value=[],w=1,B+=1,ne(),D(),xe()}async function ue(){await e.nextTick();const ie=x.value,ce=ie==null?void 0:ie.closest(".map-view-root");if(!ie||!ce)return;const ye=ce.getBoundingClientRect(),Z=ie.getBoundingClientRect();N.value=Math.max(0,Math.floor(ye.bottom-Z.top-8))}return e.onMounted(()=>{var ce;ne(),xe(),ue();const ie=(ce=x.value)==null?void 0:ce.closest(".map-view-root");ie&&typeof ResizeObserver<"u"&&(V=new ResizeObserver(ue),V.observe(ie))}),e.onBeforeUnmount(()=>{V==null||V.disconnect(),V=null}),e.watch(()=>s.value,()=>{ne(),s.value.length<2&&(B+=1)},{deep:!0}),e.watch(()=>K.value.length,()=>ue()),e.watch(u,()=>{s.value.length>=2&&(B+=1,D())}),n({addPoint:L,setPoints:z,clearPoints:Y}),(ie,ce)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"panelWrapRef",ref:x,class:"route-panel-wrap absolute top-0 right-full mr-2 z-20 flex h-auto max-h-none min-h-0 flex-col gap-2 overflow-hidden pointer-events-none animate-slide-up",style:e.normalizeStyle(_.value)},[e.createElementVNode("div",cp,[e.createElementVNode("div",dp,[e.createElementVNode("div",up,[e.createElementVNode("div",fp,[e.createElementVNode("div",mp,[e.createVNode(e.unref(he.Route),{size:14,"stroke-width":2,class:"text-white"})]),ce[8]||(ce[8]=e.createElementVNode("div",{class:"flex-1 min-w-0"},[e.createElementVNode("h2",{class:"text-sm font-bold text-gray-900 leading-none"},"Маршрутизатор"),e.createElementVNode("p",{class:"text-xs text-gray-400 mt-0.5"},"Введіть координати")],-1))]),e.createElementVNode("div",pp,[a.value?(e.openBlock(),e.createElementBlock("div",gp,[e.createVNode(e.unref(he.Map),{size:10,"stroke-width":2,class:"text-blue-500"}),e.createElementVNode("span",yp,e.toDisplayString(a.value),1)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-7 h-7 rounded-xl flex items-center justify-center text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 flex-shrink-0","aria-label":"Закрити",onClick:S},[e.createVNode(e.unref(he.X),{size:14,"stroke-width":2})])])]),e.createElementVNode("div",hp,[e.createElementVNode("div",bp,[ce[9]||(ce[9]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-emerald-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":ce[0]||(ce[0]=ye=>i.value=ye),type:"text",placeholder:"30.5234, 50.4501",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:ce[1]||(ce[1]=ye=>I(0)),onKeyup:ce[2]||(ce[2]=e.withKeys(e.withModifiers(ye=>I(0),["prevent"]),["enter"]))},null,544),[[e.vModelText,i.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку A",onClick:ce[3]||(ce[3]=ye=>A(0))},[e.createVNode(e.unref(he.X),{size:11,"stroke-width":2})]),ce[10]||(ce[10]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"A",-1))]),e.createElementVNode("div",xp,[ce[11]||(ce[11]=e.createElementVNode("div",{class:"absolute w-full h-px bg-gray-100"},null,-1)),e.createElementVNode("button",{type:"button",class:"relative w-8 h-8 rounded-full border flex items-center justify-center transition-all disabled:opacity-40 hover:shadow-sm bg-white border-gray-200 text-gray-500 hover:text-blue-500 hover:border-blue-300",title:"Поміняти місцями",disabled:s.value.length<2,onClick:me},[e.createVNode(e.unref(he.ArrowUpDown),{size:14,"stroke-width":2})],8,kp)]),e.createElementVNode("div",wp,[ce[12]||(ce[12]=e.createElementVNode("div",{class:"absolute left-3 top-1/2 -translate-y-1/2 w-2.5 h-2.5 rounded-full bg-red-500 ring-2 ring-white z-10"},null,-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":ce[4]||(ce[4]=ye=>d.value=ye),type:"text",placeholder:"30.4947, 50.4271",class:"w-full px-3 py-2 text-sm pl-9 pr-8 rounded-xl border border-gray-200 bg-white text-gray-800 placeholder-gray-400 focus:border-blue-500 focus:outline-none transition-all disabled:opacity-50",onBlur:ce[5]||(ce[5]=ye=>I(1)),onKeyup:ce[6]||(ce[6]=e.withKeys(e.withModifiers(ye=>I(1),["prevent"]),["enter"]))},null,544),[[e.vModelText,d.value]]),e.createElementVNode("button",{type:"button",class:"absolute right-2 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center transition-all hover:scale-110 text-gray-400 hover:text-gray-600 hover:bg-gray-100","aria-label":"Очистити точку B",onClick:ce[7]||(ce[7]=ye=>A(1))},[e.createVNode(e.unref(he.X),{size:11,"stroke-width":2})]),ce[13]||(ce[13]=e.createElementVNode("span",{class:"absolute left-8 -top-2 px-1 text-xs font-semibold text-gray-500 bg-white"},"B",-1))]),e.createElementVNode("div",_p,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,ye=>e.createElementVNode("div",{key:ye.id,class:"relative flex-1 flex flex-col justify-center"},[ye.id==="car"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button","aria-label":ye.label,"aria-pressed":u.value===ye.id,class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 bg-white text-blue-600 shadow-sm border border-blue-200",onClick:Z=>u.value=ye.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ye.icon),{size:16,"stroke-width":2})),e.createElementVNode("span",Cp,e.toDisplayString(H(ye.id)),1)],8,Ep)):(e.openBlock(),e.createElementBlock("button",{key:1,type:"button","aria-label":ye.label,"aria-pressed":u.value===ye.id,disabled:"",class:"w-full flex flex-col items-center justify-center rounded-lg transition-all duration-200 gap-0.5 py-1.5 text-gray-300 opacity-60 cursor-not-allowed"},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ye.icon),{size:16,"stroke-width":2}))],8,Np))])),64))]),c.value?(e.openBlock(),e.createElementBlock("p",Vp,"Прокладаємо маршрут...")):p.value?(e.openBlock(),e.createElementBlock("p",Bp,e.toDisplayString(p.value),1)):h.value?(e.openBlock(),e.createElementBlock("p",$p,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Sp,[e.createElementVNode("button",{type:"button",class:"w-full h-9 rounded-xl bg-blue-600 hover:bg-blue-700 text-white text-xs font-semibold flex items-center justify-center gap-1.5 transition-colors disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-blue-600",disabled:!v.value,onClick:F},[e.createVNode(e.unref(he.Route),{size:13,"stroke-width":2}),ce[14]||(ce[14]=e.createTextVNode(" Побудувати маршрут ",-1))],8,vp)])]),k.value.length?(e.openBlock(),e.createElementBlock("div",Lp,[e.createElementVNode("div",Tp,[ce[15]||(ce[15]=e.createElementVNode("span",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wide"},"Покрокові інструкції",-1)),e.createElementVNode("span",Ap,e.toDisplayString(J.value)+" кроків",1)]),e.createElementVNode("div",Mp,[e.createElementVNode("div",Fp,[e.createElementVNode("div",Dp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(K.value,(ye,Z)=>(e.openBlock(),e.createElementBlock("div",{key:`${Z}-${ye.title}`,class:e.normalizeClass(["step-item flex items-start gap-3 rounded-xl cursor-pointer select-none transition-all px-3 py-2",[Z===0?"bg-emerald-50/60 cursor-default":b.value===Z?"bg-blue-50 ring-1 ring-blue-100":"hover:bg-gray-50"]]),onMouseenter:G=>ee(Z),onMouseleave:ge},[e.createElementVNode("div",{class:e.normalizeClass(["flex-shrink-0 w-7 h-7 rounded-lg flex items-center justify-center mt-0.5",R(ye.tone).icon])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(oe(ye.icon)),{size:14,"stroke-width":2}))],2),e.createElementVNode("div",zp,[e.createElementVNode("div",Ip,[e.createElementVNode("p",Rp,e.toDisplayString(ye.title),1),ye.distanceText?(e.openBlock(),e.createElementBlock("span",jp,e.toDisplayString(ye.distanceText),1)):e.createCommentVNode("",!0)]),ye.durationText?(e.openBlock(),e.createElementBlock("p",Op,e.toDisplayString(ye.durationText),1)):e.createCommentVNode("",!0)])],42,Pp))),128))])])])])):e.createCommentVNode("",!0),ce[16]||(ce[16]=e.createElementVNode("div",{class:"bg-white/80 backdrop-blur-xl rounded-xl border border-white/60 px-3 py-2 flex-shrink-0 pointer-events-auto"},[e.createElementVNode("p",{class:"text-[10px] text-gray-400 leading-relaxed text-center"},[e.createElementVNode("kbd",{class:"px-1.5 py-0.5 rounded bg-gray-100 text-gray-500 text-[9px] font-mono"},"ЛКМ"),e.createTextVNode(" по карті заповнює точки маршруту ")])],-1))],4))}}),qp={class:"relative"},Hp=["aria-label"],Wp={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"},Yp=e.defineComponent({name:"RouteControl",__name:"RouteControl",props:{active:{type:Boolean}},emits:["toggle","close","points-change","instruction-hover","route-change"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.ref(null);function i(c){var p;(p=s.value)==null||p.addPoint(c)}function d(c){var p;(p=s.value)==null||p.setPoints(c)}function u(){var c;(c=s.value)==null||c.clearPoints()}return n({addPoint:i,setPoints:d,clearPoints:u}),(c,p)=>(e.openBlock(),e.createElementBlock("div",qp,[t.active?(e.openBlock(),e.createBlock(Up,{key:0,ref_key:"routePanelRef",ref:s,class:"absolute top-0 right-full mr-2",onClose:p[0]||(p[0]=a=>l("close")),onPointsChange:p[1]||(p[1]=a=>l("points-change",a)),onInstructionHover:p[2]||(p[2]=a=>l("instruction-hover",a)),onRouteChange:p[3]||(p[3]=a=>l("route-change",a))},null,512)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",r.active?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":r.active?"Вимкнути побудову маршруту":"Побудова маршруту",onClick:p[4]||(p[4]=e.withModifiers(a=>l("toggle"),["stop"]))},[e.createElementVNode("span",Wp,e.toDisplayString(r.active?"Вимкнути побудову маршруту":"Побудова маршруту"),1),e.createVNode(e.unref(he.Route),{class:"w-4 h-4"})],10,Hp)]))}}),Dt="route-builder-src",yo="route-builder-line",ho="route-builder-points",bo="route-builder-labels",an="route-builder-hover-src",xo="route-builder-hover-line",Gp=e.defineComponent({__name:"RouteLayer",props:{points:{},routeGeometry:{},hoverGeometry:{}},setup(t){const n={"text-anchor":"center","text-offset":[0,0],"text-allow-overlap":!0,"text-ignore-placement":!0};function o(){return{type:"FeatureCollection",features:[]}}function r(g){return g?{type:"FeatureCollection",features:[{type:"Feature",properties:{role:"hover-line"},geometry:g}]}:o()}function l(g){if(!g)return null;if(g.type==="LineString"){const m=(g.coordinates||[]).filter(y=>Number.isFinite(y[0])&&Number.isFinite(y[1]));return m.length>=2?{type:"LineString",coordinates:m}:null}if(g.type==="MultiLineString"){const m=(g.coordinates||[]).map(y=>y.filter(k=>Number.isFinite(k[0])&&Number.isFinite(k[1]))).filter(y=>y.length>=2);return m.length?m.length===1?{type:"LineString",coordinates:m[0]}:{type:"MultiLineString",coordinates:m}:null}return null}function s(g,m){const y=[];return m&&y.push({type:"Feature",properties:{role:"line"},geometry:m}),g.forEach((k,h)=>{y.push({type:"Feature",properties:{role:"point",label:String(h+1),kind:h===0?"start":h===g.length-1?"end":"mid"},geometry:{type:"Point",coordinates:[k.coords.lng,k.coords.lat]}})}),{type:"FeatureCollection",features:y}}function i(g){g.getSource(Dt)||g.addSource(Dt,{type:"geojson",data:o()}),g.getSource(an)||g.addSource(an,{type:"geojson",data:o()}),g.getLayer(yo)||g.addLayer({id:yo,type:"line",source:Dt,filter:["==",["get","role"],"line"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#2563eb","line-width":4,"line-opacity":.9}}),g.getLayer(xo)||g.addLayer({id:xo,type:"line",source:an,layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":"#f59e0b","line-width":7,"line-opacity":.95}}),g.getLayer(ho)||g.addLayer({id:ho,type:"circle",source:Dt,filter:["==",["get","role"],"point"],paint:{"circle-radius":10,"circle-color":["match",["get","kind"],"start","#22c55e","end","#ef4444","#60a5fa"],"circle-stroke-width":2,"circle-stroke-color":"#0f172a"}}),g.getLayer(bo)||g.addLayer({id:bo,type:"symbol",source:Dt,filter:["==",["get","role"],"point"],layout:{"text-field":["to-string",["get","label"]],"text-size":12,"text-font":["Arial Unicode MS Bold","Open Sans Bold"],...n},paint:{"text-color":"#ffffff","text-halo-color":"#0f172a","text-halo-width":1}})}function d(g){if(g)try{g.getLayer(xo)&&g.removeLayer(xo),g.getLayer(bo)&&g.removeLayer(bo),g.getLayer(ho)&&g.removeLayer(ho),g.getLayer(yo)&&g.removeLayer(yo),g.getSource(an)&&g.removeSource(an),g.getSource(Dt)&&g.removeSource(Dt)}catch{}}const u=t,{map:c,ready:p}=Ke();function a(){p().then(()=>{const g=c.value;if(!g)return;i(g);const m=g.getSource(Dt);if(!(m!=null&&m.setData))return;m.setData(s(u.points,l(u.routeGeometry)));const y=g.getSource(an);y!=null&&y.setData&&y.setData(r(l(u.hoverGeometry??null)))})}return e.watch(()=>[u.points,u.routeGeometry,u.hoverGeometry],()=>a(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{p().then(()=>d(c.value))}),(g,m)=>null}}),Zp={class:"pt-1 border-t border-gray-100"},Kp={class:"space-y-1"},Xp=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),s=(u,c,p)=>Math.min(Math.max(u,c),p),i=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const u=s(r.value,-90,90),c=s(l.value,-180,180);o("submit",{lat:u,lng:c}),r.value=null,l.value=null},d=()=>{r.value=null,l.value=null,o("cancel")};return(u,c)=>(e.openBlock(),e.createElementBlock("div",Zp,[c[2]||(c[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",Kp,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=p=>r.value=p),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":c[1]||(c[1]=p=>l.value=p),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick:i}," Додати "),e.createElementVNode("button",{class:"px-2 py-1 bg-gray-200 hover:bg-gray-300 text-gray-700 text-xs font-medium rounded transition-colors",type:"button",onClick:d}," Скасувати ")])])]))}}),Jp=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(he.Plus),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),Qp=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(he.Trash2),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),eg=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(he.Circle),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),tg=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Gt(t){return tg.format(t)}function Ol(t){return t>=1e3?`${Gt(t/1e3)} км`:`${Gt(t)} м`}const ng={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},og={key:0,class:"flex-1 flex gap-1"},rg={key:1,class:"flex-1 font-mono text-gray-700"},lg=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),s=e.ref(!1),i=e.ref(o.coords.lat),d=e.ref(o.coords.lng);e.watch(()=>o.coords,g=>{i.value=g.lat,d.value=g.lng},{deep:!0,immediate:!0});const u=(g,m,y)=>Math.min(Math.max(g,m),y),c=()=>{s.value=!0},p=()=>{if(!Number.isFinite(i.value)||!Number.isFinite(d.value))return;const g=u(i.value,-90,90),m=u(d.value,-180,180);r("update",{id:o.id,coords:{lat:g,lng:m}}),s.value=!1},a=()=>{r("delete",o.id)};return(g,m)=>(e.openBlock(),e.createElementBlock("div",ng,[e.createVNode(e.unref(he.MapPin),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),s.value?(e.openBlock(),e.createElementBlock("div",og,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=y=>i.value=y),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[1]||(m[1]=y=>d.value=y),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,d.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:p}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",rg,e.toDisplayString(l.value),1)),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"text-blue-500 hover:text-blue-600 px-0.5",type:"button",onClick:c}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:a}," ✕ ")]))}}),ag={class:"ruler-control px-3 py-2.5 space-y-2"},sg={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},ig={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"},cg={class:"text-sm font-semibold text-slate-700"},dg={class:"ruler-row"},ug={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},fg={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"},mg={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},pg=["onClick"],gg={class:"flex items-center gap-2 mt-0.5 pl-7"},yg={key:0,class:"text-base font-semibold text-green-600"},hg={key:1,class:"text-xs text-gray-400"},bg={class:"ruler-row flex items-center gap-2 cursor-pointer"},xg={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"},kg={class:"text-xs font-medium text-gray-600 flex-1"},wg={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},_g=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],s=()=>{o.value=!o.value},i=(y,k)=>{const h=v=>v*Math.PI/180,f=h(k.lat-y.lat),b=h(k.lng-y.lng),x=h(y.lat),N=h(k.lat),V=Math.sin(f/2),_=Math.sin(b/2);return 6371e3*(2*Math.asin(Math.sqrt(V*V+Math.cos(x)*Math.cos(N)*_*_)))},d=e.computed(()=>{if(n.points.length<2)return 0;let y=0;for(let k=1;k<n.points.length;k+=1)y+=i(n.points[k-1].coords,n.points[k].coords);return n.isShapeClosed&&n.points.length>=2&&(y+=i(n.points[n.points.length-1].coords,n.points[0].coords)),y}),u=e.computed(()=>d.value>=1e3?`${Gt(d.value/1e3)} км`:`${Gt(d.value)} м`);function c(y){if(y.length<3)return 0;const k=y[0].lat,h=y[0].lng,f=(x,N)=>{const V=(x-k)*110574;return{x:(N-h)*111320*Math.cos(k*Math.PI/180),y:V}};let b=0;for(let x=0;x<y.length;x++){const N=(x+1)%y.length,V=f(y[x].lat,y[x].lng),_=f(y[N].lat,y[N].lng);b+=V.x*_.y-V.y*_.x}return Math.abs(b)*.5}const p=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const y=n.points.map(k=>k.coords);return c(y)}),a=e.computed(()=>p.value>0),g=e.computed(()=>{const y=p.value;if(y===0)return"—";if(r.value==="km2"){const h=y/1e6;return`${Gt(h)} км²`}if(r.value==="ha"){const h=y/1e4;return`${Gt(h)} га`}const k=y>=1?Math.round(y):y;return`${Gt(k)} м²`}),m=e.computed(()=>{const y=n.points.length;return y===1?"1 точка":y>=2&&y<=4?`${y} точки`:`${y} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(y,k)=>(e.openBlock(),e.createElementBlock("div",ag,[e.createElementVNode("button",sg,[e.createElementVNode("span",ig,[e.createVNode(e.unref(he.Info),{size:12,"stroke-width":2.5})]),k[1]||(k[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",cg,e.toDisplayString(u.value),1)]),e.createElementVNode("div",dg,[e.createElementVNode("button",ug,[e.createElementVNode("span",fg,[e.createVNode(e.unref(he.Info),{size:12,"stroke-width":2.5})]),k[2]||(k[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",mg,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(h,f)=>e.createElementVNode("button",{key:h.id,type:"button",class:e.normalizeClass(["px-2.5 py-1 text-xs font-medium transition-colors border-r border-gray-200 last:border-r-0",f===0&&"rounded-l-md",f===l.length-1&&"rounded-r-md",r.value===h.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(b=>r.value=h.id,["stop"])},e.toDisplayString(h.label),11,pg)),64))])]),e.createElementVNode("div",gg,[a.value?(e.openBlock(),e.createElementBlock("span",yg,e.toDisplayString(g.value),1)):(e.openBlock(),e.createElementBlock("span",hg,"—"))])]),e.createElementVNode("div",bg,[e.createElementVNode("span",xg,[e.createVNode(e.unref(he.Info),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",kg,e.toDisplayString(m.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(s,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",wg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(h,f)=>(e.openBlock(),e.createBlock(lg,{key:h.id,id:h.id,index:f+1,coords:h.coords,onUpdate:k[0]||(k[0]=b=>y.$emit("update-point",b)),onDelete:b=>y.$emit("delete-point",h.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),Eg={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},Cg={class:"flex items-start gap-2"},Ng=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Eg,[e.createElementVNode("div",Cg,[e.createVNode(e.unref(he.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))])]))}}),Vg={class:"space-y-1.5"},Bg={class:"space-y-1 max-h-40 overflow-y-auto"},$g={class:"text-gray-700"},Sg={class:"font-semibold text-slate-800"},vg=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(s,i){const d=m=>m*Math.PI/180,u=d(i.lat-s.lat),c=d(i.lng-s.lng),p=d(s.lat),a=d(i.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(u/2)**2+Math.cos(p)*Math.cos(a)*Math.sin(c/2)**2)))}function r(s){return Ol(s)}const l=e.computed(()=>{const s=[],i=n.points;if(i.length<2)return s;for(let d=0;d<i.length;d++){const u=d===i.length-1&&n.isShapeClosed?0:d+1;if(u>=i.length)break;const c=o(i[d].coords,i[u].coords);s.push({from:d+1,to:u+1,label:r(c)})}return s});return(s,i)=>(e.openBlock(),e.createElementBlock("div",Vg,[i[0]||(i[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",Bg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(d,u)=>(e.openBlock(),e.createElementBlock("div",{key:u,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",$g,"Точка "+e.toDisplayString(d.from)+" → Точка "+e.toDisplayString(d.to),1),e.createElementVNode("span",Sg,e.toDisplayString(d.label),1)]))),128))])]))}}),Lg={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},Tg={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Ag={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},Mg={class:"flex items-center gap-2"},Fg={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},Dg={class:"flex border-b border-gray-200"},Pg={key:1,class:"px-3 py-2.5"},zg={key:1,class:"text-xs text-gray-500"},Ig={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Rg={class:"flex gap-1.5"},Ul=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),s=e.computed(()=>l.value.length>0),i=e.ref(!1),d=e.ref(!1),u=e.ref("general");function c(J){u.value=J,r("tab-change",J)}e.onMounted(()=>{r("tab-change",u.value)});const p=e.computed(()=>l.value.length>=3&&!d.value);let a=1;const g=()=>l.value.map(J=>({id:J.id,coords:{...J.coords}})),m=()=>{l.value.length<3&&d.value&&(d.value=!1,r("shape-closed-change",!1)),r("points-change",g())},y=()=>{const J=a;return a+=1,J},k=J=>{l.value=[...l.value,{id:y(),coords:{lat:J.lat,lng:J.lng}}],m()},h=({id:J,coords:O})=>{const ne=l.value.findIndex(xe=>xe.id===J);if(ne===-1)return;const de=[...l.value];de[ne]={id:J,coords:{...O}},l.value=de,m()},f=J=>{l.value=l.value.filter(O=>O.id!==J),m()},b=()=>{l.value=[],d.value&&(d.value=!1,r("shape-closed-change",!1)),m()},x=J=>{h(J)},N=J=>{f(J)},V=()=>{i.value=!0,r("add-request")},_=J=>{k(J),i.value=!1},w=()=>{i.value=!1},B=()=>{p.value&&(d.value=!0,r("complete"),r("shape-closed-change",!0))},v=J=>{const O=(J??[]).map(ne=>({id:ne.id??y(),coords:{...ne.coords}}));l.value=O,O.length===0?a=1:a=Math.max(...O.map(ne=>ne.id))+1,m()},K=()=>{b(),i.value=!1,r("close")};return n({addPoint:k,setPoints:v,clearPoints:b}),(J,O)=>(e.openBlock(),e.createElementBlock("div",Lg,[e.createElementVNode("div",Tg,[e.createElementVNode("div",Ag,[e.createElementVNode("div",Mg,[e.createElementVNode("div",Fg,[e.createVNode(e.unref(he.Ruler),{size:14,"stroke-width":2,class:"text-white"})]),O[2]||(O[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:K},[e.createVNode(e.unref(he.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Dg,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:O[0]||(O[0]=ne=>c("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",u.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:O[1]||(O[1]=ne=>c("topoint"))}," До точки ",2)]),u.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value?(e.openBlock(),e.createBlock(_g,{key:1,points:l.value,"is-shape-closed":d.value,onUpdatePoint:x,onDeletePoint:N},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(Ng,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",Pg,[s.value?(e.openBlock(),e.createBlock(vg,{key:0,points:l.value,"is-shape-closed":d.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",zg,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",Ig,[e.createElementVNode("div",Rg,[i.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Jp,{key:0,onClick:V})),p.value?(e.openBlock(),e.createBlock(eg,{key:1,onClick:B})):e.createCommentVNode("",!0)]),i.value?(e.openBlock(),e.createBlock(Xp,{key:0,onSubmit:_,onCancel:w})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(Qp,{key:1,onClick:b})):e.createCommentVNode("",!0)])])]))}}),kt="ruler-points",Vt="ruler-line",Bt="ruler-polygon",$t="ruler-segments",ql=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(h,f){const b=B=>B*Math.PI/180,x=b(f.lat-h.lat),N=b(f.lng-h.lng),V=b(h.lat),_=b(f.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(x/2)**2+Math.cos(V)*Math.cos(_)*Math.sin(N/2)**2)))}function o(h){return Ol(h)}const r=t,{map:l,ready:s}=Ke();function i(){return{type:"FeatureCollection",features:[]}}function d(h,f,b){const x=b??"general",N=[];let V=0;N.push(0);for(let _=1;_<h.length;_++)V+=n(h[_-1].coords,h[_].coords),N.push(V);return f&&h.length>=2&&(V+=n(h[h.length-1].coords,h[0].coords)),{type:"FeatureCollection",features:h.map((_,w)=>{const B=x==="general"?w===0?"0":o(N[w]):w===0?"0":o(n(h[w-1].coords,h[w].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[_.coords.lng,_.coords.lat]},properties:{id:_.id,index:w+1,label:B}}})}}function u(h,f){if(h.length<2)return i();const b=[];for(let x=0;x<h.length;x++){const N=x===h.length-1&&f?0:x+1;if(N>=h.length)break;const V=h[x].coords,_=h[N].coords,w=n(V,_);b.push({type:"Feature",geometry:{type:"LineString",coordinates:[[V.lng,V.lat],[_.lng,_.lat]]},properties:{distance:o(w)}})}return{type:"FeatureCollection",features:b}}function c(h,f){if(h.length<2)return i();const b=h.map(x=>[x.coords.lng,x.coords.lat]);return f&&b.push(b[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:b},properties:{}}]}}function p(h){if(h.length<3)return i();const f=h.map(b=>[b.coords.lng,b.coords.lat]);return f.push(f[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[f]},properties:{}}]}}let a=!1;function g(h){h.getSource(kt)||(h.addSource(kt,{type:"geojson",data:i()}),h.addLayer({id:`${kt}-circle`,type:"circle",source:kt,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),h.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}})),h.getSource($t)||(h.addSource($t,{type:"geojson",data:i()}),h.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}})),h.getSource(Vt)||(h.addSource(Vt,{type:"geojson",data:i()}),h.addLayer({id:`${Vt}-layer`,type:"line",source:Vt,paint:{"line-color":"#3b82f6","line-width":2}})),h.getSource(Bt)||(h.addSource(Bt,{type:"geojson",data:i()}),h.addLayer({id:`${Bt}-layer`,type:"fill",source:Bt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),a=!0}function m(h){if(h){try{h.getLayer(`${Bt}-layer`)&&h.removeLayer(`${Bt}-layer`),h.getSource(Bt)&&h.removeSource(Bt),h.getLayer(`${Vt}-layer`)&&h.removeLayer(`${Vt}-layer`),h.getSource(Vt)&&h.removeSource(Vt),h.getLayer(`${$t}-labels`)&&h.removeLayer(`${$t}-labels`),h.getSource($t)&&h.removeSource($t),h.getLayer(`${kt}-labels`)&&h.removeLayer(`${kt}-labels`),h.getLayer(`${kt}-circle`)&&h.removeLayer(`${kt}-circle`),h.getSource(kt)&&h.removeSource(kt)}catch{}a=!1}}function y(h){if(!h)return;const f=h.getSource(kt),b=h.getSource(Vt),x=h.getSource(Bt),N=h.getSource($t),V=r.points,_=r.labelMode??"general";f&&f.setData(d(V,r.isShapeClosed,_)),b&&b.setData(c(V,r.isShapeClosed)),x&&x.setData(p(V)),N&&N.setData(_==="topoint"?u(V,r.isShapeClosed):i())}function k(){s().then(()=>{const h=l.value;h&&(a||g(h),y(h))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>k(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{s().then(()=>m(l.value))}),(h,f)=>null}}),jg={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},Og={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},Ug={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},qg={class:"flex items-center gap-2"},Hg=["disabled"],Wg={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},Yg={class:"text-sm font-mono text-slate-700"},Gg={class:"flex items-center gap-2 shrink-0"},Zg={key:0,class:"text-xs font-[100] text-gray-500"},Kg=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),s=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),i=e.ref(!1);let d=null;function u(){if(o.position==null)return;const a=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(a).then(()=>{i.value=!0,d&&clearTimeout(d),d=setTimeout(()=>{i.value=!1,d=null},600)})}function c(){r("close")}function p(){o.position!=null&&r("recenter")}return(a,g)=>(e.openBlock(),e.createElementBlock("div",jg,[e.createElementVNode("div",Og,[e.createElementVNode("div",Ug,[e.createElementVNode("div",qg,[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:p},[e.createVNode(e.unref(he.MapPin),{size:14,"stroke-width":2,class:"text-white"})],8,Hg),g[0]||(g[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:c},[e.createVNode(e.unref(he.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",Wg,[e.createElementVNode("div",null,[g[4]||(g[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",Yg,[g[1]||(g[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.value)+" ",1),g[2]||(g[2]=e.createElementVNode("br",null,null,-1)),g[3]||(g[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(s.value),1)])]),e.createElementVNode("div",Gg,[i.value?(e.openBlock(),e.createElementBlock("span",Zg," Скопійовано! ")):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center justify-center w-9 h-9 rounded-xl border border-gray-200 text-gray-500 hover:bg-gray-50 hover:text-gray-700 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/50 focus-visible:ring-offset-1","aria-label":"Копіювати координати",onClick:u},[e.createVNode(e.unref(he.ClipboardPaste),{size:18,"stroke-width":2})])])])])]))}}),St="geolocation-marker",Xg=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=Ke();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function d(a){a.getSource(St)||(a.addSource(St,{type:"geojson",data:s()}),a.addLayer({id:`${St}-circle`,type:"circle",source:St,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function u(a){try{a.getLayer(`${St}-circle`)&&a.removeLayer(`${St}-circle`),a.getSource(St)&&a.removeSource(St)}catch{}l=!1}function c(a){const g=a.getSource(St);if(g){if(n.position==null){g.setData(s());return}g.setData({type:"FeatureCollection",features:[i(n.position)]})}}function p(){r().then(()=>{const a=o.value;if(a){if(n.position==null){l&&u(a);return}l||d(a),c(a)}})}return e.watch(()=>n.position,()=>p(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,g)=>null}});function Jg(t,n,o){const r=o||`HTTP ${n}`;if(t==null||typeof t!="object")return r;const l=t;return typeof l.message=="string"&&l.message.trim()?l.message.trim():typeof l.error=="string"&&l.error.trim()?l.error.trim():r}async function Qg(t,n){const o=new URLSearchParams({lat:String(t),lng:String(n)}),r=await fetch(`/api/coords/height?${o}`),l=await r.json().catch(()=>null);if(!r.ok)throw new Error(Jg(l,r.status,r.statusText));return l}function ey(){const t=e.ref(null),n=e.ref(null),o=e.ref(!1),r=e.ref(null);async function l(i){t.value=i,o.value=!0,r.value=null,n.value=null;try{const d=await Qg(i.lat,i.lng);n.value=d.height,d.height==null&&(r.value="unavailable")}catch(d){n.value=null,r.value=d instanceof Error?d.message:"loadFailed"}finally{o.value=!1}}function s(){t.value=null,n.value=null,o.value=!1,r.value=null}return{point:t,height:n,loading:o,error:r,measureAt:l,reset:s}}let fr;function Hl(){return fr||(fr=ey()),fr}const ty={class:"height-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},ny={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},oy={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},ry={class:"flex items-center gap-2"},ly={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},ay={class:"px-3 py-3 space-y-3"},sy={key:0,class:"flex items-center gap-2 text-xs text-gray-500"},iy={key:1,class:"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700"},cy={key:0,class:"space-y-1.5"},dy={class:"text-3xl font-bold text-blue-600 tabular-nums"},uy={class:"text-xs text-gray-500"},fy={key:1,class:"rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800"},my={key:3,class:"rounded-md border border-dashed border-gray-200 bg-gray-50 px-3 py-3 text-xs leading-relaxed text-gray-500"},py=e.defineComponent({name:"HeightPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Hl(),l=e.computed(()=>r.point.value),s=e.computed(()=>r.loading.value),i=e.computed(()=>r.error.value),d=e.computed(()=>typeof r.height.value=="number"),u=e.computed(()=>{const{value:g}=r.height;if(g==null||!Number.isFinite(g))return"—";const m=Math.round(g*10)/10;return Number.isInteger(m)?String(m):m.toLocaleString("uk-UA",{minimumFractionDigits:1,maximumFractionDigits:1})}),c=e.computed(()=>l.value?`${l.value.lat.toFixed(6)}, ${l.value.lng.toFixed(6)}`:""),p=e.computed(()=>i.value==="unavailable"?"Не вдалося визначити висоту для цієї точки":"Не вдалося завантажити дані висоти");function a(){o("close")}return(g,m)=>(e.openBlock(),e.createElementBlock("div",ty,[e.createElementVNode("div",ny,[e.createElementVNode("div",oy,[e.createElementVNode("div",ry,[e.createElementVNode("div",ly,[e.createVNode(e.unref(he.TrendingUp),{size:14,"stroke-width":2,class:"text-white"})]),m[0]||(m[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Висота точки",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:a},[e.createVNode(e.unref(he.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",ay,[s.value?(e.openBlock(),e.createElementBlock("div",sy,[e.createVNode(e.unref(he.Loader2),{size:14,class:"animate-spin text-blue-500"}),m[1]||(m[1]=e.createElementVNode("span",null,"Визначаємо висоту…",-1))])):i.value&&!d.value?(e.openBlock(),e.createElementBlock("div",iy,e.toDisplayString(p.value),1)):l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[d.value?(e.openBlock(),e.createElementBlock("div",cy,[m[3]||(m[3]=e.createElementVNode("div",{class:"text-[10px] uppercase tracking-wide text-gray-400"},"Висота",-1)),e.createElementVNode("div",dy,[e.createTextVNode(e.toDisplayString(u.value)+" ",1),m[2]||(m[2]=e.createElementVNode("span",{class:"text-sm font-semibold text-gray-400"},"м",-1))]),e.createElementVNode("div",uy,e.toDisplayString(c.value),1)])):(e.openBlock(),e.createElementBlock("div",fy," Не вдалося визначити висоту для цієї точки "))],64)):(e.openBlock(),e.createElementBlock("div",my," Клацніть по карті, щоб отримати висоту точки. "))])])]))}}),gy={"aria-hidden":"true",style:{display:"none"}},vt="height-marker",yy=e.defineComponent({__name:"HeightMarkerLayer",props:{point:{}},setup(t){const n=t,{map:o,ready:r}=Ke();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function i(a){return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng,a.lat]},properties:{}}}function d(a){a.getSource(vt)||(a.addSource(vt,{type:"geojson",data:s()}),a.addLayer({id:`${vt}-circle`,type:"circle",source:vt,paint:{"circle-radius":7,"circle-color":"#2563eb","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),l=!0)}function u(a){try{a.getLayer(`${vt}-circle`)&&a.removeLayer(`${vt}-circle`),a.getSource(vt)&&a.removeSource(vt)}catch{}l=!1}function c(a){const g=a.getSource(vt);if(g){if(n.point==null){g.setData(s());return}g.setData({type:"FeatureCollection",features:[i(n.point)]})}}function p(){r().then(()=>{const a=o.value;if(a){if(n.point==null){l&&u(a);return}l||d(a),c(a)}})}return e.watch(()=>n.point,()=>p(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>u(o.value))}),(a,g)=>(e.openBlock(),e.createElementBlock("div",gy))}}),hy={class:"animate-slide-up"},by={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},xy={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},ky={class:"flex items-center gap-2"},wy={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},_y={class:"px-3 py-2.5 border-b border-gray-200"},Ey={class:"flex gap-1 flex-nowrap"},Cy=["title","onClick"],Ny={class:"px-3 py-2.5 border-b border-gray-200"},Vy={class:"flex items-center gap-4"},By={class:"flex items-center gap-2 cursor-pointer shrink-0"},$y={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},Sy={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},vy={class:"flex items-center gap-1.5"},Ly=Fe(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:he.Pen,title:"Олівець"},{id:"line",icon:he.Minus,title:"Лінія"},{id:"rect",icon:he.Square,title:"Прямокутник"},{id:"circle",icon:he.Circle,title:"Коло"},{id:"polygon",icon:he.Pentagon,title:"Полігон"},{id:"paint",icon:he.PaintBucket,title:"Балончик"},{id:"eraser",icon:he.Eraser,title:"Стирачка"}],s=e.ref("pen"),i=e.ref("#2563eb"),d=e.ref(3),u=()=>r("update:stroke-color",i.value),c=()=>r("update:stroke-width",d.value);e.watch(s,k=>r("update:tool",k)),e.watch(i,k=>r("update:stroke-color",k)),e.watch(d,k=>r("update:stroke-width",k));function p(){r("close")}function a(){r("undo")}function g(){r("finish-polygon")}function m(){r("clear")}function y(){r("download")}return n({tool:s,strokeColor:i,strokeWidth:d}),(k,h)=>(e.openBlock(),e.createElementBlock("div",hy,[e.createElementVNode("div",by,[e.createElementVNode("div",xy,[e.createElementVNode("div",ky,[e.createElementVNode("div",wy,[e.createVNode(e.unref(he.Pen),{size:14,"stroke-width":2,class:"text-white"})]),h[2]||(h[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Малювання",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:p},[e.createVNode(e.unref(he.X),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",_y,[h[3]||(h[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",Ey,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,f=>e.createElementVNode("button",{key:f.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",s.value===f.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:f.title,onClick:b=>s.value=f.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.icon),{size:16,"stroke-width":2}))],10,Cy)),64))])]),e.createElementVNode("section",Ny,[h[6]||(h[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",Vy,[e.createElementVNode("label",By,[h[4]||(h[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=f=>i.value=f),type:"color",class:"w-9 h-9 p-0.5 border-2 border-gray-200 rounded-lg cursor-pointer bg-white [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-none [&::-webkit-color-swatch]:rounded-md",onChange:u},null,544),[[e.vModelText,i.value]])]),e.createElementVNode("label",$y,[h[5]||(h[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[1]||(h[1]=f=>d.value=f),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:c},null,544),[[e.vModelText,d.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",Sy,[e.createElementVNode("div",vy,[e.createElementVNode("button",{type:"button",class:"w-9 h-9 shrink-0 flex items-center justify-center rounded-lg bg-gray-100 text-gray-700 hover:bg-gray-200 transition-colors",title:"Відкотити дію","aria-label":"Відкотити дію",onClick:a},[e.createVNode(e.unref(he.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:m},[e.createVNode(e.unref(he.Trash2),{size:14,"stroke-width":2}),h[7]||(h[7]=e.createTextVNode(" Очистити ",-1))])]),s.value==="polygon"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-blue-50 text-blue-600 hover:bg-blue-100 transition-colors",onClick:g},[e.createVNode(e.unref(he.Pentagon),{size:14,"stroke-width":2}),h[8]||(h[8]=e.createTextVNode(" Замкнути полігон ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-gradient-to-r from-blue-400 to-blue-500 text-white shadow-sm hover:brightness-105 transition-[filter]",onClick:y},[e.createVNode(e.unref(he.Download),{size:14,"stroke-width":2}),h[9]||(h[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),Ty=Fe(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref({x:0,y:0}),i=e.ref(!1),d=t,u=e.computed(()=>Math.max(d.strokeWidth*3,12)),c=e.computed(()=>({width:`${u.value}px`,height:`${u.value}px`,left:`${s.value.x}px`,top:`${s.value.y}px`,transform:"translate(-50%, -50%)"})),{ready:p}=Ke(),a=e.ref(!1),g=e.ref([]),m=e.ref([]);let y=0,k=0,h=0,f=0,b=null;function x(){const E=r.value,L=l.value,A=o.value;if(!E||!A)return;const me=A.parentElement;if(!me)return;const I=me.clientWidth,F=me.clientHeight;if(I<=0||F<=0)return;const z=window.devicePixelRatio||1;E.width=I*z,E.height=F*z,E.style.width=`${I}px`,E.style.height=`${F}px`;const H=E.getContext("2d",{willReadFrequently:!0});if(H&&H.scale(z,z),L){L.width=I*z,L.height=F*z,L.style.width=`${I}px`,L.style.height=`${F}px`;const oe=L.getContext("2d",{willReadFrequently:!0});oe&&oe.scale(z,z)}m.value=[]}function N(E){const L=r.value;if(!L)return{x:0,y:0};const A=L.getBoundingClientRect();return{x:E.clientX-A.left,y:E.clientY-A.top}}function V(){const E=r.value;return E?E.getContext("2d",{willReadFrequently:!0}):null}function _(){const E=l.value;return E?E.getContext("2d",{willReadFrequently:!0}):null}function w(){const E=l.value;if(!E)return;const L=window.devicePixelRatio||1,A=E.getContext("2d",{willReadFrequently:!0});A&&(A.setTransform(1,0,0,1,0,0),A.clearRect(0,0,E.width,E.height),A.scale(L,L))}function B(){const E=_();if(E){if(w(),E.globalCompositeOperation="source-over",E.strokeStyle=d.strokeColor,E.lineWidth=d.strokeWidth,E.lineCap="round",E.lineJoin="round",d.tool==="line")E.beginPath(),E.moveTo(y,k),E.lineTo(h,f),E.stroke();else if(d.tool==="rect"){const L=Math.min(y,h),A=Math.min(k,f),me=Math.abs(h-y),I=Math.abs(f-k);E.strokeRect(L,A,me,I)}else if(d.tool==="circle"){const L=Math.sqrt((h-y)**2+(f-k)**2);E.beginPath(),E.arc(y,k,Math.max(L,1),0,2*Math.PI),E.stroke()}else if(d.tool==="polygon"&&g.value.length>0){const L=g.value;E.beginPath(),E.moveTo(L[0].x,L[0].y);for(let A=1;A<L.length;A++)E.lineTo(L[A].x,L[A].y);E.lineTo(h,f),E.stroke()}}}function v(E){E.strokeStyle=d.strokeColor,E.lineWidth=d.strokeWidth,E.lineCap="round",E.lineJoin="round"}function K(){const E=r.value;if(!E)return;const L=E.getContext("2d",{willReadFrequently:!0});if(!L)return;const A=L.getImageData(0,0,E.width,E.height);m.value=[...m.value.slice(-19),A]}function J(E){if(!r.value)return;const{x:L,y:A}=N(E);y=L,k=A,h=L,f=A;const me=V();if(me){if(d.tool==="pen"||d.tool==="eraser"){K(),a.value=!0,d.tool==="eraser"?(me.globalCompositeOperation="destination-out",me.lineWidth=u.value):(me.globalCompositeOperation="source-over",v(me)),me.beginPath(),me.moveTo(L,A);return}if(d.tool==="paint"){K(),a.value=!0,me.globalCompositeOperation="source-over",me.fillStyle=d.strokeColor,xe(me,L,A);return}if(d.tool==="line"||d.tool==="rect"||d.tool==="circle"){K(),a.value=!0;return}if(d.tool==="polygon"){g.value=[...g.value,{x:L,y:A}],h=L,f=A,B();return}}}function O(E){const{x:L,y:A}=N(E);h=L,f=A,d.tool==="eraser"&&(s.value={x:L,y:A},i.value=!0);const me=V();if(me){if(d.tool==="pen"&&a.value){me.globalCompositeOperation="source-over",v(me),me.lineTo(L,A),me.stroke();return}if(d.tool==="eraser"&&a.value){me.globalCompositeOperation="destination-out",me.lineWidth=u.value,me.lineTo(L,A),me.stroke();return}if(d.tool==="paint"&&a.value){me.globalCompositeOperation="source-over",me.fillStyle=d.strokeColor,xe(me,L,A);return}a.value&&(d.tool==="line"||d.tool==="rect"||d.tool==="circle")&&B(),d.tool==="polygon"&&g.value.length>0&&B()}}function ne(){i.value=!1}function de(){d.tool==="polygon"&&te()}function xe(E,L,A){const me=Math.max(d.strokeWidth*2.5,8),I=12+Math.floor(d.strokeWidth);for(let F=0;F<I;F++){const z=Math.random()*2*Math.PI,H=me*Math.random(),oe=L+Math.cos(z)*H,R=A+Math.sin(z)*H,ee=1+Math.random()*2;E.beginPath(),E.arc(oe,R,ee,0,2*Math.PI),E.fill()}}function se(){if(!a.value)return;const E=V();if(!E){a.value=!1;return}if(d.tool==="paint"){w(),a.value=!1,E.globalCompositeOperation="source-over";return}if(d.tool==="line")E.globalCompositeOperation="source-over",v(E),E.beginPath(),E.moveTo(y,k),E.lineTo(h,f),E.stroke();else if(d.tool==="rect"){E.globalCompositeOperation="source-over",v(E);const L=Math.min(y,h),A=Math.min(k,f),me=Math.abs(h-y),I=Math.abs(f-k);E.strokeRect(L,A,me,I)}else if(d.tool==="circle"){E.globalCompositeOperation="source-over",v(E);const L=Math.sqrt((h-y)**2+(f-k)**2);E.beginPath(),E.arc(y,k,Math.max(L,1),0,2*Math.PI),E.stroke()}w(),a.value=!1,E.globalCompositeOperation="source-over"}function te(){const E=V(),L=g.value;if(!E||L.length<2){g.value=[],w();return}K(),E.globalCompositeOperation="source-over",v(E),E.beginPath(),E.moveTo(L[0].x,L[0].y);for(let A=1;A<L.length;A++)E.lineTo(L[A].x,L[A].y);E.closePath(),E.stroke(),g.value=[],w(),E.globalCompositeOperation="source-over"}function D(){const E=r.value;if(!E||m.value.length===0)return;const L=E.getContext("2d",{willReadFrequently:!0});if(!L)return;const A=m.value[m.value.length-1];m.value=m.value.slice(0,-1),L.setTransform(1,0,0,1,0,0),L.putImageData(A,0,0);const me=window.devicePixelRatio||1;L.scale(me,me)}function Q(){const E=r.value;if(!E)return;const L=E.getContext("2d",{willReadFrequently:!0});if(!L)return;const A=window.devicePixelRatio||1;L.setTransform(1,0,0,1,0,0),L.clearRect(0,0,E.width,E.height),L.scale(A,A),g.value=[],m.value=[],w()}function T(){return r.value}return e.watch(()=>d.tool,(E,L)=>{L==="polygon"&&E!=="polygon"&&(g.value=[],w())}),e.onMounted(()=>{p().then(()=>{var L;x();const E=(L=o.value)==null?void 0:L.parentElement;E&&typeof ResizeObserver<"u"&&(b=new ResizeObserver(x),b.observe(E))})}),e.onBeforeUnmount(()=>{b==null||b.disconnect(),b=null}),n({clear:Q,getCanvas:T,finishPolygon:te,undo:D,canUndo:()=>m.value.length>0}),(E,L)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:J,onMousemove:O,onMouseup:se,onDblclick:de,onMouseleave:L[0]||(L[0]=()=>{ne(),se()})},[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(c.value)},null,4),[[e.vShow,t.tool==="eraser"&&i.value]])],34))}}),[["__scopeId","data-v-8a5ff1c1"]]),Ay={class:"add-data-modal__dialog bg-white rounded-2xl shadow-2xl border border-slate-200 w-full max-w-5xl max-h-[90vh] flex flex-col overflow-hidden"},My={class:"flex items-center justify-between px-6 py-4 border-b border-slate-200"},Fy={class:"grid grid-cols-1 lg:grid-cols-2 min-h-0 flex-1"},Dy={class:"px-6 py-5 border-b lg:border-b-0 lg:border-r border-slate-200 overflow-y-auto"},Py={class:"block mb-4"},zy={class:"block mb-4"},Iy={key:0,class:"mb-4"},Ry={key:1,class:"mb-4"},jy={class:"block mb-4"},Oy={class:"relative"},Uy={key:0,class:"absolute left-0 right-0 top-full z-10 mt-1 max-h-48 overflow-y-auto rounded-lg border border-slate-200 bg-white shadow-lg"},qy=["onMousedown"],Hy={key:0,class:"px-3 py-2 text-sm text-slate-500"},Wy={key:1,class:"px-3 py-2 text-sm text-slate-500"},Yy={class:"flex flex-col items-center text-center gap-3 px-4 py-8"},Gy={class:"w-12 h-12 rounded-xl bg-blue-50 text-blue-600 flex items-center justify-center"},Zy={class:"text-sm text-slate-600 leading-relaxed"},Ky={key:0,class:"text-sm font-medium text-slate-700"},Xy=["accept"],Jy={key:2,class:"mb-4 text-sm text-red-600"},Qy={class:"flex items-center gap-3"},eh=["disabled"],th=["disabled"],nh={class:"px-6 py-5 bg-slate-50 overflow-y-auto flex flex-col justify-center"},oh={class:"rounded-xl border border-slate-200 bg-white p-4 space-y-2"},rh={class:"text-sm text-slate-700"},lh={class:"text-sm text-slate-700"},ah={key:0,class:"text-sm text-slate-700"},sh={class:"text-sm text-slate-500 leading-relaxed"},mr="client-layer-preview",ko="add-data-preview",Wl="add-data",wo="4326",ih=Fe(e.defineComponent({name:"MapAddDataPanel",__name:"index",emits:["close"],setup(t,{emit:n}){const o=n,r=Ke(),{registerClientLayer:l}=tr(),{activateTemporaryLayer:s,deactivateTemporaryLayer:i,clearTemporaryLayers:d}=Vn(r.map),u=e.ref("file"),c=yd,p=Vl(),a=e.ref(""),g=e.ref(""),m=e.ref(null),y=e.ref(wo),k=e.ref("EPSG:4326"),h=e.ref([{id:wo,text:"EPSG:4326"}]),f=e.ref(null),b=e.ref(""),x=e.ref(!1),N=e.ref(!1),V=e.ref(!1),_=e.ref(!1),w=e.ref(null);let B=null;const v=e.computed(()=>a.value.trim()?u.value==="geometry"?!!g.value.trim():!!(m.value&&y.value):!1),K=e.computed(()=>v.value),J=e.computed(()=>{if(!f.value)return null;const z=Array.isArray(f.value.features)?f.value.features:[],H=[...new Set(z.map(ee=>{var ge;return(ge=ee==null?void 0:ee.geometry)==null?void 0:ge.type}).filter(Boolean))].join(", ")||"—",oe=Qo(f.value),R=oe?`${oe[0][1].toFixed(5)}, ${oe[0][0].toFixed(5)} — ${oe[1][1].toFixed(5)}, ${oe[1][0].toFixed(5)}`:null;return{featureCount:z.length,geometryTypes:H,boundsText:R}});function O(z){window.dispatchEvent(new CustomEvent("map:temporary-layer-request",{detail:z}))}function ne(){i(mr,ko),O({action:"deactivate",owner:ko,spec:{id:mr}})}function de(z){const H={id:mr,title:a.value.trim()||"Попередній перегляд",type:"geojson",data:z};s(H,{},ko),O({action:"activate",owner:ko,spec:H});const oe=Qo(z);oe&&r.fitBounds&&r.fitBounds(oe,{padding:48,duration:600})}function xe(z){if(!z||typeof z!="object")return null;const H=z,oe=H.id??H.srid??H.code??H.value;if(oe==null||oe==="")return null;const R=String(oe),ee=H.text??H.name??H.title??H.label,ge=ee?String(ee):`EPSG:${R}`;return{id:R,text:ge.includes(R)?ge:`${ge} (${R})`}}async function se(z="",H=!1){try{V.value=!0;const oe=z.trim(),R=oe?`/api/suggest/srid?key=${encodeURIComponent(oe)}`:"/api/suggest/srid",ee=await fetch(R);if(!ee.ok){h.value=[];return}const ge=await ee.json(),S=(Array.isArray(ge==null?void 0:ge.data)?ge.data:Array.isArray(ge)?ge:[]).map(xe).filter(Boolean);if(S.length){if(h.value=S,H){const Y=S.find(ue=>ue.id===wo)||S[0];te(Y,!1)}return}h.value=[]}catch(oe){console.error("Failed to load SRID classifier:",oe)}finally{V.value=!1}}function te(z,H=!0){y.value=z.id,k.value=z.text,H&&(N.value=!1)}function D(){const z=k.value.trim(),H=h.value.find(oe=>oe.id===y.value);(!H||z!==H.id&&z!==H.text)&&(y.value=""),N.value=!0,B&&clearTimeout(B),B=setTimeout(()=>{se(z)},300)}function Q(){setTimeout(()=>{N.value=!1},150)}function T(z){var oe;const H=[z,z==null?void 0:z.data,z==null?void 0:z.result,z==null?void 0:z.geojson];for(const R of H){const ee=El(R);if((oe=ee==null?void 0:ee.features)!=null&&oe.length)return ee}return null}async function E(){var oe,R;if(b.value="",u.value==="geometry"){let ee;try{ee=JSON.parse(g.value.trim())}catch{throw new Error("Некоректний JSON у полі геометрії")}const ge=El(ee);if(!((oe=ge==null?void 0:ge.features)!=null&&oe.length))throw new Error("Не вдалося розпізнати геометрію GeoJSON");return ge}if(!m.value)throw new Error(`Оберіть файл (${p})`);const z=await kd(m.value,y.value),H=T(z);if(!((R=H==null?void 0:H.features)!=null&&R.length))throw new Error("Не вдалося розпізнати геометрію у файлі");return H}async function L(){x.value=!0,b.value="";try{const z=await E();f.value=z,ne(),de(z)}catch(z){f.value=null,ne(),b.value=(z==null?void 0:z.message)||"Не вдалося підготувати попередній перегляд"}finally{x.value=!1}}async function A(){if(!f.value&&(await L(),!f.value))return;const z=`client-layer-${Date.now()}`,H={id:z,title:a.value.trim(),type:"geojson",data:f.value};ne(),s(H,{},Wl),O({action:"activate",owner:Wl,spec:H});const oe=Qo(f.value),R=a.value.trim();l({id:z,name:R,bounds:oe,data:f.value}),window.dispatchEvent(new CustomEvent(Bn,{detail:{id:z,name:R,bounds:oe}})),oe&&r.fitBounds&&r.fitBounds(oe,{padding:48,duration:600}),o("close")}function me(z){if(!z){m.value=null;return}if(!Nl(z)){b.value=`Підтримуються формати: ${p}`,m.value=null,f.value=null,ne();return}m.value=z,f.value=null,ne(),b.value=""}function I(z){var oe;const H=z.target;me(((oe=H.files)==null?void 0:oe[0])||null)}function F(z){var H,oe;_.value=!1,me(((oe=(H=z.dataTransfer)==null?void 0:H.files)==null?void 0:oe[0])||null)}return e.watch(u,()=>{f.value=null,b.value="",ne()}),e.onMounted(()=>{se(wo,!0)}),e.onBeforeUnmount(()=>{B&&clearTimeout(B),ne()}),(z,H)=>(e.openBlock(),e.createElementBlock("div",{class:"add-data-modal fixed inset-0 z-[1200] flex items-center justify-center p-4 pointer-events-auto",onClick:H[9]||(H[9]=e.withModifiers(oe=>o("close"),["self"]))},[e.createElementVNode("div",Ay,[e.createElementVNode("div",My,[H[10]||(H[10]=e.createElementVNode("h2",{class:"text-lg font-semibold text-slate-800"},"Додавання даних",-1)),e.createElementVNode("button",{type:"button",class:"w-8 h-8 inline-flex items-center justify-center rounded-lg text-slate-500 hover:bg-slate-100 hover:text-slate-700","aria-label":"Закрити",onClick:H[0]||(H[0]=oe=>o("close"))},[e.createVNode(e.unref(he.X),{size:18})])]),e.createElementVNode("div",Fy,[e.createElementVNode("div",Dy,[e.createElementVNode("label",Py,[H[12]||(H[12]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Формат даних "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":H[1]||(H[1]=oe=>u.value=oe),class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50"},[...H[11]||(H[11]=[e.createElementVNode("option",{value:"file"},"Файл",-1),e.createElementVNode("option",{value:"geometry"},"Геометрія",-1)])],512),[[e.vModelSelect,u.value]])]),e.createElementVNode("label",zy,[H[13]||(H[13]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Назва "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":H[2]||(H[2]=oe=>a.value=oe),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"Введіть назву"},null,512),[[e.vModelText,a.value]])]),u.value==="geometry"?(e.openBlock(),e.createElementBlock("div",Iy,[H[14]||(H[14]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Геометрія (GeoJSON) "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":H[3]||(H[3]=oe=>g.value=oe),rows:"10",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm font-mono text-slate-800 focus:outline-none focus:ring-2 focus:ring-blue-400/50 resize-y",placeholder:'{"type":"Polygon","coordinates":[[[30.5,50.4],[30.6,50.4],[30.6,50.5],[30.5,50.5],[30.5,50.4]]]}'},null,512),[[e.vModelText,g.value]]),H[15]||(H[15]=e.createElementVNode("p",{class:"mt-1.5 text-xs text-slate-500"}," Вставте GeoJSON-геометрію, Feature або FeatureCollection. ",-1))])):(e.openBlock(),e.createElementBlock("div",Ry,[e.createElementVNode("label",jy,[H[16]||(H[16]=e.createElementVNode("span",{class:"block text-sm font-medium text-slate-700 mb-1.5"},[e.createTextVNode(" Проекція "),e.createElementVNode("span",{class:"text-red-500"},"*")],-1)),e.createElementVNode("div",Oy,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":H[4]||(H[4]=oe=>k.value=oe),type:"text",class:"w-full rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-800 bg-white focus:outline-none focus:ring-2 focus:ring-blue-400/50",placeholder:"EPSG:4326",autocomplete:"off",onFocus:H[5]||(H[5]=oe=>N.value=!0),onInput:D,onBlur:Q},null,544),[[e.vModelText,k.value]]),N.value?(e.openBlock(),e.createElementBlock("div",Uy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,oe=>(e.openBlock(),e.createElementBlock("button",{key:oe.id,type:"button",class:"block w-full px-3 py-2 text-left text-sm text-slate-700 hover:bg-blue-50 hover:text-blue-700",onMousedown:e.withModifiers(R=>te(oe),["prevent"])},e.toDisplayString(oe.text),41,qy))),128)),!h.value.length&&!V.value?(e.openBlock(),e.createElementBlock("p",Hy," Нічого не знайдено ")):e.createCommentVNode("",!0),V.value?(e.openBlock(),e.createElementBlock("p",Wy," Пошук... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:e.normalizeClass(["add-data-modal__dropzone",{"add-data-modal__dropzone--active":_.value}]),onDragover:H[6]||(H[6]=e.withModifiers(oe=>_.value=!0,["prevent"])),onDragleave:H[7]||(H[7]=e.withModifiers(oe=>_.value=!1,["prevent"])),onDrop:e.withModifiers(F,["prevent"]),onClick:H[8]||(H[8]=oe=>{var R;return(R=w.value)==null?void 0:R.click()})},[e.createElementVNode("div",Yy,[e.createElementVNode("div",Gy,[e.createVNode(e.unref(he.Upload),{size:22})]),e.createElementVNode("p",Zy," Ви можете підключити власний файл у форматах "+e.toDisplayString(e.unref(p))+". Для цього перетягніть файл зі свого сховища у цю область або завантажте з комп'ютера ",1),H[17]||(H[17]=e.createElementVNode("p",{class:"text-xs text-slate-400"},"Максимальний розмір: 50MB",-1)),m.value?(e.openBlock(),e.createElementBlock("p",Ky,e.toDisplayString(m.value.name),1)):e.createCommentVNode("",!0)]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:w,type:"file",accept:e.unref(c),class:"hidden",onChange:I},null,40,Xy)],34)])),b.value?(e.openBlock(),e.createElementBlock("p",Jy,e.toDisplayString(b.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Qy,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-white bg-slate-800 hover:bg-slate-900 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!K.value||x.value,onClick:A}," Додати ",8,eh),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center px-4 py-2 rounded-lg text-sm font-medium text-slate-700 border border-slate-300 bg-white hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed",disabled:!v.value||x.value,onClick:L}," Попередній перегляд ",8,th)])]),e.createElementVNode("div",nh,[J.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[H[21]||(H[21]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Попередній перегляд ",-1)),e.createElementVNode("div",oh,[e.createElementVNode("p",rh,[H[18]||(H[18]=e.createElementVNode("span",{class:"font-medium"},"Об'єктів:",-1)),e.createTextVNode(" "+e.toDisplayString(J.value.featureCount),1)]),e.createElementVNode("p",lh,[H[19]||(H[19]=e.createElementVNode("span",{class:"font-medium"},"Тип:",-1)),e.createTextVNode(" "+e.toDisplayString(J.value.geometryTypes),1)]),J.value.boundsText?(e.openBlock(),e.createElementBlock("p",ah,[H[20]||(H[20]=e.createElementVNode("span",{class:"font-medium"},"Межі:",-1)),e.createTextVNode(" "+e.toDisplayString(J.value.boundsText),1)])):e.createCommentVNode("",!0)])],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[H[22]||(H[22]=e.createElementVNode("p",{class:"text-xs font-semibold tracking-wide text-slate-500 uppercase mb-2"}," Немає даних для попереднього перегляду ",-1)),e.createElementVNode("p",sh,[u.value==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Для продовження завантажте файл та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Для продовження вставте геометрію та заповніть необхідні поля. Якщо бажаєте попередньо переглянути Ваші дані, натисніть кнопку «Попередній перегляд». ")],64))])],64))])])])]))}}),[["__scopeId","data-v-d53011ce"]]),Yl=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var g,m;const n=t,o=((m=(g=e.getCurrentInstance())==null?void 0:g.appContext.config.globalProperties)==null?void 0:m.$settings)||null,{map:r,ready:l}=Ke();let s=null;function i(){s==null||s.remove(),s=null}function d(y){if(!y)return null;if(typeof y=="string")try{y=JSON.parse(y)}catch{return null}return y.type==="FeatureCollection"?y:y.type==="Feature"?{type:"FeatureCollection",features:[y]}:y.type&&Array.isArray(y.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:y,properties:{}}]}:Array.isArray(y.features)?{type:"FeatureCollection",features:y.features}:y.geometry?d(y.geometry):null}function u(y){var f,b,x;return{type:"line",color:"#8e4484",width:2,opacity:((((x=(b=(f=y==null?void 0:y.features)==null?void 0:f[0])==null?void 0:b.geometry)==null?void 0:x.type)||"").includes("Polygon"),.95)}}async function c(y){const k=await fetch(y);if(!k.ok)throw new Error(String(k.status));return k.json()}async function p(y,k){if(y){const h=/^https?:\/\//.test(y)?y:new URL(y,location.origin).toString(),f=await c(h).catch(()=>null),b=d(f);if(b)return b}if(k){const h=await c(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(k)}`).catch(()=>null),f=d(h);if(f)return f}return null}async function a(){var f,b,x,N;if(!n.layerId||!r.value){i();return}typeof l=="function"&&await l().catch(()=>{});const y=n.boundary??((f=n.settingsMap)==null?void 0:f.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,k=n.katottg??((x=n.settingsMap)==null?void 0:x.katottg)??((N=o==null?void 0:o.map)==null?void 0:N.katottg)??null;if(!y&&!k){i();return}const h=await p(y,k);if(!h){i();return}i(),s=qe(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:u(h)},r)}return e.watch(()=>{var y,k;return[n.layerId,n.boundary,n.katottg,(y=n.settingsMap)==null?void 0:y.boundary,(k=n.settingsMap)==null?void 0:k.katottg,r.value]},()=>{a()},{immediate:!0}),e.onBeforeUnmount(i),(y,k)=>null}}),ch={key:3,class:"absolute bottom-16 right-4 z-[120] pointer-events-auto"},dh={key:4,class:"absolute bottom-4 right-4 z-[120] flex items-end gap-2 pointer-events-auto"},uh={class:"absolute top-[6.5px] right-[6.5px] z-[130] flex flex-col items-end gap-1 pointer-events-auto"},fh=["aria-label","disabled"],mh={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"},ph=["aria-label"],gh={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"},yh=["aria-label"],hh={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"},bh=["aria-label"],xh={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"},kh=["aria-label"],wh={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"},_h={class:"map-widget__overlay-grid"},Eh={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Ch={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Nh={class:"map-widget__stack"},Vh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Bh={class:"map-widget__stack map-widget__stack--bottom"},$h={key:0,class:"map-widget__state"},Sh={key:1,class:"map-widget__state map-widget__state--error"},_o=Fe(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var Uo,_n,Jn,qo;const n=t;console.log("props.data",n.data);const o=He.useRoute(),r=He.useRouter(),l=e.ref(null),s=e.ref({}),i=e.ref(null),d=e.ref(!1),u=e.ref(null),c=e.ref(!1),p=e.ref([]),a=e.ref([]),g=e.ref(null),m=e.ref(!1),{resolveMapLegendItems:y}=Ml(),k=Hl(),h=e.ref(null),f=e.computed(()=>h.value==="route"),b=e.computed(()=>h.value==="ruler"),x=e.computed(()=>h.value==="height"),N=e.computed(()=>h.value==="draw"),V=e.computed(()=>h.value==="geolocation"),_=e.computed(()=>h.value==="add-data"),w=e.ref(null),B=e.ref("general"),v=e.ref(null),K=e.ref(null),J=e.ref(null),O=e.ref("pen"),ne=e.ref("#2563eb"),de=e.ref(3),xe=e.ref([]),se=e.ref(null),te=e.ref(null),D=e.ref([]),Q=e.ref(!1),T=e.ref(null),E=e.ref(!1),L=e.ref(null),A=e.computed(()=>n.id||"main"),me=e.computed(()=>{var U,le;return{height:((U=n.height)==null?void 0:U.trim())||((le=s.value)==null?void 0:le.height)||"calc(100vh - 65px)"}}),I=e.computed(()=>{var U;return((U=s.value)==null?void 0:U.name)??null}),F=e.computed(()=>{var U;return((U=s.value)==null?void 0:U.description)??null}),z=e.computed(()=>{var U;return Ae((U=s.value)==null?void 0:U.maps)}),H=e.computed(()=>{var le,Te;const U=((le=s.value)==null?void 0:le.minZoom)??((Te=s.value)==null?void 0:Te.minzoom)??null;return typeof U=="number"?U:null}),oe=e.computed(()=>{var le,Te;const U=((le=s.value)==null?void 0:le.maxZoom)??((Te=s.value)==null?void 0:Te.maxzoom)??null;return typeof U=="number"?U:typeof n.maxZoom=="number"?n.maxZoom:20}),R=e.ref(null),ee=e.computed(()=>{if(!R.value)return null;const{lng:U,lat:le}=R.value;return`${le.toFixed(6)}, ${U.toFixed(6)}`}),ge=e.computed(()=>{var U;return((U=l.value)==null?void 0:U.ctx)??null}),we=e.computed(()=>{var U;return((U=s.value)==null?void 0:U.minimap)??null});function S(U){a.value=U.basemaps,g.value=U.selectedId}function Y(){m.value=!m.value}function ue(){m.value=!1}function ie(U){if(!U||typeof U!="object")return U;const le=Wt(U.center);return le?{...U,center:le}:U}const ce=((_n=(Uo=e.getCurrentInstance())==null?void 0:Uo.appContext.config.globalProperties)==null?void 0:_n.$settings)||null;function ye(U){if(U==null)return null;const le=Number(typeof U=="string"?U.trim():U);return Number.isFinite(le)?le:null}const Z=Wt((Jn=ce==null?void 0:ce.map)==null?void 0:Jn.center),G=ye((qo=ce==null?void 0:ce.map)==null?void 0:qo.zoom),ke=e.computed(()=>{const U=(ce==null?void 0:ce.map)||null,le=(U==null?void 0:U.boundary)??null,Te=(U==null?void 0:U.katottg)??null;return!le&&!Te?null:{boundary:le,katottg:Te}});function ve(U){return typeof U=="string"&&U.trim()?U.trim().toLowerCase():"top-left"}function Ae(U){return Array.isArray(U)?U:U&&typeof U=="object"?Object.values(U).filter(Boolean):[]}const $e=e.computed(()=>{var U;return Ae((U=s.value)==null?void 0:U.widgets)}),Je=e.computed(()=>$e.value.some(U=>(U==null?void 0:U.type)==="catalog"));function Re(U){return y(U,{hasCatalogWidget:Je.value})}const at=e.computed(()=>$e.value.some(U=>(U==null?void 0:U.type)==="basemaps")),et=e.computed(()=>$e.value.some(U=>(U==null?void 0:U.type)==="layers")),nt=["left","right"],P=e.computed(()=>{const U={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},le={"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 $e.value.forEach(Te=>{const De=ve(Te.position),Be=le[De]??{side:"left",align:"top"};U[Be.side][Be.align].push(Te)}),U});function pe(U){return Array.isArray(U)?U[0]??null:typeof U=="string"?U:null}async function M(){var le;await e.nextTick();const U=(le=l.value)==null?void 0:le.ctx;return U?(U.ready&&await U.ready(),U):null}function W(){var U,le,Te;return((Te=(le=(U=l.value)==null?void 0:U.ctx)==null?void 0:le.map)==null?void 0:Te.value)??null}function X(){const U=W();if(!U)return null;const le=U.getCenter();return{z:U.getZoom().toFixed(2),x:le.lng.toFixed(5),y:le.lat.toFixed(5)}}async function be(){var Te;const U=await M(),le=(Te=U==null?void 0:U.map)==null?void 0:Te.value;le&&(typeof H.value=="number"&&le.setMinZoom(H.value),typeof oe.value=="number"&&le.setMaxZoom(oe.value))}async function Ve(){var Be;if(i.value)return;const U=await M(),le=(Be=U==null?void 0:U.map)==null?void 0:Be.value;if(!le)return;const Te=le.getCenter(),De=le.getZoom();i.value={center:[Te.lng,Te.lat],zoom:De}}function j(){if(Oe.value)return;const U=X();if(!U)return;const le=pe(o.query.x),Te=pe(o.query.y),De=pe(o.query.z);le===U.x&&Te===U.y&&De===U.z||(Qe.value=U,r.replace({query:{...o.query,...U}}).catch(()=>{}))}function ae(U,le,Te=1e-6){return Math.abs(U-le)<=Te}async function re(){var $;if(Xe())return;const U=await M(),le=($=U==null?void 0:U.map)==null?void 0:$.value;if(!U||!le)return;const Te=parseFloat(pe(o.query.x)??""),De=parseFloat(pe(o.query.y)??""),Be=parseFloat(pe(o.query.z)??""),Ie=!Number.isNaN(Te),je=!Number.isNaN(De),Le=!Number.isNaN(Be);let C=!1;Oe.value=!0;try{if(Ie&&je){const q=le.getCenter();(!ae(q.lng,Te)||!ae(q.lat,De))&&(le.setCenter([Te,De]),C=!0)}if(Le){const q=le.getZoom();ae(q,Be,.001)||(le.setZoom(Be),C=!0)}(!Ie||!je||!Le||C)&&j()}finally{Oe.value=!1}}let Ne=null,Se=null;const Oe=e.ref(!1),Qe=e.ref(null);function Xe(){const U=Qe.value;if(!U)return!1;const le=pe(o.query.x),Te=pe(o.query.y),De=pe(o.query.z);return le===U.x&&Te===U.y&&De===U.z?(Qe.value=null,!0):!1}function st(U){const le=U==null?void 0:U.lngLat;le&&(R.value={lng:le.lng,lat:le.lat})}let ct=null;function wt(U){typeof window>"u"||window.dispatchEvent(new CustomEvent(so,{detail:U}))}function Ft(U){if(!U)return null;if(typeof U=="string")try{return JSON.parse(U)}catch{return null}return U}async function hn(U){const le=await fetch(`/api/map-format?${U.toString()}`);if(!le.ok)throw new Error(`API returned ${le.status}`);return le.json()}function Ut(){const U=W();return U?Object.entries(qe()).filter(([,le])=>{var q,fe,_e,Ee,Me,ze,Ue;const Te=(fe=(q=le==null?void 0:le.opts)==null?void 0:q.source)==null?void 0:fe.type,De=(Ee=(_e=le==null?void 0:le.opts)==null?void 0:_e.layer)==null?void 0:Ee.type,Be=(((Me=le==null?void 0:le.opts)==null?void 0:Me.service)||"").toString().toLowerCase(),Ie=Array.isArray(le==null?void 0:le.card)?le.card.length>0:!!(le!=null&&le.card),je=Array.isArray(le==null?void 0:le.popup)?le.popup.length>0:!!(le!=null&&le.popup),Le=(ze=le==null?void 0:le.ids)==null?void 0:ze.sourceId;if(Te!=="raster"&&De!=="raster"||Be!=="cartocss"&&!Ie&&!je||!Le||!U.getSource(Le))return!1;const $=(((Ue=U.getStyle())==null?void 0:Ue.layers)||[]).filter(Ge=>Ge.source===Le);return $.length?$.some(Ge=>{try{return U.getLayoutProperty(Ge.id,"visibility")!=="none"}catch{return!0}}):!1}).map(([le])=>le):[]}function bn(U){const le=W();return le?(le.queryRenderedFeatures(U==null?void 0:U.point)||[]).filter(De=>{var Le,C,$,q,fe;if(!((Le=De==null?void 0:De.properties)!=null&&Le.id))return!1;const Be=qe(De.source);if(!Be)return!1;const Ie=($=(C=Be==null?void 0:Be.opts)==null?void 0:C.source)==null?void 0:$.type,je=(fe=(q=Be==null?void 0:Be.opts)==null?void 0:q.layer)==null?void 0:fe.type;return Ie!=="raster"&&je!=="raster"}):[]}async function Jr(U){var Ie,je,Le,C,$;const le=(Ie=U==null?void 0:U.lngLat)==null?void 0:Ie.lng,Te=(je=U==null?void 0:U.lngLat)==null?void 0:je.lat;if(typeof le!="number"||typeof Te!="number")return[];const De=Ut();if(!De.length)return[];const Be=[];for(let q=0;q<De.length;q+=1){const fe=De[q],_e=new URLSearchParams({layer:fe,lat:Te.toFixed(6),lng:le.toFixed(6)});try{const Ee=await hn(_e),Me=Ft(((Le=Ee==null?void 0:Ee.data)==null?void 0:Le.geom)??(Ee==null?void 0:Ee.geom)??null),ze=((C=Ee==null?void 0:Ee.data)==null?void 0:C.id)??(Ee==null?void 0:Ee.id);if(ze!=null){const Ue=await hn(new URLSearchParams({layer:fe,id:String(ze)})),Ge=typeof(Ue==null?void 0:Ue.html)=="string"?Ue.html:null,ot=Ft((($=Ue==null?void 0:Ue.data)==null?void 0:$.geom)??(Ue==null?void 0:Ue.geom)??null);if(Ge||ot){Be.push({html:Ge,geometry:ot??Me,infoToken:`external:${fe},${String(ze)}`});continue}}Ll({html:Ee==null?void 0:Ee.html})&&Be.push({html:Ee.html,geometry:Me,infoToken:null})}catch{}}return Be}async function xn(U){var Be,Ie;const le=U==null?void 0:U.lngLat;if(h.value==="height"&&le){await k.measureAt({lat:le.lat,lng:le.lng});return}p.value.includes("route")&&f.value&&le&&((Be=w.value)==null||Be.addPoint({lat:le.lat,lng:le.lng})),p.value.includes("ruler")&&b.value&&le&&((Ie=v.value)==null||Ie.addPoint({lat:le.lat,lng:le.lng}));const Te=bn(U),De=await Jr(U).catch(()=>[]);wt({features:Te,externalItems:De})}function Qr(){var U,le;h.value==="ruler"?(D.value=[],Q.value=!1,(U=v.value)==null||U.clearPoints(),h.value=null):(h.value==="route"&&(xe.value=[],se.value=null,(le=w.value)==null||le.clearPoints()),T.value=null,L.value=null,h.value="ruler")}function Io(){if(h.value==="height"){k.reset(),h.value=null;return}k.reset(),h.value="height"}function el(){var U,le,Te;h.value==="route"?(xe.value=[],se.value=null,(U=w.value)==null||U.clearPoints(),h.value=null):(h.value==="ruler"&&(D.value=[],Q.value=!1,(le=v.value)==null||le.clearPoints()),T.value=null,L.value=null,xe.value=[],se.value=null,(Te=w.value)==null||Te.clearPoints(),h.value="route")}function tl(){h.value=null,D.value=[],Q.value=!1}function Wn(){k.reset(),h.value=null}function nl(){h.value=null,xe.value=[],se.value=null,te.value=null}function ol(){var U;h.value==="draw"?h.value=null:(h.value==="route"&&(xe.value=[],se.value=null,(U=w.value)==null||U.clearPoints()),T.value=null,L.value=null,h.value="draw")}function rl(){h.value==="add-data"?h.value=null:(T.value=null,L.value=null,h.value="add-data")}function ll(){var U;if(h.value==="geolocation"&&T.value!=null){Gn();return}if(h.value==="route"&&(xe.value=[],se.value=null,(U=w.value)==null||U.clearPoints()),L.value=null,E.value=!0,!navigator.geolocation){L.value="Геолокація не підтримується браузером",E.value=!1;return}navigator.geolocation.getCurrentPosition(le=>{const Te=le.coords.latitude,De=le.coords.longitude;T.value={lat:Te,lng:De},L.value=null,E.value=!1,h.value="geolocation",M().then(Be=>{Be!=null&&Be.flyTo&&Be.flyTo({center:[De,Te],zoom:15})})},()=>{L.value="Не вдалося визначити місце розташування",E.value=!1},{enableHighAccuracy:!0})}function Yn(){h.value=null,T.value=null,L.value=null}function Gn(){const U=T.value;U!=null&&M().then(le=>{le!=null&&le.flyTo&&le.flyTo({center:[U.lng,U.lat],zoom:15})})}function Ro(U){D.value=U}function Zn(U){xe.value=U}function kn(U){se.value=(U==null?void 0:U.geometry)??null,te.value=null}function jo(U){te.value=U}function al(U){if(!U)return;const le=[];if(U.type==="LineString"?le.push(...U.coordinates):U.coordinates.forEach(De=>le.push(...De)),!le.length)return;const Te=le.reduce((De,[Be,Ie])=>(De[0]=[Math.min(De[0][0],Be),Math.min(De[0][1],Ie)],De[1]=[Math.max(De[1][0],Be),Math.max(De[1][1],Ie)],De),[[le[0][0],le[0][1]],[le[0][0],le[0][1]]]);M().then(De=>{var Be;(Be=De==null?void 0:De.fitBounds)==null||Be.call(De,Te,{padding:72,duration:600,maxZoom:16})})}function Oo(){var U;(U=J.value)==null||U.clear()}function Kn(){var U;(U=J.value)==null||U.finishPolygon()}function wn(){var U;(U=J.value)==null||U.undo()}function sl(){var Be,Ie,je,Le;const U=(je=(Ie=(Be=l.value)==null?void 0:Be.ctx)==null?void 0:Ie.map)==null?void 0:je.value,le=(Le=J.value)==null?void 0:Le.getCanvas();if(!U||!le)return;const Te=(C,$)=>{const q=document.createElement("a");q.download=$,q.rel="noopener",typeof C=="string"?q.href=C:(q.href=URL.createObjectURL(C),setTimeout(()=>URL.revokeObjectURL(q.href),100)),document.body.appendChild(q),q.click(),document.body.removeChild(q)},De=()=>{const C=U.getCanvas();if(!C)return;const $=C.width,q=C.height;if($<=0||q<=0)return;const fe=document.createElement("canvas");fe.width=$,fe.height=q;const _e=fe.getContext("2d");if(!_e)return;_e.drawImage(C,0,0),_e.drawImage(le,0,0,le.width,le.height,0,0,$,q);const Ee=`map-drawing-${Date.now()}.png`;fe.toBlob(Me=>{if(Me){Te(Me,Ee);return}try{const ze=fe.toDataURL("image/png");Te(ze,Ee)}catch{const ze=document.createElement("canvas");ze.width=le.width,ze.height=le.height;const Ue=ze.getContext("2d");Ue&&(Ue.drawImage(le,0,0),ze.toBlob(Ge=>Ge&&Te(Ge,Ee),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(De))}async function il(){const U=await M();U!=null&&U.on&&(Ne==null||Ne(),Ne=U.on("moveend",j),Se==null||Se(),Se=U.on("mousemove",st),ct==null||ct(),ct=U.on("click",xn))}e.onUnmounted(()=>{Ne==null||Ne(),Ne=null,Se==null||Se(),Se=null,ct==null||ct(),ct=null});async function Et(U=!1,le=!1){var De,Be;le||(c.value=!1,u.value=null,R.value=null);const Te=U||!n.data;le||(d.value=Te);try{const Ie=Te?await(async()=>{const q=await fetch(`/api/gis-map/${encodeURIComponent(A.value)}`);if(!q.ok)throw new Error(`Помилка завантаження (${q.status})`);return q.json()})():n.data;Te||(c.value=!0);const je=Wt(Ie.center)??Z,Le=Ae(Ie.layers).map(q=>ie(q)),C=ye(Ie.zoom)??G;s.value={...Ie,center:je??null,zoom:C??Ie.zoom??null,layers:Le,widgets:Ie.widgets},p.value=Ie.tools||["home","print","ruler","draw","add-data"];const $=await M();$&&(je&&((De=$.setCenter)==null||De.call($,je)),C!=null&&((Be=$.setZoom)==null||Be.call($,C)),i.value||await Ve()),await be(),await re(),le||await il(),c.value=!0}catch(Ie){u.value=(Ie==null?void 0:Ie.message)||"Не вдалося завантажити карту"}finally{Te&&!le&&(d.value=!1)}}const Xn=e.computed(()=>{var De;const U=new Map;return Ae((De=s.value)==null?void 0:De.layers).forEach(Be=>{if(!(Be!=null&&Be.id))return;const Ie=ie(Be)||Be;U.set(Be.id,{...Ie})}),$e.value.filter(Be=>(Be==null?void 0:Be.type)==="layers").flatMap(Be=>{var Ie;return Ae((Ie=Be==null?void 0:Be.config)==null?void 0:Ie.layers)}).forEach(Be=>{if(!(Be!=null&&Be.id))return;const Ie=U.get(Be.id)||{},je=ie(Be)||Be;U.set(Be.id,{...Ie,...je,actions:Be.actions||Ie.actions||null,name:Ie.name||Be.name||Be.title||Ie.title||Be.id,title:Ie.title||Be.title||Ie.name||null,visible:Ie.visible??Be.visible??!0})}),Array.from(U.values())}),qt=e.ref([]);function tn(U){qt.value.includes(U)?qt.value=qt.value.filter(le=>le!==U):qt.value.push(U)}const rt=e.computed(()=>U=>qt.value.includes(U.id));return e.watch([H,oe],()=>{be()},{immediate:!0}),e.watch(A,()=>{Et(!0)}),e.watch(()=>n.data,U=>{U&&Et(!1,!0)},{deep:!0}),e.onMounted(()=>{Et()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{re()}),e.watch(()=>se.value,U=>{!U||!f.value||al(U)},{deep:!0}),(U,le)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(me.value)},[le[10]||(le[10]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(no,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var Te,De,Be,Ie;return[at.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(rn,{key:0,class:"hidden",onStateChange:S})),c.value&&!d.value&&!et.value?e.withDirectives((e.openBlock(),e.createBlock(or,{key:1,layers:Xn.value,onAction:le[0]||(le[0]=je=>tn(je.layerId))},null,8,["layers"])),[[e.vShow,!1]]):e.createCommentVNode("",!0),ke.value?(e.openBlock(),e.createBlock(Yl,{key:2,"layer-id":"app-boundary",boundary:ke.value.boundary,katottg:ke.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),ge.value&&p.value.includes("draw")&&N.value?(e.openBlock(),e.createElementBlock("div",ch,[e.createVNode(Ly,{ref_key:"drawingPanelRef",ref:K,onClose:le[1]||(le[1]=je=>h.value=null),onClear:Oo,onDownload:sl,onFinishPolygon:Kn,onUndo:wn,"onUpdate:tool":le[2]||(le[2]=je=>O.value=je),"onUpdate:strokeColor":le[3]||(le[3]=je=>ne.value=je),"onUpdate:strokeWidth":le[4]||(le[4]=je=>de.value=je)},null,512)])):e.createCommentVNode("",!0),ge.value?(e.openBlock(),e.createElementBlock("div",dh,[ee.value?(e.openBlock(),e.createBlock(Dm,{key:0,coordinates:ee.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(Im,{"map-context":ge.value,options:we.value},null,8,["map-context","options"]),p.value.includes("ruler")&&b.value?(e.openBlock(),e.createBlock(Ul,{key:1,ref_key:"rulerPanelRef",ref:v,onClose:tl,onTabChange:le[5]||(le[5]=je=>B.value=je),onPointsChange:Ro,onShapeClosedChange:le[6]||(le[6]=je=>Q.value=je)},null,512)):e.createCommentVNode("",!0),x.value?(e.openBlock(),e.createBlock(py,{key:2,onClose:Wn})):e.createCommentVNode("",!0),p.value.includes("geolocation")&&V.value?(e.openBlock(),e.createBlock(Kg,{key:3,position:T.value,onClose:Yn,onRecenter:Gn},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",uh,[e.createVNode(Am),p.value.includes("home")?(e.openBlock(),e.createBlock(Yt,{key:0,center:((Te=s.value)==null?void 0:Te.center)||((De=i.value)==null?void 0:De.center)||null,zoom:((Be=s.value)==null?void 0:Be.zoom)??((Ie=i.value)==null?void 0:Ie.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),p.value.includes("compare")?(e.openBlock(),e.createBlock(Nm,{key:1,"has-compare-options":a.value.length>1,"is-compare-open":m.value,onToggle:Y},null,8,["has-compare-options","is-compare-open"])):e.createCommentVNode("",!0),p.value.includes("print")?(e.openBlock(),e.createBlock(_m,{key:2})):e.createCommentVNode("",!0),p.value.includes("route")?(e.openBlock(),e.createBlock(Yp,{key:3,ref_key:"routePanelRef",ref:w,active:f.value,onToggle:el,onClose:nl,onPointsChange:Zn,onInstructionHover:jo,onRouteChange:kn},null,8,["active"])):e.createCommentVNode("",!0),p.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:4,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",V.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":V.value?"Вимкнути геолокацію":"Ваше розташування",disabled:E.value,onClick:e.withModifiers(ll,["stop"])},[e.createElementVNode("span",mh,e.toDisplayString(V.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(he.MapPin),{class:"w-4 h-4"})],10,fh)):e.createCommentVNode("",!0),p.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:5,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",b.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":b.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(Qr,["stop"])},[e.createElementVNode("span",gh,e.toDisplayString(b.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(he.Ruler),{class:"w-4 h-4"})],10,ph)):e.createCommentVNode("",!0),p.value.includes("height")?(e.openBlock(),e.createElementBlock("button",{key:6,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",x.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти",onClick:e.withModifiers(Io,["stop"])},[e.createElementVNode("span",hh,e.toDisplayString(x.value?"Вимкнути вимірювання висоти":"Вимірювання висоти"),1),e.createVNode(e.unref(he.TrendingUp),{class:"w-4 h-4"})],10,yh)):e.createCommentVNode("",!0),p.value.includes("draw")?(e.openBlock(),e.createElementBlock("button",{key:7,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",N.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":N.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(ol,["stop"])},[e.createElementVNode("span",xh,e.toDisplayString(N.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(he.Pen),{class:"w-4 h-4"})],10,bh)):e.createCommentVNode("",!0),p.value.includes("add-data")?(e.openBlock(),e.createElementBlock("button",{key:8,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",_.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":_.value?"Закрити додавання даних":"Додавання даних",onClick:e.withModifiers(rl,["stop"])},[e.createElementVNode("span",wh,e.toDisplayString(_.value?"Закрити додавання даних":"Додавання даних"),1),e.createVNode(e.unref(he.Upload),{class:"w-4 h-4"})],10,kh)):e.createCommentVNode("",!0)]),c.value&&b.value&&D.value.length>0?(e.openBlock(),e.createBlock(ql,{key:5,points:D.value,"is-shape-closed":Q.value,"label-mode":B.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),c.value&&p.value.includes("height")&&x.value?(e.openBlock(),e.createBlock(yy,{key:6,point:e.unref(k).point.value},null,8,["point"])):e.createCommentVNode("",!0),c.value&&xe.value.length>0?(e.openBlock(),e.createBlock(Gp,{key:7,points:xe.value,"route-geometry":se.value,"hover-geometry":te.value},null,8,["points","route-geometry","hover-geometry"])):e.createCommentVNode("",!0),c.value&&T.value!=null?(e.openBlock(),e.createBlock(Xg,{key:8,position:T.value},null,8,["position"])):e.createCommentVNode("",!0),c.value&&N.value?(e.openBlock(),e.createBlock(Ty,{key:9,ref_key:"drawingCanvasRef",ref:J,tool:O.value,"stroke-color":ne.value,"stroke-width":de.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[_.value?(e.openBlock(),e.createBlock(ih,{key:0,onClose:le[7]||(le[7]=je=>h.value=null)})):e.createCommentVNode("",!0)])),c.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:10},[e.createElementVNode("div",_h,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(nt,je=>e.createElementVNode("div",{key:je,class:e.normalizeClass(["map-widget__side",`map-widget__side--${je}`])},[je==="left"?(e.openBlock(),e.createElementBlock("div",Eh)):e.createCommentVNode("",!0),P.value[je].top.length?(e.openBlock(),e.createElementBlock("div",Ch,[e.createElementVNode("div",Nh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value[je].top,Le=>{var C,$,q,fe,_e,Ee,Me;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Le.id||Le.type,class:"map-overlay__item"},[Le.type==="info"?(e.openBlock(),e.createBlock(_l,{key:0,title:((C=Le.config)==null?void 0:C.title)||Le.title||null,content:(($=Le.config)==null?void 0:$.content)||"",links:z.value,"map-name":I.value,"map-description":F.value},null,8,["title","content","links","map-name","map-description"])):Le.type==="catalog"?(e.openBlock(),e.createBlock(Fl,{key:1,api:((q=Le.config)==null?void 0:q.api)||null},null,8,["api"])):Le.type==="layers"&&!d.value?(e.openBlock(),e.createBlock(or,{key:2,layers:Xn.value,onAction:le[8]||(le[8]=ze=>tn(ze.layerId)),config:Le.config},null,8,["layers","config"])):Le.type==="basemaps"?(e.openBlock(),e.createBlock(rn,{key:3,layers:((fe=Le.config)==null?void 0:fe.layers)||null,"default-layer":((_e=Le.config)==null?void 0:_e.default)||null,title:Le.title||((Ee=Le.config)==null?void 0:Ee.title)||null,onStateChange:S},null,8,["layers","default-layer","title"])):Le.type==="legend"?(e.openBlock(),e.createBlock(ar,{key:4,items:Re(Le)},null,8,["items"])):Le.type==="filters"&&rt.value(Le)?(e.openBlock(),e.createBlock(sr,{key:5,"layer-id":(Me=Le.config)==null?void 0:Me.layer,onClose:tn},null,8,["layer-id"])):Le.type==="dataset"||Le.type==="attribute"?(e.openBlock(),e.createBlock(Dl,{key:6,config:Le.config},null,8,["config"])):Le.type==="search"?(e.openBlock(),e.createBlock(zl,{key:7,config:Le.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Le.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),P.value[je].bottom.length?(e.openBlock(),e.createElementBlock("div",Vh,[e.createElementVNode("div",Bh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(P.value[je].bottom,Le=>{var C,$,q,fe,_e,Ee,Me;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:Le.id||Le.type,class:"map-overlay__item"},[Le.type==="info"?(e.openBlock(),e.createBlock(_l,{key:0,title:((C=Le.config)==null?void 0:C.title)||Le.title||null,content:(($=Le.config)==null?void 0:$.content)||"",links:z.value,"map-name":I.value,"map-description":F.value},null,8,["title","content","links","map-name","map-description"])):Le.type==="catalog"?(e.openBlock(),e.createBlock(Fl,{key:1,api:((q=Le.config)==null?void 0:q.api)||null},null,8,["api"])):Le.type==="layers"&&!d.value?(e.openBlock(),e.createBlock(or,{key:2,layers:Xn.value,onAction:le[9]||(le[9]=ze=>tn(ze.layerId)),config:Le.config},null,8,["layers","config"])):Le.type==="basemaps"?(e.openBlock(),e.createBlock(rn,{key:3,layers:((fe=Le.config)==null?void 0:fe.layers)||null,"default-layer":((_e=Le.config)==null?void 0:_e.default)||null,title:Le.title||((Ee=Le.config)==null?void 0:Ee.title)||null,onStateChange:S},null,8,["layers","default-layer","title"])):Le.type==="legend"?(e.openBlock(),e.createBlock(ar,{key:4,items:Re(Le)},null,8,["items"])):Le.type==="filters"&&rt.value(Le)?(e.openBlock(),e.createBlock(sr,{key:5,"layer-id":(Me=Le.config)==null?void 0:Me.layer,onClose:tn},null,8,["layer-id"])):Le.type==="dataset"||Le.type==="attribute"?(e.openBlock(),e.createBlock(Dl,{key:6,config:Le.config},null,8,["config"])):Le.type==="search"?(e.openBlock(),e.createBlock(zl,{key:7,config:Le.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,Le.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(Sl),e.createVNode(lr,{"map-id":A.value},null,8,["map-id"]),p.value.includes("compare")?(e.openBlock(),e.createBlock(Ym,{key:0,"compare-basemaps":a.value,"is-compare-open":m.value,"selected-basemap-id":g.value,onClose:ue},null,8,["compare-basemaps","is-compare-open","selected-basemap-id"])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)]}),_:1},512),d.value?(e.openBlock(),e.createElementBlock("div",$h,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",Sh,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-b88845f8"]]),vh=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function Ln(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,s]=n.split("-");if(!r||!l||!s)return t;const i=parseInt(l,10),d=vh[i]||l;let u=`${parseInt(s,10)} ${d} ${r}`;if(o){const c=o.split(".")[0],[p,a,g]=c.split(":");p&&a&&g?u+=`, ${p}:${a}:${g}`:p&&a?u+=`, ${p}:${a}`:p&&(u+=`, ${p}`)}return u}function Tn(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 Lh={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"},Th={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"},Ah={class:"flex flex-col gap-2 md:flex-row md:items-center"},Mh={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},Fh={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},Dh={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap","data-v0-t":"badge"},Ph={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},zh={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"},Ih={class:"p-3 md:p-3.5 lg:p-4 pt-2"},Rh={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},jh={class:"text-gray-500 shrink-0 md:max-w-[50%]"},Oh={class:"font-medium flex flex-wrap gap-1"},Uh={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},qh=["href"],Hh=["href"],Gl=e.defineComponent({__name:"template-1",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),d=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,g)=>{if(g)return a[g]},c=a=>{const g=u(a,n.id_key);return`${n.path}?id=${g}`},p=(a,g)=>{const m=u(a,n.id_key);return`/map?layers=${g}&info=${g},${m}`};return(a,g)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var y,k,h;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",Lh,[e.createElementVNode("div",Th,[e.createElementVNode("div",Ah,[e.createElementVNode("h2",Mh,e.toDisplayString(m[`${(y=l.value)==null?void 0:y.name}_text`]||m[(k=l.value)==null?void 0:k.name]||m[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Fh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("div",Dh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Ph,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("span",zh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ih,[e.createElementVNode("div",Rh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>{var b;return e.openBlock(),e.createElementBlock("div",{key:f.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",jh,e.toDisplayString((f==null?void 0:f.ua)||f.label||f.name)+": ",1),e.createElementVNode("span",Oh,[Array.isArray(m[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Tn)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=m[(f==null?void 0:f.name)+"_data"])==null?void 0:b.text)||m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Uh,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:p(m,m==null?void 0:m.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"},[...g[0]||(g[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,qh)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:c(m),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"},[...g[1]||(g[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,Hh))])])}),128))}}),Wh={class:"p-0"},Yh={class:"border-l-4 border-l-slate-400"},Gh={class:"p-4"},Zh={class:"flex flex-wrap items-center gap-2 mb-3"},Kh={class:"text-lg font-bold"},Xh={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"},Jh={key:1,class:"flex"},Qh={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"},e0={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"},t0={class:"text-xs text-gray-500 mb-1"},n0={class:"font-medium"},o0={class:"flex justify-end gap-2 mt-3 border-t pt-3"},r0=["href"],l0=["href"],Zl=e.defineComponent({__name:"template-2",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),d=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,g)=>{if(g)return a[g]},c=a=>{const g=u(a,n.id_key);return`${n.path}?id=${g}`},p=(a,g)=>{const m=u(a,n.id_key);return`/map?layers=${g}&info=${g},${m}`};return(a,g)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var y,k,h;return e.openBlock(),e.createElementBlock("div",{key:m.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Wh,[e.createElementVNode("div",Yh,[e.createElementVNode("div",Gh,[e.createElementVNode("div",Zh,[e.createElementVNode("h2",Kh,e.toDisplayString(m[`${(y=l.value)==null?void 0:y.name}_text`]||m[(k=l.value)==null?void 0:k.name]||m[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("div",Xh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",Jh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-wrap gap-1 ml-2"},[m[f.name]?(e.openBlock(),e.createElementBlock("span",Qh,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",e0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>{var b;return e.openBlock(),e.createElementBlock("div",{key:f.name},[e.createElementVNode("p",t0,e.toDisplayString(f.ua),1),e.createElementVNode("p",n0,[Array.isArray(m[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[f==null?void 0:f.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Tn)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=m[(f==null?void 0:f.name)+"_data"])==null?void 0:b.text)||m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",o0,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:p(m,m==null?void 0:m.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"},[...g[0]||(g[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,r0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:c(m),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"},[...g[1]||(g[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,l0))])])])])])}),128))}}),a0={class:"space-y-4"},s0={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},i0={class:"flex-1"},c0={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},d0={class:"col-span-1 lg:col-span-4"},u0={class:"flex items-start"},f0={class:"flex flex-col"},m0={class:"font-bold text-xs lg:text-sm"},p0={key:0,class:"flex flex-wrap gap-1 mt-1"},g0={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},y0={key:1,class:"flex flex-wrap gap-1 mt-1"},h0={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"},b0={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},x0={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},k0={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},w0={class:"truncate font-medium text-xs lg:text-sm"},_0={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},E0=["href"],C0=["href"],Kl=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=g=>(g==null?void 0:g.service_id)&&(g==null?void 0:g.is_map)&&g[n.id_key]&&(g==null?void 0:g.geom),l=e.computed(()=>n.columns.find(g=>g.meta==="title")),s=e.computed(()=>n.columns.filter(g=>g.meta==="category")),i=e.computed(()=>n.columns.filter(g=>g.meta==="tags")),d=e.computed(()=>n.columns.filter(g=>g.meta!=="title")),u=e.computed(()=>"bg-blue-500"),c=(g,m)=>{if(m)return g[m]},p=g=>{const m=c(g,n.id_key);return`${n.path}?id=${m}`},a=(g,m)=>{const y=c(g,n.id_key);return`/map?layers=${m}&info=${m},${y}`};return(g,m)=>(e.openBlock(),e.createElementBlock("div",a0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,y=>{var k,h,f;return e.openBlock(),e.createElementBlock("div",{key:y.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",s0,[e.createElementVNode("div",i0,[e.createElementVNode("div",c0,[e.createElementVNode("div",d0,[e.createElementVNode("div",u0,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",u.value])},null,2),e.createElementVNode("div",f0,[e.createElementVNode("p",m0,e.toDisplayString(y[`${(k=l.value)==null?void 0:k.name}_text`]||y[(h=l.value)==null?void 0:h.name]||y[(f=l.value)==null?void 0:f.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",p0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[y[b.name]?(e.openBlock(),e.createElementBlock("span",g0,e.toDisplayString(y[`${b.name}_text`]||y[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",y0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[y[b.name]?(e.openBlock(),e.createElementBlock("span",h0,e.toDisplayString(y[`${b.name}_text`]||y[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",b0,[e.createElementVNode("div",x0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,b=>{var x;return e.openBlock(),e.createElementBlock("div",{key:b.name},[e.createElementVNode("p",k0,e.toDisplayString(b.ua),1),e.createElementVNode("p",w0,[Array.isArray(y[b.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(y[b.name],(N,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(N),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(Tn)(y[b.name])||"Немає даних"),1)],64)):b.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(y[b.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((x=y[b.name+"_data"])==null?void 0:x.text)||y[b.name+"_text"]||y[b.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",_0,[!t.hideDetailsButton&&r(y)?(e.openBlock(),e.createElementBlock("a",{key:0,href:a(y,y.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"},[...m[0]||(m[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,E0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:p(y),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"},[...m[1]||(m[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5 lg:h-4 lg:w-4"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)])],8,C0))])])])}),128))]))}}),N0={class:"flex flex-col space-y-1.5 p-6 pb-2"},V0={class:"flex items-center gap-2 flex-wrap"},B0={class:"tracking-tight text-lg font-medium"},$0={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"},S0={key:1,class:"flex"},v0={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"},L0={class:"p-6 pt-0 pb-4"},T0={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},A0={class:"text-sm text-gray-500"},M0={class:"font-medium"},F0={class:"flex items-center p-6 pt-0 gap-2"},D0=["href"],P0=["href"],Xl=e.defineComponent({__name:"template-4",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=a=>(a==null?void 0:a.service_id)&&(a==null?void 0:a.is_map)&&a[n.id_key]&&(a==null?void 0:a.geom),l=e.computed(()=>n.columns.find(a=>a.meta==="title")),s=e.computed(()=>n.columns.filter(a=>a.meta==="category")),i=e.computed(()=>n.columns.filter(a=>a.meta==="tags")),d=e.computed(()=>n.columns.filter(a=>a.meta!=="title")),u=(a,g)=>{if(g)return a[g]},c=a=>{const g=u(a,n.id_key);return`${n.path}?id=${g}`},p=(a,g)=>{const m=u(a,n.id_key);return`/map?layers=${g}&info=${g},${m}`};return(a,g)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,m=>{var y,k,h;return e.openBlock(),e.createElementBlock("div",{key:m.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",N0,[e.createElementVNode("div",V0,[e.createElementVNode("h3",B0,e.toDisplayString(m[`${(y=l.value)==null?void 0:y.name}_text`]||m[(k=l.value)==null?void 0:k.name]||m[(h=l.value)==null?void 0:h.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[m[f.name]?(e.openBlock(),e.createElementBlock("div",$0,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",S0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-wrap gap-1 ml-2"},[m[f.name]?(e.openBlock(),e.createElementBlock("span",v0,e.toDisplayString(m[`${f.name}_text`]||m[f.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",L0,[e.createElementVNode("div",T0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>{var b;return e.openBlock(),e.createElementBlock("div",{key:f.name},[e.createElementVNode("p",A0,e.toDisplayString(f.ua),1),e.createElementVNode("p",M0,[Array.isArray(m[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m[f==null?void 0:f.name],(x,N)=>(e.openBlock(),e.createElementBlock("span",{key:N,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(x),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Tn)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(m[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=m[(f==null?void 0:f.name)+"_data"])==null?void 0:b.text)||m[(f==null?void 0:f.name)+"_text"]||m[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",F0,[!t.hideDetailsButton&&r(m)?(e.openBlock(),e.createElementBlock("a",{key:0,href:p(m,m==null?void 0:m.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,D0)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:c(m),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,P0))])])}),128))}}),z0={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},I0={key:0,class:"w-full lg:w-auto lg:col-span-1"},R0=["src"],j0={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},O0={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},U0={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},q0={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},H0={class:"flex flex-wrap gap-2 lg:gap-0"},W0={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"},Y0={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},G0={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},Z0={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},K0=["innerHTML"],X0={class:"text-gray-500 font-medium md:font-normal"},J0={class:"text-gray-600 break-words line-clamp-2"},Q0={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"},eb={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},tb={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},nb={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"},ob={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"},rb={class:"w-full space-y-2"},lb=["href"],ab=["href"],Jl=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=m=>(m==null?void 0:m.service_id)&&(m==null?void 0:m.is_map)&&m[n.id_key]&&(m==null?void 0:m.geom),l=e.computed(()=>n.columns.find(m=>m.meta==="title")),s=e.computed(()=>n.columns.filter(m=>m.meta==="category")),i=e.computed(()=>n.columns.filter(m=>m.meta==="tags")),d=e.computed(()=>n.columns.filter(m=>m.meta!=="title")),u=e.computed(()=>n.columns.find(m=>m.meta==="image")),c=e.computed(()=>n.columns.find(m=>m.meta==="desc")||n.columns.find(m=>m.name==="description")),p=(m,y)=>{if(y)return m[y]},a=m=>{const y=p(m,n.id_key);return`${n.path}?id=${y}`},g=(m,y)=>{const k=p(m,n.id_key);return`/map?layers=${y}&info=${y},${k}`};return(m,y)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,k=>{var h,f,b,x,N,V,_,w,B;return e.openBlock(),e.createElementBlock("div",{key:k.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",z0,[u.value?(e.openBlock(),e.createElementBlock("div",I0,[k[(h=u.value)==null?void 0:h.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:k[(f=u.value)==null?void 0:f.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,R0)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",j0,[...y[0]||(y[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",O0,[e.createElementVNode("div",U0,[e.createElementVNode("h3",q0,e.toDisplayString(k[`${(b=l.value)==null?void 0:b.name}_text`]||k[(x=l.value)==null?void 0:x.name]||k[(N=l.value)==null?void 0:N.label]||"Не вказано"),1),e.createElementVNode("div",H0,[Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,v=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:v.name},[k[v.name]?(e.openBlock(),e.createElementBlock("div",W0,e.toDisplayString(k[`${v.name}_text`]||k[v.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",Y0,e.toDisplayString(((_=k[((V=c.value)==null?void 0:V.name)+"_data"])==null?void 0:_.text)||k[((w=c.value)==null?void 0:w.name)+"_text"]||k[(B=c.value)==null?void 0:B.name]),1),e.createElementVNode("div",G0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,v=>{var K;return e.openBlock(),e.createElementBlock("div",{key:v.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",Z0,[v.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:v.icon},null,8,K0)):e.createCommentVNode("",!0),e.createElementVNode("span",X0,e.toDisplayString((v==null?void 0:v.ua)||v.label||v.name)+":",1)]),e.createElementVNode("span",J0,[Array.isArray(k[v==null?void 0:v.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(k[v==null?void 0:v.name],(J,O)=>(e.openBlock(),e.createElementBlock("span",{key:O,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(J),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[v.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Tn)(k[v==null?void 0:v.name])||"Немає даних"),1)],64)):v.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Ln)(k[v==null?void 0:v.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((K=k[(v==null?void 0:v.name)+"_data"])==null?void 0:K.text)||k[(v==null?void 0:v.name)+"_text"]||k[v==null?void 0:v.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Q0,[e.createElementVNode("p",eb," Теги: "+e.toDisplayString(i.value.length&&k[i.value[0].name]?"":"відсутні"),1),Array.isArray(i.value)&&i.value.length?(e.openBlock(),e.createElementBlock("div",tb,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,v=>(e.openBlock(),e.createElementBlock("div",{key:v.name,class:"flex flex-wrap gap-1"},[k[v.name]?(e.openBlock(),e.createElementBlock("span",nb,e.toDisplayString(k[`${v.name}_text`]||k[v.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ob,[e.createElementVNode("div",rb,[!t.hideDetailsButton&&r(k)?(e.openBlock(),e.createElementBlock("a",{key:0,href:g(k,k==null?void 0:k.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," На карті ",8,lb)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:a(k),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," Детальніше ",8,ab))])])])])}),128))}});function sb(t){t.component("MapCustom",_o)}const ib={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},cb={key:0,class:"flex items-center gap-2 flex-shrink-0"},db={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},sn=e.defineComponent({__name:"TableFormHeader",props:{variant:{default:"table"},title:{default:""}},setup(t){const n=t,o=e.computed(()=>n.variant==="table"?"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[24px]":"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[16px]"),r=e.computed(()=>n.variant==="form"?"font-medium":"");return(l,s)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[l.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",ib,[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",cb,[e.renderSlot(l.$slots,"actions")])):e.createCommentVNode("",!0)],2),l.$slots.description?(e.openBlock(),e.createElementBlock("p",db,[e.renderSlot(l.$slots,"description")])):e.createCommentVNode("",!0)],2))}}),ub={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},fb={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"},mb={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},pb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},gb={class:"p-3 border-b border-gray-200"},yb={class:"flex flex-col sm:flex-row gap-2"},hb={class:"entity-table-root"},bb={class:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-green-100 text-green-800"},xb={key:0,class:"gap-2 inline-flex"},kb=["onClick"],wb={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"},_b={class:"text-sm text-gray-500"},Eb={class:"font-medium text-gray-700"},Cb={class:"font-medium text-gray-700"},Nb={class:"font-medium text-gray-700"},Vb={class:"flex items-center justify-end gap-3"},Eo=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"EntityTablePage",props:{entityKey:{default:""},entityBasePath:{default:""},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=He.useRoute(),r=He.useRouter(),l=t,s=e.computed(()=>l.entityKey||String(o.name??"").split("-")[0]),i=e.computed(()=>{var L;let E=(((L=o.matched[o.matched.length-1])==null?void 0:L.path)||o.path).replace(/\/:id\??\/:action\??$/,"").replace(/\/:id\??$/,"").replace(/\/:action\??$/,"");return E.startsWith("/")||(E=`/${E}`),E}),d=e.computed(()=>l.entityBasePath||i.value),u=e.computed(()=>{var E;const T=((E=o.matched[o.matched.length-1])==null?void 0:E.path)||"";return/:id\??/.test(T)&&/:action\??/.test(T)}),c=e.computed(()=>{var E,L;return(E=o.meta)!=null&&E.title?o.meta.title:o.name?o.name:((L=o.path)==null?void 0:L.replace(/^\//,""))||""||"GIS"}),p=e.computed(()=>{var T;return((T=o.meta)==null?void 0:T.description)||""}),a=e.computed(()=>{const T=String(c.value||"").trim();return T?`Пошук ${T}...`:"Пошук..."}),g=e.ref([]),m=e.ref(!0),y=e.ref([]),k=e.ref([]),h=e.ref({}),f=e.ref([]),b=e.ref(String(o.query.search??"")),x=e.ref(Math.max(1,Number(o.query.page)||1)),N=e.ref(15),V=e.ref(0),_=e.computed(()=>V.value>0),w=e.computed(()=>V.value?(x.value-1)*N.value+1:0),B=e.computed(()=>V.value?Math.min(x.value*N.value,V.value):0);function v(T){const E=new URLSearchParams;return Object.entries(T).forEach(([L,A])=>{if(!(A==null||A==="")){if(Array.isArray(A)){A.forEach(me=>{me!=null&&me!==""&&E.append(L,String(me))});return}E.append(L,String(A))}}),E.toString()}function K(){return u.value?`${d.value}/new`:o.name==="services"?"/gis.datasets/new":o.name==="group_list"?"/gis.group/add":`${o.path}/add`}function J(T){if(u.value)return`${d.value}/${T}/edit`;const E=String(o.name??"").split("_")[0];return E==="services"?`/gis.datasets/${T}/edit`:`/gis.${E}/edit/${T}`}const O=async()=>{const T=`/api/data/gis.${s.value}.table`;if(!T){g.value=[],m.value=!1;return}try{m.value=!0;const E=v({...h.value,page:x.value,limit:N.value}),L=await fetch(E?`${T}?${E}`:T);if(!L.ok)throw new Error(`Rows fetch failed: ${L.status}`);const A=await L.json();g.value=A.rows||[],V.value=Number(A.filtered??A.total??A.count??g.value.length)||0,y.value=l.columnsConfig.length?l.columnsConfig:A.columns||[],k.value=A.filters||[],m.value=!1,f.value=A.actions,A.card!==!1&&y.value.length&&(u.value?y.value[0].link=`${d.value}/{id}`:y.value[0].link||(y.value[0].link=`/${o.name}/{id}`))}catch{g.value=[],m.value=!1}};function ne(T){h.value=T,x.value=1,Q(),O()}e.onMounted(()=>{O(),document.title=c.value}),e.watch(()=>o.name,()=>{x.value=1,b.value="",O(),document.title=c.value}),e.watch(()=>o.query,T=>{const E=Math.max(1,Number(T.page)||1),L=String(T.search??""),A=E!==x.value,me=L!==b.value;!A&&!me||(x.value=E,b.value=L,h.value={...h.value,search:L||void 0},O())});async function de(T,E,L){const A=await fetch(`/api/form/gis.${s.value}.table/${T.id}`);if(!A.ok)throw new Error(`Form fetch failed: ${A.status}`);const I=(await A.json()).token,F={[E]:L},z=await fetch(`/api/table/${I}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(F)});if(!z.ok)throw Ce.notify({type:"error",title:"Помилка збереження",message:`Поле "${E}" не оновлено`}),new Error(`Save failed: ${z.status}`);Ce.notify({title:"Збережено",message:`Поле "${E}" оновлено`})}function xe(T,E){h.value={...h.value,[T]:E},x.value=1,Q(),O()}function se(T){xe((T==null?void 0:T.name)||"search",(T==null?void 0:T.value)??b.value)}function te(T){b.value="",xe(T||"search",void 0)}function D(T){!T||T===x.value||(x.value=T,Q(),O())}function Q(){const T={...o.query,page:String(x.value),...b.value?{search:b.value}:{}};b.value||delete T.search,r.replace({query:T})}return(T,E)=>(e.openBlock(),e.createElementBlock("div",ub,[e.createVNode(sn,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.value),1)]),actions:e.withCtx(()=>[e.unref(o).name==="rasters"?(e.openBlock(),e.createElementBlock("a",fb,[e.createVNode(e.unref(he.RefreshCw),{size:16}),E[2]||(E[2]=e.createTextVNode(" Оновити растри ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("a",{onClick:E[0]||(E[0]=L=>e.unref(r).push(K())),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(he.Plus),{size:16}),E[3]||(E[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[p.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",mb,[e.createElementVNode("div",pb,[e.createElementVNode("div",gb,[e.createElementVNode("div",yb,[e.createVNode(e.unref(eo.FilterField),{modelValue:b.value,"onUpdate:modelValue":E[1]||(E[1]=L=>b.value=L),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:se,onClear:te,placeholder:a.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(eo.Filter),{schema:k.value,value:h.value,onChange:ne,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",hb,[e.createVNode(e.unref(n),{rows:g.value,columns:y.value,loading:m.value,router:e.unref(r),selectable:!1,onCellUpdate:de,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:L,value:A,column:me})=>[e.renderSlot(T.$slots,"badge",{row:L,value:A,column:me},()=>[e.createElementVNode("span",bb,e.toDisplayString((A==null?void 0:A.text)||A||"-"),1)],!0)]),action:e.withCtx(({row:L})=>[e.renderSlot(T.$slots,"action",{row:L},()=>[f.value.includes("add")?(e.openBlock(),e.createElementBlock("div",xb,[e.createElementVNode("button",{onClick:A=>e.unref(r).push(J(L.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(to)],8,kb)])):e.createCommentVNode("",!0)],!0)]),_:3},8,["rows","columns","loading","router"])]),_.value?(e.openBlock(),e.createElementBlock("div",wb,[e.createElementVNode("div",_b,[E[4]||(E[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",Eb,e.toDisplayString(w.value),1),E[5]||(E[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",Cb,e.toDisplayString(B.value),1),E[6]||(E[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",Nb,e.toDisplayString(V.value),1)]),e.createElementVNode("div",Vb,[e.createVNode(e.unref(Ce.VsPagination),{total:V.value,page:x.value,"page-size":N.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":D,onPageChange:D},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-821aeb35"]])},Symbol.toStringTag,{value:"Module"})),Bb={class:"mx-1"},$b={class:"flex items-center gap-2 mt-[0.4rem]"},Sb={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},vb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},Lb={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"},Tb={class:"vs-form w-full"},An=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityCreatePage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=He.useRouter(),i=He.useRoute(),d=t,u=e.ref({}),c=e.ref(""),p=e.computed(()=>i.path.replace(/\/(add|new)$/,"")),a=e.computed(()=>{var h;return((h=s.resolve(p.value).meta)==null?void 0:h.title)??""}),g=e.computed(()=>a.value?`Додати в ${a.value.toLowerCase()}`:"Додати"),m=e.computed(()=>{var h;return((h=i.meta)==null?void 0:h.description)??""});function y(){s.push(p.value||"/")}async function k(){if(!l.value){Ce.notify({type:"error",title:"Error",message:"Create token is missing."});return}const h=u.value.validate();if(h){Ce.notify({type:"warning",title:"Validation",message:Object.entries(h).map(([b,x])=>`${b}: ${x}`).join(`
3
+ `)});return}const f=await fetch("/api/table/"+l.value,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!f.ok){Ce.notify({type:"error",title:"Error",message:`Error code: ${f.status}`});return}await f.json(),Ce.notify({title:"Success!",message:"Object created."}),s.back()}return e.onMounted(async()=>{const h=d.entityKey||String(i.name??"").split("-")[0],f=await fetch(`/api/form/gis.${h}.table`).then(b=>b.json());l.value=f.token,c.value=f.id,r.value=f.schema,document.title=g.value}),(h,f)=>{const b=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(sn,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(b,{to:p.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",Bb,[e.createVNode(e.unref(he.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),f[2]||(f[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Створення",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",$b,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:y,"aria-label":"Назад"},[e.createVNode(e.unref(he.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(a.value||"Створення"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:y}," Назад "),e.createElementVNode("button",{onClick:k,class:"cursor-pointer inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 hover:bg-blue-700 border border-transparent rounded-lg gap-x-2 hover:text-white"}," Зберегти ")]),_:2},[m.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Sb,[e.createElementVNode("div",vb,[e.createElementVNode("div",Lb,[e.createElementVNode("div",Tb,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,values:o.value,"onUpdate:values":f[0]||(f[0]=x=>o.value=x),form:u.value,"onUpdate:form":f[1]||(f[1]=x=>u.value=x),schema:r.value,style:{primaryColor:"blue"},formId:c.value},null,8,["values","form","schema","formId"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Ab={class:"mx-1"},Mb={class:"mx-1"},Fb={class:"flex items-center gap-2 mt-[0.4rem]"},Db={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto"},Pb={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-hidden"},zb={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"},Ib={class:"vs-form w-full"},Mn=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"EntityEditPage",props:{entityKey:{default:""}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.ref({}),r=e.ref(null),l=e.ref(null),s=e.ref({}),i=e.ref(""),d=He.useRoute(),u=He.useRouter(),p=t.entityKey||String(d.name??"").split("-")[0],{id:a}=d.params,g=e.computed(()=>d.path.replace(/\/edit\/[^/]+$/,"").replace(/\/[^/]+\/edit$/,"")),m=e.computed(()=>a?`${g.value}/${a}`:g.value||"/"),y=e.computed(()=>{var b;return((b=u.resolve(g.value).meta)==null?void 0:b.title)??""}),k=e.computed(()=>{var b;return((b=d.meta)==null?void 0:b.description)??""});function h(){u.push(g.value||"/")}async function f(){const b=s.value.validate();if(b){Ce.notify({type:"warning",title:"Validation",message:Object.entries(b).map(([N,V])=>`${N}: ${V}`).join(`
4
+ `)});return}if(!l.value){Ce.notify({type:"error",title:"Error",message:"Edit token is missing."});return}const x=await fetch(`/api/table/${l.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)});if(!x.ok){Ce.notify({type:"error",title:"Error",message:`Error code: ${x.status}`});return}await x.json(),Ce.notify({title:"Success!",message:"Your changes have been saved."}),u.back()}return e.onMounted(async()=>{const b=await fetch(`/api/form/gis.${p}.table/${a}`).then(N=>N.json());o.value=b.data,l.value=b.token,r.value=b.schema;const x=b.data;i.value=(x==null?void 0:x.name)||(x==null?void 0:x.title)||(x==null?void 0:x.register_key)||(x==null?void 0:x.map_key)||""}),(b,x)=>{const N=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(sn,{variant:"form"},e.createSlots({breadcrumbs:e.withCtx(()=>[g.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(N,{to:g.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(y.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Ab,[e.createVNode(e.unref(he.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),i.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(N,{to:m.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Mb,[e.createVNode(e.unref(he.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),x[2]||(x[2]=e.createElementVNode("span",{class:"text-gray-900 font-semibold"},"Редагування",-1))]),title:e.withCtx(()=>[e.createElementVNode("div",Fb,[e.createElementVNode("button",{type:"button",class:"p-0 m-0 border-0 bg-transparent cursor-pointer text-inherit hover:opacity-80",onClick:h,"aria-label":"Назад"},[e.createVNode(e.unref(he.ArrowLeft),{size:20,class:"shrink-0"})]),e.createElementVNode("span",null,e.toDisplayString(i.value||y.value||"Редагування"),1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{class:"cursor-pointer flex items-center px-3 py-2 text-sm font-medium text-gray-800 duration-300 bg-white border border-gray-100 rounded-lg shadow gap-x-2 focus:outline-none hover:bg-gray-50 hover:border-gray-100",onClick:h}," Назад "),e.createElementVNode("button",{onClick:f,class:"cursor-pointer inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 hover:bg-blue-700 border border-transparent rounded-lg gap-x-2 hover:text-white"}," Зберегти ")]),_:2},[k.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(k.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",Db,[e.createElementVNode("div",Pb,[e.createElementVNode("div",zb,[e.createElementVNode("div",Ib,[r.value?(e.openBlock(),e.createBlock(e.unref(n),{key:0,schema:r.value,values:o.value,"onUpdate:values":x[0]||(x[0]=V=>o.value=V),form:s.value,"onUpdate:form":x[1]||(x[1]=V=>s.value=V),style:{primaryColor:"blue"}},null,8,["schema","values","form"])):e.createCommentVNode("",!0)])])])])],64)}}})},Symbol.toStringTag,{value:"Module"})),Rb={class:"flex items-center justify-center col-span-3 gap-2"},jb={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},Ob=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(p=>p.VsModal)),r=t,l=e.useModel(t,"columns"),s=e.ref(!1),i=e.ref({}),d=e.ref({...r.data||{}});e.watch(()=>r.data,p=>{d.value={...p||{}}},{deep:!0});const u=()=>l.value=l.value.filter((p,a)=>a!==r.index),c=async()=>{const p=i.value.validate();if(p){Ce.notify({type:"warning",title:"Validation",message:Object.entries(p).map(([a,g])=>`${a}: ${g}`).join(`
5
+ `)});return}l.value[r.index]=d.value,s.value=!1};return(p,a)=>(e.openBlock(),e.createElementBlock("div",Rb,[e.createElementVNode("button",{onClick:a[0]||(a[0]=g=>{s.value=!0}),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:text-accent-foreground h-8 w-8 rounded-full hover:bg-gray-100"},[e.createVNode(e.unref(he.Edit),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-8 w-8 rounded-full hover:bg-red-100 text-red-600 hover:text-red-700"},[e.createVNode(e.unref(he.Trash),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:s.value,"onUpdate:visible":a[4]||(a[4]=g=>s.value=g),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",jb,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:a[3]||(a[3]=g=>s.value=!1)}," Скасувати "),e.createElementVNode("button",{class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300",onClick:c}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:d.value,"onUpdate:values":a[1]||(a[1]=g=>d.value=g),schema:t.scheme,form:i.value,"onUpdate:form":a[2]||(a[2]=g=>i.value=g)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),Ub={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")})}},qb={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"},Ql=t=>qb[t==null?void 0:t.toLowerCase()]||"gray",Hb=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],ea=t=>{var n;return Hb.includes((n=t||"")==null?void 0:n.toLowerCase())},Wb={},Yb={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 Gb(t,n){return e.openBlock(),e.createElementBlock("svg",Yb,[...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 Zb=Fe(Wb,[["render",Gb]]),Kb={},Xb={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 Jb(t,n){return e.openBlock(),e.createElementBlock("svg",Xb,[...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 Qb=Fe(Kb,[["render",Jb]]),ex={},tx={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 nx(t,n){return e.openBlock(),e.createElementBlock("svg",tx,[...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 ox=Fe(ex,[["render",nx]]),rx={},lx={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 ax(t,n){return e.openBlock(),e.createElementBlock("svg",lx,[...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 sx=Fe(rx,[["render",ax]]),ix={},cx={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 dx(t,n){return e.openBlock(),e.createElementBlock("svg",cx,[...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 ux=Fe(ix,[["render",dx]]),fx={},mx={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 px(t,n){return e.openBlock(),e.createElementBlock("svg",mx,[...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 gx=Fe(fx,[["render",px]]),yx={},hx={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 bx(t,n){return e.openBlock(),e.createElementBlock("svg",hx,[...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 xx=Fe(yx,[["render",bx]]),kx={},wx={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 _x(t,n){return e.openBlock(),e.createElementBlock("svg",wx,[...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 Ex=Fe(kx,[["render",_x]]),Cx={},Nx={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Vx(t,n){return e.openBlock(),e.createElementBlock("svg",Nx,[...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 Bx=Fe(Cx,[["render",Vx]]),$x={},Sx={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 vx(t,n){return e.openBlock(),e.createElementBlock("svg",Sx,[...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 Lx=Fe($x,[["render",vx]]),Tx={},Ax={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function Mx(t,n){return e.openBlock(),e.createElementBlock("svg",Ax,[...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 Fx=Fe(Tx,[["render",Mx]]),Dx={},Px={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function zx(t,n){return e.openBlock(),e.createElementBlock("svg",Px,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Ix=Fe(Dx,[["render",zx]]),Rx={},jx={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 Ox(t,n){return e.openBlock(),e.createElementBlock("svg",jx,[...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 Ux=Fe(Rx,[["render",Ox]]),qx={},Hx={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 Wx(t,n){return e.openBlock(),e.createElementBlock("svg",Hx,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Yx=Fe(qx,[["render",Wx]]),Gx={},Zx={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 Kx(t,n){return e.openBlock(),e.createElementBlock("svg",Zx,[...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 Xx=Fe(Gx,[["render",Kx]]),Jx={},Qx={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function e1(t,n){return e.openBlock(),e.createElementBlock("svg",Qx,[...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 ta={IconText:Zb,IconNumber:Qb,IconDate:ox,IconDatetime:sx,IconRichtext:ux,IconBoolean:gx,IconFile:xx,IconImage:Ex,IconArray:Bx,IconSelect:Lx,IconSlug:Fx,IconDatalist:Ix,IconReference:Ux,IconReferenceList:Yx,IconBadge:Xx,IconCheck:Fe(Jx,[["render",e1]])},t1={key:0,class:"flex items-center justify-between mb-6"},n1={class:"flex justify-end w-full"},o1={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},r1={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},l1={class:"table-fixed w-full text-[13px]"},a1={class:"bg-gray-50 border-b border-gray-200"},s1={key:0},i1=["onDragstart","onDragover","onDrop"],c1={key:0,class:"flex w-fit items-center gap-2 text-left"},d1={class:"flex-1 min-w-0"},u1={class:"font-medium text-gray-900 truncate"},f1={class:"text-xs text-gray-500"},m1={key:1,class:"flex items-center justify-center"},p1={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"},g1={key:1,class:"text-gray-500 text-sm"},y1={key:3},h1={class:"px-6 py-4"},b1={key:1},x1=["colspan"],Pt=Fe(e.defineComponent({__name:"vs-datatable",props:e.mergeModels({columnsScheme:{},formScheme:{},addButton:{type:Boolean,default:!0},mainColWidth:{default:""}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t,{expose:n}){function o(_){return _.charAt(0).toUpperCase()+_.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(_=>_.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),i=t,d=e.ref({}),u=e.ref(!1),c=e.ref({}),p=e.ref(null),a=e.useSlots(),g=_=>!!(_&&a[_]);n({openCreateDialog:()=>{u.value=!0}});const m=e.computed({get(){return Array.isArray(s.value)?s.value:s.value&&Array.isArray(s.value.columns)?s.value.columns:[]},set(_){Array.isArray(s.value)?s.value=_:s.value&&Array.isArray(s.value.columns)&&(s.value.columns=_)}}),y=e.computed(()=>{const _=i.columnsScheme.map(w=>w.key);return _.includes("name")&&_.includes("label")||_.includes("id")&&_.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...i.columnsScheme.filter(w=>!["name","id","label"].includes(w.key))]:i.columnsScheme});function k(){u.value=!1,c.value={},p.value=null}async function h(){const _=d.value.validate();if(_){Ce.notify({type:"warning",title:"Validation",message:Object.entries(_).map(([w,B])=>`${w}: ${B}`).join(`
6
+ `)});return}if(p.value===null)m.value=[...m.value,{...c.value}];else{const w=[...m.value];w[p.value]={...c.value},m.value=w}k()}const f=e.ref(null),b=e.ref(null),x=_=>{f.value=_},N=_=>{b.value=_},V=_=>{if(f.value===null||f.value===_){f.value=null,b.value=null;return}const w=[...m.value],[B]=w.splice(f.value,1);w.splice(_,0,B),m.value=w,f.value=null,b.value=null};return(_,w)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",t1,[e.createElementVNode("div",n1,[e.createElementVNode("button",{onClick:w[0]||(w[0]=B=>u.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",o1,[e.createElementVNode("div",r1,[e.createElementVNode("table",l1,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,B=>(e.openBlock(),e.createElementBlock("col",{key:B.key,style:e.normalizeStyle(B.type==="main"?`width: ${t.mainColWidth}`:B.width?`width: ${B.width}`:"auto")},null,4))),128)),w[5]||(w[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",a1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,B=>(e.openBlock(),e.createElementBlock("th",{key:B.key,class:"px-6 py-4"},e.toDisplayString(B.label),1))),128)),w[6]||(w[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),m.value.length?(e.openBlock(),e.createElementBlock("tbody",s1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,(B,v)=>(e.openBlock(),e.createElementBlock("tr",{key:B.id||B.name||v,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":f.value===v,"border-t-2 border-b-2 border-blue-500 bg-blue-50":b.value===v}]),draggable:"true",onDragstart:K=>x(v),onDragover:e.withModifiers(K=>N(v),["prevent"]),onDrop:K=>V(v)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,K=>(e.openBlock(),e.createElementBlock("td",{key:K.key,class:"px-6 py-4 align-middle text-center"},[K.type==="main"?(e.openBlock(),e.createElementBlock("div",c1,[w[7]||(w[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(ea)(B.format==="yes/no"?"check":B.format||B.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(Ql)(B.format==="yes/no"?"check":B.format||B.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.format==="yes/no"?"icon-check":e.unref(ta)["Icon"+o(B.format||B.type)]||e.unref(ta).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",d1,[e.withDirectives((e.openBlock(),e.createElementBlock("p",u1,[e.createTextVNode(e.toDisplayString(B.name||B.id),1)])),[[e.unref(Ub)]]),e.createElementVNode("p",f1,e.toDisplayString(B.ua||B.label||B.name||B.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[K.slot&&g(K.slot)?e.renderSlot(_.$slots,K.slot,{row:B,column:K,value:B[K.key],rowIndex:v},void 0,!0,0):K.type==="color"?(e.openBlock(),e.createElementBlock("div",m1,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${B[K.key]}]`])},null,2)])):["format","type","meta"].includes(K.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[B[K.key]?(e.openBlock(),e.createElementBlock("span",p1,e.toDisplayString(B[K.key]),1)):(e.openBlock(),e.createElementBlock("span",g1,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",y1,e.toDisplayString(B[K.key]),1))],64))]))),128)),e.createElementVNode("td",h1,[e.createVNode(Ob,{columns:m.value,"onUpdate:columns":w[1]||(w[1]=K=>m.value=K),data:B,index:v,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,i1))),128))])):(e.openBlock(),e.createElementBlock("tr",b1,[e.createElementVNode("td",{colspan:y.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,x1)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:u.value,"onUpdate:visible":w[3]||(w[3]=B=>u.value=B)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:k,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"}," Скасувати "),e.createElementVNode("button",{type:"button",onClick:h,class:"px-4 py-2 rounded bg-blue-600 text-white"}," Зберегти1 ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{ref_key:"form",ref:d,modelValue:c.value,"onUpdate:modelValue":w[2]||(w[2]=B=>c.value=B),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),k1={class:"p-4 text-[13px]"},w1={class:"grid grid-cols-2 gap-x-6 gap-y-2"},_1=["id","checked","onChange"],E1={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},C1={class:"font-medium text-gray-900 truncate"},N1={class:"text-xs text-gray-500"},V1={key:0,class:"text-xs text-[#B2C9D6]"},B1={class:"flex justify-end gap-2 p-4 border-t w-full"},cn=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,s=n,i=e.defineAsyncComponent(()=>import("@opengis/core").then(x=>x.VsModal)),d=e.computed(()=>Array.isArray(l.fields)?l.fields.filter(Boolean):[]),u=x=>(x==null?void 0:x.name)??(x==null?void 0:x.id)??(x==null?void 0:x.key)??(x==null?void 0:x.code)??(x==null?void 0:x.field)??(x==null?void 0:x.value)??"",c=x=>String(u(x)??"").trim(),p=x=>(x==null?void 0:x.title)??(x==null?void 0:x.label)??c(x),a=x=>String((x==null?void 0:x.type)??"").trim(),g=e.computed(()=>new Set(r.value.map(x=>String(x??"").trim()))),m=x=>g.value.has(c(x)),y=x=>{const N=c(x);if(!N)return;const V=new Set(g.value);V.has(N)?V.delete(N):V.add(N),r.value=Array.from(V)},k=e.computed(()=>l.confirmText||"Імпортувати"),h=e.computed(()=>l.cancelText||"Скасувати"),f=()=>{o.value=!1,s("cancel")},b=()=>{s("confirm"),o.value=!1};return(x,N)=>(e.openBlock(),e.createBlock(e.unref(i),{visible:o.value,"onUpdate:visible":N[0]||(N[0]=V=>o.value=V),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",B1,[e.createElementVNode("button",{onClick:f,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(h.value),1),e.createElementVNode("button",{onClick:b,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(k.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",k1,[e.createElementVNode("div",w1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,V=>(e.openBlock(),e.createElementBlock("label",{key:c(V),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${c(V)}`,checked:m(V),onChange:_=>y(V)},null,40,_1),e.createElementVNode("div",E1,[e.unref(ea)(V.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(Ql)(V.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${V.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",C1,e.toDisplayString(c(V)),1),e.createElementVNode("p",N1,e.toDisplayString(p(V)),1),a(V)?(e.openBlock(),e.createElementBlock("p",V1,e.toDisplayString(a(V)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function dn(t){return t==null?"":String(t).trim()}function zt(t){return dn((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 un(t,n,o){const r=Array.isArray(t)?[...t]:[],l=Array.isArray(n)?n:[],{selectedKeys:s,resolveKey:i}=o,d=new Set;for(const a of s){const g=dn(a);g&&d.add(g)}if(d.size===0)return[];const u=a=>dn(i(a)),c=[],p=new Set;for(const a of r){const g=u(a);!g||!d.has(g)||(c.push(a),p.add(g))}for(const a of l){const g=u(a);!g||p.has(g)||!d.has(g)||(c.push(a),p.add(g))}return c}const $1={class:"vs-form"},S1={class:"vs-form__body auto-rows-max container"},v1={class:"flex flex-wrap"},L1={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},T1={class:"h-fit w-full flex flex-wrap"},A1={class:"w-full"},M1=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:[]),s=b=>zt(b||{}),i=e.defineAsyncComponent(()=>import("@opengis/form")),d=e.ref(),u=e.ref(!1),c=e.ref([]),p=()=>{const b=g.value.map(x=>s(x)).filter(x=>x.length>0);c.value=[...b],u.value=!0},a=e.computed(()=>{var b,x;return((b=n.value)==null?void 0:b.token)||((x=n.value)==null?void 0:x.id)||"register-form"}),g=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:[]}}),m=e.computed({get:()=>n.value||{},set:b=>{var N;const x=Array.isArray((N=n.value)==null?void 0:N.columns)?n.value.columns:[];n.value={...n.value,...b,columns:x}}});e.watch(()=>d.value,b=>{o.value=b||null},{immediate:!0}),e.watch(u,b=>{b||(c.value=[])});const y=()=>{const b=new Set(c.value.map(V=>dn(V)).filter(V=>V.length>0)),x=Array.isArray(g.value)?[...g.value]:[],N=l.value.filter(V=>b.has(s(V))).map(V=>{const _=s(V),w=V.title??V.label??_;return{...V,name:_,label:w,type:V.type||"text",meta:V.meta??"features"}});g.value=un(x,N,{selectedKeys:c.value,resolveKey:s}),u.value=!1,c.value=[]},k={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}},h=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],f={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,x)=>(e.openBlock(),e.createElementBlock("div",$1,[e.createElementVNode("div",S1,[e.createElementVNode("div",v1,[e.createElementVNode("div",L1,[(e.openBlock(),e.createBlock(e.unref(i),{ref_key:"formEl",ref:d,key:a.value,schema:k,modelValue:m.value,"onUpdate:modelValue":x[0]||(x[0]=N=>m.value=N)},null,8,["modelValue"]))]),e.createElementVNode("div",T1,[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"},[...x[4]||(x[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",A1,[e.createVNode(Pt,{modelValue:g.value,"onUpdate:modelValue":x[1]||(x[1]=N=>g.value=N),"columns-scheme":h,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(cn,{visible:u.value,"onUpdate:visible":x[2]||(x[2]=N=>u.value=N),selection:c.value,"onUpdate:selection":x[3]||(x[3]=N=>c.value=N),fields:l.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:y},null,8,["visible","selection","fields"])]))}}),F1={class:"vs-form"},D1={class:"vs-form__body auto-rows-max container"},P1={class:"flex flex-wrap"},z1={class:"h-fit w-full flex flex-wrap"},I1={class:"w-full"},R1=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:[]),s=m=>zt(m||{}),i=e.ref(!1),d=e.ref([]),u=()=>{const m=c.value.map(y=>s(y)).filter(y=>y.length>0);d.value=[...m],i.value=!0},c=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:m=>{n.value||(n.value={}),n.value.filters=Array.isArray(m)?m:[]}});e.watch(i,m=>{m||(d.value=[])});const p=()=>{const m=new Set(d.value.map(h=>dn(h)).filter(h=>h.length>0)),y=Array.isArray(c.value)?[...c.value]:[],k=l.value.filter(h=>m.has(s(h))).map(h=>({name:s(h),label:h.title??h.label??s(h),type:h.type||"text"}));c.value=un(y,k,{selectedKeys:d.value,resolveKey:s}),i.value=!1,d.value=[]},a=[{key:"id",label:"Name"},{key:"label",label:"Назва"},{key:"type",label:"Тип"}],g={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}),(m,y)=>(e.openBlock(),e.createElementBlock("div",F1,[e.createElementVNode("div",D1,[e.createElementVNode("div",P1,[y[4]||(y[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",z1,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:u,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"},[...y[3]||(y[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",I1,[e.createVNode(Pt,{modelValue:c.value,"onUpdate:modelValue":y[0]||(y[0]=k=>c.value=k),"columns-scheme":a,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(cn,{visible:i.value,"onUpdate:visible":y[1]||(y[1]=k=>i.value=k),selection:d.value,"onUpdate:selection":y[2]||(y[2]=k=>d.value=k),fields:l.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:p},null,8,["visible","selection","fields"])]))}}),j1={class:"vs-form"},O1={class:"vs-form__body auto-rows-max container"},U1={class:"flex flex-wrap"},q1={class:"h-fit w-full flex flex-wrap"},H1={class:"w-full"},W1=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:[]),s=m=>zt(m||{}),i=e.ref(!1),d=e.ref([]),u=()=>{const m=c.value.map(y=>s(y)).filter(y=>y.length>0);d.value=[...m],i.value=!0},c=e.computed({get:()=>n.value.card,set:m=>{n.value||(n.value={}),n.value.card=Array.isArray(m)?m:[]}});e.watch(i,m=>{var y;if(m){const k=((y=c.value)==null?void 0:y.map(h=>h.name))||[];d.value=[...k]}});const p=()=>{const m=new Set(d.value.map(h=>dn(h)).filter(h=>h.length>0)),y=Array.isArray(c.value)?[...c.value]:[],k=l.value.filter(h=>m.has(s(h))).map(h=>{const f=s(h),b=h.title??h.label??f;return{...h,name:f,label:b,format:h.format||h.type||"text",meta:h.meta||"title"}});c.value=un(y,k,{selectedKeys:d.value,resolveKey:s}),i.value=!1,d.value=[]},a=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"format",label:"Формат",type:"text"}],g={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(m,y)=>(e.openBlock(),e.createElementBlock("div",j1,[e.createElementVNode("div",O1,[e.createElementVNode("div",U1,[y[4]||(y[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",q1,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:u,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"},[...y[3]||(y[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",H1,[e.createVNode(Pt,{modelValue:c.value,"onUpdate:modelValue":y[0]||(y[0]=k=>c.value=k),"columns-scheme":a,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(cn,{visible:i.value,"onUpdate:visible":y[1]||(y[1]=k=>i.value=k),selection:d.value,"onUpdate:selection":y[2]||(y[2]=k=>d.value=k),fields:l.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:p},null,8,["visible","selection","fields"])]))}}),na={template1:Gl,template2:Zl,template3:Kl,template4:Xl,template5:Jl},Y1={class:"space-y-4"},G1={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},Z1={class:"text-lg font-semibold mb-4"},K1={class:"bg-white"},X1={key:1,class:"text-gray-400 text-center py-12"},J1={key:2,class:"text-gray-400 text-center py-12"},Q1=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}},s=e.computed(()=>{var p;return Array.isArray((p=o.value)==null?void 0:p.columns)?o.value.columns:[]}),i=e.computed(()=>{var p;return((p=o.value)==null?void 0:p.view)||"template1"}),d=e.computed(()=>na[i.value]||na.template1),u=e.computed(()=>{var g;const p=(g=o.value)==null?void 0:g.view;if(!p)return"template1";const a=r.find(m=>m.id===p);return(a==null?void 0:a.text)||p}),c=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(a=>{var g,m;return{...a,service_id:(g=o.value)==null?void 0:g.service_id,is_map:(m=o.value)==null?void 0:m.is_map}}));return(p,a)=>(e.openBlock(),e.createElementBlock("div",Y1,[e.createElementVNode("div",G1,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:l,modelValue:o.value,"onUpdate:modelValue":a[0]||(a[0]=g=>o.value=g)},null,8,["modelValue"]))]),e.createElementVNode("h2",Z1," Превʼю таблиці ("+e.toDisplayString(u.value)+") ",1),e.createElementVNode("div",K1,[d.value&&c.value.length&&s.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.value),{items:c.value,columns:s.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:i.value},null,8,["items","columns","hide-details-button"])):c.value.length?(e.openBlock(),e.createElementBlock("div",J1," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",X1," Немає даних для превʼю "))])]))}}),ek={class:"w-full mb-6"},tk={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},nk=["onClick"],oa=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,s)=>(e.openBlock(),e.createElementBlock("div",ek,[e.createElementVNode("div",tk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,i=>(e.openBlock(),e.createElementBlock("button",{key:i.id,onClick:d=>r(i.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",i.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(i.name),11,nk))),128))])]))}}),ok={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},rk={class:"mx-1"},lk={class:"text-gray-900 font-semibold"},ak={key:0,class:"text-center py-12 mt-6 px-[24px]"},sk={key:1,class:"px-[24px] overflow-y-auto"},ik={class:"space-y-6"},ck=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=He.useRoute(),o=He.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),l=e.computed(()=>{var f;return((f=o.resolve(r.value).meta)==null?void 0:f.title)??""}),s=e.computed(()=>{var f;return((f=g.value)==null?void 0:f.name)||"Налаштування реєстру"}),i=e.ref("list"),d=e.ref(""),u=e.ref(!0),c=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],p={list:M1,filters:R1,card:W1,preview:Q1},a=c.map(f=>f.id),g=e.ref({columns:[],filters:[],card:[],tableData:[]}),m=e.ref([]),y=async()=>{var b;if(!((b=g.value)==null?void 0:b.token)){Ce.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const x=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(g.value)});if(!x.ok)throw new Error(`Failed to save content: ${x.status}`);Ce.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(x){Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(x)}},k=async f=>{try{const x=await(await fetch(`/api/gis-registry/${f}`)).json(),N=Array.isArray(x==null?void 0:x.rows)?x.rows:[];g.value.tableData=N.slice(0,3)}catch(b){console.error("Помилка завантаження превʼю:",b)}},h=async()=>{var f,b;try{u.value=!0;const N=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),V=((f=N==null?void 0:N.rows)==null?void 0:f[0])||{};d.value=V.register_key||"",g.value={...V,columns:Array.isArray(V.columns)?V.columns:[],filters:Array.isArray(V.filters)?V.filters:[],card:Array.isArray(V.card)?V.card:[],tableData:Array.isArray(V.tableData)?V.tableData:[]},(b=N==null?void 0:N.tokens)!=null&&b.edit&&(g.value.token=N.tokens.edit),m.value=Array.isArray(N==null?void 0:N.fields)?N.fields:[]}catch(x){console.error("Помилка завантаження даних:",x)}finally{u.value=!1}};return e.onMounted(async()=>{const f=n.query.tab;typeof f=="string"&&a.includes(f)&&(i.value=f),await h(),d.value&&await k(d.value)}),e.watch(i,f=>{n.query.tab!==f&&o.replace({query:{...n.query,tab:f}})}),e.watch(()=>n.query.tab,f=>{typeof f=="string"&&a.includes(f)&&i.value!==f&&(i.value=f)}),e.watch(()=>n.params.id,async(f,b)=>{!f||f===b||(await h(),d.value&&await k(d.value))}),(f,b)=>{const x=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",ok,[e.createVNode(sn,{variant:"form",title:s.value},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(x,{to:r.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value),1)]),_:1},8,["to"]),e.createElementVNode("span",rk,[e.createVNode(e.unref(he.LucideChevronRight),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",lk,e.toDisplayString(s.value),1)]),description:e.withCtx(()=>[...b[3]||(b[3]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:b[0]||(b[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:y,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"]),u.value?(e.openBlock(),e.createElementBlock("div",ak,[...b[4]||(b[4]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",sk,[e.createVNode(oa,{tabs:c,activeTab:i.value,"onUpdate:activeTab":b[1]||(b[1]=N=>i.value=N)},null,8,["activeTab"]),e.createElementVNode("div",ik,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(p[i.value]),{data:g.value,"onUpdate:data":b[2]||(b[2]=N=>g.value=N),fields:m.value,"hide-details-button":t.hideDetailsButton,key:i.value},null,40,["data","fields","hide-details-button"]))])]))])}}})},Symbol.toStringTag,{value:"Module"}));/*! js-yaml 5.2.1 https://github.com/nodeca/js-yaml @license MIT */var Ye=Symbol("NOT_RESOLVED"),pr=Symbol("MERGE_KEY");function ft(t,n){return{tagName:t,nodeKind:"scalar",implicit:n.implicit??!1,matchByTagPrefix:n.matchByTagPrefix??!1,implicitFirstChars:n.implicitFirstChars??null,resolve:n.resolve,identify:n.identify??null,represent:n.represent??(o=>String(o)),representTagName:n.representTagName??null}}function gr(t,n){const o=n.finalize===void 0;return{tagName:t,nodeKind:"sequence",implicit:!1,matchByTagPrefix:n.matchByTagPrefix??!1,create:n.create,addItem:n.addItem,finalize:n.finalize??(r=>r),carrierIsResult:o,identify:n.identify??null,represent:n.represent??(r=>r),representTagName:n.representTagName??null}}function Co(t,n){const o=n.finalize===void 0;return{tagName:t,nodeKind:"mapping",implicit:!1,matchByTagPrefix:n.matchByTagPrefix??!1,create:n.create,addPair:n.addPair,has:n.has,keys:n.keys,get:n.get,finalize:n.finalize??(r=>r),carrierIsResult:o,identify:n.identify??null,represent:n.represent??(r=>r),representTagName:n.representTagName??null}}var dk=ft("tag:yaml.org,2002:str",{resolve:t=>t,identify:t=>typeof t=="string"}),uk=["","~","null","Null","NULL"],fk=ft("tag:yaml.org,2002:null",{implicit:!0,implicitFirstChars:["","~","n","N"],resolve:t=>uk.indexOf(t)!==-1?null:Ye,identify:t=>t===null,represent:()=>"null"}),mk=ft("tag:yaml.org,2002:null",{implicit:!0,implicitFirstChars:["n"],resolve:(t,n)=>t==="null"||n&&t===""?null:Ye,identify:t=>t===null,represent:()=>"null"}),pk=["","~","null","Null","NULL"],gk=ft("tag:yaml.org,2002:null",{implicit:!0,implicitFirstChars:["","~","n","N"],resolve:t=>pk.indexOf(t)!==-1?null:Ye,identify:t=>t===null,represent:()=>"null"}),yk=["true","True","TRUE"],hk=["false","False","FALSE"],bk=ft("tag:yaml.org,2002:bool",{implicit:!0,implicitFirstChars:["t","T","f","F"],resolve:t=>yk.indexOf(t)!==-1?!0:hk.indexOf(t)!==-1?!1:Ye,identify:t=>Object.prototype.toString.call(t)==="[object Boolean]",represent:t=>t?"true":"false"}),xk=["true"],kk=["false"],wk=ft("tag:yaml.org,2002:bool",{implicit:!0,implicitFirstChars:["t","f"],resolve:t=>xk.indexOf(t)!==-1?!0:kk.indexOf(t)!==-1?!1:Ye,identify:t=>Object.prototype.toString.call(t)==="[object Boolean]",represent:t=>t?"true":"false"}),_k=["true","True","TRUE","y","Y","yes","Yes","YES","on","On","ON"],Ek=["false","False","FALSE","n","N","no","No","NO","off","Off","OFF"],Ck=ft("tag:yaml.org,2002:bool",{implicit:!0,implicitFirstChars:["y","Y","n","N","t","T","f","F","o","O"],resolve:t=>_k.indexOf(t)!==-1?!0:Ek.indexOf(t)!==-1?!1:Ye,identify:t=>Object.prototype.toString.call(t)==="[object Boolean]",represent:t=>t?"true":"false"}),Nk=new RegExp("^(?:0o[0-7]+|0x[0-9a-fA-F]+|[-+]?[0-9]+)$"),Vk=new RegExp("^(?:[-+]?0b[0-1]+|[-+]?0o[0-7]+|[-+]?0x[0-9a-fA-F]+|[-+]?[0-9]+)$");function Bk(t){let n=t,o=1;return(n[0]==="-"||n[0]==="+")&&(n[0]==="-"&&(o=-1),n=n.slice(1)),n.startsWith("0b")?o*parseInt(n.slice(2),2):n.startsWith("0o")?o*parseInt(n.slice(2),8):n.startsWith("0x")?o*parseInt(n.slice(2),16):o*parseInt(n,10)}function $k(t,n){if(n){if(!Vk.test(t))return Ye}else if(!Nk.test(t))return Ye;const o=Bk(t);return Number.isFinite(o)?o:Ye}var ra=ft("tag:yaml.org,2002:int",{implicit:!0,implicitFirstChars:["-","+",..."0123456789"],resolve:$k,identify:t=>Number.isInteger(t)&&!Object.is(t,-0)&&t.toString(10).indexOf("e")<0,represent:t=>t.toString(10)}),Sk=new RegExp("^-?(?:0|[1-9][0-9]*)$"),vk=new RegExp("^(?:[-+]?0b[0-1]+|[-+]?0o[0-7]+|[-+]?0x[0-9a-fA-F]+|[-+]?[0-9]+)$");function Lk(t){let n=t,o=1;return(n[0]==="-"||n[0]==="+")&&(n[0]==="-"&&(o=-1),n=n.slice(1)),n.startsWith("0b")?o*parseInt(n.slice(2),2):n.startsWith("0o")?o*parseInt(n.slice(2),8):n.startsWith("0x")?o*parseInt(n.slice(2),16):o*parseInt(n,10)}function Tk(t,n){if(n){if(!vk.test(t))return Ye}else if(!Sk.test(t))return Ye;const o=Lk(t);return Number.isFinite(o)?o:Ye}var Ak=ft("tag:yaml.org,2002:int",{implicit:!0,implicitFirstChars:["-",..."0123456789"],resolve:Tk,identify:t=>Number.isInteger(t)&&!Object.is(t,-0)&&t.toString(10).indexOf("e")<0,represent:t=>t.toString(10)}),Mk=new RegExp("^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?0x[0-9a-fA-F_]+|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+|[-+]?(?:0|[1-9][0-9_]*))$");function Fk(t){let n=t.replace(/_/g,""),o=1;if((n[0]==="-"||n[0]==="+")&&(n[0]==="-"&&(o=-1),n=n.slice(1)),n.startsWith("0b"))return o*parseInt(n.slice(2),2);if(n.startsWith("0x"))return o*parseInt(n.slice(2),16);if(n.includes(":")){let r=0;for(const l of n.split(":"))r=r*60+Number(l);return o*r}return n!=="0"&&n[0]==="0"?o*parseInt(n,8):o*parseInt(n,10)}function Dk(t){if(!Mk.test(t))return Ye;const n=Fk(t);return Number.isFinite(n)?n:Ye}var yr=ft("tag:yaml.org,2002:int",{implicit:!0,implicitFirstChars:["-","+",..."0123456789"],resolve:Dk,identify:t=>Number.isInteger(t)&&!Object.is(t,-0)&&t.toString(10).indexOf("e")<0,represent:t=>t.toString(10)}),Pk=new RegExp("^(?:[-+]?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|[-+]?\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),zk=new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Ik(t){if(!Pk.test(t))return Ye;let n=t.toLowerCase();const o=n[0]==="-"?-1:1;if("+-".includes(n[0])&&(n=n.slice(1)),n===".inf")return o===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;if(n===".nan")return NaN;const r=o*parseFloat(n);return Number.isFinite(r)||zk.test(t)?r:Ye}function Rk(t){if(isNaN(t))return".nan";if(t===Number.POSITIVE_INFINITY)return".inf";if(t===Number.NEGATIVE_INFINITY)return"-.inf";if(Object.is(t,-0))return"-0.0";const n=t.toString(10);return/^[-+]?[0-9]+e/.test(n)?n.replace("e",".e"):n}var la=ft("tag:yaml.org,2002:float",{implicit:!0,implicitFirstChars:["-","+",".",..."0123456789"],resolve:Ik,identify:t=>typeof t=="number"&&(!Number.isInteger(t)||Object.is(t,-0)||t.toString(10).indexOf("e")>=0),represent:Rk}),jk=new RegExp("^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$"),Ok=new RegExp("^(?:[-+]?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|[-+]?\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Uk(t,n){if(n){if(!Ok.test(t))return Ye;let r=t.toLowerCase();const l=r[0]==="-"?-1:1;if("+-".includes(r[0])&&(r=r.slice(1)),r===".inf")return l===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;if(r===".nan")return NaN;const s=l*parseFloat(r);return Number.isFinite(s)?s:Ye}if(!jk.test(t))return Ye;const o=Number(t);return Number.isFinite(o)?o:Ye}function qk(t){if(isNaN(t))return".nan";if(t===Number.POSITIVE_INFINITY)return".inf";if(t===Number.NEGATIVE_INFINITY)return"-.inf";if(Object.is(t,-0))return"-0.0";const n=t.toString(10);return/^[-+]?[0-9]+e/.test(n)?n.replace("e",".e"):n}var Hk=ft("tag:yaml.org,2002:float",{implicit:!0,implicitFirstChars:["-",..."0123456789"],resolve:Uk,identify:t=>typeof t=="number"&&(!Number.isInteger(t)||Object.is(t,-0)||t.toString(10).indexOf("e")>=0),represent:qk}),Wk=new RegExp("^(?:[-+]?(?:(?:[0-9][0-9_]*)?\\.[0-9_]*)(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),Yk=new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Gk(t){if(!Wk.test(t))return Ye;let n=t.toLowerCase().replace(/_/g,"");const o=n[0]==="-"?-1:1;if("+-".includes(n[0])&&(n=n.slice(1)),n===".inf")return o===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;if(n===".nan")return NaN;let r=0;if(n.includes(":")){for(const l of n.split(":"))r=r*60+Number(l);r*=o}else r=o*parseFloat(n);return Number.isFinite(r)||Yk.test(t)?r:Ye}function Zk(t){if(isNaN(t))return".nan";if(t===Number.POSITIVE_INFINITY)return".inf";if(t===Number.NEGATIVE_INFINITY)return"-.inf";if(Object.is(t,-0))return"-0.0";const n=t.toString(10);return/^[-+]?[0-9]+e/.test(n)?n.replace("e",".e"):n}var hr=ft("tag:yaml.org,2002:float",{implicit:!0,implicitFirstChars:["-","+",".",..."0123456789"],resolve:Gk,identify:t=>typeof t=="number"&&(!Number.isInteger(t)||Object.is(t,-0)||t.toString(10).indexOf("e")>=0),represent:Zk}),Kk=ft("tag:yaml.org,2002:merge",{implicit:!0,implicitFirstChars:["<"],resolve:(t,n)=>t==="<<"||n&&t===""?pr:Ye}),Xk=/^[A-Za-z0-9+/]*={0,2}$/;function Jk(t){const n=t.replace(/\s/g,"");if(n.length%4!==0||!Xk.test(n))return Ye;const o=atob(n),r=new Uint8Array(o.length);for(let l=0;l<o.length;l++)r[l]=o.charCodeAt(l);return r}function Qk(t){let n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return btoa(n)}var ew=ft("tag:yaml.org,2002:binary",{resolve:Jk,identify:t=>Object.prototype.toString.call(t)==="[object Uint8Array]",represent:Qk}),tw=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),nw=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 ow(t){let n=tw.exec(t);if(n===null&&(n=nw.exec(t)),n===null)return Ye;const o=+n[1],r=+n[2]-1,l=+n[3];if(!n[4]){const p=new Date(Date.UTC(o,r,l));return p.getUTCFullYear()!==o||p.getUTCMonth()!==r||p.getUTCDate()!==l?Ye:p}const s=+n[4],i=+n[5],d=+n[6];let u=0;if(s>23||i>59||d>59)return Ye;if(n[7]){let p=n[7].slice(0,3);for(;p.length<3;)p+="0";u=+p}const c=new Date(Date.UTC(o,r,l,s,i,d,u));if(c.getUTCFullYear()!==o||c.getUTCMonth()!==r||c.getUTCDate()!==l)return Ye;if(n[9]){const p=+n[10],a=+(n[11]||0);if(p>23||a>59)return Ye;const g=(p*60+a)*6e4;c.setTime(c.getTime()-(n[9]==="-"?-g:g))}return c}var rw=ft("tag:yaml.org,2002:timestamp",{implicit:!0,implicitFirstChars:[..."0123456789"],resolve:ow,identify:t=>t instanceof Date,represent:t=>t.toISOString()}),lw=gr("tag:yaml.org,2002:seq",{create:()=>[],addItem:(t,n)=>{t.push(n)},identify:Array.isArray});function No(t){if(t===null||typeof t!="object"||Array.isArray(t))return!1;const n=Object.getPrototypeOf(t);return n===null||n===Object.prototype}function br(t,n){const o={};for(const r of n)t[r]!==void 0&&(o[r]=t[r]);return o}var aw=gr("tag:yaml.org,2002:omap",{create:()=>({list:[],seen:new Set}),addItem:(t,n)=>{let o;if(n instanceof Map){if(n.size!==1)return"cannot resolve an ordered map item";o=n.keys().next().value}else if(No(n)){const r=Object.keys(n);if(r.length!==1)return"cannot resolve an ordered map item";o=r[0]}else return"cannot resolve an ordered map item";return t.seen.has(o)?"duplicate key in ordered map":(t.seen.add(o),t.list.push(n),"")},finalize:t=>t.list}),sw=gr("tag:yaml.org,2002:pairs",{create:()=>[],addItem:(t,n)=>{if(n instanceof Map)return n.size!==1?"cannot resolve a pairs item":(t.push(n.entries().next().value),"");if(Object.prototype.toString.call(n)!=="[object Object]")return"cannot resolve a pairs item";const o=n,r=Object.keys(o);return r.length!==1?"cannot resolve a pairs item":(t.push([r[0],o[r[0]]]),"")}}),iw=Co("tag:yaml.org,2002:map",{create:()=>({}),identify:No,represent:t=>{const n=new Map;for(const o of Object.keys(t))n.set(o,t[o]);return n},addPair:(t,n,o)=>{if(n!==null&&typeof n=="object")return"object-based map does not support complex keys";const r=String(n);return r==="__proto__"?Object.defineProperty(t,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[r]=o,""},has:(t,n)=>n!==null&&typeof n=="object"?!1:Object.prototype.hasOwnProperty.call(t,String(n)),keys:t=>Object.keys(t),get:(t,n)=>t[String(n)]}),cw=Co("tag:yaml.org,2002:set",{create:()=>new Set,identify:t=>t instanceof Set,represent:t=>{const n=new Map;for(const o of t)n.set(o,null);return n},addPair:(t,n,o)=>o!==null?"cannot resolve a set item":(t.add(n),""),has:(t,n)=>t.has(n),keys:t=>t.keys(),get:()=>null});function dw(){return{scalar:{},sequence:{},mapping:{}}}function uw(){return{scalar:[],sequence:[],mapping:[]}}function fw(t){const n=[];for(const o of t){let r=n.length;for(let l=0;l<n.length;l++){const s=n[l];if(s.nodeKind===o.nodeKind&&s.tagName===o.tagName&&s.matchByTagPrefix===o.matchByTagPrefix){r=l;break}}n[r]=o}return n}var Vo=class ls{constructor(n){ut(this,"tags");ut(this,"implicitScalarTags");ut(this,"implicitScalarByFirstChar");ut(this,"implicitScalarAnyFirstChar");ut(this,"defaultScalarTag");ut(this,"defaultSequenceTag");ut(this,"defaultMappingTag");ut(this,"exact");ut(this,"prefix");const o=fw(n),r=[],l=dw(),s=uw();for(const p of o){if(p.nodeKind==="scalar"&&p.implicit){if(p.matchByTagPrefix)throw new Error("Implicit scalar tags cannot match by tag prefix");r.push(p)}switch(p.nodeKind){case"scalar":p.matchByTagPrefix?s.scalar.push(p):l.scalar[p.tagName]=p;break;case"sequence":p.matchByTagPrefix?s.sequence.push(p):l.sequence[p.tagName]=p;break;case"mapping":p.matchByTagPrefix?s.mapping.push(p):l.mapping[p.tagName]=p;break}}const i=r.filter(p=>p.implicitFirstChars===null),d=new Set;for(const p of r)if(p.implicitFirstChars!==null)for(const a of p.implicitFirstChars)d.add(a);const u=new Map;for(const p of d)u.set(p,r.filter(a=>a.implicitFirstChars===null||a.implicitFirstChars.indexOf(p)!==-1));const c=l.scalar["tag:yaml.org,2002:str"];if(!c)throw new Error("schema does not define the default scalar tag (tag:yaml.org,2002:str)");this.tags=o,this.implicitScalarTags=r,this.implicitScalarByFirstChar=u,this.implicitScalarAnyFirstChar=i,this.defaultScalarTag=c,this.defaultSequenceTag=l.sequence["tag:yaml.org,2002:seq"],this.defaultMappingTag=l.mapping["tag:yaml.org,2002:map"],this.exact=l,this.prefix=s}withTags(...n){let o=[];for(const r of n)o=o.concat(r);return new ls([...this.tags,...o])}},xr=new Vo([dk,lw,iw]);new Vo([...xr.tags,mk,wk,Ak,Hk]);var mw=new Vo([...xr.tags,fk,bk,ra,la]),pw=new Vo([...xr.tags,gk,Ck,yr,hr,rw,Kk,ew,aw,sw,cw]);Co("tag:yaml.org,2002:map",{create:()=>new Map,addPair:(t,n,o)=>(t.set(n,o),""),has:(t,n)=>t.has(n),keys:t=>t.keys(),get:(t,n)=>t.get(n),identify:t=>t instanceof Map||No(t),represent:t=>{if(t instanceof Map)return t;const n=new Map,o=t;for(const r of Object.keys(o))n.set(r,o[r]);return n}});function aa(t){if(Array.isArray(t)){const n=Array.prototype.slice.call(t);for(let o=0;o<n.length;o++){if(Array.isArray(n[o]))return null;typeof n[o]=="object"&&Object.prototype.toString.call(n[o])==="[object Object]"&&(n[o]="[object Object]")}return String(n)}return typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"?"[object Object]":String(t)}Co("tag:yaml.org,2002:map",{create:()=>({}),identify:No,represent:t=>{const n=new Map;for(const o of Object.keys(t))n.set(o,t[o]);return n},addPair:(t,n,o)=>{const r=aa(n);return r===null?"nested arrays are not supported inside keys":(r==="__proto__"?Object.defineProperty(t,r,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[r]=o,"")},has:(t,n)=>{const o=aa(n);return o!==null&&Object.prototype.hasOwnProperty.call(t,o)},keys:t=>Object.keys(t),get:(t,n)=>t[String(n)]});var gw={maxLength:79,indent:1,linesBefore:3,linesAfter:2};function kr(t,n,o,r,l){let s="",i="";const d=Math.floor(l/2)-1;return r-n>d&&(s=" ... ",n=r-d+s.length),o-r>d&&(i=" ...",o=r+d-i.length),{str:s+t.slice(n,o).replace(/\t/g,"→")+i,pos:r-n+s.length}}function wr(t,n){return" ".repeat(Math.max(n-t.length,0))+t}function yw(t,n){if(!t.buffer)return null;const o={...gw,...n},r=/\r?\n|\r|\0/g,l=[0],s=[];let i,d=-1;for(;i=r.exec(t.buffer);)s.push(i.index),l.push(i.index+i[0].length),t.position<=i.index&&d<0&&(d=l.length-2);d<0&&(d=l.length-1);let u="";const c=Math.min(t.line+o.linesAfter,s.length).toString().length,p=o.maxLength-(o.indent+c+3);for(let g=1;g<=o.linesBefore&&!(d-g<0);g++){const m=kr(t.buffer,l[d-g],s[d-g],t.position-(l[d]-l[d-g]),p);u=`${" ".repeat(o.indent)}${wr((t.line-g+1).toString(),c)} | ${m.str}
7
7
  ${u}`}const a=kr(t.buffer,l[d],s[d],t.position,p);u+=`${" ".repeat(o.indent)}${wr((t.line+1).toString(),c)} | ${a.str}
8
8
  `,u+=`${"-".repeat(o.indent+c+3+a.pos)}^
9
9
  `;for(let g=1;g<=o.linesAfter&&!(d+g>=s.length);g++){const m=kr(t.buffer,l[d+g],s[d+g],t.position-(l[d]-l[d+g]),p);u+=`${" ".repeat(o.indent)}${wr((t.line+g+1).toString(),c)} | ${m.str}
10
10
  `}return u.replace(/\n$/,"")}function sa(t,n){let o="";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+=`
11
11
 
12
- ${t.mark.snippet}`),`${t.reason} ${o}`):t.reason}var Mn=class extends Error{constructor(n,o){super();ut(this,"reason");ut(this,"mark");this.name="YAMLException",this.reason=n,this.mark=o,this.message=sa(this,!1),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toString(n){return`${this.name}: ${sa(this,n)}`}};function Bo(t,n,o,r=""){let l=0,s=0;for(let d=0;d<n;d++){const u=t.charCodeAt(d);u===10?(l++,s=d+1):u===13&&(l++,t.charCodeAt(d+1)===10&&d++,s=d+1)}const i={name:r,buffer:t,position:n,line:l,column:n-s};throw i.snippet=mw(i),new Mn(o,i)}var pw=-1;function ia(t){switch(t){case 48:return"\0";case 97:return"\x07";case 98:return"\b";case 116:return" ";case 9:return" ";case 110:return`
13
- `;case 118:return"\v";case 102:return"\f";case 114:return"\r";case 101:return"\x1B";case 32:return" ";case 34:return'"';case 47:return"/";case 92:return"\\";case 78:return"…";case 95:return" ";case 76:return"\u2028";case 80:return"\u2029";default:return""}}var ca=new Array(256),da=new Array(256);for(let t=0;t<256;t++)ca[t]=ia(t)?1:0,da[t]=ia(t);function gw(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function yw(t){return t>=48&&t<=57?t-48:(t|32)-97+10}function hw(t){return t===120?2:t===117?4:8}function $o(t,n,o){let r=0;for(;n<o;){const l=t.charCodeAt(n);if(l===10)r++,n++;else if(l===13)r++,n++,t.charCodeAt(n)===10&&n++;else if(l===32||l===9)n++;else break}return{position:n,breaks:r}}function _r(t){return t===1?" ":`
14
- `.repeat(t-1)}function bw(t,n,o){let r="",l=n,s=n,i=n;for(;l<o;){const d=t.charCodeAt(l);if(d===10||d===13){r+=t.slice(s,i);const u=$o(t,l,o);r+=_r(u.breaks),l=s=i=u.position}else l++,d!==32&&d!==9&&(i=l)}return r+t.slice(s,i)}function xw(t,n,o){let r="",l=n,s=n,i=n;for(;l<o;){const d=t.charCodeAt(l);if(d===39)r+=t.slice(s,l)+"'",l+=2,s=i=l;else if(d===10||d===13){r+=t.slice(s,i);const u=$o(t,l,o);r+=_r(u.breaks),l=s=i=u.position}else l++,d!==32&&d!==9&&(i=l)}return r+t.slice(s,o)}function kw(t,n,o){let r="",l=n,s=n,i=n;for(;l<o;){const d=t.charCodeAt(l);if(d===92){r+=t.slice(s,l),l++;const u=t.charCodeAt(l);if(u===10||u===13)l=$o(t,l,o).position;else if(u<256&&ca[u])r+=da[u],l++;else{let c=hw(u),p=0;for(;c>0;c--){l++;const a=yw(t.charCodeAt(l));p=(p<<4)+a}r+=gw(p),l++}s=i=l}else if(d===10||d===13){r+=t.slice(s,i);const u=$o(t,l,o);r+=_r(u.breaks),l=s=i=u.position}else l++,d!==32&&d!==9&&(i=l)}return r+t.slice(s,o)}function ua(t,n,o,r,l,s){const i=r<0?0:r,d=t.slice(n,o).replace(/\r\n?/g,`
12
+ ${t.mark.snippet}`),`${t.reason} ${o}`):t.reason}var Fn=class extends Error{constructor(n,o){super();ut(this,"reason");ut(this,"mark");this.name="YAMLException",this.reason=n,this.mark=o,this.message=sa(this,!1),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toString(n){return`${this.name}: ${sa(this,n)}`}};function Bo(t,n,o,r=""){let l=0,s=0;for(let d=0;d<n;d++){const u=t.charCodeAt(d);u===10?(l++,s=d+1):u===13&&(l++,t.charCodeAt(d+1)===10&&d++,s=d+1)}const i={name:r,buffer:t,position:n,line:l,column:n-s};throw i.snippet=yw(i),new Fn(o,i)}var hw=-1;function ia(t){switch(t){case 48:return"\0";case 97:return"\x07";case 98:return"\b";case 116:return" ";case 9:return" ";case 110:return`
13
+ `;case 118:return"\v";case 102:return"\f";case 114:return"\r";case 101:return"\x1B";case 32:return" ";case 34:return'"';case 47:return"/";case 92:return"\\";case 78:return"…";case 95:return" ";case 76:return"\u2028";case 80:return"\u2029";default:return""}}var ca=new Array(256),da=new Array(256);for(let t=0;t<256;t++)ca[t]=ia(t)?1:0,da[t]=ia(t);function bw(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function xw(t){return t>=48&&t<=57?t-48:(t|32)-97+10}function kw(t){return t===120?2:t===117?4:8}function $o(t,n,o){let r=0;for(;n<o;){const l=t.charCodeAt(n);if(l===10)r++,n++;else if(l===13)r++,n++,t.charCodeAt(n)===10&&n++;else if(l===32||l===9)n++;else break}return{position:n,breaks:r}}function _r(t){return t===1?" ":`
14
+ `.repeat(t-1)}function ww(t,n,o){let r="",l=n,s=n,i=n;for(;l<o;){const d=t.charCodeAt(l);if(d===10||d===13){r+=t.slice(s,i);const u=$o(t,l,o);r+=_r(u.breaks),l=s=i=u.position}else l++,d!==32&&d!==9&&(i=l)}return r+t.slice(s,i)}function _w(t,n,o){let r="",l=n,s=n,i=n;for(;l<o;){const d=t.charCodeAt(l);if(d===39)r+=t.slice(s,l)+"'",l+=2,s=i=l;else if(d===10||d===13){r+=t.slice(s,i);const u=$o(t,l,o);r+=_r(u.breaks),l=s=i=u.position}else l++,d!==32&&d!==9&&(i=l)}return r+t.slice(s,o)}function Ew(t,n,o){let r="",l=n,s=n,i=n;for(;l<o;){const d=t.charCodeAt(l);if(d===92){r+=t.slice(s,l),l++;const u=t.charCodeAt(l);if(u===10||u===13)l=$o(t,l,o).position;else if(u<256&&ca[u])r+=da[u],l++;else{let c=kw(u),p=0;for(;c>0;c--){l++;const a=xw(t.charCodeAt(l));p=(p<<4)+a}r+=bw(p),l++}s=i=l}else if(d===10||d===13){r+=t.slice(s,i);const u=$o(t,l,o);r+=_r(u.breaks),l=s=i=u.position}else l++,d!==32&&d!==9&&(i=l)}return r+t.slice(s,o)}function ua(t,n,o,r,l,s){const i=r<0?0:r,d=t.slice(n,o).replace(/\r\n?/g,`
15
15
  `),u=d===""?[]:(d.endsWith(`
16
16
  `)?d.slice(0,-1):d).split(`
17
17
  `);let c="",p=!1,a=0,g=!1;for(const m of u){let y=0;for(;y<i&&m.charCodeAt(y)===32;)y++;if(r<0||y>=m.length){a++;continue}const k=m.slice(i),h=k.charCodeAt(0);s?h===32||h===9?(g=!0,c+=`
@@ -20,39 +20,39 @@ ${t.mark.snippet}`),`${t.reason} ${o}`):t.reason}var Mn=class extends Error{cons
20
20
  `.repeat(a):c+=`
21
21
  `.repeat(p?1+a:a),c+=k,p=!0,a=0}return l===3?c+=`
22
22
  `.repeat(p?1+a:a):l!==2&&p&&(c+=`
23
- `),c}function ww(t,n){if(n.valueStart===pw)return"";const{valueStart:o,valueEnd:r}=n;if(n.fast)return t.slice(o,r);switch(n.style){case 2:return xw(t,o,r);case 3:return kw(t,o,r);case 4:return ua(t,o,r,n.indent,n.chomping,!1);case 5:return ua(t,o,r,n.indent,n.chomping,!0);default:return bw(t,o,r)}}var _w={"!":"!","!!":"tag:yaml.org,2002:"};function Er(t){return encodeURI(t).replace(/!/g,"%21")}function fa(t,n){if(t.startsWith("!<")&&t.endsWith(">"))return decodeURIComponent(t.slice(2,-1));const o=t.indexOf("!",1),r=o===-1?"!":t.slice(0,o+1),l=(n==null?void 0:n[r])??_w[r]??r;return decodeURIComponent(l)+decodeURIComponent(t.slice(r.length))}function ma(t){let n=t;return n.charCodeAt(0)===33?(n=n.slice(1),`!${Er(n)}`):n.slice(0,18)==="tag:yaml.org,2002:"?`!!${Er(n.slice(18))}`:`!<${Er(n)}>`}var un=-1,Cr={filename:"",schema:dw,json:!1,maxTotalMergeKeys:1e4,maxAliases:-1};function Ew(t){return"tagStart"in t&&t.tagStart!==un?t.tagStart:"anchorStart"in t&&t.anchorStart!==un?t.anchorStart:"valueStart"in t&&t.valueStart!==un?t.valueStart:"start"in t?t.start:0}function ht(t,n){Bo(t.source,t.position,n,t.filename)}function pa(t,n,o,r){try{return o.finalize(r)}catch(l){if(l instanceof Mn)throw l;Bo(t.source,n,l instanceof Error?l.message:String(l),t.filename)}}function So(t,n,o){const r=t[o];if(r)return r;for(const l of n)if(o.startsWith(l.tagName))return l}function Cw(t,n,o,r,l){const s=So(n,o,r);if(s)return s;ht(t,`unknown ${l} tag !<${r}>`)}function Nw(t,n){const o=ww(t.source,n),r=n.tagStart===un?"":t.source.slice(n.tagStart,n.tagEnd),l=t.schema.defaultScalarTag;if(r!==""){if(r==="!")return{value:o,tag:l};const s=fa(r,t.tagHandlers),i=So(t.schema.exact.scalar,t.schema.prefix.scalar,s);if(i){const u=i.resolve(o,!0,s);return u===Ye&&ht(t,`cannot resolve a node with !<${s}> explicit tag`),{value:u,tag:i}}const d=So(t.schema.exact.mapping,t.schema.prefix.mapping,s)??So(t.schema.exact.sequence,t.schema.prefix.sequence,s);if(d){o!==""&&ht(t,`cannot resolve a node with !<${s}> explicit tag`);const u=d.create(s);return{value:d.carrierIsResult?u:pa(t,t.position,d,u),tag:d}}ht(t,`unknown scalar tag !<${s}>`)}if(n.style===1){const s=t.schema.implicitScalarByFirstChar.get(o.charAt(0))??t.schema.implicitScalarAnyFirstChar;for(const i of s){const d=i.resolve(o,!1,i.tagName);if(d!==Ye)return{value:d,tag:i}}}return{value:l.resolve(o,!1,l.tagName),tag:l}}function ga(t,n,o,r,l,s){const i=n.tagStart===un?"":t.source.slice(n.tagStart,n.tagEnd),d=i===""||i==="!"?l:fa(i,t.tagHandlers);return{tagName:d,tag:Cw(t,o,r,d,s)}}function ya(t){return t.nodeKind==="mapping"}function ha(t,n,o,r){for(const l of r.keys(o)){if(t.maxTotalMergeKeys!==-1&&++t.totalMergeKeys>t.maxTotalMergeKeys&&ht(t,`merge keys exceeded maxTotalMergeKeys (${t.maxTotalMergeKeys})`),n.tag.has(n.value,l))continue;const s=n.tag.addPair(n.value,l,r.get(o,l));s&&ht(t,s),(n.overridable??(n.overridable=new Set)).add(l)}}function Vw(t,n,o,r){if(t.position=n.keyPosition,ya(r))ha(t,n,o,r);else if(r.nodeKind==="sequence"&&Array.isArray(o))for(const l of o)ha(t,n,l,n.tag);else ht(t,"cannot merge mappings; the provided source object is unacceptable")}function Bw(t,n,o,r,l){var i,d;if(t.position=n.keyPosition,o===pr){Vw(t,n,r,l);return}!t.json&&n.tag.has(n.value,o)&&!((i=n.overridable)!=null&&i.has(o))&&ht(t,"duplicated mapping key");const s=n.tag.addPair(n.value,o,r);s&&ht(t,s),(d=n.overridable)==null||d.delete(o)}function Nr(t,n,o){const r=t.frames[t.frames.length-1];if(r.kind==="document")r.value=n,r.hasValue=!0;else if(r.kind==="sequence"){r.merge&&(ya(o)||ht(t,"cannot merge mappings; the provided source object is unacceptable"));const l=r.tag.addItem(r.value,n,r.index++);l&&ht(t,l)}else if(r.hasKey){const l=r.key;r.key=void 0,r.hasKey=!1,Bw(t,r,l,n,o)}else r.key=n,r.keyPosition=t.position,r.hasKey=!0}function Vr(t,n,o,r,l){if(n.anchorStart!==un){const s={value:o,tag:r,isValueFinal:l};return t.anchors.set(t.source.slice(n.anchorStart,n.anchorEnd),s),s}return null}function $w(t,n){const o={...Cr,...n,events:t,documents:[],eventIndex:0,position:0,frames:[],anchors:new Map,tagHandlers:Object.create(null),totalMergeKeys:0,aliasCount:0};for(;o.eventIndex<o.events.length;){const r=o.events[o.eventIndex++];switch(o.position=Ew(r),r.type){case 1:o.anchors=new Map,o.aliasCount=0,o.tagHandlers=Object.create(null);for(const l of r.directives)l.kind==="tag"&&(o.tagHandlers[l.handle]=l.prefix);o.frames.push({kind:"document",position:o.position,value:void 0,hasValue:!1});break;case 4:{const{value:l,tag:s}=Nw(o,r);Vr(o,r,l,s,!0),Nr(o,l,s);break}case 2:{const l=ga(o,r,o.schema.exact.sequence,o.schema.prefix.sequence,"tag:yaml.org,2002:seq","sequence"),s=l.tag.create(l.tagName),i=Vr(o,r,s,l.tag,l.tag.carrierIsResult),d=o.frames[o.frames.length-1],u=d!==void 0&&d.kind==="mapping"&&d.hasKey&&d.key===pr;o.frames.push({kind:"sequence",position:o.position,value:s,tag:l.tag,anchor:i,index:0,merge:u});break}case 3:{const l=ga(o,r,o.schema.exact.mapping,o.schema.prefix.mapping,"tag:yaml.org,2002:map","mapping"),s=l.tag.create(l.tagName),i=Vr(o,r,s,l.tag,l.tag.carrierIsResult);o.frames.push({kind:"mapping",position:o.position,value:s,tag:l.tag,anchor:i,key:void 0,keyPosition:o.position,hasKey:!1,overridable:null});break}case 5:{o.maxAliases!==-1&&++o.aliasCount>o.maxAliases&&ht(o,`aliases exceeded maxAliases (${o.maxAliases})`);const l=o.source.slice(r.anchorStart,r.anchorEnd),s=o.anchors.get(l);s||ht(o,`unidentified alias "${l}"`),s.isValueFinal||ht(o,`recursive alias "${l}" is not supported for tag ${s.tag.tagName} because it uses finalize()`),Nr(o,s.value,s.tag);break}case 6:{const l=o.frames.pop();if(l.kind==="document")o.documents.push(l.value);else{const s=l.tag.carrierIsResult?l.value:pa(o,l.position,l.tag,l.value);l.anchor&&(l.anchor.value=s,l.anchor.isValueFinal=!0),Nr(o,s,l.tag)}break}}}return o.documents}var We=-1,ba=Object.prototype.hasOwnProperty,It=1,Br=2,xa=3,vo=4,Sw=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,vw=/[,\[\]{}]/,ka=/^(?:!|!!|![0-9A-Za-z-]+!)$/,$r=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]])`,wa=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$.~*'()_])`,Lw=new RegExp(`^(?:${$r})*$`),Tw=new RegExp(`^(?:${wa})+$`),Aw=new RegExp(`^(?:!(?:${$r})*|${wa}(?:${$r})*)$`),Sr={filename:"",maxDepth:100};function Mw(t,n,o){t.events.push({type:1,explicitStart:n,explicitEnd:o,directives:t.directives})}function _a(t,n,o,r,l,s,i){t.events.push({type:2,start:n,anchorStart:o,anchorEnd:r,tagStart:l,tagEnd:s,style:i})}function Fn(t,n,o,r,l,s,i){t.events.push({type:3,start:n,anchorStart:o,anchorEnd:r,tagStart:l,tagEnd:s,style:i})}function fn(t,n,o,r,l,s,i,d,u=1,c=-1,p=!1){t.events.push({type:4,valueStart:n,valueEnd:o,anchorStart:r,anchorEnd:l,tagStart:s,tagEnd:i,style:d,chomping:u,indent:c,fast:p})}function Fw(t,n,o){t.events.push({type:5,anchorStart:n,anchorEnd:o})}function mn(t){t.events.push({type:6})}function bt(t){fn(t,We,We,We,We,We,We,1)}function Ea(){return{anchorStart:We,anchorEnd:We,tagStart:We,tagEnd:We}}function Dn(t){return{position:t.position,line:t.line,lineStart:t.lineStart,lineIndent:t.lineIndent,firstTabInLine:t.firstTabInLine,eventsLength:t.events.length}}function Rt(t,n){t.position=n.position,t.line=n.line,t.lineStart=n.lineStart,t.lineIndent=n.lineIndent,t.firstTabInLine=n.firstTabInLine,t.events.length=n.eventsLength}function Pe(t,n){Bo(t.input.slice(0,t.length),t.position,n,t.filename)}function dt(t){return t===10||t===13}function Zt(t){return t===9||t===32}function _t(t){return Zt(t)||dt(t)}function Lt(t){return t===0||_t(t)}function Kt(t){return t===44||t===91||t===93||t===123||t===125}function Dw(t){return t>=48&&t<=57?t-48:-1}function Pw(t){if(t>=48&&t<=57)return t-48;const n=t|32;return n>=97&&n<=102?n-97+10:-1}function zw(t){return t===120?2:t===117?4:t===85?8:0}function Iw(t){return t===48||t===97||t===98||t===116||t===9||t===110||t===118||t===102||t===114||t===101||t===32||t===34||t===47||t===92||t===78||t===95||t===76||t===80}function Lo(t){t.input.charCodeAt(t.position)===10?t.position++:(t.position++,t.input.charCodeAt(t.position)===10&&t.position++),t.line++,t.lineStart=t.position,t.lineIndent=0,t.firstTabInLine=-1}function pt(t,n){let o=0,r=t.input.charCodeAt(t.position),l=t.position===t.lineStart||_t(t.input.charCodeAt(t.position-1));for(;r!==0;){for(;Zt(r);)l=!0,r===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),r=t.input.charCodeAt(++t.position);if(n&&l&&r===35)do r=t.input.charCodeAt(++t.position);while(!dt(r)&&r!==0);if(!dt(r))break;for(Lo(t),o++,l=!0,r=t.input.charCodeAt(t.position);r===32;)t.lineIndent++,r=t.input.charCodeAt(++t.position)}return o}function jt(t,n=t.position){const o=t.input.charCodeAt(n);if((o===45||o===46)&&o===t.input.charCodeAt(n+1)&&o===t.input.charCodeAt(n+2)){const r=t.input.charCodeAt(n+3);return r===0||_t(r)}return!1}function Ca(t){let n=t.input.charCodeAt(t.position);for(;n!==0&&!dt(n);)n=t.input.charCodeAt(++t.position)}function Na(t,n,o){Sw.test(t.input.slice(n,o))&&Pe(t,"the stream contains non-printable characters")}function Rw(t,n,o){if(t.input.charCodeAt(t.position)!==33)return!1;n.tagStart!==We&&Pe(t,"duplication of a tag property");const r=t.position;let l=!1,s=!1,i="!",d=t.input.charCodeAt(++t.position);d===60?(l=!0,d=t.input.charCodeAt(++t.position)):d===33&&(s=!0,i="!!",d=t.input.charCodeAt(++t.position));let u=t.position,c;if(l){for(;d!==0&&d!==62;)d=t.input.charCodeAt(++t.position);d!==62&&Pe(t,"unexpected end of the stream within a verbatim tag"),c=t.input.slice(u,t.position),t.position++}else{for(;d!==0&&!_t(d)&&!(o&&Kt(d));)d===33&&(s?Pe(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(u-1,t.position+1),ka.test(i)||Pe(t,"named tag handle cannot contain such characters"),s=!0,u=t.position+1)),d=t.input.charCodeAt(++t.position);c=t.input.slice(u,t.position),vw.test(c)&&Pe(t,"tag suffix cannot contain flow indicator characters")}return c&&!(l?Lw.test(c):Tw.test(c))&&Pe(t,`tag name cannot contain such characters: ${c}`),!l&&i!=="!"&&i!=="!!"&&!ba.call(t.tagHandlers,i)&&Pe(t,`undeclared tag handle "${i}"`),n.tagStart=r,n.tagEnd=t.position,!0}function jw(t,n){if(t.input.charCodeAt(t.position)!==38)return!1;n.anchorStart!==We&&Pe(t,"duplication of an anchor property"),t.position++;const o=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position))&&!Kt(t.input.charCodeAt(t.position));)t.position++;return t.position===o&&Pe(t,"name of an anchor node must contain at least one character"),n.anchorStart=o,n.anchorEnd=t.position,!0}function Ow(t,n){if(t.input.charCodeAt(t.position)!==42)return!1;(n.anchorStart!==We||n.tagStart!==We)&&Pe(t,"alias node should not have any properties"),t.position++;const o=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position))&&!Kt(t.input.charCodeAt(t.position));)t.position++;return t.position===o&&Pe(t,"name of an alias node must contain at least one character"),Fw(t,o,t.position),!0}function vr(t,n){pt(t,!1),t.lineIndent<n&&Pe(t,"deficient indentation")}function Uw(t,n,o){if(t.input.charCodeAt(t.position)!==39)return!1;t.position++;const r=t.position;let l=!0;for(;t.input.charCodeAt(t.position)!==0;){const s=t.input.charCodeAt(t.position);if(s===39){if(t.input.charCodeAt(t.position+1)===39){l=!1,t.position+=2;continue}const i=t.position;return t.position++,fn(t,r,i,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,2,1,-1,l),!0}dt(s)?(l=!1,vr(t,n)):t.position===t.lineStart&&jt(t)?Pe(t,"unexpected end of the document within a single quoted scalar"):s!==9&&s<32?Pe(t,"expected valid JSON character"):t.position++}Pe(t,"unexpected end of the stream within a single quoted scalar")}function qw(t,n,o){if(t.input.charCodeAt(t.position)!==34)return!1;t.position++;const r=t.position;let l=!0;for(;t.input.charCodeAt(t.position)!==0;){const s=t.input.charCodeAt(t.position);if(s===34){const i=t.position;return t.position++,fn(t,r,i,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,3,1,-1,l),!0}if(s===92){l=!1;const i=t.input.charCodeAt(++t.position);if(dt(i))vr(t,n);else if(Iw(i))t.position++;else{let d=zw(i);for(d===0&&Pe(t,"unknown escape sequence");d-- >0;)t.position++,Pw(t.input.charCodeAt(t.position))<0&&Pe(t,"expected hexadecimal character");t.position++}}else dt(s)?(l=!1,vr(t,n)):t.position===t.lineStart&&jt(t)?Pe(t,"unexpected end of the document within a double quoted scalar"):s!==9&&s<32?Pe(t,"expected valid JSON character"):t.position++}Pe(t,"unexpected end of the stream within a double quoted scalar")}function Hw(t,n,o){const r=t.input.charCodeAt(t.position);let l=1,s=-1,i=!1;if(r!==124&&r!==62)return!1;const d=r===124?4:5;for(t.position++;t.input.charCodeAt(t.position)!==0;){const m=t.input.charCodeAt(t.position),y=Dw(m);if(m===43||m===45)l!==1&&Pe(t,"repeat of a chomping mode identifier"),l=m===43?3:2,t.position++;else if(y>=0)y===0&&Pe(t,"bad explicit indentation width of a block scalar; it cannot be less than one"),i&&Pe(t,"repeat of an indentation width identifier"),s=n+y-1,i=!0,t.position++;else break}let u=!1;for(;Zt(t.input.charCodeAt(t.position));)u=!0,t.position++;u&&t.input.charCodeAt(t.position)===35&&Ca(t),dt(t.input.charCodeAt(t.position))?Lo(t):t.input.charCodeAt(t.position)!==0&&Pe(t,"a line break is expected");let c=i?s:-1,p=0;const a=t.position;let g=t.position;for(;t.input.charCodeAt(t.position)!==0;){const m=t.position;let y=0;for(;t.input.charCodeAt(m+y)===32;)y++;const k=t.input.charCodeAt(m+y);if(k===0){c>=0?y>c&&(g=m+y):y>0&&(g=m+y);break}if(m===t.lineStart&&jt(t,m))break;if(!i&&c===-1&&dt(k)&&(p=Math.max(p,y)),!i&&c===-1&&!dt(k)&&(k===9&&y<n&&(t.position=m+y,Pe(t,"tab characters must not be used in indentation")),y<p&&(t.position=m+y,Pe(t,"bad indentation of a mapping entry"))),c===-1&&k!==0&&!dt(k)&&y<n){t.lineIndent=y,t.position=m+y;break}!i&&k!==0&&!dt(k)&&c===-1&&(c=y);const h=c===-1?n+1:c;if(k!==0&&!dt(k)&&y<h){t.lineIndent=y,t.position=m+y;break}Ca(t),g=t.position,dt(t.input.charCodeAt(t.position))&&(Lo(t),g=t.position)}return Na(t,a,g),fn(t,a,g,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,d,l,c),!0}function Ww(t,n){const o=t.input.charCodeAt(t.position),r=n===It;if(o===0||_t(o)||o===35||o===38||o===42||o===33||o===124||o===62||o===39||o===34||o===37||o===64||o===96||r&&Kt(o))return!1;if(o===63||o===45){const l=t.input.charCodeAt(t.position+1);if(Lt(l)||r&&Kt(l))return!1}return!0}function Yw(t,n,o,r){if(!Ww(t,o))return!1;const l=t.position;let s=t.position,i=t.input.charCodeAt(t.position);const d=o===It;let u=!1;for(;i!==0&&!(t.position===t.lineStart&&jt(t));){if(i===58){const c=t.input.charCodeAt(t.position+1);if(Lt(c)||d&&Kt(c))break}else if(i===35){if(_t(t.input.charCodeAt(t.position-1)))break}else{if(d&&Kt(i))break;if(dt(i)){const c=t.position,p=t.line,a=t.lineStart,g=t.lineIndent;if(pt(t,!1),t.lineIndent>=n){u=!0,i=t.input.charCodeAt(t.position);continue}t.position=c,t.line=p,t.lineStart=a,t.lineIndent=g;break}}Zt(i)||(s=t.position+1),i=t.input.charCodeAt(++t.position)}return s===l?!1:(Na(t,l,s),fn(t,l,s,r.anchorStart,r.anchorEnd,r.tagStart,r.tagEnd,1,1,-1,!u),!0)}function Xt(t,n){const o=t.line;pt(t,!0),(t.line>o&&t.lineIndent<n||t.firstTabInLine!==-1&&t.lineIndent<n)&&Pe(t,"deficient indentation")}function Gw(t,n,o){const r=t.input.charCodeAt(t.position),l=r===123,s=t.position;let i=!0;if(r!==91&&r!==123)return!1;const d=l?125:93;for(l?Fn(t,s,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,2):_a(t,s,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,2),t.position++;t.input.charCodeAt(t.position)!==0;){Xt(t,n);let u=t.input.charCodeAt(t.position);if(u===d)return t.position++,mn(t),!0;i?u===44&&Pe(t,"expected the node content, but found ','"):Pe(t,"missed comma between flow collection entries");let c=!1,p=!1;u===63&&_t(t.input.charCodeAt(t.position+1))&&(c=p=!0,t.position+=1,Xt(t,n));const a=t.line,g=Dn(t),m=Tt(t,n,It,!1,!0);Xt(t,n),u=t.input.charCodeAt(t.position),(l||p||t.line===a)&&u===58?(c=!0,t.position++,Xt(t,n),l?m||bt(t):(Rt(t,g),Fn(t,g.position,We,We,We,We,2),Tt(t,n,It,!1,!0)||bt(t),Xt(t,n),t.position++,Xt(t,n)),Tt(t,n,It,!1,!0)||bt(t),Xt(t,n),l||mn(t)):l&&c?(m||bt(t),bt(t)):l?bt(t):c&&(Rt(t,g),Fn(t,g.position,We,We,We,We,2),Tt(t,n,It,!1,!0),bt(t),mn(t)),u=t.input.charCodeAt(t.position),u===44?(i=!0,t.position++):i=!1}Pe(t,"unexpected end of the stream within a flow collection")}function Va(t,n,o){if(t.firstTabInLine!==-1||t.input.charCodeAt(t.position)!==45||!Lt(t.input.charCodeAt(t.position+1)))return!1;for(_a(t,t.position,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,1);t.input.charCodeAt(t.position)===45&&Lt(t.input.charCodeAt(t.position+1));){t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Pe(t,"tab characters must not be used in indentation"));const r=t.line;t.position++;const l=pt(t,!0)>0;if(t.firstTabInLine!==-1&&t.input.charCodeAt(t.position)===45&&Lt(t.input.charCodeAt(t.position+1))&&Pe(t,"bad indentation of a sequence entry"),l&&t.lineIndent<=n?bt(t):Tt(t,n,xa,!1,!0),pt(t,!0),t.lineIndent<n||t.position>=t.length)break;t.lineIndent>n&&Pe(t,"bad indentation of a sequence entry"),t.line===r&&t.input.charCodeAt(t.position)===45&&Lt(t.input.charCodeAt(t.position+1))&&Pe(t,"bad indentation of a sequence entry")}return mn(t),!0}function Lr(t,n,o,r){let l=!1,s=!1,i=!1,d=!1;if(t.firstTabInLine!==-1)return!1;let u=t.input.charCodeAt(t.position);for(;u!==0;){!l&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Pe(t,"tab characters must not be used in indentation"));const c=t.input.charCodeAt(t.position+1),p=t.line;if((u===63||u===58)&&Lt(c))i||(Fn(t,t.position,r.anchorStart,r.anchorEnd,r.tagStart,r.tagEnd,1),i=!0),u===63?(l&&bt(t),s=!0,l=!0):(l||(bt(t),s=!0),l=!1),t.position+=1,d=!0;else{l&&(bt(t),l=!1);const a=Dn(t);if(!Tt(t,o,Br,!1,!0))break;if(t.line===p){for(u=t.input.charCodeAt(t.position);Zt(u);)u=t.input.charCodeAt(++t.position);if(u===58){if(u=t.input.charCodeAt(++t.position),Lt(u)||Pe(t,"a whitespace character is expected after the key-value separator within a block mapping"),!i){for(Rt(t,a),Fn(t,a.position,r.anchorStart,r.anchorEnd,r.tagStart,r.tagEnd,1),i=!0,Tt(t,o,Br,!1,!0),u=t.input.charCodeAt(t.position);Zt(u);)u=t.input.charCodeAt(++t.position);t.position++}s=!0,l=!1,d=!1}else if(s)Pe(t,"expected ':' after a mapping key");else return r.anchorStart!==We||r.tagStart!==We?(Rt(t,a),!1):!0}else if(s)Pe(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return r.anchorStart!==We||r.tagStart!==We?(Rt(t,a),!1):!0}if(Tt(t,n,vo,!0,d)&&(d=!1),l||d&&(bt(t),d=!1),pt(t,!0),u=t.input.charCodeAt(t.position),(t.line===p||t.lineIndent>n)&&u!==0)Pe(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return s?(l&&bt(t),i&&mn(t),!0):!1}function Tt(t,n,o,r,l,s=!0){var y,k;t.depth>=t.maxDepth&&Pe(t,`nesting exceeded maxDepth (${t.maxDepth})`),t.depth++;let i=1,d=!1,u=!1,c=null;const p=Ea();let a=o===vo||o===xa,g=a;const m=a;if(r&&pt(t,!0)&&(d=!0,t.lineIndent>n?i=1:t.lineIndent===n?i=0:i=-1),t.position===t.lineStart&&jt(t))return t.depth--,!1;if(i===1)for(;;){const h=t.input.charCodeAt(t.position),f=Dn(t);if(d&&i!==1&&(h===33||h===38))break;if(d&&m&&(p.tagStart!==We||p.anchorStart!==We)&&(h===33||h===38)){const b=Dn(t),x=n+1;if(Lr(t,t.position-t.lineStart,x,p)&&((y=t.events[b.eventsLength])==null?void 0:y.type)===3)return t.depth--,!0;Rt(t,b)}if(d&&(h===33&&p.tagStart!==We||h===38&&p.anchorStart!==We)||!Rw(t,p,o===It)&&!jw(t,p))break;c===null&&(c=f),pt(t,!0)?(d=!0,g=m,t.lineIndent>n?i=1:t.lineIndent===n?i=0:i=-1):g=!1}if(g&&(g=d||l),i===1||o===vo){const h=o===It||o===Br?n:n+1,f=t.position-t.lineStart;if(i===1)if(g&&(Va(t,f,p)||Lr(t,f,h,p))||Gw(t,h,p))u=!0;else{const b=t.input.charCodeAt(t.position);if(c!==null&&s&&m&&!g&&b!==124&&b!==62){const x=Dn(t),C=c.position-c.lineStart;Rt(t,c),Lr(t,C,h,Ea())&&((k=t.events[x.eventsLength])==null?void 0:k.type)===3?u=!0:Rt(t,x)}!u&&(a&&Hw(t,h,p)||Uw(t,h,p)||qw(t,h,p)||Ow(t,p)||Yw(t,h,o,p))&&(u=!0)}else i===0&&(u=g&&Va(t,f,p))}return a=a&&!u,!u&&(p.anchorStart!==We||p.tagStart!==We||a)&&(fn(t,We,We,p.anchorStart,p.anchorEnd,p.tagStart,p.tagEnd,1),u=!0),t.depth--,u||p.anchorStart!==We||p.tagStart!==We}function Zw(t){if(t.lineIndent>0||t.input.charCodeAt(t.position)!==37)return!1;t.position++;const n=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position));)t.position++;const o=t.input.slice(n,t.position),r=[];for(o.length===0&&Pe(t,"directive name must not be less than one character in length");t.input.charCodeAt(t.position)!==0&&!dt(t.input.charCodeAt(t.position));){for(;Zt(t.input.charCodeAt(t.position));)t.position++;if(t.input.charCodeAt(t.position)===35||dt(t.input.charCodeAt(t.position))||t.input.charCodeAt(t.position)===0)break;const l=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position));)t.position++;r.push(t.input.slice(l,t.position))}if(dt(t.input.charCodeAt(t.position))&&Lo(t),o==="YAML"){t.directives.some(s=>s.kind==="yaml")&&Pe(t,"duplication of %YAML directive"),r.length!==1&&Pe(t,"YAML directive accepts exactly one argument");const l=/^([0-9]+)\.([0-9]+)$/.exec(r[0]);l===null&&Pe(t,"ill-formed argument of the YAML directive"),parseInt(l[1],10)!==1&&Pe(t,"unacceptable YAML version of the document"),t.directives.push({kind:"yaml",version:r[0]})}else if(o==="TAG"){r.length!==2&&Pe(t,"TAG directive accepts exactly two arguments");const[l,s]=r;ka.test(l)||Pe(t,"ill-formed tag handle (first argument) of the TAG directive"),ba.call(t.tagHandlers,l)&&Pe(t,`there is a previously declared suffix for "${l}" tag handle`),Aw.test(s)||Pe(t,"ill-formed tag prefix (second argument) of the TAG directive"),t.tagHandlers[l]=s,t.directives.push({kind:"tag",handle:l,prefix:s})}return!0}function Kw(t){t.directives=[],t.tagHandlers=Object.create(null);let n=!1;for(pt(t,!0);Zw(t);)n=!0,pt(t,!0);let o=!1,r=!1,l=!0;if(t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45&&Lt(t.input.charCodeAt(t.position+3))){o=!0;const d=t.line;t.position+=3,pt(t,!0),l=t.line>d}else n&&Pe(t,"directives end mark is expected");const s=t.events.length;if(!o&&t.position===t.lineStart&&t.input.charCodeAt(t.position)===46&&jt(t)){t.position+=3,pt(t,!0);return}if(Mw(t,o,!1),Tt(t,t.lineIndent-1,vo,!1,l,l)||bt(t),pt(t,!0),t.position===t.lineStart&&jt(t)&&(r=t.input.charCodeAt(t.position)===46,r)){const d=t.line;t.position+=3,pt(t,!0),t.line===d&&t.position<t.length&&Pe(t,"end of the stream or a document separator is expected")}const i=t.events[s];(i==null?void 0:i.type)===1&&(i.explicitEnd=r),mn(t),!r&&t.position<t.length&&!(t.position===t.lineStart&&jt(t))&&Pe(t,"end of the stream or a document separator is expected")}function Xw(t,n){const o=t.length,r={...Sr,...n,input:`${t}\0`,length:o,position:0,line:0,lineStart:0,lineIndent:0,firstTabInLine:-1,depth:0,directives:[],tagHandlers:Object.create(null),events:[]},l=t.indexOf("\0");for(l!==-1&&Bo(t,l,"null byte is not allowed in input",r.filename),r.input.charCodeAt(r.position)===65279&&r.position++;r.position<r.length&&(pt(r,!0),!(r.position>=r.length));){const s=r.position;Kw(r),r.position===s&&Pe(r,"can not read a document")}return r.events}var Jw={...Sr,...Cr};function Qw(t,n={}){const o={...Jw,...n},r=String(t),l=Object.keys(Sr),s=Object.keys(Cr);return $w(Xw(r,br(o,l)),{...br(o,s),source:r})}function Tr(t,n){const o=Qw(t,n);if(o.length===0)throw new Mn("expected a document, but the input is empty");if(o.length===1)return o[0];throw new Mn("expected a single document in the stream, but found more")}var To=class{constructor(){ut(this,"tagged",!1);ut(this,"flow",!1);ut(this,"singleQuoted",!1);ut(this,"doubleQuoted",!1);ut(this,"literal",!1);ut(this,"folded",!1)}},Jt=Symbol("INVALID");function e2(t){const n=new Set([t.defaultScalarTag,t.defaultSequenceTag,t.defaultMappingTag].filter(s=>s!==void 0)),o=t.implicitScalarTags,r=t.tags.filter(s=>!(s.nodeKind==="scalar"&&s.implicit)&&!n.has(s)),l=t.tags.filter(s=>n.has(s));return[...o.map(s=>({tag:s,implicitTag:!0})),...r.map(s=>({tag:s,implicitTag:!1})),...l.map(s=>({tag:s,implicitTag:!0}))]}function t2(t,n){for(let o=0,r=t.representTypes.length;o<r;o+=1){const{tag:l,implicitTag:s}=t.representTypes[o];if(l.identify&&l.identify(n)){let i;return l.matchByTagPrefix&&l.representTagName?i=l.representTagName(n):i=l.tagName,{tag:l,tagName:i,implicitTag:s}}}return null}function Pn(t,n){if(!t.noRefs&&n!==null&&typeof n=="object"){const p=t.refs.get(n);if(p)return p.anchor===void 0&&(p.anchor=`ref_${t.refCounter++}`),{kind:"alias",tag:"",style:new To,anchor:p.anchor}}const o=t2(t,n);if(!o){if(n===void 0||t.skipInvalid)return Jt;throw new Mn(`unacceptable kind of an object to dump ${Object.prototype.toString.call(n)}`)}const{tag:r,tagName:l,implicitTag:s}=o,i=s?l:ma(l);if(r.nodeKind==="scalar"){const p=new To;return p.tagged=!s,{kind:"scalar",tag:i,style:p,value:r.represent(n)}}if(r.nodeKind==="sequence"){const p=r.represent(n),a=new To;a.tagged=!s;const g={kind:"sequence",tag:i,style:a,items:[]};t.noRefs||t.refs.set(n,g);for(let m=0,y=p.length;m<y;m+=1){let k=Pn(t,p[m]);k===Jt&&p[m]===void 0&&(k=Pn(t,null)),k!==Jt&&g.items.push(k)}return g}const d=r.represent(n),u=new To;u.tagged=!s;const c={kind:"mapping",tag:i,style:u,items:[]};t.noRefs||t.refs.set(n,c);for(const[p,a]of d){const g=Pn(t,p);if(g===Jt)continue;const m=Pn(t,a);m!==Jt&&c.items.push({key:g,value:m})}return c}function n2(t,n,o={}){const r=Pn({representTypes:e2(n),noRefs:o.noRefs??!1,skipInvalid:o.skipInvalid??!1,refs:new Map,refCounter:0},t);return[{contents:r===Jt?null:r,directives:[]}]}var o2=Symbol("visit:break"),Ba=Symbol("visit:skip");function Ao(t,n,o){const r=n(t,o);if(r===o2)return!0;if(r===Ba)return!1;const l=o.depth+1;switch(t.kind){case"sequence":for(const s of t.items)if(Ao(s,n,{depth:l,parent:t,isKey:!1}))return!0;break;case"mapping":for(const{key:s,value:i}of t.items)if(Ao(s,n,{depth:l,parent:t,isKey:!0})||Ao(i,n,{depth:l,parent:t,isKey:!1}))return!0;break}return!1}function r2(t,n){for(const o of t)if(o.contents&&Ao(o.contents,n,{depth:0,parent:null,isKey:!1}))return}var Ar=65279,l2=9,Qt=10,$a=13,a2=32,s2=33,Sa=34,Mr=35,i2=37,c2=38,va=39,d2=42,La=44,Fr=45,zn=58,u2=61,f2=62,Ta=63,m2=64,Aa=91,Ma=93,p2=96,Fa=123,g2=124,Da=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 Dr={indent:2,seqNoIndent:!1,seqInlineFirst:!0,sortKeys:!1,lineWidth:80,flowBracketPadding:!1,flowSkipCommaSpace:!1,flowSkipColonSpace:!1,quoteFlowKeys:!1,quoteStyle:"single",forceQuotes:!1,tagBeforeAnchor:!1};function y2(t){return t.style.tagged?t.tag:ma(t.tag)}function h2(t){const n={...Dr,...t};return{...n,defaultScalarTagName:n.schema.defaultScalarTag.tagName,implicitResolvers:n.schema.implicitScalarTags}}function b2(t){const n=t.toString(16).toUpperCase(),o=t<=255?"x":"u",r=t<=255?2:4;return`\\${o}${"0".repeat(r-n.length)}${n}`}function Pa(t,n){const o=" ".repeat(n);let r=0,l="";const s=t.length;for(;r<s;){let i;const d=t.indexOf(`
23
+ `),c}function Cw(t,n){if(n.valueStart===hw)return"";const{valueStart:o,valueEnd:r}=n;if(n.fast)return t.slice(o,r);switch(n.style){case 2:return _w(t,o,r);case 3:return Ew(t,o,r);case 4:return ua(t,o,r,n.indent,n.chomping,!1);case 5:return ua(t,o,r,n.indent,n.chomping,!0);default:return ww(t,o,r)}}var Nw={"!":"!","!!":"tag:yaml.org,2002:"};function Er(t){return encodeURI(t).replace(/!/g,"%21")}function fa(t,n){if(t.startsWith("!<")&&t.endsWith(">"))return decodeURIComponent(t.slice(2,-1));const o=t.indexOf("!",1),r=o===-1?"!":t.slice(0,o+1),l=(n==null?void 0:n[r])??Nw[r]??r;return decodeURIComponent(l)+decodeURIComponent(t.slice(r.length))}function ma(t){let n=t;return n.charCodeAt(0)===33?(n=n.slice(1),`!${Er(n)}`):n.slice(0,18)==="tag:yaml.org,2002:"?`!!${Er(n.slice(18))}`:`!<${Er(n)}>`}var fn=-1,Cr={filename:"",schema:mw,json:!1,maxTotalMergeKeys:1e4,maxAliases:-1};function Vw(t){return"tagStart"in t&&t.tagStart!==fn?t.tagStart:"anchorStart"in t&&t.anchorStart!==fn?t.anchorStart:"valueStart"in t&&t.valueStart!==fn?t.valueStart:"start"in t?t.start:0}function ht(t,n){Bo(t.source,t.position,n,t.filename)}function pa(t,n,o,r){try{return o.finalize(r)}catch(l){if(l instanceof Fn)throw l;Bo(t.source,n,l instanceof Error?l.message:String(l),t.filename)}}function So(t,n,o){const r=t[o];if(r)return r;for(const l of n)if(o.startsWith(l.tagName))return l}function Bw(t,n,o,r,l){const s=So(n,o,r);if(s)return s;ht(t,`unknown ${l} tag !<${r}>`)}function $w(t,n){const o=Cw(t.source,n),r=n.tagStart===fn?"":t.source.slice(n.tagStart,n.tagEnd),l=t.schema.defaultScalarTag;if(r!==""){if(r==="!")return{value:o,tag:l};const s=fa(r,t.tagHandlers),i=So(t.schema.exact.scalar,t.schema.prefix.scalar,s);if(i){const u=i.resolve(o,!0,s);return u===Ye&&ht(t,`cannot resolve a node with !<${s}> explicit tag`),{value:u,tag:i}}const d=So(t.schema.exact.mapping,t.schema.prefix.mapping,s)??So(t.schema.exact.sequence,t.schema.prefix.sequence,s);if(d){o!==""&&ht(t,`cannot resolve a node with !<${s}> explicit tag`);const u=d.create(s);return{value:d.carrierIsResult?u:pa(t,t.position,d,u),tag:d}}ht(t,`unknown scalar tag !<${s}>`)}if(n.style===1){const s=t.schema.implicitScalarByFirstChar.get(o.charAt(0))??t.schema.implicitScalarAnyFirstChar;for(const i of s){const d=i.resolve(o,!1,i.tagName);if(d!==Ye)return{value:d,tag:i}}}return{value:l.resolve(o,!1,l.tagName),tag:l}}function ga(t,n,o,r,l,s){const i=n.tagStart===fn?"":t.source.slice(n.tagStart,n.tagEnd),d=i===""||i==="!"?l:fa(i,t.tagHandlers);return{tagName:d,tag:Bw(t,o,r,d,s)}}function ya(t){return t.nodeKind==="mapping"}function ha(t,n,o,r){for(const l of r.keys(o)){if(t.maxTotalMergeKeys!==-1&&++t.totalMergeKeys>t.maxTotalMergeKeys&&ht(t,`merge keys exceeded maxTotalMergeKeys (${t.maxTotalMergeKeys})`),n.tag.has(n.value,l))continue;const s=n.tag.addPair(n.value,l,r.get(o,l));s&&ht(t,s),(n.overridable??(n.overridable=new Set)).add(l)}}function Sw(t,n,o,r){if(t.position=n.keyPosition,ya(r))ha(t,n,o,r);else if(r.nodeKind==="sequence"&&Array.isArray(o))for(const l of o)ha(t,n,l,n.tag);else ht(t,"cannot merge mappings; the provided source object is unacceptable")}function vw(t,n,o,r,l){var i,d;if(t.position=n.keyPosition,o===pr){Sw(t,n,r,l);return}!t.json&&n.tag.has(n.value,o)&&!((i=n.overridable)!=null&&i.has(o))&&ht(t,"duplicated mapping key");const s=n.tag.addPair(n.value,o,r);s&&ht(t,s),(d=n.overridable)==null||d.delete(o)}function Nr(t,n,o){const r=t.frames[t.frames.length-1];if(r.kind==="document")r.value=n,r.hasValue=!0;else if(r.kind==="sequence"){r.merge&&(ya(o)||ht(t,"cannot merge mappings; the provided source object is unacceptable"));const l=r.tag.addItem(r.value,n,r.index++);l&&ht(t,l)}else if(r.hasKey){const l=r.key;r.key=void 0,r.hasKey=!1,vw(t,r,l,n,o)}else r.key=n,r.keyPosition=t.position,r.hasKey=!0}function Vr(t,n,o,r,l){if(n.anchorStart!==fn){const s={value:o,tag:r,isValueFinal:l};return t.anchors.set(t.source.slice(n.anchorStart,n.anchorEnd),s),s}return null}function Lw(t,n){const o={...Cr,...n,events:t,documents:[],eventIndex:0,position:0,frames:[],anchors:new Map,tagHandlers:Object.create(null),totalMergeKeys:0,aliasCount:0};for(;o.eventIndex<o.events.length;){const r=o.events[o.eventIndex++];switch(o.position=Vw(r),r.type){case 1:o.anchors=new Map,o.aliasCount=0,o.tagHandlers=Object.create(null);for(const l of r.directives)l.kind==="tag"&&(o.tagHandlers[l.handle]=l.prefix);o.frames.push({kind:"document",position:o.position,value:void 0,hasValue:!1});break;case 4:{const{value:l,tag:s}=$w(o,r);Vr(o,r,l,s,!0),Nr(o,l,s);break}case 2:{const l=ga(o,r,o.schema.exact.sequence,o.schema.prefix.sequence,"tag:yaml.org,2002:seq","sequence"),s=l.tag.create(l.tagName),i=Vr(o,r,s,l.tag,l.tag.carrierIsResult),d=o.frames[o.frames.length-1],u=d!==void 0&&d.kind==="mapping"&&d.hasKey&&d.key===pr;o.frames.push({kind:"sequence",position:o.position,value:s,tag:l.tag,anchor:i,index:0,merge:u});break}case 3:{const l=ga(o,r,o.schema.exact.mapping,o.schema.prefix.mapping,"tag:yaml.org,2002:map","mapping"),s=l.tag.create(l.tagName),i=Vr(o,r,s,l.tag,l.tag.carrierIsResult);o.frames.push({kind:"mapping",position:o.position,value:s,tag:l.tag,anchor:i,key:void 0,keyPosition:o.position,hasKey:!1,overridable:null});break}case 5:{o.maxAliases!==-1&&++o.aliasCount>o.maxAliases&&ht(o,`aliases exceeded maxAliases (${o.maxAliases})`);const l=o.source.slice(r.anchorStart,r.anchorEnd),s=o.anchors.get(l);s||ht(o,`unidentified alias "${l}"`),s.isValueFinal||ht(o,`recursive alias "${l}" is not supported for tag ${s.tag.tagName} because it uses finalize()`),Nr(o,s.value,s.tag);break}case 6:{const l=o.frames.pop();if(l.kind==="document")o.documents.push(l.value);else{const s=l.tag.carrierIsResult?l.value:pa(o,l.position,l.tag,l.value);l.anchor&&(l.anchor.value=s,l.anchor.isValueFinal=!0),Nr(o,s,l.tag)}break}}}return o.documents}var We=-1,ba=Object.prototype.hasOwnProperty,It=1,Br=2,xa=3,vo=4,Tw=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Aw=/[,\[\]{}]/,ka=/^(?:!|!!|![0-9A-Za-z-]+!)$/,$r=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]])`,wa=String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$.~*'()_])`,Mw=new RegExp(`^(?:${$r})*$`),Fw=new RegExp(`^(?:${wa})+$`),Dw=new RegExp(`^(?:!(?:${$r})*|${wa}(?:${$r})*)$`),Sr={filename:"",maxDepth:100};function Pw(t,n,o){t.events.push({type:1,explicitStart:n,explicitEnd:o,directives:t.directives})}function _a(t,n,o,r,l,s,i){t.events.push({type:2,start:n,anchorStart:o,anchorEnd:r,tagStart:l,tagEnd:s,style:i})}function Dn(t,n,o,r,l,s,i){t.events.push({type:3,start:n,anchorStart:o,anchorEnd:r,tagStart:l,tagEnd:s,style:i})}function mn(t,n,o,r,l,s,i,d,u=1,c=-1,p=!1){t.events.push({type:4,valueStart:n,valueEnd:o,anchorStart:r,anchorEnd:l,tagStart:s,tagEnd:i,style:d,chomping:u,indent:c,fast:p})}function zw(t,n,o){t.events.push({type:5,anchorStart:n,anchorEnd:o})}function pn(t){t.events.push({type:6})}function bt(t){mn(t,We,We,We,We,We,We,1)}function Ea(){return{anchorStart:We,anchorEnd:We,tagStart:We,tagEnd:We}}function Pn(t){return{position:t.position,line:t.line,lineStart:t.lineStart,lineIndent:t.lineIndent,firstTabInLine:t.firstTabInLine,eventsLength:t.events.length}}function Rt(t,n){t.position=n.position,t.line=n.line,t.lineStart=n.lineStart,t.lineIndent=n.lineIndent,t.firstTabInLine=n.firstTabInLine,t.events.length=n.eventsLength}function Pe(t,n){Bo(t.input.slice(0,t.length),t.position,n,t.filename)}function dt(t){return t===10||t===13}function Zt(t){return t===9||t===32}function _t(t){return Zt(t)||dt(t)}function Lt(t){return t===0||_t(t)}function Kt(t){return t===44||t===91||t===93||t===123||t===125}function Iw(t){return t>=48&&t<=57?t-48:-1}function Rw(t){if(t>=48&&t<=57)return t-48;const n=t|32;return n>=97&&n<=102?n-97+10:-1}function jw(t){return t===120?2:t===117?4:t===85?8:0}function Ow(t){return t===48||t===97||t===98||t===116||t===9||t===110||t===118||t===102||t===114||t===101||t===32||t===34||t===47||t===92||t===78||t===95||t===76||t===80}function Lo(t){t.input.charCodeAt(t.position)===10?t.position++:(t.position++,t.input.charCodeAt(t.position)===10&&t.position++),t.line++,t.lineStart=t.position,t.lineIndent=0,t.firstTabInLine=-1}function pt(t,n){let o=0,r=t.input.charCodeAt(t.position),l=t.position===t.lineStart||_t(t.input.charCodeAt(t.position-1));for(;r!==0;){for(;Zt(r);)l=!0,r===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),r=t.input.charCodeAt(++t.position);if(n&&l&&r===35)do r=t.input.charCodeAt(++t.position);while(!dt(r)&&r!==0);if(!dt(r))break;for(Lo(t),o++,l=!0,r=t.input.charCodeAt(t.position);r===32;)t.lineIndent++,r=t.input.charCodeAt(++t.position)}return o}function jt(t,n=t.position){const o=t.input.charCodeAt(n);if((o===45||o===46)&&o===t.input.charCodeAt(n+1)&&o===t.input.charCodeAt(n+2)){const r=t.input.charCodeAt(n+3);return r===0||_t(r)}return!1}function Ca(t){let n=t.input.charCodeAt(t.position);for(;n!==0&&!dt(n);)n=t.input.charCodeAt(++t.position)}function Na(t,n,o){Tw.test(t.input.slice(n,o))&&Pe(t,"the stream contains non-printable characters")}function Uw(t,n,o){if(t.input.charCodeAt(t.position)!==33)return!1;n.tagStart!==We&&Pe(t,"duplication of a tag property");const r=t.position;let l=!1,s=!1,i="!",d=t.input.charCodeAt(++t.position);d===60?(l=!0,d=t.input.charCodeAt(++t.position)):d===33&&(s=!0,i="!!",d=t.input.charCodeAt(++t.position));let u=t.position,c;if(l){for(;d!==0&&d!==62;)d=t.input.charCodeAt(++t.position);d!==62&&Pe(t,"unexpected end of the stream within a verbatim tag"),c=t.input.slice(u,t.position),t.position++}else{for(;d!==0&&!_t(d)&&!(o&&Kt(d));)d===33&&(s?Pe(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(u-1,t.position+1),ka.test(i)||Pe(t,"named tag handle cannot contain such characters"),s=!0,u=t.position+1)),d=t.input.charCodeAt(++t.position);c=t.input.slice(u,t.position),Aw.test(c)&&Pe(t,"tag suffix cannot contain flow indicator characters")}return c&&!(l?Mw.test(c):Fw.test(c))&&Pe(t,`tag name cannot contain such characters: ${c}`),!l&&i!=="!"&&i!=="!!"&&!ba.call(t.tagHandlers,i)&&Pe(t,`undeclared tag handle "${i}"`),n.tagStart=r,n.tagEnd=t.position,!0}function qw(t,n){if(t.input.charCodeAt(t.position)!==38)return!1;n.anchorStart!==We&&Pe(t,"duplication of an anchor property"),t.position++;const o=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position))&&!Kt(t.input.charCodeAt(t.position));)t.position++;return t.position===o&&Pe(t,"name of an anchor node must contain at least one character"),n.anchorStart=o,n.anchorEnd=t.position,!0}function Hw(t,n){if(t.input.charCodeAt(t.position)!==42)return!1;(n.anchorStart!==We||n.tagStart!==We)&&Pe(t,"alias node should not have any properties"),t.position++;const o=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position))&&!Kt(t.input.charCodeAt(t.position));)t.position++;return t.position===o&&Pe(t,"name of an alias node must contain at least one character"),zw(t,o,t.position),!0}function vr(t,n){pt(t,!1),t.lineIndent<n&&Pe(t,"deficient indentation")}function Ww(t,n,o){if(t.input.charCodeAt(t.position)!==39)return!1;t.position++;const r=t.position;let l=!0;for(;t.input.charCodeAt(t.position)!==0;){const s=t.input.charCodeAt(t.position);if(s===39){if(t.input.charCodeAt(t.position+1)===39){l=!1,t.position+=2;continue}const i=t.position;return t.position++,mn(t,r,i,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,2,1,-1,l),!0}dt(s)?(l=!1,vr(t,n)):t.position===t.lineStart&&jt(t)?Pe(t,"unexpected end of the document within a single quoted scalar"):s!==9&&s<32?Pe(t,"expected valid JSON character"):t.position++}Pe(t,"unexpected end of the stream within a single quoted scalar")}function Yw(t,n,o){if(t.input.charCodeAt(t.position)!==34)return!1;t.position++;const r=t.position;let l=!0;for(;t.input.charCodeAt(t.position)!==0;){const s=t.input.charCodeAt(t.position);if(s===34){const i=t.position;return t.position++,mn(t,r,i,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,3,1,-1,l),!0}if(s===92){l=!1;const i=t.input.charCodeAt(++t.position);if(dt(i))vr(t,n);else if(Ow(i))t.position++;else{let d=jw(i);for(d===0&&Pe(t,"unknown escape sequence");d-- >0;)t.position++,Rw(t.input.charCodeAt(t.position))<0&&Pe(t,"expected hexadecimal character");t.position++}}else dt(s)?(l=!1,vr(t,n)):t.position===t.lineStart&&jt(t)?Pe(t,"unexpected end of the document within a double quoted scalar"):s!==9&&s<32?Pe(t,"expected valid JSON character"):t.position++}Pe(t,"unexpected end of the stream within a double quoted scalar")}function Gw(t,n,o){const r=t.input.charCodeAt(t.position);let l=1,s=-1,i=!1;if(r!==124&&r!==62)return!1;const d=r===124?4:5;for(t.position++;t.input.charCodeAt(t.position)!==0;){const m=t.input.charCodeAt(t.position),y=Iw(m);if(m===43||m===45)l!==1&&Pe(t,"repeat of a chomping mode identifier"),l=m===43?3:2,t.position++;else if(y>=0)y===0&&Pe(t,"bad explicit indentation width of a block scalar; it cannot be less than one"),i&&Pe(t,"repeat of an indentation width identifier"),s=n+y-1,i=!0,t.position++;else break}let u=!1;for(;Zt(t.input.charCodeAt(t.position));)u=!0,t.position++;u&&t.input.charCodeAt(t.position)===35&&Ca(t),dt(t.input.charCodeAt(t.position))?Lo(t):t.input.charCodeAt(t.position)!==0&&Pe(t,"a line break is expected");let c=i?s:-1,p=0;const a=t.position;let g=t.position;for(;t.input.charCodeAt(t.position)!==0;){const m=t.position;let y=0;for(;t.input.charCodeAt(m+y)===32;)y++;const k=t.input.charCodeAt(m+y);if(k===0){c>=0?y>c&&(g=m+y):y>0&&(g=m+y);break}if(m===t.lineStart&&jt(t,m))break;if(!i&&c===-1&&dt(k)&&(p=Math.max(p,y)),!i&&c===-1&&!dt(k)&&(k===9&&y<n&&(t.position=m+y,Pe(t,"tab characters must not be used in indentation")),y<p&&(t.position=m+y,Pe(t,"bad indentation of a mapping entry"))),c===-1&&k!==0&&!dt(k)&&y<n){t.lineIndent=y,t.position=m+y;break}!i&&k!==0&&!dt(k)&&c===-1&&(c=y);const h=c===-1?n+1:c;if(k!==0&&!dt(k)&&y<h){t.lineIndent=y,t.position=m+y;break}Ca(t),g=t.position,dt(t.input.charCodeAt(t.position))&&(Lo(t),g=t.position)}return Na(t,a,g),mn(t,a,g,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,d,l,c),!0}function Zw(t,n){const o=t.input.charCodeAt(t.position),r=n===It;if(o===0||_t(o)||o===35||o===38||o===42||o===33||o===124||o===62||o===39||o===34||o===37||o===64||o===96||r&&Kt(o))return!1;if(o===63||o===45){const l=t.input.charCodeAt(t.position+1);if(Lt(l)||r&&Kt(l))return!1}return!0}function Kw(t,n,o,r){if(!Zw(t,o))return!1;const l=t.position;let s=t.position,i=t.input.charCodeAt(t.position);const d=o===It;let u=!1;for(;i!==0&&!(t.position===t.lineStart&&jt(t));){if(i===58){const c=t.input.charCodeAt(t.position+1);if(Lt(c)||d&&Kt(c))break}else if(i===35){if(_t(t.input.charCodeAt(t.position-1)))break}else{if(d&&Kt(i))break;if(dt(i)){const c=t.position,p=t.line,a=t.lineStart,g=t.lineIndent;if(pt(t,!1),t.lineIndent>=n){u=!0,i=t.input.charCodeAt(t.position);continue}t.position=c,t.line=p,t.lineStart=a,t.lineIndent=g;break}}Zt(i)||(s=t.position+1),i=t.input.charCodeAt(++t.position)}return s===l?!1:(Na(t,l,s),mn(t,l,s,r.anchorStart,r.anchorEnd,r.tagStart,r.tagEnd,1,1,-1,!u),!0)}function Xt(t,n){const o=t.line;pt(t,!0),(t.line>o&&t.lineIndent<n||t.firstTabInLine!==-1&&t.lineIndent<n)&&Pe(t,"deficient indentation")}function Xw(t,n,o){const r=t.input.charCodeAt(t.position),l=r===123,s=t.position;let i=!0;if(r!==91&&r!==123)return!1;const d=l?125:93;for(l?Dn(t,s,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,2):_a(t,s,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,2),t.position++;t.input.charCodeAt(t.position)!==0;){Xt(t,n);let u=t.input.charCodeAt(t.position);if(u===d)return t.position++,pn(t),!0;i?u===44&&Pe(t,"expected the node content, but found ','"):Pe(t,"missed comma between flow collection entries");let c=!1,p=!1;u===63&&_t(t.input.charCodeAt(t.position+1))&&(c=p=!0,t.position+=1,Xt(t,n));const a=t.line,g=Pn(t),m=Tt(t,n,It,!1,!0);Xt(t,n),u=t.input.charCodeAt(t.position),(l||p||t.line===a)&&u===58?(c=!0,t.position++,Xt(t,n),l?m||bt(t):(Rt(t,g),Dn(t,g.position,We,We,We,We,2),Tt(t,n,It,!1,!0)||bt(t),Xt(t,n),t.position++,Xt(t,n)),Tt(t,n,It,!1,!0)||bt(t),Xt(t,n),l||pn(t)):l&&c?(m||bt(t),bt(t)):l?bt(t):c&&(Rt(t,g),Dn(t,g.position,We,We,We,We,2),Tt(t,n,It,!1,!0),bt(t),pn(t)),u=t.input.charCodeAt(t.position),u===44?(i=!0,t.position++):i=!1}Pe(t,"unexpected end of the stream within a flow collection")}function Va(t,n,o){if(t.firstTabInLine!==-1||t.input.charCodeAt(t.position)!==45||!Lt(t.input.charCodeAt(t.position+1)))return!1;for(_a(t,t.position,o.anchorStart,o.anchorEnd,o.tagStart,o.tagEnd,1);t.input.charCodeAt(t.position)===45&&Lt(t.input.charCodeAt(t.position+1));){t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Pe(t,"tab characters must not be used in indentation"));const r=t.line;t.position++;const l=pt(t,!0)>0;if(t.firstTabInLine!==-1&&t.input.charCodeAt(t.position)===45&&Lt(t.input.charCodeAt(t.position+1))&&Pe(t,"bad indentation of a sequence entry"),l&&t.lineIndent<=n?bt(t):Tt(t,n,xa,!1,!0),pt(t,!0),t.lineIndent<n||t.position>=t.length)break;t.lineIndent>n&&Pe(t,"bad indentation of a sequence entry"),t.line===r&&t.input.charCodeAt(t.position)===45&&Lt(t.input.charCodeAt(t.position+1))&&Pe(t,"bad indentation of a sequence entry")}return pn(t),!0}function Lr(t,n,o,r){let l=!1,s=!1,i=!1,d=!1;if(t.firstTabInLine!==-1)return!1;let u=t.input.charCodeAt(t.position);for(;u!==0;){!l&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,Pe(t,"tab characters must not be used in indentation"));const c=t.input.charCodeAt(t.position+1),p=t.line;if((u===63||u===58)&&Lt(c))i||(Dn(t,t.position,r.anchorStart,r.anchorEnd,r.tagStart,r.tagEnd,1),i=!0),u===63?(l&&bt(t),s=!0,l=!0):(l||(bt(t),s=!0),l=!1),t.position+=1,d=!0;else{l&&(bt(t),l=!1);const a=Pn(t);if(!Tt(t,o,Br,!1,!0))break;if(t.line===p){for(u=t.input.charCodeAt(t.position);Zt(u);)u=t.input.charCodeAt(++t.position);if(u===58){if(u=t.input.charCodeAt(++t.position),Lt(u)||Pe(t,"a whitespace character is expected after the key-value separator within a block mapping"),!i){for(Rt(t,a),Dn(t,a.position,r.anchorStart,r.anchorEnd,r.tagStart,r.tagEnd,1),i=!0,Tt(t,o,Br,!1,!0),u=t.input.charCodeAt(t.position);Zt(u);)u=t.input.charCodeAt(++t.position);t.position++}s=!0,l=!1,d=!1}else if(s)Pe(t,"expected ':' after a mapping key");else return r.anchorStart!==We||r.tagStart!==We?(Rt(t,a),!1):!0}else if(s)Pe(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return r.anchorStart!==We||r.tagStart!==We?(Rt(t,a),!1):!0}if(Tt(t,n,vo,!0,d)&&(d=!1),l||d&&(bt(t),d=!1),pt(t,!0),u=t.input.charCodeAt(t.position),(t.line===p||t.lineIndent>n)&&u!==0)Pe(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return s?(l&&bt(t),i&&pn(t),!0):!1}function Tt(t,n,o,r,l,s=!0){var y,k;t.depth>=t.maxDepth&&Pe(t,`nesting exceeded maxDepth (${t.maxDepth})`),t.depth++;let i=1,d=!1,u=!1,c=null;const p=Ea();let a=o===vo||o===xa,g=a;const m=a;if(r&&pt(t,!0)&&(d=!0,t.lineIndent>n?i=1:t.lineIndent===n?i=0:i=-1),t.position===t.lineStart&&jt(t))return t.depth--,!1;if(i===1)for(;;){const h=t.input.charCodeAt(t.position),f=Pn(t);if(d&&i!==1&&(h===33||h===38))break;if(d&&m&&(p.tagStart!==We||p.anchorStart!==We)&&(h===33||h===38)){const b=Pn(t),x=n+1;if(Lr(t,t.position-t.lineStart,x,p)&&((y=t.events[b.eventsLength])==null?void 0:y.type)===3)return t.depth--,!0;Rt(t,b)}if(d&&(h===33&&p.tagStart!==We||h===38&&p.anchorStart!==We)||!Uw(t,p,o===It)&&!qw(t,p))break;c===null&&(c=f),pt(t,!0)?(d=!0,g=m,t.lineIndent>n?i=1:t.lineIndent===n?i=0:i=-1):g=!1}if(g&&(g=d||l),i===1||o===vo){const h=o===It||o===Br?n:n+1,f=t.position-t.lineStart;if(i===1)if(g&&(Va(t,f,p)||Lr(t,f,h,p))||Xw(t,h,p))u=!0;else{const b=t.input.charCodeAt(t.position);if(c!==null&&s&&m&&!g&&b!==124&&b!==62){const x=Pn(t),N=c.position-c.lineStart;Rt(t,c),Lr(t,N,h,Ea())&&((k=t.events[x.eventsLength])==null?void 0:k.type)===3?u=!0:Rt(t,x)}!u&&(a&&Gw(t,h,p)||Ww(t,h,p)||Yw(t,h,p)||Hw(t,p)||Kw(t,h,o,p))&&(u=!0)}else i===0&&(u=g&&Va(t,f,p))}return a=a&&!u,!u&&(p.anchorStart!==We||p.tagStart!==We||a)&&(mn(t,We,We,p.anchorStart,p.anchorEnd,p.tagStart,p.tagEnd,1),u=!0),t.depth--,u||p.anchorStart!==We||p.tagStart!==We}function Jw(t){if(t.lineIndent>0||t.input.charCodeAt(t.position)!==37)return!1;t.position++;const n=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position));)t.position++;const o=t.input.slice(n,t.position),r=[];for(o.length===0&&Pe(t,"directive name must not be less than one character in length");t.input.charCodeAt(t.position)!==0&&!dt(t.input.charCodeAt(t.position));){for(;Zt(t.input.charCodeAt(t.position));)t.position++;if(t.input.charCodeAt(t.position)===35||dt(t.input.charCodeAt(t.position))||t.input.charCodeAt(t.position)===0)break;const l=t.position;for(;t.input.charCodeAt(t.position)!==0&&!_t(t.input.charCodeAt(t.position));)t.position++;r.push(t.input.slice(l,t.position))}if(dt(t.input.charCodeAt(t.position))&&Lo(t),o==="YAML"){t.directives.some(s=>s.kind==="yaml")&&Pe(t,"duplication of %YAML directive"),r.length!==1&&Pe(t,"YAML directive accepts exactly one argument");const l=/^([0-9]+)\.([0-9]+)$/.exec(r[0]);l===null&&Pe(t,"ill-formed argument of the YAML directive"),parseInt(l[1],10)!==1&&Pe(t,"unacceptable YAML version of the document"),t.directives.push({kind:"yaml",version:r[0]})}else if(o==="TAG"){r.length!==2&&Pe(t,"TAG directive accepts exactly two arguments");const[l,s]=r;ka.test(l)||Pe(t,"ill-formed tag handle (first argument) of the TAG directive"),ba.call(t.tagHandlers,l)&&Pe(t,`there is a previously declared suffix for "${l}" tag handle`),Dw.test(s)||Pe(t,"ill-formed tag prefix (second argument) of the TAG directive"),t.tagHandlers[l]=s,t.directives.push({kind:"tag",handle:l,prefix:s})}return!0}function Qw(t){t.directives=[],t.tagHandlers=Object.create(null);let n=!1;for(pt(t,!0);Jw(t);)n=!0,pt(t,!0);let o=!1,r=!1,l=!0;if(t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45&&Lt(t.input.charCodeAt(t.position+3))){o=!0;const d=t.line;t.position+=3,pt(t,!0),l=t.line>d}else n&&Pe(t,"directives end mark is expected");const s=t.events.length;if(!o&&t.position===t.lineStart&&t.input.charCodeAt(t.position)===46&&jt(t)){t.position+=3,pt(t,!0);return}if(Pw(t,o,!1),Tt(t,t.lineIndent-1,vo,!1,l,l)||bt(t),pt(t,!0),t.position===t.lineStart&&jt(t)&&(r=t.input.charCodeAt(t.position)===46,r)){const d=t.line;t.position+=3,pt(t,!0),t.line===d&&t.position<t.length&&Pe(t,"end of the stream or a document separator is expected")}const i=t.events[s];(i==null?void 0:i.type)===1&&(i.explicitEnd=r),pn(t),!r&&t.position<t.length&&!(t.position===t.lineStart&&jt(t))&&Pe(t,"end of the stream or a document separator is expected")}function e2(t,n){const o=t.length,r={...Sr,...n,input:`${t}\0`,length:o,position:0,line:0,lineStart:0,lineIndent:0,firstTabInLine:-1,depth:0,directives:[],tagHandlers:Object.create(null),events:[]},l=t.indexOf("\0");for(l!==-1&&Bo(t,l,"null byte is not allowed in input",r.filename),r.input.charCodeAt(r.position)===65279&&r.position++;r.position<r.length&&(pt(r,!0),!(r.position>=r.length));){const s=r.position;Qw(r),r.position===s&&Pe(r,"can not read a document")}return r.events}var t2={...Sr,...Cr};function n2(t,n={}){const o={...t2,...n},r=String(t),l=Object.keys(Sr),s=Object.keys(Cr);return Lw(e2(r,br(o,l)),{...br(o,s),source:r})}function Tr(t,n){const o=n2(t,n);if(o.length===0)throw new Fn("expected a document, but the input is empty");if(o.length===1)return o[0];throw new Fn("expected a single document in the stream, but found more")}var To=class{constructor(){ut(this,"tagged",!1);ut(this,"flow",!1);ut(this,"singleQuoted",!1);ut(this,"doubleQuoted",!1);ut(this,"literal",!1);ut(this,"folded",!1)}},Jt=Symbol("INVALID");function o2(t){const n=new Set([t.defaultScalarTag,t.defaultSequenceTag,t.defaultMappingTag].filter(s=>s!==void 0)),o=t.implicitScalarTags,r=t.tags.filter(s=>!(s.nodeKind==="scalar"&&s.implicit)&&!n.has(s)),l=t.tags.filter(s=>n.has(s));return[...o.map(s=>({tag:s,implicitTag:!0})),...r.map(s=>({tag:s,implicitTag:!1})),...l.map(s=>({tag:s,implicitTag:!0}))]}function r2(t,n){for(let o=0,r=t.representTypes.length;o<r;o+=1){const{tag:l,implicitTag:s}=t.representTypes[o];if(l.identify&&l.identify(n)){let i;return l.matchByTagPrefix&&l.representTagName?i=l.representTagName(n):i=l.tagName,{tag:l,tagName:i,implicitTag:s}}}return null}function zn(t,n){if(!t.noRefs&&n!==null&&typeof n=="object"){const p=t.refs.get(n);if(p)return p.anchor===void 0&&(p.anchor=`ref_${t.refCounter++}`),{kind:"alias",tag:"",style:new To,anchor:p.anchor}}const o=r2(t,n);if(!o){if(n===void 0||t.skipInvalid)return Jt;throw new Fn(`unacceptable kind of an object to dump ${Object.prototype.toString.call(n)}`)}const{tag:r,tagName:l,implicitTag:s}=o,i=s?l:ma(l);if(r.nodeKind==="scalar"){const p=new To;return p.tagged=!s,{kind:"scalar",tag:i,style:p,value:r.represent(n)}}if(r.nodeKind==="sequence"){const p=r.represent(n),a=new To;a.tagged=!s;const g={kind:"sequence",tag:i,style:a,items:[]};t.noRefs||t.refs.set(n,g);for(let m=0,y=p.length;m<y;m+=1){let k=zn(t,p[m]);k===Jt&&p[m]===void 0&&(k=zn(t,null)),k!==Jt&&g.items.push(k)}return g}const d=r.represent(n),u=new To;u.tagged=!s;const c={kind:"mapping",tag:i,style:u,items:[]};t.noRefs||t.refs.set(n,c);for(const[p,a]of d){const g=zn(t,p);if(g===Jt)continue;const m=zn(t,a);m!==Jt&&c.items.push({key:g,value:m})}return c}function l2(t,n,o={}){const r=zn({representTypes:o2(n),noRefs:o.noRefs??!1,skipInvalid:o.skipInvalid??!1,refs:new Map,refCounter:0},t);return[{contents:r===Jt?null:r,directives:[]}]}var a2=Symbol("visit:break"),Ba=Symbol("visit:skip");function Ao(t,n,o){const r=n(t,o);if(r===a2)return!0;if(r===Ba)return!1;const l=o.depth+1;switch(t.kind){case"sequence":for(const s of t.items)if(Ao(s,n,{depth:l,parent:t,isKey:!1}))return!0;break;case"mapping":for(const{key:s,value:i}of t.items)if(Ao(s,n,{depth:l,parent:t,isKey:!0})||Ao(i,n,{depth:l,parent:t,isKey:!1}))return!0;break}return!1}function s2(t,n){for(const o of t)if(o.contents&&Ao(o.contents,n,{depth:0,parent:null,isKey:!1}))return}var Ar=65279,i2=9,Qt=10,$a=13,c2=32,d2=33,Sa=34,Mr=35,u2=37,f2=38,va=39,m2=42,La=44,Fr=45,In=58,p2=61,g2=62,Ta=63,y2=64,Aa=91,Ma=93,h2=96,Fa=123,b2=124,Da=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 Dr={indent:2,seqNoIndent:!1,seqInlineFirst:!0,sortKeys:!1,lineWidth:80,flowBracketPadding:!1,flowSkipCommaSpace:!1,flowSkipColonSpace:!1,quoteFlowKeys:!1,quoteStyle:"single",forceQuotes:!1,tagBeforeAnchor:!1};function x2(t){return t.style.tagged?t.tag:ma(t.tag)}function k2(t){const n={...Dr,...t};return{...n,defaultScalarTagName:n.schema.defaultScalarTag.tagName,implicitResolvers:n.schema.implicitScalarTags}}function w2(t){const n=t.toString(16).toUpperCase(),o=t<=255?"x":"u",r=t<=255?2:4;return`\\${o}${"0".repeat(r-n.length)}${n}`}function Pa(t,n){const o=" ".repeat(n);let r=0,l="";const s=t.length;for(;r<s;){let i;const d=t.indexOf(`
24
24
  `,r);d===-1?(i=t.slice(r),r=s):(i=t.slice(r,d+1),r=d+1),i.length&&i!==`
25
25
  `&&(l+=o),l+=i}return l}function Pr(t,n){return`
26
- ${" ".repeat(t.indent*n)}`}function x2(t,n){const o=t.indent*Math.max(1,n);return{indent:o,blockIndent:n===0?t.indent+1:t.indent,lineWidth:t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o)}}function za(t,n){for(let o=0,r=t.implicitResolvers.length;o<r;o+=1){const l=t.implicitResolvers[o];if(l.resolve(n,!1,l.tagName)!==Ye)return l.tagName}return t.defaultScalarTagName}function pn(t){return t===a2||t===l2}function k2(t){const n=t.charCodeAt(0);if(n!==Fr&&n!==46||t.charCodeAt(1)!==n||t.charCodeAt(2)!==n)return!1;if(t.length===3)return!0;const o=t.charCodeAt(3);return pn(o)||o===$a||o===Qt}function In(t){return t>=32&&t<=126||t>=161&&t<=55295&&t!==8232&&t!==8233||t>=57344&&t<=65533&&t!==Ar||t>=65536&&t<=1114111}function Ia(t){return In(t)&&t!==Ar&&t!==$a&&t!==Qt}function zr(t,n,o){const r=Ia(t),l=r&&!pn(t);return(o?r:r&&t!==La&&t!==Aa&&t!==Ma&&t!==Fa&&t!==Da)&&t!==Mr&&!(n===zn&&!l)||Ia(n)&&!pn(n)&&t===Mr||n===zn&&l}function w2(t){return In(t)&&t!==Ar&&!pn(t)&&t!==Fr&&t!==Ta&&t!==zn&&t!==La&&t!==Aa&&t!==Ma&&t!==Fa&&t!==Da&&t!==Mr&&t!==c2&&t!==d2&&t!==s2&&t!==g2&&t!==u2&&t!==f2&&t!==va&&t!==Sa&&t!==i2&&t!==m2&&t!==p2}function _2(t,n){const o=gn(t,0);if(w2(o))return!0;if(t.length>1&&(o===Fr||o===Ta||o===zn)){const r=gn(t,1);return!pn(r)&&zr(r,o,n)}return!1}function E2(t){return!pn(t)&&t!==zn}function gn(t,n){const o=t.charCodeAt(n);let 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 Ra(t){return/^\n* /.test(t)}var Rn=1,jn=2,Ir=3,Rr=4,Ot=5;function C2(t,n,o,r,l,s){const{blockIndent:i,lineWidth:d}=o;let u,c=0,p=-1,a=!1,g=!1;const m=d!==-1;let y=-1,k=!k2(n)&&_2(n,s)&&E2(gn(n,n.length-1));if(r||l)for(u=0;u<n.length;c>=65536?u+=2:u++){if(c=gn(n,u),!In(c))return Ot;k=k&&zr(c,p,s),p=c}else{for(u=0;u<n.length;c>=65536?u+=2:u++){if(c=gn(n,u),c===Qt)a=!0,m&&(g=g||u-y-1>d&&n[y+1]!==" ",y=u);else if(!In(c))return Ot;k=k&&zr(c,p,s),p=c}g=g||m&&u-y-1>d&&n[y+1]!==" "}return!a&&!g?k&&!l?Rn:t.quoteStyle==="double"?Ot:jn:i>9&&Ra(n)?Ot:g?Rr:Ir}function N2(t,n,o){const{indent:r,blockIndent:l,lineWidth:s}=o;switch(n){case Rn:return Oa(t,r);case jn:return`'${Oa(t,r).replace(/'/g,"''")}'`;case Ir:return"|"+ja(t,l)+Ua(Pa(t,r));case Rr:return">"+ja(t,l)+Ua(Pa(B2(t,s),r));case Ot:return`"${$2(t)}"`}}function V2(t,n,o,r,l){const s=r||!l;if(n.style.singleQuoted)return jn;if(n.style.doubleQuoted)return Ot;if(!s){if(n.style.literal)return Ir;if(n.style.folded)return Rr}const i=n.value;if(i.length===0)return n.style.tagged||za(t,i)===n.tag?Rn:t.quoteStyle==="double"?Ot:jn;const d=C2(t,i,o,s,t.forceQuotes&&!r,l);return d===Rn&&!n.style.tagged&&za(t,i)!==n.tag?t.quoteStyle==="double"?Ot:jn:d}function ja(t,n){const o=Ra(t)?String(n):"",r=t[t.length-1]===`
26
+ ${" ".repeat(t.indent*n)}`}function _2(t,n){const o=t.indent*Math.max(1,n);return{indent:o,blockIndent:n===0?t.indent+1:t.indent,lineWidth:t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o)}}function za(t,n){for(let o=0,r=t.implicitResolvers.length;o<r;o+=1){const l=t.implicitResolvers[o];if(l.resolve(n,!1,l.tagName)!==Ye)return l.tagName}return t.defaultScalarTagName}function gn(t){return t===c2||t===i2}function E2(t){const n=t.charCodeAt(0);if(n!==Fr&&n!==46||t.charCodeAt(1)!==n||t.charCodeAt(2)!==n)return!1;if(t.length===3)return!0;const o=t.charCodeAt(3);return gn(o)||o===$a||o===Qt}function Rn(t){return t>=32&&t<=126||t>=161&&t<=55295&&t!==8232&&t!==8233||t>=57344&&t<=65533&&t!==Ar||t>=65536&&t<=1114111}function Ia(t){return Rn(t)&&t!==Ar&&t!==$a&&t!==Qt}function zr(t,n,o){const r=Ia(t),l=r&&!gn(t);return(o?r:r&&t!==La&&t!==Aa&&t!==Ma&&t!==Fa&&t!==Da)&&t!==Mr&&!(n===In&&!l)||Ia(n)&&!gn(n)&&t===Mr||n===In&&l}function C2(t){return Rn(t)&&t!==Ar&&!gn(t)&&t!==Fr&&t!==Ta&&t!==In&&t!==La&&t!==Aa&&t!==Ma&&t!==Fa&&t!==Da&&t!==Mr&&t!==f2&&t!==m2&&t!==d2&&t!==b2&&t!==p2&&t!==g2&&t!==va&&t!==Sa&&t!==u2&&t!==y2&&t!==h2}function N2(t,n){const o=yn(t,0);if(C2(o))return!0;if(t.length>1&&(o===Fr||o===Ta||o===In)){const r=yn(t,1);return!gn(r)&&zr(r,o,n)}return!1}function V2(t){return!gn(t)&&t!==In}function yn(t,n){const o=t.charCodeAt(n);let 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 Ra(t){return/^\n* /.test(t)}var jn=1,On=2,Ir=3,Rr=4,Ot=5;function B2(t,n,o,r,l,s){const{blockIndent:i,lineWidth:d}=o;let u,c=0,p=-1,a=!1,g=!1;const m=d!==-1;let y=-1,k=!E2(n)&&N2(n,s)&&V2(yn(n,n.length-1));if(r||l)for(u=0;u<n.length;c>=65536?u+=2:u++){if(c=yn(n,u),!Rn(c))return Ot;k=k&&zr(c,p,s),p=c}else{for(u=0;u<n.length;c>=65536?u+=2:u++){if(c=yn(n,u),c===Qt)a=!0,m&&(g=g||u-y-1>d&&n[y+1]!==" ",y=u);else if(!Rn(c))return Ot;k=k&&zr(c,p,s),p=c}g=g||m&&u-y-1>d&&n[y+1]!==" "}return!a&&!g?k&&!l?jn:t.quoteStyle==="double"?Ot:On:i>9&&Ra(n)?Ot:g?Rr:Ir}function $2(t,n,o){const{indent:r,blockIndent:l,lineWidth:s}=o;switch(n){case jn:return Oa(t,r);case On:return`'${Oa(t,r).replace(/'/g,"''")}'`;case Ir:return"|"+ja(t,l)+Ua(Pa(t,r));case Rr:return">"+ja(t,l)+Ua(Pa(v2(t,s),r));case Ot:return`"${L2(t)}"`}}function S2(t,n,o,r,l){const s=r||!l;if(n.style.singleQuoted)return On;if(n.style.doubleQuoted)return Ot;if(!s){if(n.style.literal)return Ir;if(n.style.folded)return Rr}const i=n.value;if(i.length===0)return n.style.tagged||za(t,i)===n.tag?jn:t.quoteStyle==="double"?Ot:On;const d=B2(t,i,o,s,t.forceQuotes&&!r,l);return d===jn&&!n.style.tagged&&za(t,i)!==n.tag?t.quoteStyle==="double"?Ot:On:d}function ja(t,n){const o=Ra(t)?String(n):"",r=t[t.length-1]===`
27
27
  `;return`${o}${r&&(t[t.length-2]===`
28
28
  `||t===`
29
29
  `)?"+":r?"":"-"}
30
30
  `}function Oa(t,n){let o=t.indexOf(`
31
31
  `);if(o===-1)return t;const r=" ".repeat(n);let l=t.slice(0,o);const s=/(\n+)([^\n]*)/g;s.lastIndex=o;let i;for(;i=s.exec(t);){const d=i[1].length,u=i[2];l+=`
32
32
  `.repeat(d+1)+r+u}return l}function Ua(t){return t[t.length-1]===`
33
- `?t.slice(0,-1):t}function B2(t,n){const o=/(\n+)([^\n]*)/g;let r=t.indexOf(`
33
+ `?t.slice(0,-1):t}function v2(t,n){const o=/(\n+)([^\n]*)/g;let r=t.indexOf(`
34
34
  `);r===-1&&(r=t.length),o.lastIndex=r;let l=qa(t.slice(0,r),n),s=t[0]===`
35
35
  `||t[0]===" ",i,d;for(;d=o.exec(t);){const u=d[1],c=d[2];i=c[0]===" ",l+=u+(!s&&!i&&c!==""?`
36
36
  `:"")+qa(c,n),s=i}return l}function qa(t,n){if(t===""||t[0]===" ")return t;const o=/ [^ ]/g;let r,l=0,s,i=0,d=0,u="";for(;r=o.exec(t);)d=r.index,d-l>n&&(s=i>l?i:d,u+=`
37
37
  ${t.slice(l,s)}`,l=s+1),i=d;return u+=`
38
38
  `,t.length-l>n&&i>l?u+=`${t.slice(l,i)}
39
- ${t.slice(i+1)}`:u+=t.slice(l),u.slice(1)}function $2(t){let n="",o=0;for(let r=0;r<t.length;o>=65536?r+=2:r++){o=gn(t,r);const l=mt[o];if(l){n+=l;continue}if(In(o)){n+=t[r],o>=65536&&(n+=t[r+1]);continue}n+=b2(o)}return n}function S2(t,n,o){let r="";for(let s=0,i=o.items.length;s<i;s+=1){const d=At(t,n,o.items[s],{});r!==""&&(r+=`,${t.flowSkipCommaSpace?"":" "}`),r+=d}const l=t.flowBracketPadding&&r!==""?" ":"";return`[${l}${r}${l}]`}function Ha(t,n,o,r){let l="";for(let s=0,i=o.items.length;s<i;s+=1){const d=At(t,n+1,o.items[s],{block:!0,compact:t.seqInlineFirst,isblockseq:!0});(!r||l!=="")&&(l+=Pr(t,n)),d===""||Qt===d.charCodeAt(0)?l+="-":l+="- ",l+=d}return l}function v2(t,n,o){let r="";const l=Wa(t,o.items);for(const{key:i,value:d}of l){let u="";r!==""&&(u+=`,${t.flowSkipCommaSpace?"":" "}`);const c=At(t,n,i,{iskey:!0}),p=c.length>1024;p?u+="? ":t.quoteFlowKeys&&(u+='"');const a=At(t,n,d,{}),g=t.flowSkipColonSpace||a===""?"":" ";u+=`${c}${t.quoteFlowKeys&&!p?'"':""}:${g}${a}`,r+=u}const s=t.flowBracketPadding&&r!==""?" ":"";return`{${s}${r}${s}}`}function Mo(t){return t.kind==="scalar"?t.value:t}function Wa(t,n){if(!t.sortKeys)return n;const o=n.slice();if(t.sortKeys===!0)o.sort((r,l)=>{const s=Mo(r.key),i=Mo(l.key);return s<i?-1:s>i?1:0});else{const r=t.sortKeys;o.sort((l,s)=>r(Mo(l.key),Mo(s.key)))}return o}function L2(t,n,o,r){let l="";const s=Wa(t,o.items);for(let i=0,d=s.length;i<d;i+=1){let u="";(!r||l!=="")&&(u+=Pr(t,n));const{key:c,value:p}=s[i],a=(c.kind==="mapping"||c.kind==="sequence")&&!c.style.flow&&c.items.length!==0||c.kind==="scalar"&&(c.style.literal||c.style.folded),g=a?At(t,n+1,c,{block:!0,compact:!0,isblockseq:!jr(t,c,n+1)}):At(t,n+1,c,{block:!0,compact:!0,iskey:!0}),m=c.kind==="scalar"&&c.value.indexOf(`
40
- `)!==-1,y=a||m||g.length>1024;y&&(g&&Qt===g.charCodeAt(0)?u+="?":u+="? "),u+=g,y&&(u+=Pr(t,n));const k=At(t,n+1,p,{block:!0,compact:y,isblockseq:y&&!jr(t,p,n+1)}),h=c.kind==="scalar"&&c.value===""&&g!==""&&g.charCodeAt(g.length-1)!==va&&g.charCodeAt(g.length-1)!==Sa,f=!y&&(c.kind==="alias"||h)?" ":"";k===""||Qt===k.charCodeAt(0)?u+=`${f}:`:u+=`${f}: `,u+=k,l+=u}return l}function jr(t,n,o){return n.style.tagged||n.anchor!==void 0||t.indent<2&&o>0}function At(t,n,o,r){if(o.kind==="alias")return`*${o.anchor}`;const{block:l=!1,iskey:s=!1,isblockseq:i=!1}=r;let d=r.compact??!1;const u=o.anchor!==void 0;jr(t,o,n)&&(d=!1);let c,p=o.style.tagged;const a=l&&(o.kind==="mapping"||o.kind==="sequence")&&!o.style.flow&&o.items.length!==0;if(o.kind==="mapping")a?c=L2(t,n,o,d):c=v2(t,n,o);else if(o.kind==="sequence")a?t.seqNoIndent&&!i&&n>0?c=Ha(t,n-1,o,d):c=Ha(t,n,o,d):c=S2(t,n,o);else{const g=x2(t,n),m=V2(t,o,g,s,l);c=N2(o.value,m,g),p=o.style.tagged||m!==Rn&&o.tag!==t.defaultScalarTagName}if(a&&d&&n>0&&t.indent>2&&(c=`${" ".repeat(t.indent-2)}${c}`),p||u){const g=[],m=p?y2(o):null,y=u?`&${o.anchor}`:null;t.tagBeforeAnchor?(m!==null&&g.push(m),y!==null&&g.push(y)):(y!==null&&g.push(y),m!==null&&g.push(m));const k=c===""||c.charCodeAt(0)===Qt?"":" ";c=`${g.join(" ")}${k}${c}`}return c}function T2(t){return(t.kind==="sequence"||t.kind==="mapping")&&!t.style.flow&&t.items.length!==0&&!t.style.tagged&&t.anchor===void 0}function A2(t){let n=t;for(;(n.kind==="sequence"||n.kind==="mapping")&&!n.style.flow&&n.items.length!==0;)n=n.kind==="sequence"?n.items[n.items.length-1]:n.items[n.items.length-1].value;if(n.kind!=="scalar"||!(n.style.literal||n.style.folded))return!1;const{value:o}=n;return o.endsWith(`
39
+ ${t.slice(i+1)}`:u+=t.slice(l),u.slice(1)}function L2(t){let n="",o=0;for(let r=0;r<t.length;o>=65536?r+=2:r++){o=yn(t,r);const l=mt[o];if(l){n+=l;continue}if(Rn(o)){n+=t[r],o>=65536&&(n+=t[r+1]);continue}n+=w2(o)}return n}function T2(t,n,o){let r="";for(let s=0,i=o.items.length;s<i;s+=1){const d=At(t,n,o.items[s],{});r!==""&&(r+=`,${t.flowSkipCommaSpace?"":" "}`),r+=d}const l=t.flowBracketPadding&&r!==""?" ":"";return`[${l}${r}${l}]`}function Ha(t,n,o,r){let l="";for(let s=0,i=o.items.length;s<i;s+=1){const d=At(t,n+1,o.items[s],{block:!0,compact:t.seqInlineFirst,isblockseq:!0});(!r||l!=="")&&(l+=Pr(t,n)),d===""||Qt===d.charCodeAt(0)?l+="-":l+="- ",l+=d}return l}function A2(t,n,o){let r="";const l=Wa(t,o.items);for(const{key:i,value:d}of l){let u="";r!==""&&(u+=`,${t.flowSkipCommaSpace?"":" "}`);const c=At(t,n,i,{iskey:!0}),p=c.length>1024;p?u+="? ":t.quoteFlowKeys&&(u+='"');const a=At(t,n,d,{}),g=t.flowSkipColonSpace||a===""?"":" ";u+=`${c}${t.quoteFlowKeys&&!p?'"':""}:${g}${a}`,r+=u}const s=t.flowBracketPadding&&r!==""?" ":"";return`{${s}${r}${s}}`}function Mo(t){return t.kind==="scalar"?t.value:t}function Wa(t,n){if(!t.sortKeys)return n;const o=n.slice();if(t.sortKeys===!0)o.sort((r,l)=>{const s=Mo(r.key),i=Mo(l.key);return s<i?-1:s>i?1:0});else{const r=t.sortKeys;o.sort((l,s)=>r(Mo(l.key),Mo(s.key)))}return o}function M2(t,n,o,r){let l="";const s=Wa(t,o.items);for(let i=0,d=s.length;i<d;i+=1){let u="";(!r||l!=="")&&(u+=Pr(t,n));const{key:c,value:p}=s[i],a=(c.kind==="mapping"||c.kind==="sequence")&&!c.style.flow&&c.items.length!==0||c.kind==="scalar"&&(c.style.literal||c.style.folded),g=a?At(t,n+1,c,{block:!0,compact:!0,isblockseq:!jr(t,c,n+1)}):At(t,n+1,c,{block:!0,compact:!0,iskey:!0}),m=c.kind==="scalar"&&c.value.indexOf(`
40
+ `)!==-1,y=a||m||g.length>1024;y&&(g&&Qt===g.charCodeAt(0)?u+="?":u+="? "),u+=g,y&&(u+=Pr(t,n));const k=At(t,n+1,p,{block:!0,compact:y,isblockseq:y&&!jr(t,p,n+1)}),h=c.kind==="scalar"&&c.value===""&&g!==""&&g.charCodeAt(g.length-1)!==va&&g.charCodeAt(g.length-1)!==Sa,f=!y&&(c.kind==="alias"||h)?" ":"";k===""||Qt===k.charCodeAt(0)?u+=`${f}:`:u+=`${f}: `,u+=k,l+=u}return l}function jr(t,n,o){return n.style.tagged||n.anchor!==void 0||t.indent<2&&o>0}function At(t,n,o,r){if(o.kind==="alias")return`*${o.anchor}`;const{block:l=!1,iskey:s=!1,isblockseq:i=!1}=r;let d=r.compact??!1;const u=o.anchor!==void 0;jr(t,o,n)&&(d=!1);let c,p=o.style.tagged;const a=l&&(o.kind==="mapping"||o.kind==="sequence")&&!o.style.flow&&o.items.length!==0;if(o.kind==="mapping")a?c=M2(t,n,o,d):c=A2(t,n,o);else if(o.kind==="sequence")a?t.seqNoIndent&&!i&&n>0?c=Ha(t,n-1,o,d):c=Ha(t,n,o,d):c=T2(t,n,o);else{const g=_2(t,n),m=S2(t,o,g,s,l);c=$2(o.value,m,g),p=o.style.tagged||m!==jn&&o.tag!==t.defaultScalarTagName}if(a&&d&&n>0&&t.indent>2&&(c=`${" ".repeat(t.indent-2)}${c}`),p||u){const g=[],m=p?x2(o):null,y=u?`&${o.anchor}`:null;t.tagBeforeAnchor?(m!==null&&g.push(m),y!==null&&g.push(y)):(y!==null&&g.push(y),m!==null&&g.push(m));const k=c===""||c.charCodeAt(0)===Qt?"":" ";c=`${g.join(" ")}${k}${c}`}return c}function F2(t){return(t.kind==="sequence"||t.kind==="mapping")&&!t.style.flow&&t.items.length!==0&&!t.style.tagged&&t.anchor===void 0}function D2(t){let n=t;for(;(n.kind==="sequence"||n.kind==="mapping")&&!n.style.flow&&n.items.length!==0;)n=n.kind==="sequence"?n.items[n.items.length-1]:n.items[n.items.length-1].value;if(n.kind!=="scalar"||!(n.style.literal||n.style.folded))return!1;const{value:o}=n;return o.endsWith(`
41
41
 
42
42
  `)||o===`
43
- `}function M2(t){let n="";for(const o of t.directives){if(o.kind==="yaml"){n+=`%YAML ${o.version}
43
+ `}function P2(t){let n="";for(const o of t.directives){if(o.kind==="yaml"){n+=`%YAML ${o.version}
44
44
  `;continue}const{handle:r,prefix:l}=o;n+=`%TAG ${r} ${l}
45
- `}return n}function F2(t,n){const o=h2(n);let r="",l=!1;for(let s=0;s<t.length;s+=1){const i=t[s],d=M2(i),u=d!=="",c=i.explicitStart||u||s>0&&!l;if(r+=d,i.contents===null)c&&(r+=`---
46
- `);else if(c){const p=At(o,0,i.contents,{block:!0,compact:!0}),a=p===""?"":u||T2(i.contents)?`
45
+ `}return n}function z2(t,n){const o=k2(n);let r="",l=!1;for(let s=0;s<t.length;s+=1){const i=t[s],d=P2(i),u=d!=="",c=i.explicitStart||u||s>0&&!l;if(r+=d,i.contents===null)c&&(r+=`---
46
+ `);else if(c){const p=At(o,0,i.contents,{block:!0,compact:!0}),a=p===""?"":u||F2(i.contents)?`
47
47
  `:" ";r+=`---${a}${p}
48
48
  `}else r+=At(o,0,i.contents,{block:!0,compact:!0})+`
49
- `;l=i.explicitEnd||i.contents!==null&&A2(i.contents),l&&(r+=`...
50
- `)}return r}var D2=uw.withTags({...yr,resolve:(t,n,o)=>{const r=yr.resolve(t,n,o);return r===Ye?ra.resolve(t,n,o):r}},{...hr,resolve:(t,n,o)=>{const r=hr.resolve(t,n,o);return r===Ye?la.resolve(t,n,o):r}}),P2={...Dr,schema:D2,skipInvalid:!1,noRefs:!1,flowLevel:-1,transform:()=>{}};function Ya(t,n={}){const o={...P2,...n},r=n2(t,o.schema,{noRefs:o.noRefs,skipInvalid:o.skipInvalid});return o.flowLevel>=0&&r2(r,(l,s)=>{if(!(s.depth<o.flowLevel))return l.style.flow=!0,Ba}),o.transform(r),F2(r,{...br(o,Object.keys(Dr)),schema:o.schema})}const z2={},I2={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 R2(t,n){return e.openBlock(),e.createElementBlock("svg",I2,[...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 j2=Fe(z2,[["render",R2]]),O2=["aria-label"],Or=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(j2,{class:"h-3 w-3"})],10,O2))}}),U2={},q2={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 H2(t,n){return e.openBlock(),e.createElementBlock("svg",q2,[...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 Ga=Fe(U2,[["render",H2]]),W2={},Y2={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 G2(t,n){return e.openBlock(),e.createElementBlock("svg",Y2,[...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 Z2=Fe(W2,[["render",G2]]),K2={},X2={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 J2(t,n){return e.openBlock(),e.createElementBlock("svg",X2,[...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 Za=Fe(K2,[["render",J2]]),Q2={},e_={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 t_(t,n){return e.openBlock(),e.createElementBlock("svg",e_,[...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 n_=Fe(Q2,[["render",t_]]),o_={},r_={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 l_(t,n){return e.openBlock(),e.createElementBlock("svg",r_,[...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 a_=Fe(o_,[["render",l_]]),Ur=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(ge.Settings),{size:16,class:"lucide lucide-settings"}))}}),s_={class:"flex flex-col gap-2"},i_={class:"relative flex items-center"},c_={key:0,class:"flex flex-col gap-1.5"},d_={key:1,class:"flex flex-col items-center gap-1.5 py-5 text-gray-400"},u_={class:"text-xs"},f_={key:2,class:"flex flex-col gap-1 p-0"},m_={class:"flex size-[30px] shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-500 text-xs font-semibold text-white"},p_={class:"flex min-w-0 flex-1 flex-col gap-0.5"},g_={class:"truncate text-xs font-medium text-gray-900"},y_={class:"flex flex-wrap gap-1"},h_={key:3,class:"flex items-center justify-end gap-1.5 pt-1"},b_=["disabled"],x_={class:"min-w-[36px] text-center text-[11px] text-gray-500"},k_=["disabled"],w_={class:"ml-1 text-[11px] text-gray-400"},__=e.defineComponent({__name:"ServiceUsers",props:{serviceId:{},limit:{}},setup(t){const n=t,o=n.limit??10,r=e.ref([]),l=e.ref(0),s=e.ref(!1),i=e.ref(1),d=e.ref("");let u=null;const c=e.computed(()=>Math.max(1,Math.ceil(l.value/o))),p=e.computed(()=>{const V=l.value%100,_=l.value%10;return V>=11&&V<=19?"ів":_===1?"":_>=2&&_<=4?"и":"ів"});function a(V){return(V||"?").trim().charAt(0).toUpperCase()}function g(V){if(!V)return[];if(Array.isArray(V))return V;if(typeof V=="string"){try{const _=JSON.parse(V);if(Array.isArray(_))return _}catch{}return V.replace(/[{}"]/g,"").split(",").filter(Boolean)}return[]}const m={view:"Перегляд",edit:"Редагування",del:"Видалення",add:"Додавання"};function y(V){return m[V]??V}const k={view:"bg-blue-50 text-blue-700 border-blue-200",edit:"bg-green-50 text-green-700 border-green-200",del:"bg-red-50 text-red-600 border-red-200",add:"bg-emerald-50 text-emerald-700 border-emerald-200",admin:"bg-purple-50 text-purple-700 border-purple-200",export:"bg-amber-50 text-amber-700 border-amber-200",import:"bg-teal-50 text-teal-700 border-teal-200"};function h(V){return k[V]??"bg-gray-50 text-gray-600 border-gray-200"}async function f(){if(!n.serviceId){r.value=[],l.value=0;return}s.value=!0;try{const V=(i.value-1)*o,_=new URLSearchParams({limit:String(o),offset:String(V)});d.value.trim()&&_.set("search",d.value.trim());const w=await fetch(`/api/gis-service-users/${encodeURIComponent(String(n.serviceId))}?${_}`);if(!w.ok)throw new Error(`HTTP ${w.status}`);const $=await w.json();r.value=($==null?void 0:$.rows)??[],l.value=($==null?void 0:$.count)??0}catch(V){console.error("[ServiceUsers] fetch error",V),r.value=[],l.value=0}finally{s.value=!1}}function b(V){i.value=V,f()}function x(){u&&clearTimeout(u),u=setTimeout(()=>{i.value=1,f()},350)}function C(){d.value="",i.value=1,f()}return e.watch(()=>n.serviceId,()=>{i.value=1,d.value="",f()},{immediate:!0}),(V,_)=>(e.openBlock(),e.createElementBlock("div",s_,[e.createElementVNode("div",i_,[_[4]||(_[4]=e.createElementVNode("div",{class:"pointer-events-none absolute left-2.5 flex text-gray-400"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})])],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[0]||(_[0]=w=>d.value=w),type:"text",class:"w-full rounded-md border border-gray-200 bg-gray-50 py-1.5 pl-8 pr-7 text-xs text-gray-900 outline-none transition focus:border-blue-400 focus:bg-white focus:ring-2 focus:ring-blue-400/20",placeholder:"Пошук за іменем або логіном…",onInput:x},null,544),[[e.vModelText,d.value]]),d.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"absolute right-2 flex items-center justify-center rounded p-0.5 text-gray-400 transition hover:text-gray-700",onClick:C},[..._[3]||(_[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createElementBlock("div",c_,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(3,w=>e.createElementVNode("div",{key:w,class:"flex animate-pulse items-center gap-2 rounded-lg bg-gray-50 px-2 py-1.5"},[..._[5]||(_[5]=[e.createElementVNode("div",{class:"size-[30px] shrink-0 rounded-full bg-gray-200"},null,-1),e.createElementVNode("div",{class:"flex flex-1 flex-col gap-1.5"},[e.createElementVNode("div",{class:"h-2 w-2/3 rounded bg-gray-200"}),e.createElementVNode("div",{class:"h-2 w-1/3 rounded bg-gray-200"})],-1)])])),64))])):r.value.length?(e.openBlock(),e.createElementBlock("ul",f_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,w=>(e.openBlock(),e.createElementBlock("li",{key:w.user_id,class:"flex items-center gap-2 rounded-lg border border-gray-100 bg-gray-50 px-2 py-1.5 transition hover:border-sky-200 hover:bg-sky-50"},[e.createElementVNode("div",m_,e.toDisplayString(a(w.user_full_name)),1),e.createElementVNode("div",p_,[e.createElementVNode("span",g_,e.toDisplayString(w.user_full_name),1),e.createElementVNode("div",y_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g(w.actions),$=>(e.openBlock(),e.createElementBlock("span",{key:$,class:e.normalizeClass(["rounded-full border px-1.5 py-px text-[10px] font-medium",h($)])},e.toDisplayString(y($)),3))),128))])])]))),128))])):(e.openBlock(),e.createElementBlock("div",d_,[_[6]||(_[6]=e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="opacity-50"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>',1)),e.createElementVNode("span",u_,e.toDisplayString(d.value?"Нічого не знайдено":"Немає користувачів з доступом"),1)])),c.value>1?(e.openBlock(),e.createElementBlock("div",h_,[e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:i.value===1,onClick:_[1]||(_[1]=w=>b(i.value-1))},[..._[7]||(_[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"15 18 9 12 15 6"})],-1)])],8,b_),e.createElementVNode("span",x_,e.toDisplayString(i.value)+" / "+e.toDisplayString(c.value),1),e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:i.value===c.value,onClick:_[2]||(_[2]=w=>b(i.value+1))},[..._[8]||(_[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"9 18 15 12 9 6"})],-1)])],8,k_),e.createElementVNode("span",w_,e.toDisplayString(l.value)+" запис"+e.toDisplayString(p.value),1)])):e.createCommentVNode("",!0)]))}});function E_(t){const o=a=>typeof a!="number"||Number.isNaN(a)?"":Number(a.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"}],l=(a,g)=>{const m=Array.isArray(a==null?void 0:a.config)?a.config[0]:null;return t.normalizeValue(m==null?void 0:m[g])},s=a=>!Array.isArray(a==null?void 0:a.bounds)||a.bounds.length<4?"":a.bounds.map(g=>o(g)).filter(Boolean).join(", "),i=a=>!Array.isArray(a==null?void 0:a.extent)||a.extent.length<4?"":a.extent.map(g=>o(g)).filter(Boolean).join(", "),d=a=>!Array.isArray(a==null?void 0:a.bands)||!a.bands.length?"":a.bands.join(", "),u=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):""}],p=[{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:p,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:c,meta:p,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: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=>u(a==null?void 0:a.cache)},{label:"XML",value:a=>u(a==null?void 0:a.xml)}],meta:[{label:"Bounds",value:a=>i(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=>d(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=>l(a,"table")||t.normalizeValue(a==null?void 0:a.source_path)},{label:"Ключ набору",value:a=>l(a,"key")},{label:"Авто-картка",value:a=>u(a==null?void 0:a.card_auto)},{label:"Інфо по кліку",value:a=>u(a==null?void 0:a.info)},{label:"Статичний",value:a=>u(a==null?void 0:a.is_static)}],meta:[{label:"Bounds",value:a=>s(a)}],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 C_={class:"flex-1 overflow-y-auto p-4"},N_={class:"space-y-4"},V_={class:"border border-gray-200 rounded-lg p-4"},B_={key:0,class:"grid grid-cols-2 gap-2"},$_={class:"text-xs text-gray-500 mb-1"},S_={class:"text-sm font-semibold text-gray-900"},v_={key:1,class:"text-sm text-gray-700 leading-relaxed"},L_={class:"border border-gray-200 rounded-lg p-4"},T_={class:"text-sm text-gray-700 leading-relaxed"},A_={class:"border border-gray-200 rounded-lg p-4"},M_={class:"flex items-center justify-between mb-3"},F_={class:"text-xs text-gray-500 mb-1"},D_={class:"text-sm font-semibold text-gray-900"},P_={key:1,class:"text-sm text-gray-700 leading-relaxed"},z_={class:"border border-gray-200 rounded-lg p-4"},I_={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},R_=["disabled"],j_=["disabled"],Mt="-",qr=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved","editCssBounds"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(j=>j.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),l=t,s=n,i=e.ref(null);async function d(j){var te;try{const de=await fetch("/api/suggest/gis.group_list");if(!de.ok)return null;const ae=(te=(await de.json()).data)==null?void 0:te.find(ne=>String(ne.id)===String(j));return(ae==null?void 0:ae.text)??null}catch{return null}}e.watch(()=>l.data,async j=>{if(i.value=null,(j==null?void 0:j.group_id)!=null){const te=await d(String(j.group_id));i.value=te}},{immediate:!0});function u(j){if(!j||typeof j!="string")return Mt;try{const te=new Date(j);return Number.isNaN(te.getTime())?Mt:te.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return Mt}}function c(j){return typeof(j==null?void 0:j.is_active)=="boolean"?j.is_active?"Активний":"Неактивний":typeof(j==null?void 0:j.enabled)=="boolean"?j.enabled?"Активний":"Неактивний":Mt}function p(j){return typeof(j==null?void 0:j.is_public)!="boolean"?Mt:j.is_public?"Публічний":"Приватний"}function a(j){if(j==null)return"";if(Array.isArray(j))return j.filter(Boolean).join(", ");if(typeof j=="boolean")return j?"Так":"Ні";if(typeof j=="object")return"";const te=String(j).trim();return te===""?"":te}function g(j,te){return te.map(de=>({label:de.label,value:de.value(j)})).filter(de=>de.value&&de.value!==Mt)}const m=e.computed(()=>g(l.data,_().general)),y=e.computed(()=>{var te;const j=(te=l.data)==null?void 0:te.description;return j!=null&&j!==""?j:Mt}),k=e.computed(()=>g(l.data,_().meta)),h=e.computed(()=>k.value.length===1?"grid-cols-1":"grid-cols-2"),f=e.computed(()=>l.entityType==="css"||l.entityType==="raster"),b=e.ref(!1),x=e.ref({}),C=e.ref(null),V=e.ref(!1);function _(){const j=E_({resolvedGroupName:i.value,normalizeValue:a,statusLabel:c,visibilityLabel:p,formatDate:u});return j[l.entityType||"service"]||j.service}const w=e.computed(()=>_().edit);function $(){const j=l.data,te={};_().edit.forEach(de=>{switch(de.name){case"group_id":te.group_id=(j==null?void 0:j.group_id)!=null?String(j.group_id):"";break;case"producer":te.producer=(j==null?void 0:j.holder)??(j==null?void 0:j.producer)??"";break;case"keywords":te.keywords=Array.isArray(j==null?void 0:j.keywords)?[...j.keywords]:[];break;case"is_public":te.is_public=(j==null?void 0:j.is_public)??!1;break;case"is_active":te.is_active=typeof(j==null?void 0:j.is_active)=="boolean"?j.is_active:(j==null?void 0:j.enabled)??!1;break;case"enabled":te.enabled=(j==null?void 0:j.enabled)??(j==null?void 0:j.is_active)??!1;break;case"info":te.info=(j==null?void 0:j.info)??!1;break;case"is_static":te.is_static=(j==null?void 0:j.is_static)??!1;break;case"card_auto":te.card_auto=(j==null?void 0:j.card_auto)??!1;break;default:te[de.name]=(j==null?void 0:j[de.name])??"";break}}),x.value=te,C.value=null,b.value=!0}function L(){s("editCssBounds")}function Y(j){return l.entityType==="raster"&&j==="Bounds"}async function Q(){var j,te;if(!(!l.entityId||!l.entityType)){if(C.value){const de=(te=(j=C.value).validate)==null?void 0:te.call(j);if(de){Ce.notify({type:"warning",title:"Валідація",message:Object.entries(de).map(([be,ae])=>`${be}: ${ae}`).join(`
51
- `)});return}}V.value=!0;try{const de=new Set(w.value.map(v=>v.name)),be=Object.fromEntries(Object.entries(x.value).filter(([v])=>de.has(v))),ae=l.entityType==="css"?{url:`/api/gis-css/${encodeURIComponent(l.entityId)}`,method:"POST"}:{url:`/api/gis-metadata/${encodeURIComponent(l.entityType)}/${encodeURIComponent(l.entityId)}`,method:"POST"},ne=await fetch(ae.url,{method:ae.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(be)});if(!ne.ok)throw new Error(`Failed to save metadata: ${ne.status}`);Ce.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),b.value=!1,s("saved")}catch(de){console.error("Failed to save metadata",de),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{V.value=!1}}}return(j,te)=>(e.openBlock(),e.createElementBlock("div",C_,[e.createElementVNode("div",N_,[e.createElementVNode("div",V_,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[te[5]||(te[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:$,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"},[...te[4]||(te[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)])])]),m.value.length?(e.openBlock(),e.createElementBlock("div",B_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,de=>(e.openBlock(),e.createElementBlock("div",{key:de.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",$_,e.toDisplayString(de.label),1),e.createElementVNode("p",S_,e.toDisplayString(de.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",v_,e.toDisplayString(Mt)))]),e.createElementVNode("div",L_,[te[6]||(te[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",T_,e.toDisplayString(y.value),1)]),e.createElementVNode("div",A_,[e.createElementVNode("div",M_,[te[8]||(te[8]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Метадані ",-1)),f.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:L},[...te[7]||(te[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)]),k.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass([h.value,"grid gap-2"])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,de=>(e.openBlock(),e.createElementBlock("div",{key:de.label,class:e.normalizeClass(["bg-gray-50 rounded-md p-2 border border-gray-100",{"col-span-2":Y(de.label)}])},[e.createElementVNode("p",F_,e.toDisplayString(de.label),1),e.createElementVNode("p",D_,e.toDisplayString(de.value),1)],2))),128))],2)):(e.openBlock(),e.createElementBlock("p",P_,e.toDisplayString(Mt)))]),e.createElementVNode("div",z_,[te[9]||(te[9]=e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Доступи ")],-1)),e.createVNode(__,{"service-id":t.entityId,limit:8},null,8,["service-id"])])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:b.value,"onUpdate:visible":te[3]||(te[3]=de=>b.value=de),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",I_,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:V.value,onClick:te[2]||(te[2]=de=>b.value=!1)}," Скасувати ",8,R_),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:V.value,onClick:Q},e.toDisplayString(V.value?"Збереження…":"Зберегти"),9,j_)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:x.value,"onUpdate:values":te[0]||(te[0]=de=>x.value=de),form:C.value,"onUpdate:form":te[1]||(te[1]=de=>C.value=de),schema:w.value},null,8,["values","form","schema"])]),_:1},8,["visible"])]))}}),O_=["href"],U_=["href"],q_=["href"],H_={key:0,class:"py-6 px-4 text-sm text-gray-500"},W_={key:1,class:"py-6 px-4 text-sm text-red-600"},Y_={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},G_=["disabled"],Z_=["disabled"],K_=192,Ka=8,On=8,Hr=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(D=>D.VsModal)),s=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.ref(!1),d=e.ref(null),u=e.ref(null),c=e.ref(null),p=e.ref(null),a=e.computed(()=>p.value?{position:"fixed",top:`${p.value.top}px`,left:`${p.value.left}px`}:{});e.watch(i,D=>{D&&e.nextTick(B)});const g=e.ref(!1),m=e.ref(null),y=e.ref({}),k=e.ref(null),h=e.ref(""),f=e.ref(!1),b=e.ref(!1),x=e.ref(null),C=e.computed(()=>o.entityId||""),V=(D,U)=>D?typeof D=="function"?D(U):typeof D!="string"?"":D.includes(":id")?U?D.replace(":id",encodeURIComponent(U)):"":D:"",_=e.computed(()=>{var D;return(D=o.table)==null?void 0:D.trim()}),w=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(_.value)return D=>`/api/form/${_.value}/${D}`}),$=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(_.value)return D=>`/api/table/${D}`}),L=e.computed(()=>V(w.value,C.value)),Y=e.computed(()=>o.saveEndpoint?V(o.saveEndpoint,C.value):x.value?`/api/table/${encodeURIComponent(x.value)}`:V($.value,C.value)),Q=e.computed(()=>V("/api/gis-clear-rtile/:id",C.value)),j=e.computed(()=>V("/api/gis-xml/:id",C.value)),te=e.computed(()=>V("/api/gis-pretile/:id?zoom=10&max=12",C.value)),de=e.computed(()=>{var q,ee,z;const D=(ee=(q=o.entityInfo)==null?void 0:q.name)==null?void 0:ee.trim();if(D)return`Редагування ${D}`;const U=(z=o.entityLabel)==null?void 0:z.trim();return U?`Редагування ${U}`:"Редагування"}),be=e.computed(()=>o.editButtonText||"Редагувати"),ae=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function ne(){i.value||B(),i.value=!i.value}function v(){i.value=!1}async function M(){const D=o.clearTilesHandler;!D||!C.value||(v(),await D(C.value))}function B(){var X;if(typeof window>"u"||!u.value)return;const D=u.value.getBoundingClientRect(),U=window.innerWidth,q=window.innerHeight,ee=D.left,z=Math.max(U-K_-On,On),oe=Math.min(Math.max(ee,On),z),ye=((X=c.value)==null?void 0:X.offsetHeight)??0,we=D.bottom+Ka;let T=we;if(ye&&we+ye>q-On){const fe=D.top-Ka-ye;T=Math.max(fe,On)}p.value={top:T,left:oe}}function N(D){var q,ee;if(!d.value&&!c.value)return;const U=D.target;U&&((q=d.value)!=null&&q.contains(U)||(ee=c.value)!=null&&ee.contains(U))||(i.value=!1)}function F(){i.value&&B()}e.onMounted(()=>{window.addEventListener("click",N),window.addEventListener("resize",F),window.addEventListener("scroll",F,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",N),window.removeEventListener("resize",F),window.removeEventListener("scroll",F,!0)});async function H(){var D,U,q;if(!(!C.value||!L.value)){v(),g.value=!0,f.value=!0,h.value="",m.value=null,y.value={},x.value=null;try{const ee=await fetch(L.value);if(!ee.ok)throw new Error(`Failed to load form: ${ee.status}`);const z=await ee.json();y.value=(z==null?void 0:z.data)||{},m.value=(z==null?void 0:z.schema)||null;const oe=typeof(z==null?void 0:z.token)=="string"&&z.token||typeof((D=z==null?void 0:z.tokens)==null?void 0:D.edit)=="string"&&z.tokens.edit||typeof((U=z==null?void 0:z.tokens)==null?void 0:U.edit_token)=="string"&&z.tokens.edit_token||typeof((q=z==null?void 0:z.data)==null?void 0:q.token)=="string"&&z.data.token||null;x.value=oe,k.value=null}catch(ee){console.error("Failed to load edit form",ee),h.value="Не вдалося завантажити форму редагування"}finally{f.value=!1}}}function he(){g.value=!1,m.value=null,h.value="",x.value=null}async function G(){var D,U;if(!(!C.value||!Y.value)){if(k.value){const q=(U=(D=k.value).validate)==null?void 0:U.call(D);if(q){Ce.notify({type:"warning",title:"Validation",message:Object.entries(q).map(([ee,z])=>`${ee}: ${z}`).join(`
52
- `)});return}}b.value=!0;try{const q=await fetch(Y.value,{method:ae.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(y.value)});if(!q.ok)throw new Error(`Failed to save: ${q.status}`);Ce.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",y.value),he()}catch(q){console.error("Failed to save edit form",q),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(D,U)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:d,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:u,type:"button",onClick:e.withModifiers(ne,["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":"Дії"},[...U[3]||(U[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:c,style:e.normalizeStyle(a.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(ge.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),U[4]||(U[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(ge.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),U[5]||(U[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,O_))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,href:j.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(ge.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),U[6]||(U[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,U_)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:2,href:te.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(ge.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),U[7]||(U[7]=e.createElementVNode("span",null,"Pretile",-1))],8,q_)):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:H},[e.createVNode(e.unref(ge.Pencil),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(be.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(l),{teleport:"#modal",visible:g.value,"onUpdate:visible":U[2]||(U[2]=q=>g.value=q),title:de.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Y_,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:he,disabled:b.value}," Скасувати ",8,G_),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:G,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,Z_)])]),default:e.withCtx(()=>[f.value?(e.openBlock(),e.createElementBlock("div",H_," Завантаження форми редагування… ")):h.value?(e.openBlock(),e.createElementBlock("div",W_,e.toDisplayString(h.value),1)):(e.openBlock(),e.createBlock(e.unref(s),{key:2,values:y.value,"onUpdate:values":U[0]||(U[0]=q=>y.value=q),form:k.value,"onUpdate:form":U[1]||(U[1]=q=>k.value=q),schema:m.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),Un="cartocss",X_={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"]]}},J_={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:"'"}]},Xa=["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"],Q_={"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 Ja=!1;function eE(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],s=n-l.length;return{prefix:l,startColumn:s,endColumn:n}}function tE(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const l=r[0].replace(/\s*:$/,"").trim(),s=r.index+1,i=r.index+r[0].length,u=t.substring(i).indexOf(";"),c=u>=0?i+u+1:t.length+1;if(n>=s&&n<=c)return Xa.includes(l)?l:null}return null}function nE(t){Ja||(Ja=!0,t.languages.register({id:Un}),t.languages.setMonarchTokensProvider(Un,X_),t.languages.setLanguageConfiguration(Un,J_),t.languages.registerCompletionItemProvider(Un,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),l=eE(r,o.column),s=((l==null?void 0:l.prefix)??"").toLowerCase(),i=l&&l.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:l.startColumn,endLineNumber:o.lineNumber,endColumn:l.endColumn}:void 0;return{suggestions:Xa.filter(u=>!s||u.toLowerCase().includes(s)||u.toLowerCase().startsWith(s)).map(u=>({label:u,kind:t.languages.CompletionItemKind.Property,insertText:u+": ",...i&&{range:i}}))}}}),t.languages.registerHoverProvider(Un,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),l=tE(r,o.column);if(!l)return;const s=Q_[l];return{contents:[{value:`**${l}**
49
+ `;l=i.explicitEnd||i.contents!==null&&D2(i.contents),l&&(r+=`...
50
+ `)}return r}var I2=pw.withTags({...yr,resolve:(t,n,o)=>{const r=yr.resolve(t,n,o);return r===Ye?ra.resolve(t,n,o):r}},{...hr,resolve:(t,n,o)=>{const r=hr.resolve(t,n,o);return r===Ye?la.resolve(t,n,o):r}}),R2={...Dr,schema:I2,skipInvalid:!1,noRefs:!1,flowLevel:-1,transform:()=>{}};function Ya(t,n={}){const o={...R2,...n},r=l2(t,o.schema,{noRefs:o.noRefs,skipInvalid:o.skipInvalid});return o.flowLevel>=0&&s2(r,(l,s)=>{if(!(s.depth<o.flowLevel))return l.style.flow=!0,Ba}),o.transform(r),z2(r,{...br(o,Object.keys(Dr)),schema:o.schema})}const j2={},O2={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 U2(t,n){return e.openBlock(),e.createElementBlock("svg",O2,[...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 q2=Fe(j2,[["render",U2]]),H2=["aria-label"],Or=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(q2,{class:"h-3 w-3"})],10,H2))}}),W2={},Y2={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 G2(t,n){return e.openBlock(),e.createElementBlock("svg",Y2,[...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 Ga=Fe(W2,[["render",G2]]),Z2={},K2={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 X2(t,n){return e.openBlock(),e.createElementBlock("svg",K2,[...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 J2=Fe(Z2,[["render",X2]]),Q2={},e_={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 t_(t,n){return e.openBlock(),e.createElementBlock("svg",e_,[...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 Za=Fe(Q2,[["render",t_]]),n_={},o_={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 r_(t,n){return e.openBlock(),e.createElementBlock("svg",o_,[...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 l_=Fe(n_,[["render",r_]]),a_={},s_={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 i_(t,n){return e.openBlock(),e.createElementBlock("svg",s_,[...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 c_=Fe(a_,[["render",i_]]),Ur=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(he.Settings),{size:16,class:"lucide lucide-settings"}))}}),d_={class:"flex flex-col gap-2"},u_={class:"relative flex items-center"},f_={key:0,class:"flex flex-col gap-1.5"},m_={key:1,class:"flex flex-col items-center gap-1.5 py-5 text-gray-400"},p_={class:"text-xs"},g_={key:2,class:"flex flex-col gap-1 p-0"},y_={class:"flex size-[30px] shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-500 text-xs font-semibold text-white"},h_={class:"flex min-w-0 flex-1 flex-col gap-0.5"},b_={class:"truncate text-xs font-medium text-gray-900"},x_={class:"flex flex-wrap gap-1"},k_={key:3,class:"flex items-center justify-end gap-1.5 pt-1"},w_=["disabled"],__={class:"min-w-[36px] text-center text-[11px] text-gray-500"},E_=["disabled"],C_={class:"ml-1 text-[11px] text-gray-400"},N_=e.defineComponent({__name:"ServiceUsers",props:{serviceId:{},limit:{}},setup(t){const n=t,o=n.limit??10,r=e.ref([]),l=e.ref(0),s=e.ref(!1),i=e.ref(1),d=e.ref("");let u=null;const c=e.computed(()=>Math.max(1,Math.ceil(l.value/o))),p=e.computed(()=>{const V=l.value%100,_=l.value%10;return V>=11&&V<=19?"ів":_===1?"":_>=2&&_<=4?"и":"ів"});function a(V){return(V||"?").trim().charAt(0).toUpperCase()}function g(V){if(!V)return[];if(Array.isArray(V))return V;if(typeof V=="string"){try{const _=JSON.parse(V);if(Array.isArray(_))return _}catch{}return V.replace(/[{}"]/g,"").split(",").filter(Boolean)}return[]}const m={view:"Перегляд",edit:"Редагування",del:"Видалення",add:"Додавання"};function y(V){return m[V]??V}const k={view:"bg-blue-50 text-blue-700 border-blue-200",edit:"bg-green-50 text-green-700 border-green-200",del:"bg-red-50 text-red-600 border-red-200",add:"bg-emerald-50 text-emerald-700 border-emerald-200",admin:"bg-purple-50 text-purple-700 border-purple-200",export:"bg-amber-50 text-amber-700 border-amber-200",import:"bg-teal-50 text-teal-700 border-teal-200"};function h(V){return k[V]??"bg-gray-50 text-gray-600 border-gray-200"}async function f(){if(!n.serviceId){r.value=[],l.value=0;return}s.value=!0;try{const V=(i.value-1)*o,_=new URLSearchParams({limit:String(o),offset:String(V)});d.value.trim()&&_.set("search",d.value.trim());const w=await fetch(`/api/gis-service-users/${encodeURIComponent(String(n.serviceId))}?${_}`);if(!w.ok)throw new Error(`HTTP ${w.status}`);const B=await w.json();r.value=(B==null?void 0:B.rows)??[],l.value=(B==null?void 0:B.count)??0}catch(V){console.error("[ServiceUsers] fetch error",V),r.value=[],l.value=0}finally{s.value=!1}}function b(V){i.value=V,f()}function x(){u&&clearTimeout(u),u=setTimeout(()=>{i.value=1,f()},350)}function N(){d.value="",i.value=1,f()}return e.watch(()=>n.serviceId,()=>{i.value=1,d.value="",f()},{immediate:!0}),(V,_)=>(e.openBlock(),e.createElementBlock("div",d_,[e.createElementVNode("div",u_,[_[4]||(_[4]=e.createElementVNode("div",{class:"pointer-events-none absolute left-2.5 flex text-gray-400"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})])],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":_[0]||(_[0]=w=>d.value=w),type:"text",class:"w-full rounded-md border border-gray-200 bg-gray-50 py-1.5 pl-8 pr-7 text-xs text-gray-900 outline-none transition focus:border-blue-400 focus:bg-white focus:ring-2 focus:ring-blue-400/20",placeholder:"Пошук за іменем або логіном…",onInput:x},null,544),[[e.vModelText,d.value]]),d.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"absolute right-2 flex items-center justify-center rounded p-0.5 text-gray-400 transition hover:text-gray-700",onClick:N},[..._[3]||(_[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.5","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])):e.createCommentVNode("",!0)]),s.value?(e.openBlock(),e.createElementBlock("div",f_,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(3,w=>e.createElementVNode("div",{key:w,class:"flex animate-pulse items-center gap-2 rounded-lg bg-gray-50 px-2 py-1.5"},[..._[5]||(_[5]=[e.createElementVNode("div",{class:"size-[30px] shrink-0 rounded-full bg-gray-200"},null,-1),e.createElementVNode("div",{class:"flex flex-1 flex-col gap-1.5"},[e.createElementVNode("div",{class:"h-2 w-2/3 rounded bg-gray-200"}),e.createElementVNode("div",{class:"h-2 w-1/3 rounded bg-gray-200"})],-1)])])),64))])):r.value.length?(e.openBlock(),e.createElementBlock("ul",g_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,w=>(e.openBlock(),e.createElementBlock("li",{key:w.user_id,class:"flex items-center gap-2 rounded-lg border border-gray-100 bg-gray-50 px-2 py-1.5 transition hover:border-sky-200 hover:bg-sky-50"},[e.createElementVNode("div",y_,e.toDisplayString(a(w.user_full_name)),1),e.createElementVNode("div",h_,[e.createElementVNode("span",b_,e.toDisplayString(w.user_full_name),1),e.createElementVNode("div",x_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g(w.actions),B=>(e.openBlock(),e.createElementBlock("span",{key:B,class:e.normalizeClass(["rounded-full border px-1.5 py-px text-[10px] font-medium",h(B)])},e.toDisplayString(y(B)),3))),128))])])]))),128))])):(e.openBlock(),e.createElementBlock("div",m_,[_[6]||(_[6]=e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="opacity-50"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>',1)),e.createElementVNode("span",p_,e.toDisplayString(d.value?"Нічого не знайдено":"Немає користувачів з доступом"),1)])),c.value>1?(e.openBlock(),e.createElementBlock("div",k_,[e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:i.value===1,onClick:_[1]||(_[1]=w=>b(i.value-1))},[..._[7]||(_[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"15 18 9 12 15 6"})],-1)])],8,w_),e.createElementVNode("span",__,e.toDisplayString(i.value)+" / "+e.toDisplayString(c.value),1),e.createElementVNode("button",{class:"flex size-[26px] items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition enabled:hover:border-blue-400 enabled:hover:bg-sky-50 enabled:hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40",disabled:i.value===c.value,onClick:_[2]||(_[2]=w=>b(i.value+1))},[..._[8]||(_[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("polyline",{points:"9 18 15 12 9 6"})],-1)])],8,E_),e.createElementVNode("span",C_,e.toDisplayString(l.value)+" запис"+e.toDisplayString(p.value),1)])):e.createCommentVNode("",!0)]))}});function V_(t){const o=a=>typeof a!="number"||Number.isNaN(a)?"":Number(a.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"}],l=(a,g)=>{const m=Array.isArray(a==null?void 0:a.config)?a.config[0]:null;return t.normalizeValue(m==null?void 0:m[g])},s=a=>!Array.isArray(a==null?void 0:a.bounds)||a.bounds.length<4?"":a.bounds.map(g=>o(g)).filter(Boolean).join(", "),i=a=>!Array.isArray(a==null?void 0:a.extent)||a.extent.length<4?"":a.extent.map(g=>o(g)).filter(Boolean).join(", "),d=a=>!Array.isArray(a==null?void 0:a.bands)||!a.bands.length?"":a.bands.join(", "),u=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):""}],p=[{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:p,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:c,meta:p,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: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=>u(a==null?void 0:a.cache)},{label:"XML",value:a=>u(a==null?void 0:a.xml)}],meta:[{label:"Bounds",value:a=>i(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=>d(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=>l(a,"table")||t.normalizeValue(a==null?void 0:a.source_path)},{label:"Ключ набору",value:a=>l(a,"key")},{label:"Авто-картка",value:a=>u(a==null?void 0:a.card_auto)},{label:"Інфо по кліку",value:a=>u(a==null?void 0:a.info)},{label:"Статичний",value:a=>u(a==null?void 0:a.is_static)}],meta:[{label:"Bounds",value:a=>s(a)}],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 B_={class:"flex-1 overflow-y-auto p-4"},$_={class:"space-y-4"},S_={class:"border border-gray-200 rounded-lg p-4"},v_={key:0,class:"grid grid-cols-2 gap-2"},L_={class:"text-xs text-gray-500 mb-1"},T_={class:"text-sm font-semibold text-gray-900"},A_={key:1,class:"text-sm text-gray-700 leading-relaxed"},M_={class:"border border-gray-200 rounded-lg p-4"},F_={class:"text-sm text-gray-700 leading-relaxed"},D_={class:"border border-gray-200 rounded-lg p-4"},P_={class:"flex items-center justify-between mb-3"},z_={class:"text-xs text-gray-500 mb-1"},I_={class:"text-sm font-semibold text-gray-900"},R_={key:1,class:"text-sm text-gray-700 leading-relaxed"},j_={class:"border border-gray-200 rounded-lg p-4"},O_={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},U_=["disabled"],q_=["disabled"],Mt="-",qr=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved","editCssBounds"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(O=>O.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),l=t,s=n,i=e.ref(null);async function d(O){var ne;try{const de=await fetch("/api/suggest/gis.group_list");if(!de.ok)return null;const se=(ne=(await de.json()).data)==null?void 0:ne.find(te=>String(te.id)===String(O));return(se==null?void 0:se.text)??null}catch{return null}}e.watch(()=>l.data,async O=>{if(i.value=null,(O==null?void 0:O.group_id)!=null){const ne=await d(String(O.group_id));i.value=ne}},{immediate:!0});function u(O){if(!O||typeof O!="string")return Mt;try{const ne=new Date(O);return Number.isNaN(ne.getTime())?Mt:ne.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return Mt}}function c(O){return typeof(O==null?void 0:O.is_active)=="boolean"?O.is_active?"Активний":"Неактивний":typeof(O==null?void 0:O.enabled)=="boolean"?O.enabled?"Активний":"Неактивний":Mt}function p(O){return typeof(O==null?void 0:O.is_public)!="boolean"?Mt:O.is_public?"Публічний":"Приватний"}function a(O){if(O==null)return"";if(Array.isArray(O))return O.filter(Boolean).join(", ");if(typeof O=="boolean")return O?"Так":"Ні";if(typeof O=="object")return"";const ne=String(O).trim();return ne===""?"":ne}function g(O,ne){return ne.map(de=>({label:de.label,value:de.value(O)})).filter(de=>de.value&&de.value!==Mt)}const m=e.computed(()=>g(l.data,_().general)),y=e.computed(()=>{var ne;const O=(ne=l.data)==null?void 0:ne.description;return O!=null&&O!==""?O:Mt}),k=e.computed(()=>g(l.data,_().meta)),h=e.computed(()=>k.value.length===1?"grid-cols-1":"grid-cols-2"),f=e.computed(()=>l.entityType==="css"||l.entityType==="raster"),b=e.ref(!1),x=e.ref({}),N=e.ref(null),V=e.ref(!1);function _(){const O=V_({resolvedGroupName:i.value,normalizeValue:a,statusLabel:c,visibilityLabel:p,formatDate:u});return O[l.entityType||"service"]||O.service}const w=e.computed(()=>_().edit);function B(){const O=l.data,ne={};_().edit.forEach(de=>{switch(de.name){case"group_id":ne.group_id=(O==null?void 0:O.group_id)!=null?String(O.group_id):"";break;case"producer":ne.producer=(O==null?void 0:O.holder)??(O==null?void 0:O.producer)??"";break;case"keywords":ne.keywords=Array.isArray(O==null?void 0:O.keywords)?[...O.keywords]:[];break;case"is_public":ne.is_public=(O==null?void 0:O.is_public)??!1;break;case"is_active":ne.is_active=typeof(O==null?void 0:O.is_active)=="boolean"?O.is_active:(O==null?void 0:O.enabled)??!1;break;case"enabled":ne.enabled=(O==null?void 0:O.enabled)??(O==null?void 0:O.is_active)??!1;break;case"info":ne.info=(O==null?void 0:O.info)??!1;break;case"is_static":ne.is_static=(O==null?void 0:O.is_static)??!1;break;case"card_auto":ne.card_auto=(O==null?void 0:O.card_auto)??!1;break;default:ne[de.name]=(O==null?void 0:O[de.name])??"";break}}),x.value=ne,N.value=null,b.value=!0}function v(){s("editCssBounds")}function K(O){return l.entityType==="raster"&&O==="Bounds"}async function J(){var O,ne;if(!(!l.entityId||!l.entityType)){if(N.value){const de=(ne=(O=N.value).validate)==null?void 0:ne.call(O);if(de){Ce.notify({type:"warning",title:"Валідація",message:Object.entries(de).map(([xe,se])=>`${xe}: ${se}`).join(`
51
+ `)});return}}V.value=!0;try{const de=new Set(w.value.map(D=>D.name)),xe=Object.fromEntries(Object.entries(x.value).filter(([D])=>de.has(D))),se=l.entityType==="css"?{url:`/api/gis-css/${encodeURIComponent(l.entityId)}`,method:"POST"}:{url:`/api/gis-metadata/${encodeURIComponent(l.entityType)}/${encodeURIComponent(l.entityId)}`,method:"POST"},te=await fetch(se.url,{method:se.method,headers:{"Content-Type":"application/json"},body:JSON.stringify(xe)});if(!te.ok)throw new Error(`Failed to save metadata: ${te.status}`);Ce.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),b.value=!1,s("saved")}catch(de){console.error("Failed to save metadata",de),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{V.value=!1}}}return(O,ne)=>(e.openBlock(),e.createElementBlock("div",B_,[e.createElementVNode("div",$_,[e.createElementVNode("div",S_,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[ne[5]||(ne[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:B,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"},[...ne[4]||(ne[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)])])]),m.value.length?(e.openBlock(),e.createElementBlock("div",v_,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,de=>(e.openBlock(),e.createElementBlock("div",{key:de.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",L_,e.toDisplayString(de.label),1),e.createElementVNode("p",T_,e.toDisplayString(de.value),1)]))),128))])):(e.openBlock(),e.createElementBlock("p",A_,e.toDisplayString(Mt)))]),e.createElementVNode("div",M_,[ne[6]||(ne[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",F_,e.toDisplayString(y.value),1)]),e.createElementVNode("div",D_,[e.createElementVNode("div",P_,[ne[8]||(ne[8]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Метадані ",-1)),f.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:v},[...ne[7]||(ne[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)]),k.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass([h.value,"grid gap-2"])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(k.value,de=>(e.openBlock(),e.createElementBlock("div",{key:de.label,class:e.normalizeClass(["bg-gray-50 rounded-md p-2 border border-gray-100",{"col-span-2":K(de.label)}])},[e.createElementVNode("p",z_,e.toDisplayString(de.label),1),e.createElementVNode("p",I_,e.toDisplayString(de.value),1)],2))),128))],2)):(e.openBlock(),e.createElementBlock("p",R_,e.toDisplayString(Mt)))]),e.createElementVNode("div",j_,[ne[9]||(ne[9]=e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Доступи ")],-1)),e.createVNode(N_,{"service-id":t.entityId,limit:8},null,8,["service-id"])])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:b.value,"onUpdate:visible":ne[3]||(ne[3]=de=>b.value=de),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",O_,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:V.value,onClick:ne[2]||(ne[2]=de=>b.value=!1)}," Скасувати ",8,U_),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:V.value,onClick:J},e.toDisplayString(V.value?"Збереження…":"Зберегти"),9,q_)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:x.value,"onUpdate:values":ne[0]||(ne[0]=de=>x.value=de),form:N.value,"onUpdate:form":ne[1]||(ne[1]=de=>N.value=de),schema:w.value},null,8,["values","form","schema"])]),_:1},8,["visible"])]))}}),H_=["href"],W_=["href"],Y_=["href"],G_={key:0,class:"py-6 px-4 text-sm text-gray-500"},Z_={key:1,class:"py-6 px-4 text-sm text-red-600"},K_={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},X_=["disabled"],J_=["disabled"],Q_=192,Ka=8,Un=8,Hr=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(F=>F.VsModal)),s=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.ref(!1),d=e.ref(null),u=e.ref(null),c=e.ref(null),p=e.ref(null),a=e.computed(()=>p.value?{position:"fixed",top:`${p.value.top}px`,left:`${p.value.left}px`}:{});e.watch(i,F=>{F&&e.nextTick(T)});const g=e.ref(!1),m=e.ref(null),y=e.ref({}),k=e.ref(null),h=e.ref(""),f=e.ref(!1),b=e.ref(!1),x=e.ref(null),N=e.computed(()=>o.entityId||""),V=(F,z)=>F?typeof F=="function"?F(z):typeof F!="string"?"":F.includes(":id")?z?F.replace(":id",encodeURIComponent(z)):"":F:"",_=e.computed(()=>{var F;return(F=o.table)==null?void 0:F.trim()}),w=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(_.value)return F=>`/api/form/${_.value}/${F}`}),B=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(_.value)return F=>`/api/table/${F}`}),v=e.computed(()=>V(w.value,N.value)),K=e.computed(()=>o.saveEndpoint?V(o.saveEndpoint,N.value):x.value?`/api/table/${encodeURIComponent(x.value)}`:V(B.value,N.value)),J=e.computed(()=>V("/api/gis-clear-rtile/:id",N.value)),O=e.computed(()=>V("/api/gis-xml/:id",N.value)),ne=e.computed(()=>V("/api/gis-pretile/:id?zoom=10&max=12",N.value)),de=e.computed(()=>{var H,oe,R;const F=(oe=(H=o.entityInfo)==null?void 0:H.name)==null?void 0:oe.trim();if(F)return`Редагування ${F}`;const z=(R=o.entityLabel)==null?void 0:R.trim();return z?`Редагування ${z}`:"Редагування"}),xe=e.computed(()=>o.editButtonText||"Редагувати"),se=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function te(){i.value||T(),i.value=!i.value}function D(){i.value=!1}async function Q(){const F=o.clearTilesHandler;!F||!N.value||(D(),await F(N.value))}function T(){var Y;if(typeof window>"u"||!u.value)return;const F=u.value.getBoundingClientRect(),z=window.innerWidth,H=window.innerHeight,oe=F.left,R=Math.max(z-Q_-Un,Un),ee=Math.min(Math.max(oe,Un),R),ge=((Y=c.value)==null?void 0:Y.offsetHeight)??0,we=F.bottom+Ka;let S=we;if(ge&&we+ge>H-Un){const ue=F.top-Ka-ge;S=Math.max(ue,Un)}p.value={top:S,left:ee}}function E(F){var H,oe;if(!d.value&&!c.value)return;const z=F.target;z&&((H=d.value)!=null&&H.contains(z)||(oe=c.value)!=null&&oe.contains(z))||(i.value=!1)}function L(){i.value&&T()}e.onMounted(()=>{window.addEventListener("click",E),window.addEventListener("resize",L),window.addEventListener("scroll",L,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",E),window.removeEventListener("resize",L),window.removeEventListener("scroll",L,!0)});async function A(){var F,z,H;if(!(!N.value||!v.value)){D(),g.value=!0,f.value=!0,h.value="",m.value=null,y.value={},x.value=null;try{const oe=await fetch(v.value);if(!oe.ok)throw new Error(`Failed to load form: ${oe.status}`);const R=await oe.json();y.value=(R==null?void 0:R.data)||{},m.value=(R==null?void 0:R.schema)||null;const ee=typeof(R==null?void 0:R.token)=="string"&&R.token||typeof((F=R==null?void 0:R.tokens)==null?void 0:F.edit)=="string"&&R.tokens.edit||typeof((z=R==null?void 0:R.tokens)==null?void 0:z.edit_token)=="string"&&R.tokens.edit_token||typeof((H=R==null?void 0:R.data)==null?void 0:H.token)=="string"&&R.data.token||null;x.value=ee,k.value=null}catch(oe){console.error("Failed to load edit form",oe),h.value="Не вдалося завантажити форму редагування"}finally{f.value=!1}}}function me(){g.value=!1,m.value=null,h.value="",x.value=null}async function I(){var F,z;if(!(!N.value||!K.value)){if(k.value){const H=(z=(F=k.value).validate)==null?void 0:z.call(F);if(H){Ce.notify({type:"warning",title:"Validation",message:Object.entries(H).map(([oe,R])=>`${oe}: ${R}`).join(`
52
+ `)});return}}b.value=!0;try{const H=await fetch(K.value,{method:se.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(y.value)});if(!H.ok)throw new Error(`Failed to save: ${H.status}`);Ce.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",y.value),me()}catch(H){console.error("Failed to save edit form",H),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(F,z)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:d,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:u,type:"button",onClick:e.withModifiers(te,["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":"Дії"},[...z[3]||(z[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:c,style:e.normalizeStyle(a.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]"},[J.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:Q},[e.createVNode(e.unref(he.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),z[4]||(z[4]=e.createElementVNode("span",null,"Очистити тайли",-1))])):(e.openBlock(),e.createElementBlock("a",{key:1,href:J.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:D},[e.createVNode(e.unref(he.BrushCleaning),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),z[5]||(z[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,H_))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,href:O.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:D},[e.createVNode(e.unref(he.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),z[6]||(z[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,W_)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:2,href:ne.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:D},[e.createVNode(e.unref(he.SquareCode),{size:16,class:"lucide lucide-square-code text-gray-500"}),z[7]||(z[7]=e.createElementVNode("span",null,"Pretile",-1))],8,Y_)):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:A},[e.createVNode(e.unref(he.Pencil),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(xe.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(l),{teleport:"#modal",visible:g.value,"onUpdate:visible":z[2]||(z[2]=H=>g.value=H),title:de.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",K_,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:me,disabled:b.value}," Скасувати ",8,X_),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:I,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,J_)])]),default:e.withCtx(()=>[f.value?(e.openBlock(),e.createElementBlock("div",G_," Завантаження форми редагування… ")):h.value?(e.openBlock(),e.createElementBlock("div",Z_,e.toDisplayString(h.value),1)):(e.openBlock(),e.createBlock(e.unref(s),{key:2,values:y.value,"onUpdate:values":z[0]||(z[0]=H=>y.value=H),form:k.value,"onUpdate:form":z[1]||(z[1]=H=>k.value=H),schema:m.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),qn="cartocss",eE={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"]]}},tE={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:"'"}]},Xa=["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"],nE={"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 Ja=!1;function oE(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],s=n-l.length;return{prefix:l,startColumn:s,endColumn:n}}function rE(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const l=r[0].replace(/\s*:$/,"").trim(),s=r.index+1,i=r.index+r[0].length,u=t.substring(i).indexOf(";"),c=u>=0?i+u+1:t.length+1;if(n>=s&&n<=c)return Xa.includes(l)?l:null}return null}function lE(t){Ja||(Ja=!0,t.languages.register({id:qn}),t.languages.setMonarchTokensProvider(qn,eE),t.languages.setLanguageConfiguration(qn,tE),t.languages.registerCompletionItemProvider(qn,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),l=oE(r,o.column),s=((l==null?void 0:l.prefix)??"").toLowerCase(),i=l&&l.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:l.startColumn,endLineNumber:o.lineNumber,endColumn:l.endColumn}:void 0;return{suggestions:Xa.filter(u=>!s||u.toLowerCase().includes(s)||u.toLowerCase().startsWith(s)).map(u=>({label:u,kind:t.languages.CompletionItemKind.Property,insertText:u+": ",...i&&{range:i}}))}}}),t.languages.registerHoverProvider(qn,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),l=rE(r,o.column);if(!l)return;const s=nE[l];return{contents:[{value:`**${l}**
53
53
 
54
- ${s??"CartoCSS property (Mapnik)."}`}]}}}))}const qn=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 s=null,i=null,d=!1;function u(){return new Promise((p,a)=>{if(i)return p(i);if(window.monaco)return i=window.monaco,p(i);const g=y=>{if([...document.styleSheets].some(h=>{var f;return(f=h==null?void 0:h.href)==null?void 0:f.includes(y)}))return;const k=document.createElement("link");k.rel="stylesheet",k.href=y,document.head.appendChild(k)},m=y=>new Promise((k,h)=>{const f=document.createElement("script");f.src=y,f.onload=()=>k(!0),f.onerror=h,document.body.appendChild(f)});g("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),m("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{i=window.monaco,p(i)})}).catch(a)})}function c(){var y,k;if(!l.value||!i)return;s&&s.dispose();const p=o.language||"yaml",a=i.editor.createModel(o.modelValue||"",p),g=p==="cartocss"?{acceptSuggestionOnCommitCharacter:!1,acceptSuggestionOnEnter:"off",snippetSuggestions:"none",tabCompletion:"off",wordBasedSuggestions:"off"}:{};s=i.editor.create(l.value,{model:a,theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1},...g});const m=p;i.editor.setModelLanguage(a,m),m==="css"&&((k=(y=i.languages)==null?void 0:y.css)!=null&&k.cssDefaults)&&i.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),s.onDidChangeModelContent(()=>{d||r("update:modelValue",s.getValue())})}return e.watch(()=>o.modelValue,p=>{if(!s)return;const a=s.getModel();if(!a)return;const g=a.getValue();if(p!==g){const m=s.getPosition(),y=s.getSelection(),k=s.getScrollTop(),h=s.getScrollLeft();d=!0,s.executeEdits("external-model-sync",[{range:a.getFullModelRange(),text:p||"",forceMoveMarkers:!0}]),y&&s.setSelection(y),m&&s.setPosition(m),s.setScrollTop(k),s.setScrollLeft(h),d=!1}}),e.watch(()=>o.language,p=>{s&&i&&i.editor.setModelLanguage(s.getModel(),p||"yaml")}),e.watch(()=>o.theme,p=>{s&&i&&i.editor.setTheme(p||"vs-light")}),e.onMounted(async()=>{await u(),nE(i),c()}),e.onBeforeUnmount(()=>{s&&s.dispose()}),(p,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),oE={class:"flex flex-col flex-1 overflow-hidden"},rE={class:"flex justify-end gap-2"},lE=["href"],aE={class:"flex flex-col flex-1 overflow-hidden"},sE={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},iE={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},cE=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleText,u=>{const c=u??"";l.value!==c&&(l.value=c)},{immediate:!0}),e.watch(l,async u=>{var p,a;const c=u??"";o.styleText!==c&&r("update:style-text",c);try{const g=u?Tr(u):null;if((p=g==null?void 0:g.colorAttr)!=null&&p.length&&((a=o.styleYaml)==null?void 0:a.colorAttr)!==g.colorAttr){const m=await s(g.colorAttr);g.colors=m.reduce((k,h,f)=>({...k,[h.id.toString()]:i[f]}),{});const y=Ya(g);y!==l.value&&(l.value=y)}JSON.stringify(g)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",g&&typeof g=="object"?g:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function s(u){return(await fetch(`/api/gis-service/${o.token}/${u}`).then(p=>p.json())).rows}const i=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"];function d(){let u=o.styleYaml;if(!u&&l.value)try{const c=Tr(l.value);u=c&&typeof c=="object"?c:null}catch{Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"});return}r("save",u&&typeof u=="object"?u:null)}return(u,c)=>(e.openBlock(),e.createElementBlock("div",oE,[e.createElementVNode("div",rE,[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,lE),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"},[...c[1]||(c[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",aE,[e.createElementVNode("div",sE,[c[2]||(c[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",iE,[e.createVNode(qn,{modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=p=>l.value=p),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),dE={class:"flex flex-col flex-1 min-h-0"},uE={class:"flex flex-col flex-1 min-h-0"},fE=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,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>{const k=qe(o.token);k&&(k.popup=y),r("update:columns",y)});const s=e.ref("list"),i=e.ref(!1),d=e.ref([]),u=[{key:"name",label:"Назва",type:"main"}],c={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"autocomplete",label:"Класифікатор",data:"admin.cls.name"}};function p(){d.value=l.value.map(y=>y.name||y.id),i.value=!0}function a(){var f;const y=[...l.value],k=((f=o.fields)==null?void 0:f.filter(b=>d.value.includes(b.name)))||[],h=dn(y,k,{selectedKeys:d.value,resolveKey:b=>zt(b)});l.value=h,i.value=!1,d.value=[]}function g(){i.value=!1,d.value=[]}function m(){let y=[];s.value==="all"?y=o.fields||[]:s.value==="none"?y=[]:y=l.value,y.filter(k=>!k.label).forEach(k=>k.label=k.ua),r("save",y)}return(y,k)=>(e.openBlock(),e.createElementBlock("div",dE,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[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.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",uE,[s.value==="list"?(e.openBlock(),e.createBlock(Pt,{key:0,modelValue:l.value,"onUpdate:modelValue":k[0]||(k[0]=h=>l.value=h),"columns-scheme":u,"form-scheme":c,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(sn,{visible:i.value,"onUpdate:visible":k[1]||(k[1]=h=>i.value=h),selection:d.value,"onUpdate:selection":k[2]||(k[2]=h=>d.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:a,onCancel:g},null,8,["visible","selection","fields"])]))}}),mE={class:"flex flex-col flex-1 min-h-0"},pE={class:"flex justify-between mb-3 gap-2"},gE={class:"p-4 space-y-4 text-sm"},yE={class:"space-y-1"},hE={class:"space-y-1"},bE={class:"flex items-center gap-3"},xE={class:"flex justify-end gap-2 p-4 border-t"},kE=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,y=>{l.value=y||[]}),e.watch(l,y=>{r("update:columns",y)});const s=e.ref(!1),i=e.ref({name:"",color:"#2E86DE"}),d=e.defineAsyncComponent(()=>import("@opengis/core").then(y=>y.VsModal)),u=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],c={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function p(y){y&&a(),s.value=y}function a(){i.value={name:"",color:"#2E86DE"}}function g(){var f,b;const y=(f=i.value.name)==null?void 0:f.trim();if(!y){Ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const k=((b=i.value.color)==null?void 0:b.trim())||"#2E86DE";if(l.value.some(x=>zt(x)===zt({name:y}))){Ce.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:y,color:k}],a(),s.value=!1}function m(){r("save",l.value)}return(y,k)=>(e.openBlock(),e.createElementBlock("div",mE,[e.createElementVNode("div",pE,[e.createElementVNode("button",{onClick:k[0]||(k[0]=h=>s.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:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Pt,{modelValue:l.value,"onUpdate:modelValue":k[1]||(k[1]=h=>l.value=h),"columns-scheme":u,"form-scheme":c,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(d),{teleport:"#modal",visible:s.value,title:"Новий елемент легенди","onUpdate:visible":p},{footer:e.withCtx(()=>[e.createElementVNode("div",xE,[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:k[5]||(k[5]=h=>p(!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:g}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",gE,[e.createElementVNode("div",yE,[k[6]||(k[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[2]||(k[2]=h=>i.value.name=h),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,i.value.name]])]),e.createElementVNode("div",hE,[k[7]||(k[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",bE,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[3]||(k[3]=h=>i.value.color=h),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,i.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[4]||(k[4]=h=>i.value.color=h),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,i.value.color]])])])])]),_:1},8,["visible"])]))}}),wE={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},_E=["onClick"],EE=["aria-checked","value"],CE={key:0},NE=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=i=>r("update:modelValue",i),s=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(i,d)=>(e.openBlock(),e.createElementBlock("div",wE,[d[1]||(d[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(s).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),u=>(e.openBlock(),e.createElementBlock("div",{key:u.value,onClick:c=>l(u.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===u.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===u.value,value:u.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===u.value?(e.openBlock(),e.createElementBlock("span",CE,[...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:"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,EE),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===u.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(u.label),3)],10,_E))),128))],2)]))}}),VE={class:"flex flex-col flex-1 min-h-0"},BE={class:"flex flex-col flex-1 min-h-0"},$E=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,h=>l.value=h||[],{immediate:!0}),e.watch(l,h=>r("update:columns",h));const s=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,h=>{h&&h!==s.value&&(s.value=h)});const i=e.ref(o.html??"");e.watch(()=>o.html,h=>{typeof h=="string"&&h!==i.value&&(i.value=h)},{immediate:!0});const d=e.ref(!1),u=e.ref([]),c=[{key:"name",label:"Name",type:"main"}],p={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name"}};function a(){u.value=s.value==="html"?[]:l.value.map(h=>h.name||h.id),d.value=!0}function g(){var x;const h=[...l.value],f=((x=o.fields)==null?void 0:x.filter(C=>u.value.includes(C.name)).map(C=>{const{type:V,format:_,...w}=C;return{...w,format:_??(C.name==="files"?"file":V??"text")}}))||[],b=dn(h,f,{selectedKeys:u.value,resolveKey:C=>zt(C)});if(l.value=b,s.value==="html"&&f.length){const C=f.map(w=>{const $=w.label??"",L=w.name??w.id??"";return`<dd>${$}</dd>
55
- <dt>{{ ${L} }}</dt>`}).join(`
54
+ ${s??"CartoCSS property (Mapnik)."}`}]}}}))}const Hn=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 s=null,i=null,d=!1;function u(){return new Promise((p,a)=>{if(i)return p(i);if(window.monaco)return i=window.monaco,p(i);const g=y=>{if([...document.styleSheets].some(h=>{var f;return(f=h==null?void 0:h.href)==null?void 0:f.includes(y)}))return;const k=document.createElement("link");k.rel="stylesheet",k.href=y,document.head.appendChild(k)},m=y=>new Promise((k,h)=>{const f=document.createElement("script");f.src=y,f.onload=()=>k(!0),f.onerror=h,document.body.appendChild(f)});g("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),m("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{i=window.monaco,p(i)})}).catch(a)})}function c(){var y,k;if(!l.value||!i)return;s&&s.dispose();const p=o.language||"yaml",a=i.editor.createModel(o.modelValue||"",p),g=p==="cartocss"?{acceptSuggestionOnCommitCharacter:!1,acceptSuggestionOnEnter:"off",snippetSuggestions:"none",tabCompletion:"off",wordBasedSuggestions:"off"}:{};s=i.editor.create(l.value,{model:a,theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1},...g});const m=p;i.editor.setModelLanguage(a,m),m==="css"&&((k=(y=i.languages)==null?void 0:y.css)!=null&&k.cssDefaults)&&i.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),s.onDidChangeModelContent(()=>{d||r("update:modelValue",s.getValue())})}return e.watch(()=>o.modelValue,p=>{if(!s)return;const a=s.getModel();if(!a)return;const g=a.getValue();if(p!==g){const m=s.getPosition(),y=s.getSelection(),k=s.getScrollTop(),h=s.getScrollLeft();d=!0,s.executeEdits("external-model-sync",[{range:a.getFullModelRange(),text:p||"",forceMoveMarkers:!0}]),y&&s.setSelection(y),m&&s.setPosition(m),s.setScrollTop(k),s.setScrollLeft(h),d=!1}}),e.watch(()=>o.language,p=>{s&&i&&i.editor.setModelLanguage(s.getModel(),p||"yaml")}),e.watch(()=>o.theme,p=>{s&&i&&i.editor.setTheme(p||"vs-light")}),e.onMounted(async()=>{await u(),lE(i),c()}),e.onBeforeUnmount(()=>{s&&s.dispose()}),(p,a)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),aE={class:"flex flex-col flex-1 overflow-hidden"},sE={class:"flex justify-end gap-2"},iE=["href"],cE={class:"flex flex-col flex-1 overflow-hidden"},dE={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},uE={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},fE=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleText,u=>{const c=u??"";l.value!==c&&(l.value=c)},{immediate:!0}),e.watch(l,async u=>{var p,a;const c=u??"";o.styleText!==c&&r("update:style-text",c);try{const g=u?Tr(u):null;if((p=g==null?void 0:g.colorAttr)!=null&&p.length&&((a=o.styleYaml)==null?void 0:a.colorAttr)!==g.colorAttr){const m=await s(g.colorAttr);g.colors=m.reduce((k,h,f)=>({...k,[h.id.toString()]:i[f]}),{});const y=Ya(g);y!==l.value&&(l.value=y)}JSON.stringify(g)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",g&&typeof g=="object"?g:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function s(u){return(await fetch(`/api/gis-service/${o.token}/${u}`).then(p=>p.json())).rows}const i=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"];function d(){let u=o.styleYaml;if(!u&&l.value)try{const c=Tr(l.value);u=c&&typeof c=="object"?c:null}catch{Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"});return}r("save",u&&typeof u=="object"?u:null)}return(u,c)=>(e.openBlock(),e.createElementBlock("div",aE,[e.createElementVNode("div",sE,[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,iE),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"},[...c[1]||(c[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",cE,[e.createElementVNode("div",dE,[c[2]||(c[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",uE,[e.createVNode(Hn,{modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=p=>l.value=p),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}}),mE={class:"flex flex-col flex-1 min-h-0"},pE={class:"flex flex-col flex-1 min-h-0"},gE=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,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>{const k=qe(o.token);k&&(k.popup=y),r("update:columns",y)});const s=e.ref("list"),i=e.ref(!1),d=e.ref([]),u=[{key:"name",label:"Назва",type:"main"}],c={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"autocomplete",label:"Класифікатор",data:"admin.cls.name"}};function p(){d.value=l.value.map(y=>y.name||y.id),i.value=!0}function a(){var f;const y=[...l.value],k=((f=o.fields)==null?void 0:f.filter(b=>d.value.includes(b.name)))||[],h=un(y,k,{selectedKeys:d.value,resolveKey:b=>zt(b)});l.value=h,i.value=!1,d.value=[]}function g(){i.value=!1,d.value=[]}function m(){let y=[];s.value==="all"?y=o.fields||[]:s.value==="none"?y=[]:y=l.value,y.filter(k=>!k.label).forEach(k=>k.label=k.ua),r("save",y)}return(y,k)=>(e.openBlock(),e.createElementBlock("div",mE,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[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.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",pE,[s.value==="list"?(e.openBlock(),e.createBlock(Pt,{key:0,modelValue:l.value,"onUpdate:modelValue":k[0]||(k[0]=h=>l.value=h),"columns-scheme":u,"form-scheme":c,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(cn,{visible:i.value,"onUpdate:visible":k[1]||(k[1]=h=>i.value=h),selection:d.value,"onUpdate:selection":k[2]||(k[2]=h=>d.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:a,onCancel:g},null,8,["visible","selection","fields"])]))}}),yE={class:"flex flex-col flex-1 min-h-0"},hE={class:"flex justify-between mb-3 gap-2"},bE={class:"p-4 space-y-4 text-sm"},xE={class:"space-y-1"},kE={class:"space-y-1"},wE={class:"flex items-center gap-3"},_E={class:"flex justify-end gap-2 p-4 border-t"},EE=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,y=>{l.value=y||[]}),e.watch(l,y=>{r("update:columns",y)});const s=e.ref(!1),i=e.ref({name:"",color:"#2E86DE"}),d=e.defineAsyncComponent(()=>import("@opengis/core").then(y=>y.VsModal)),u=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],c={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function p(y){y&&a(),s.value=y}function a(){i.value={name:"",color:"#2E86DE"}}function g(){var f,b;const y=(f=i.value.name)==null?void 0:f.trim();if(!y){Ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const k=((b=i.value.color)==null?void 0:b.trim())||"#2E86DE";if(l.value.some(x=>zt(x)===zt({name:y}))){Ce.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:y,color:k}],a(),s.value=!1}function m(){r("save",l.value)}return(y,k)=>(e.openBlock(),e.createElementBlock("div",yE,[e.createElementVNode("div",hE,[e.createElementVNode("button",{onClick:k[0]||(k[0]=h=>s.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:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Pt,{modelValue:l.value,"onUpdate:modelValue":k[1]||(k[1]=h=>l.value=h),"columns-scheme":u,"form-scheme":c,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(d),{teleport:"#modal",visible:s.value,title:"Новий елемент легенди","onUpdate:visible":p},{footer:e.withCtx(()=>[e.createElementVNode("div",_E,[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:k[5]||(k[5]=h=>p(!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:g}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",bE,[e.createElementVNode("div",xE,[k[6]||(k[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[2]||(k[2]=h=>i.value.name=h),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,i.value.name]])]),e.createElementVNode("div",kE,[k[7]||(k[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",wE,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[3]||(k[3]=h=>i.value.color=h),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,i.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[4]||(k[4]=h=>i.value.color=h),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,i.value.color]])])])])]),_:1},8,["visible"])]))}}),CE={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},NE=["onClick"],VE=["aria-checked","value"],BE={key:0},$E=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=i=>r("update:modelValue",i),s=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(i,d)=>(e.openBlock(),e.createElementBlock("div",CE,[d[1]||(d[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(s).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),u=>(e.openBlock(),e.createElementBlock("div",{key:u.value,onClick:c=>l(u.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===u.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===u.value,value:u.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===u.value?(e.openBlock(),e.createElementBlock("span",BE,[...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:"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,VE),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===u.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(u.label),3)],10,NE))),128))],2)]))}}),SE={class:"flex flex-col flex-1 min-h-0"},vE={class:"flex flex-col flex-1 min-h-0"},LE=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,h=>l.value=h||[],{immediate:!0}),e.watch(l,h=>r("update:columns",h));const s=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,h=>{h&&h!==s.value&&(s.value=h)});const i=e.ref(o.html??"");e.watch(()=>o.html,h=>{typeof h=="string"&&h!==i.value&&(i.value=h)},{immediate:!0});const d=e.ref(!1),u=e.ref([]),c=[{key:"name",label:"Name",type:"main"}],p={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name"}};function a(){u.value=s.value==="html"?[]:l.value.map(h=>h.name||h.id),d.value=!0}function g(){var x;const h=[...l.value],f=((x=o.fields)==null?void 0:x.filter(N=>u.value.includes(N.name)).map(N=>{const{type:V,format:_,...w}=N;return{...w,format:_??(N.name==="files"?"file":V??"text")}}))||[],b=un(h,f,{selectedKeys:u.value,resolveKey:N=>zt(N)});if(l.value=b,s.value==="html"&&f.length){const N=f.map(w=>{const B=w.label??"",v=w.name??w.id??"";return`<dd>${B}</dd>
55
+ <dt>{{ ${v} }}</dt>`}).join(`
56
56
  `),_=(i.value??"").trimEnd();i.value=_?`${_}
57
- ${C}`:C}d.value=!1,u.value=[]}function m(){d.value=!1,u.value=[]}function y(){const h=s.value==="html"?"html":"list",f={card_mode:h};h==="html"?f.html=i.value:h==="list"&&(f.list=l.value),r("save","card",f)}const k=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,f)=>(e.openBlock(),e.createElementBlock("div",VE,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:a,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:y,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(NE,{modelValue:s.value,"onUpdate:modelValue":f[0]||(f[0]=b=>s.value=b),options:k},null,8,["modelValue"]),e.createElementVNode("div",BE,[s.value==="list"?(e.openBlock(),e.createBlock(Pt,{key:0,modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=b=>l.value=b),"columns-scheme":c,"form-scheme":p,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):s.value==="html"?(e.openBlock(),e.createBlock(qn,{key:1,modelValue:i.value,"onUpdate:modelValue":f[2]||(f[2]=b=>i.value=b),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(sn,{visible:d.value,"onUpdate:visible":f[3]||(f[3]=b=>d.value=b),selection:u.value,"onUpdate:selection":f[4]||(f[4]=b=>u.value=b),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:g,onCancel:m},null,8,["visible","selection","fields"])]))}}),SE={class:"flex flex-col flex-1 min-h-0"},vE=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,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>r("update:columns",y),{deep:!0,immediate:!0});const s=e.ref("list"),i=e.ref(!1),d=e.ref([]),u=[{key:"id",label:"Name"},{key:"label",label:"UA"}],c={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"autocomplete"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function p(){d.value=l.value.map(y=>y.name||y.id),i.value=!0}function a(){var f;const y=[...l.value],k=((f=o.fields)==null?void 0:f.filter(b=>d.value.includes(b.name)))||[],h=dn(y,k,{selectedKeys:d.value,resolveKey:b=>zt(b)});l.value=h,i.value=!1,d.value=[]}function g(){i.value=!1,d.value=[]}function m(){let y=[];s.value==="all"?y=o.fields||[]:s.value==="none"?y=[]:y=l.value,r("save",y)}return(y,k)=>(e.openBlock(),e.createElementBlock("div",SE,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[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.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),s.value==="list"?(e.openBlock(),e.createBlock(Pt,{key:0,modelValue:l.value,"onUpdate:modelValue":k[0]||(k[0]=h=>l.value=h),"columns-scheme":u,"form-scheme":c,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(sn,{visible:i.value,"onUpdate:visible":k[1]||(k[1]=h=>i.value=h),selection:d.value,"onUpdate:selection":k[2]||(k[2]=h=>d.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:a,onCancel:g},null,8,["visible","selection","fields"])]))}}),LE=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var y,k,h,f,b;const{map:o,flyTo:r,setZoom:l}=Ke(),s=((k=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:k.$settings)||null,i=t,d=i.id;String(i.id);const u=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,c=qe(d,{source:{type:"vector",tiles:[u],minzoom:0,maxzoom:14},popup:i.layer.popup,card:(h=i.layer)==null?void 0:h.card,layer:{style:(f=i.layer)==null?void 0:f.style}});n({layerHandle:c}),(i.autoCenter??!0)&&r({center:i.layer.center||((b=s==null?void 0:s.map)==null?void 0:b.center)||[30,50],animate:!1});let p=null;function a(){if(!(c!=null&&c.setTiles))return;const x=u.includes("?")?"&":"?",C=`${u}${x}_=${Date.now()}`;c.setTiles([C])}function g(){p&&clearTimeout(p),p=setTimeout(()=>{p=null,m().catch(x=>console.error("Failed to update map layer",x))},300)}async function m(){o.value&&(a(),c.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,g,{deep:!0}),e.watch(()=>{var x;return(x=i.layer)==null?void 0:x.card},x=>{c&&(c.card=x)}),e.onBeforeUnmount(()=>{c.remove()}),(x,C)=>null}}),TE=["title","aria-label","disabled"],AE={key:0,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"},en=e.defineComponent({__name:"MapIconButton",props:{title:{},ariaLabel:{default:""},tooltip:{default:""},active:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:["click"],setup(t){const n=t,o=e.computed(()=>["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100",n.active?"bg-blue-50 text-blue-700 ring-1 ring-blue-300":"bg-white text-gray-700 hover:bg-gray-50"].join(" "));return(r,l)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:e.normalizeClass(o.value),title:t.title,"aria-label":t.ariaLabel||t.title,disabled:t.disabled,onClick:l[0]||(l[0]=e.withModifiers(s=>r.$emit("click",s),["stop"]))},[t.tooltip?(e.openBlock(),e.createElementBlock("span",AE,e.toDisplayString(t.tooltip),1)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],10,TE))}}),Wr=e.defineComponent({__name:"MapZoomInButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1);e.onMounted(async()=>{await(o==null?void 0:o()),r.value=!!n.value});function l(){const s=n.value;s!=null&&s.zoomIn&&s.zoomIn()}return(s,i)=>(e.openBlock(),e.createBlock(en,{title:"Збільшити",tooltip:"Плюс зум",disabled:!r.value,onClick:l},{default:e.withCtx(()=>[e.createVNode(e.unref(ge.ZoomIn),{class:"w-4 h-4"})]),_:1},8,["disabled"]))}}),Yr=e.defineComponent({__name:"MapZoomOutButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1);e.onMounted(async()=>{await(o==null?void 0:o()),r.value=!!n.value});function l(){const s=n.value;s!=null&&s.zoomOut&&s.zoomOut()}return(s,i)=>(e.openBlock(),e.createBlock(en,{title:"Зменшити",tooltip:"Мінус зум",disabled:!r.value,onClick:l},{default:e.withCtx(()=>[e.createVNode(e.unref(ge.ZoomOut),{class:"w-4 h-4"})]),_:1},8,["disabled"]))}}),Gr=e.defineComponent({__name:"MapCompassButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1),l=e.ref(0),s=e.ref(0),i=e.computed(()=>({transform:`scale(${(1+s.value/70).toFixed(5)}) rotateZ(0deg) rotateX(${s.value}deg) rotateZ(${l.value}deg)`}));function d(){var p,a;const c=n.value;c&&(l.value=Number(((p=c.getBearing)==null?void 0:p.call(c))??0),s.value=Number(((a=c.getPitch)==null?void 0:a.call(c))??0))}e.onMounted(async()=>{var p,a,g;await(o==null?void 0:o());const c=n.value;r.value=!!c,d(),(p=c==null?void 0:c.on)==null||p.call(c,"rotate",d),(a=c==null?void 0:c.on)==null||a.call(c,"pitch",d),(g=c==null?void 0:c.on)==null||g.call(c,"load",d)}),e.onBeforeUnmount(()=>{var p,a,g;const c=n.value;(p=c==null?void 0:c.off)==null||p.call(c,"rotate",d),(a=c==null?void 0:c.off)==null||a.call(c,"pitch",d),(g=c==null?void 0:c.off)==null||g.call(c,"load",d)});function u(){const c=n.value;c!=null&&c.easeTo&&c.easeTo({bearing:0,pitch:0})}return(c,p)=>(e.openBlock(),e.createBlock(en,{title:"Повернути орієнтацію",tooltip:"Компас",disabled:!r.value,onClick:u},{default:e.withCtx(()=>[e.createVNode(e.unref(ge.Compass),{class:"w-4 h-4","aria-hidden":"true",style:e.normalizeStyle(i.value)},null,8,["style"])]),_:1},8,["disabled"]))}}),ME={class:"absolute right-3 top-3 z-[450] flex flex-col gap-1 pointer-events-auto"},Zr=e.defineComponent({name:"MapToolbarRight",__name:"MapToolbarRight",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ME,[e.renderSlot(n.$slots,"default")]))}}),FE={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},DE={class:"flex-1 relative overflow-hidden"},PE={class:"absolute top-0 left-0 w-full z-20"},zE={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},IE={class:"flex items-start justify-between gap-4"},RE={class:"flex-1 min-w-0"},jE={class:"flex items-center text-sm text-gray-500 mb-3"},OE={class:"text-gray-900 font-medium truncate max-w-xs"},UE={class:"flex items-center justify-between gap-4"},qE={class:"flex-1 min-w-0"},HE={class:"flex items-center gap-3 mb-1"},WE={class:"text-base font-semibold text-gray-900 truncate"},YE={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},GE={class:"text-xs font-medium text-green-700"},ZE=["title"],KE={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]"},XE={class:"relative w-full h-full"},JE={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},QE={class:"absolute top-4 left-4 z-20"},eC={class:"absolute bottom-4 left-4 z-20"},tC={class:"flex-1 flex flex-col h-full"},nC={class:"px-3 pt-3 pb-2 border-b border-gray-100"},oC={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"},rC=["aria-selected","onClick"],lC={class:"leading-none"},aC={class:"flex flex-col flex-1 overflow-y-hidden p-3"},sC="OpenGIS",Qa=2,Fo=5,iC=1e3,cC=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var ce,pe;const n=t,o=e.toRef(n,"hideServiceKey"),r=He.useRoute(),l=He.useRouter(),{id:s}=r.params,i=e.ref(null),d=e.ref(null),u=e.ref({}),c=e.ref(null),p=((pe=(ce=e.getCurrentInstance())==null?void 0:ce.appContext.config.globalProperties)==null?void 0:pe.$settings)||null;function a(K){typeof document>"u"||(document.title=K?`${K} — Сервіс`:sC)}let g=null;const m=e.ref(!1);function y(){var K;return(K=i.value)==null?void 0:K.ctx}function k(K){typeof window>"u"||window.dispatchEvent(new CustomEvent(so,{detail:K}))}function h(K){var Ae,$e,Je;const Z=($e=(Ae=y())==null?void 0:Ae.map)==null?void 0:$e.value;if(!Z||!K)return[];const ke=(Je=c.value)!=null&&Je.service_id?String(c.value.service_id):null;return(Z.queryRenderedFeatures(K)||[]).filter(Re=>{var me,A,W,J,xe,Ve;const at=((me=Re==null?void 0:Re.properties)==null?void 0:me.id)??(Re==null?void 0:Re.id);if(at==null||!(Re!=null&&Re.source)||ke&&String(Re.source)!==ke)return!1;const et=qe(Re.source)||qe((A=Re.layer)==null?void 0:A.id);if(!et)return!1;const nt=(J=(W=et==null?void 0:et.opts)==null?void 0:W.source)==null?void 0:J.type,P=(Ve=(xe=et==null?void 0:et.opts)==null?void 0:xe.layer)==null?void 0:Ve.type;return nt!=="raster"&&P!=="raster"})}function f(K){const Z=h(K==null?void 0:K.point);k({features:Z,externalItems:[]})}function b(K){if(Array.isArray(K))return b(K[0]);if(typeof K!="string"&&typeof K!="number")return null;const Z=typeof K=="number"?K:Number(K.trim());return Number.isFinite(Z)?Z:null}function x(K,Z){return K.toFixed(Z)}function C(K,Z,ke){const ve=.5*10**-ke;return Math.abs(K-Z)>ve}function V(){var Re,at,et,nt;const K=(at=(Re=y())==null?void 0:Re.map)==null?void 0:at.value;if(!K)return;const Z=b(r.query.z),ke=b(r.query.x),ve=b(r.query.y);if(Z==null||ke==null||ve==null)return;const Ae=(et=K.getCenter)==null?void 0:et.call(K),$e=(nt=K.getZoom)==null?void 0:nt.call(K);(!Ae||C(Ae.lng,ke,Fo)||C(Ae.lat,ve,Fo)||C($e??0,Z,Qa))&&(m.value=!0,K.jumpTo({center:[ke,ve],zoom:Z}),m.value=!1)}function _(){var Ae,$e,Je,Re;if(m.value)return;const K=($e=(Ae=y())==null?void 0:Ae.map)==null?void 0:$e.value;if(!K)return;const Z=(Je=K.getCenter)==null?void 0:Je.call(K),ke=(Re=K.getZoom)==null?void 0:Re.call(K);if(!Z||ke==null)return;const ve={...r.query,z:x(ke,Qa),x:x(Z.lng,Fo),y:x(Z.lat,Fo)};r.query.z===ve.z&&r.query.x===ve.x&&r.query.y===ve.y||l.replace({query:ve})}const w=e.ref(null),$=e.ref(""),L=e.ref([]),Y=e.ref([]),Q=e.ref([]),j=e.ref("list"),te=e.ref(""),de=e.ref([]),be=e.ref(!0);let ae=null;const ne=e.computed(()=>{var K,Z;return((K=c.value)==null?void 0:K.id)??((Z=c.value)==null?void 0:Z.service_id)??null}),v=e.computed(()=>{const K=(p==null?void 0:p.map)||null,Z=(K==null?void 0:K.boundary)??null,ke=(K==null?void 0:K.katottg)??null;return!Z&&!ke?null:{boundary:Z,katottg:ke}}),M=e.computed(()=>{const K=c.value;if(!K)return"";const Z=[];!o.value&&K.service_key&&Z.push(`Сервіс: ${K.service_key}`),K.description&&Z.push(K.description);const ke=K.group_name||K.group_id;return ke&&Z.push(`Група: ${ke}`),typeof K.is_public<"u"&&Z.push(K.is_public?"Публічний":"Не публічний"),typeof K.is_active<"u"&&Z.push(K.is_active?"Активний":"Неактивний"),Z.join(", ")}),B=e.computed(()=>{const K=c.value,Z=(K==null?void 0:K.group_name)||(K==null?void 0:K.group_id);return Z?String(Z).toUpperCase():""}),N=e.computed(()=>{var ke;const K=(ke=r.matched[r.matched.length-1])==null?void 0:ke.path;return(typeof K=="string"&&K?K:r.path).replace(/\/:id\??$/,"")||"/"}),F=e.computed(()=>{var Z;const K=(Z=r.meta)==null?void 0:Z.title;return typeof K=="string"&&K.trim()?K:"Datasets"});function H(){l.push(N.value)}const he=[{key:"style",label:"Стиль",icon:Ga},{key:"popup",label:"Попап",icon:n_},{key:"filter",label:"Фільтр",icon:a_},{key:"legend",label:"Легенда",icon:Z2},{key:"card",label:"Картка",icon:Za},{key:"metadata",label:"Метадані",icon:Ur}],G=he.map(K=>K.key),D=e.ref("style");e.onMounted(async()=>{const K=r.query.tab;K&&G.includes(K)&&(D.value=K),await we(),U()});async function U(){var ve;const K=y();if(!(K!=null&&K.ready))return;await K.ready(),V();const Z=(ve=K.map)==null?void 0:ve.value;if(!Z)return;const ke=()=>_();Z.on("moveend",ke),Z.on("zoomend",ke),Z.on("click",f),g=()=>{Z.off("moveend",ke),Z.off("zoomend",ke),Z.off("click",f)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{V()}),e.watch(D,K=>{r.query.tab!==K&&l.replace({query:{...r.query,tab:K}})}),e.watch(()=>r.query.tab,K=>{K&&G.includes(K)&&D.value!==K&&(D.value=K)}),e.watch(()=>{var K;return(K=c.value)==null?void 0:K.name},K=>a(K),{immediate:!0});function q(K){if(!K)return null;try{return JSON.parse(JSON.stringify(K))}catch(Z){return console.warn("Failed to clone style",Z),null}}function ee(K){if(!K)return null;if(typeof K=="string")try{return Go(Tr(K)||null)}catch(Z){return console.warn("Failed to parse style yaml",Z),null}return Go(q(K))}function z(K,Z){try{return JSON.stringify(K)===JSON.stringify(Z)}catch{return!1}}function oe(){var Z;if(!c.value)return;const K=ee(w.value);z(K,((Z=c.value)==null?void 0:Z.style)??null)||(c.value={...c.value,style:K})}function ye(){ae&&clearTimeout(ae),ae=setTimeout(()=>{ae=null,oe()},iC)}const we=async()=>{try{const K=await fetch(`/api/gis-service/${s}`);if(!K.ok)throw new Error(`${K.status}`);const Z=await K.json();u.value=Z||{},d.value=s;const ke=ee(Z.style);c.value=Z?{...Z,style:q(ke)}:null,w.value=ke,$.value=typeof(Z==null?void 0:Z.style)=="string"?Z.style:ke?Ya(ke):"",Y.value=(Z==null?void 0:Z.popup)||[],j.value=Z.card_mode==="html"?"html":"list",Q.value=Z.card,te.value=Z.html,L.value=(Z==null?void 0:Z.legend)||[],de.value=(Z==null?void 0:Z.filters)||[]}catch(K){console.error("Failed to fetch map info",K)}};e.watch(()=>{var K;return(K=c.value)==null?void 0:K.style},K=>{w.value=ee(K)},{deep:!0}),e.watch(()=>w.value,()=>{ye()},{deep:!0}),e.onBeforeUnmount(()=>{ae&&(clearTimeout(ae),ae=null),g==null||g(),g=null});async function T(K){try{const Z=await fetch(`/api/gis-clear-vtile/${K}`),{message:ke,error:ve,code:Ae}=await Z.json();if(Ae===200)return Ce.notify({type:"success",title:"Успіх",message:ke});Ce.notify({type:"error",title:"Помилка",message:ve})}catch(Z){Ce.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(Z)}}async function X(K,Z){await fe({[K]:Z},K)}async function fe(K,Z){if(c.value={...c.value||{},...K},typeof K.html<"u"&&(u.value={...u.value||{},html:K.html}),!!ne.value)try{if(!(await fetch(`/api/gis-service/${ne.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(K)})).ok)throw new Error("Save failed");Ce.notify({type:"success",title:"Успіх",message:`${Z} saved`}),await we()}catch(ke){Ce.notify({type:"error",title:"Помилка",message:`Failed to save ${Z}`}),console.error(ke)}}async function ie(K,Z){if(K!=="card"){await X(K,Z);return}const ke=(Z==null?void 0:Z.card_mode)==="html"?"html":"list",ve=ke==="html"&&typeof(Z==null?void 0:Z.html)=="string"?Z.html:"",Ae=(ke==="html"?[]:null)||(Array.isArray(Z==null?void 0:Z.list)?Z.list:[]);Q.value=Ae,j.value=ke,te.value=ve;const $e={card_mode:ke};ke==="html"&&($e.html=ve),ke==="list"&&($e.card=Ae),await fe($e,"card")}return(K,Z)=>{var ke,ve,Ae;return e.openBlock(),e.createElementBlock("div",FE,[e.createElementVNode("div",DE,[e.createElementVNode("div",PE,[e.createElementVNode("div",zE,[e.createElementVNode("div",IE,[e.createElementVNode("div",RE,[e.createElementVNode("div",jE,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:H},e.toDisplayString(F.value),1),Z[11]||(Z[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",OE,e.toDisplayString(((ke=c.value)==null?void 0:ke.name)||"Dataset"),1)]),e.createElementVNode("div",UE,[e.createElementVNode("div",qE,[e.createElementVNode("div",HE,[e.createElementVNode("h1",WE,e.toDisplayString(((ve=c.value)==null?void 0:ve.name)||"Dataset"),1),B.value?(e.openBlock(),e.createElementBlock("div",YE,[e.createElementVNode("span",GE,e.toDisplayString(B.value),1)])):e.createCommentVNode("",!0)]),M.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:M.value},e.toDisplayString(M.value),9,ZE)):e.createCommentVNode("",!0)])])]),ne.value?(e.openBlock(),e.createBlock(Hr,{key:0,class:"flex-shrink-0","entity-id":ne.value,"entity-info":{name:(Ae=c.value)==null?void 0:Ae.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":T,onSaved:we},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",KE,[e.createElementVNode("div",XE,[e.createVNode(to,{ref_key:"mapViewRef",ref:i},{default:e.withCtx(()=>{var $e,Je,Re,at,et,nt,P;return[($e=c.value)!=null&&$e.service_id?(e.openBlock(),e.createBlock(LE,{key:0,id:(Je=c.value)==null?void 0:Je.service_id,layer:c.value,"style-spec":((Re=c.value)==null?void 0:Re.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),ne.value?(e.openBlock(),e.createBlock(Yl,{key:1,"layer-id":ne.value,boundary:((at=c.value)==null?void 0:at.boundary)||((et=v.value)==null?void 0:et.boundary)||null,katottg:((nt=c.value)==null?void 0:nt.katottg)||((P=v.value)==null?void 0:P.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",JE,[ne.value?(e.openBlock(),e.createBlock(sr,{key:0,"layer-id":ne.value,filters:de.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),Z[12]||(Z[12]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",QE,[e.createVNode(rn)]),e.createVNode(Zr,null,{default:e.withCtx(()=>[e.createVNode(Wr),e.createVNode(Yr),e.createVNode(Gr),e.createVNode(Yt),u.value.center?(e.openBlock(),e.createBlock(Yt,{key:0,targetCenter:u.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),_:1}),e.createElementVNode("div",eC,[e.createVNode(ar,{items:L.value||null},null,8,["items"])]),e.createVNode(Sl),e.createVNode(lr,{html:u.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(Or,{open:be.value,onToggle:Z[0]||(Z[0]=$e=>be.value=!be.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",be.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",tC,[e.createElementVNode("div",nC,[e.createElementVNode("div",oC,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(he,$e=>e.createElementVNode("button",{key:$e.key,type:"button",role:"tab","aria-selected":D.value===$e.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",D.value===$e.key?"bg-white shadow-sm text-gray-700":""]),onClick:Je=>D.value=$e.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent($e.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",lC,e.toDisplayString($e.label),1)],10,rC)),64))])]),e.createElementVNode("div",aC,[D.value==="style"?(e.openBlock(),e.createBlock(cE,{key:0,token:ne.value,"style-text":$.value,"style-yaml":w.value,"onUpdate:styleYaml":Z[1]||(Z[1]=$e=>w.value=$e),"onUpdate:styleText":Z[2]||(Z[2]=$e=>$.value=$e),onSave:Z[3]||(Z[3]=$e=>X("style",$e))},null,8,["token","style-text","style-yaml"])):D.value==="legend"?(e.openBlock(),e.createBlock(kE,{key:1,token:ne.value,columns:L.value,"onUpdate:columns":Z[4]||(Z[4]=$e=>L.value=$e),onSave:Z[5]||(Z[5]=$e=>X("legend",$e))},null,8,["token","columns"])):D.value==="popup"?(e.openBlock(),e.createBlock(fE,{key:2,token:ne.value,columns:Y.value,fields:u.value.fields,"onUpdate:columns":Z[6]||(Z[6]=$e=>Y.value=$e),onSave:Z[7]||(Z[7]=$e=>X("popup",$e))},null,8,["token","columns","fields"])):D.value==="card"?(e.openBlock(),e.createBlock($E,{key:3,token:ne.value,columns:Q.value,fields:u.value.fields,"view-mode":j.value,html:te.value,"onUpdate:columns":Z[8]||(Z[8]=$e=>Q.value=$e),onSave:ie},null,8,["token","columns","fields","view-mode","html"])):D.value==="filter"?(e.openBlock(),e.createBlock(vE,{key:4,token:ne.value,fields:u.value.fields,columns:de.value,"onUpdate:columns":Z[9]||(Z[9]=$e=>de.value=$e),onSave:Z[10]||(Z[10]=$e=>X("filters",$e))},null,8,["token","fields","columns"])):D.value==="metadata"?(e.openBlock(),e.createBlock(qr,{key:5,data:c.value,"entity-id":String(e.unref(s)),"entity-type":"service",onSaved:we},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-3ee04cf6"]])},Symbol.toStringTag,{value:"Module"})),dC={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},uC={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"},fC={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},mC={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},pC={class:"p-3 border-b border-gray-200"},gC={class:"flex flex-col sm:flex-row gap-2"},yC={class:"entity-table-root"},hC={class:"gap-2 inline-flex"},bC=["onClick"],xC={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"},kC={class:"text-sm text-gray-500"},wC={class:"font-medium text-gray-700"},_C={class:"font-medium text-gray-700"},EC={class:"font-medium text-gray-700"},CC={class:"flex items-center justify-end gap-3"},NC=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"RastersTablePage",props:{entityKey:{default:"rasters"},entityBasePath:{default:"/gis.rasters"},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=He.useRoute(),r=He.useRouter(),l=t,s=e.computed(()=>{var v;return String(((v=o.meta)==null?void 0:v.title)||"Растри")}),i=e.computed(()=>{var v;return String(((v=o.meta)==null?void 0:v.description)||"")}),d=e.computed(()=>`Пошук ${String(s.value).trim()}...`),u=e.computed(()=>l.entityKey||"rasters"),c=e.computed(()=>l.entityBasePath||"/gis.rasters"),p=e.ref([]),a=e.ref(!0),g=e.ref([]),m=e.ref([]),y=e.ref({}),k=e.ref([]),h=e.ref(String(o.query.search??"")),f=e.ref(Math.max(1,Number(o.query.page)||1)),b=e.ref(15),x=e.ref(0),C=e.computed(()=>x.value>0),V=e.computed(()=>x.value?(f.value-1)*b.value+1:0),_=e.computed(()=>x.value?Math.min(f.value*b.value,x.value):0);function w(v){const M=new URLSearchParams;return Object.entries(v).forEach(([B,N])=>{if(!(N==null||N==="")){if(Array.isArray(N)){N.forEach(F=>{F!=null&&F!==""&&M.append(B,String(F))});return}M.append(B,String(N))}}),M.toString()}function $(){return`${c.value}/new`}function L(v){return`${c.value}/${v}/edit`}async function Y(){try{a.value=!0;const v=`/api/data/gis.${u.value}.table`,M=w({...y.value,page:f.value,limit:b.value}),B=await fetch(M?`${v}?${M}`:v);if(!B.ok)throw new Error(`Rows fetch failed: ${B.status}`);const N=await B.json();p.value=N.rows||[],x.value=Number(N.filtered??N.total??N.count??p.value.length)||0,g.value=l.columnsConfig.length?l.columnsConfig:N.columns||[],m.value=N.filters||[],k.value=N.actions||[],g.value.length&&!g.value[0].link?g.value[0].link=`${c.value}/{id}`:g.value.length&&(g.value[0].link=`${c.value}/{id}`)}catch{p.value=[],x.value=0}finally{a.value=!1}}function Q(v){y.value=v,f.value=1,ne(),Y()}async function j(v,M,B){const N=await fetch(`/api/form/gis.${u.value}.table/${v.id}`);if(!N.ok)throw new Error(`Form fetch failed: ${N.status}`);const H=(await N.json()).token,he=await fetch(`/api/table/${H}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({[M]:B})});if(!he.ok)throw Ce.notify({type:"error",title:"Помилка збереження",message:`Поле "${M}" не оновлено`}),new Error(`Save failed: ${he.status}`);Ce.notify({title:"Збережено",message:`Поле "${M}" оновлено`})}function te(v,M){y.value={...y.value,[v]:M},f.value=1,ne(),Y()}function de(v){te((v==null?void 0:v.name)||"search",(v==null?void 0:v.value)??h.value)}function be(v){h.value="",te(v||"search",void 0)}function ae(v){!v||v===f.value||(f.value=v,ne(),Y())}function ne(){const v={...o.query,page:String(f.value),...h.value?{search:h.value}:{}};h.value||delete v.search,delete v.view,r.replace({query:v})}return e.onMounted(()=>{Y(),document.title=s.value}),e.watch(()=>o.name,()=>{f.value=1,h.value="",Y(),document.title=s.value}),e.watch(()=>o.query,v=>{const M=Math.max(1,Number(v.page)||1),B=String(v.search??""),N=M!==f.value,F=B!==h.value;!N&&!F||(f.value=M,h.value=B,y.value={...y.value,search:B||void 0},Y())}),(v,M)=>(e.openBlock(),e.createElementBlock("div",dC,[e.createVNode(an,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),actions:e.withCtx(()=>[e.createElementVNode("a",uC,[e.createVNode(e.unref(ge.RefreshCw),{size:16}),M[2]||(M[2]=e.createTextVNode(" Оновити растри ",-1))]),e.createElementVNode("a",{onClick:M[0]||(M[0]=B=>e.unref(r).push($())),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(ge.Plus),{size:16}),M[3]||(M[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[i.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",fC,[e.createElementVNode("div",mC,[e.createElementVNode("div",pC,[e.createElementVNode("div",gC,[e.createVNode(e.unref(Qn.FilterField),{modelValue:h.value,"onUpdate:modelValue":M[1]||(M[1]=B=>h.value=B),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:de,onClear:be,placeholder:d.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(Qn.Filter),{schema:m.value,value:y.value,onChange:Q,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",yC,[e.createVNode(e.unref(n),{rows:p.value,columns:g.value,loading:a.value,router:e.unref(r),selectable:!1,onCellUpdate:j,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:B})=>[e.createElementVNode("div",hC,[e.createElementVNode("button",{onClick:N=>e.unref(r).push(L(B.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(eo)],8,bC)])]),_:1},8,["rows","columns","loading","router"])]),C.value?(e.openBlock(),e.createElementBlock("div",xC,[e.createElementVNode("div",kC,[M[4]||(M[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",wC,e.toDisplayString(V.value),1),M[5]||(M[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",_C,e.toDisplayString(_.value),1),M[6]||(M[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",EC,e.toDisplayString(x.value),1)]),e.createElementVNode("div",CC,[e.createVNode(e.unref(Ce.VsPagination),{total:x.value,page:f.value,"page-size":b.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":ae,onPageChange:ae},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-63309b89"]])},Symbol.toStringTag,{value:"Module"})),VC={class:"flex-1 overflow-y-auto p-4 sm:p-6"},BC={class:"space-y-3"},$C={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},SC={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},vC={class:"text-xs text-gray-500 mb-1"},LC={key:0,class:"text-base text-md font-semibold text-gray-900"},TC={key:1,class:"text-base text-md font-semibold text-gray-900"},AC={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},MC={class:"space-y-2"},FC={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},DC={class:"text-sm font-semibold text-gray-900"},PC={class:"text-xs text-gray-600 mt-1"},zC={class:"grid grid-cols-2 gap-3"},IC={class:"text-xs text-gray-500 mb-1"},RC={class:"text-sm font-semibold text-gray-900"},jC={class:"bg-gray-50 p-4 rounded-lg"},OC={class:"grid grid-cols-2 gap-4"},UC={class:"text-xs text-gray-500 mb-1"},qC={class:"text-sm font-semibold text-gray-900"},HC=e.defineComponent({directives:{tooltip:Ce.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",VC,[e.createElementVNode("div",BC,[e.createElementVNode("div",$C,[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",SC,[(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",vC,e.toDisplayString(l.label),1),l.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",LC,[e.createTextVNode(e.toDisplayString(l.value),1)])),[[r,l.tooltip]]):(e.openBlock(),e.createElementBlock("p",TC,e.toDisplayString(l.value),1))]))),128))])]),e.createElementVNode("div",AC,[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",MC,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",FC,[e.createElementVNode("p",DC,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",PC,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",zC,[(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",IC,e.toDisplayString(l.label),1),e.createElementVNode("p",RC,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",jC,[e.createElementVNode("div",OC,[(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",UC,e.toDisplayString(l.label),1),e.createElementVNode("p",qC,e.toDisplayString(l.value),1)]))),128))])])])])])])}}}),WC={class:"flex-1 overflow-y-auto space-y-3 pr-1"},YC={class:"font-medium text-sm text-gray-800"},GC={class:"text-xs text-gray-500"},ZC=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",WC,[(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",YC,e.toDisplayString(r.name),1),e.createElementVNode("p",GC,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))]))}}),KC={},XC={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 JC(t,n){return e.openBlock(),e.createElementBlock("svg",XC,[...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 QC=Fe(KC,[["render",JC]]),eN={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},tN={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},nN={class:"flex items-center gap-2"},oN={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},rN={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},lN=["checked"],aN=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,s=qe(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:i}=Ke(),d=e.ref(1);e.watch(()=>n.tileUrl,a=>{if(!a){s.setVisible(!1);return}s.setVisible(!0),s.setTiles([a])},{immediate:!0}),e.watch(()=>d.value,a=>{s.setOpacity(a)},{immediate:!0});let u=null,c=!1;e.watch(()=>n.extent,a=>{if(!a||a.length!==4)return;const g=a.join(",");if(g!==u){if(u=g,!c){c=!0;return}i==null||i([[a[0],a[1]],[a[2],a[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const p=e.computed(()=>`${Math.round(d.value*100)}%`);return(a,g)=>(e.openBlock(),e.createElementBlock("div",eN,[e.createElementVNode("div",tN,[e.createElementVNode("div",nN,[g[2]||(g[2]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":g[0]||(g[0]=m=>d.value=m),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,d.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(p.value),1)])]),e.createElementVNode("div",oN,[e.createElementVNode("label",rN,[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:g[1]||(g[1]=m=>a.$emit("toggle-extent",m.target.checked))},null,40,lN),g[3]||(g[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),Do=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{},lineColor:{},lineWidth:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,l=e.computed(()=>{const{extent:d}=n;if(!d||d.length!==4)return null;const[u,c,p,a]=d;return[u,c,p,a].some(g=>typeof g!="number"||Number.isNaN(g))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[u,c],[p,c],[p,a],[u,a],[u,c]]]}}]}}),s=Ke(),i=qe(o,{sourceId:r,source:{type:"geojson",data:l.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(()=>l.value,d=>{var c;if(!d){i.setVisible(!1),i.setData({type:"FeatureCollection",features:[]});return}i.setVisible(!0),i.setData(d);const u=(c=s.map)==null?void 0:c.value;u!=null&&u.moveLayer&&u.getLayer(o)&&u.moveLayer(o)},{immediate:!0}),(d,u)=>e.createCommentVNode("",!0)}}),sN={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},iN={class:"flex-1 relative overflow-hidden"},cN={class:"absolute top-0 left-0 w-full z-20"},dN={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},uN={class:"flex items-start justify-between gap-4"},fN={class:"flex-1 min-w-0"},mN={class:"flex items-center text-sm text-gray-500 mb-3"},pN={class:"text-gray-900 font-medium truncate max-w-xs"},gN={class:"flex items-center justify-between gap-4"},yN={class:"flex-1 min-w-0"},hN={class:"flex items-center gap-3 mb-1"},bN={class:"text-base font-semibold text-gray-900 truncate"},xN=["title"],kN={class:"flex items-center gap-4 min-w-0"},wN={class:"flex-1 min-w-0"},_N=["title"],EN={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]"},CN={class:"relative w-full h-full"},NN={class:"absolute top-4 left-4 z-20"},VN={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"},BN={class:"flex-1 flex flex-col h-full"},$N={class:"px-3 pt-3 pb-2 border-b border-gray-100"},SN={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"},vN=["aria-selected","onClick"],LN={class:"leading-none"},TN={class:"flex flex-col flex-1 overflow-y-hidden p-3"},AN={key:0,class:"mb-3 text-xs text-slate-500"},MN={key:1,class:"mb-3 text-xs text-rose-600"},FN="OpenGIS",es=2,Po=5,DN=5,PN=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=He.useRouter(),r=He.useRoute(),l=e.ref(null),s=e.computed(()=>{var A;const P=(A=r.matched[r.matched.length-1])==null?void 0:A.path;return(typeof P=="string"&&P?P:r.path).replace(/\/:id\??$/,"")||"/"}),i=e.computed(()=>{var me;const P=(me=r.meta)==null?void 0:me.title;return typeof P=="string"&&P.trim()?P:"Растри"});function d(){o.push(s.value)}const u=e.computed(()=>{var me;const P=(me=r.params)==null?void 0:me.id;return typeof P=="string"?P:void 0}),c=e.ref(null),p=e.ref(!1),a=e.ref(!1),g=e.ref(null),m=e.ref(!0),y=e.ref(!1),k=e.ref(null);let h=null,f=null;const b=e.ref(!1);let x=null,C=!1;function V(P){if(Array.isArray(P))return V(P[0]);if(typeof P!="string"&&typeof P!="number")return null;const me=typeof P=="number"?P:Number(P.trim());return Number.isFinite(me)?me:null}function _(P,me){return P.toFixed(me)}function w(P,me,A){const W=.5*10**-A;return Math.abs(P-me)>W}function $(){var P;return(P=l.value)==null?void 0:P.ctx}function L(){var I,se,re,Ne;const P=(se=(I=$())==null?void 0:I.map)==null?void 0:se.value;if(!P)return;const me=V(r.query.z),A=V(r.query.x),W=V(r.query.y);if(me==null||A==null||W==null)return;const J=(re=P.getCenter)==null?void 0:re.call(P),xe=(Ne=P.getZoom)==null?void 0:Ne.call(P);(!J||w(J.lng,A,Po)||w(J.lat,W,Po)||w(xe??0,me,es))&&(b.value=!0,P.jumpTo({center:[A,W],zoom:me}),b.value=!1)}function Y(){var J,xe,Ve,I;if(b.value)return;const P=(xe=(J=$())==null?void 0:J.map)==null?void 0:xe.value;if(!P)return;const me=(Ve=P.getCenter)==null?void 0:Ve.call(P),A=(I=P.getZoom)==null?void 0:I.call(P);if(!me||A==null)return;const W={...r.query,z:_(A,es),x:_(me.lng,Po),y:_(me.lat,Po)};r.query.z===W.z&&r.query.x===W.x&&r.query.y===W.y||o.replace({query:W})}function Q(){var me;if(typeof document>"u")return;const P=(me=ee.value)==null?void 0:me.name;document.title=P?`${P} — Растер`:FN}function j(P){return Number(P.toFixed(DN))}function te(P,me){const[A,W]=P,[J,xe]=me;return[j(Math.min(A,J)),j(Math.min(W,xe)),j(Math.max(A,J)),j(Math.max(W,xe))]}function de(P){const[me,A,W,J]=P;return{type:"Polygon",coordinates:[[[me,A],[W,A],[W,J],[me,J],[me,A]]]}}function be(P){var W,J,xe;const me=(J=(W=$())==null?void 0:W.map)==null?void 0:J.value,A=(xe=me==null?void 0:me.getCanvas)==null?void 0:xe.call(me);A!=null&&A.style&&(A.style.cursor=P)}async function ae(P,me){if(!(!u.value||!c.value))try{const A=de(P),W=await fetch(`/api/gis-metadata/raster/${encodeURIComponent(u.value)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:A})});if(!W.ok)throw new Error(`Failed to save raster metadata geom: ${W.status}`);Ce.notify({type:"success",title:"Extent збережено",message:"Нові межі успішно збережено."}),await pe()}catch(A){console.error("Failed to save raster extent",A),c.value&&(c.value={...c.value,extent:me?[...me]:void 0}),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Extent"})}}function ne(P){var A,W,J;const me=(W=(A=$())==null?void 0:A.map)==null?void 0:W.value;if((J=me==null?void 0:me.dragPan)!=null&&J.enable&&me.dragPan.enable(),(P==null?void 0:P.length)===4&&c.value){const xe=Array.isArray(c.value.extent)?[...c.value.extent]:null;c.value={...c.value,extent:[...P]},ae(P,xe)}x=null,C=!1,k.value=null,y.value=!1,be("")}function v(){ne(null)}function M(){var xe,Ve;const P=(Ve=(xe=$())==null?void 0:xe.map)==null?void 0:Ve.value;if(!P)return;const me=I=>{var re,Ne,Se;if(!y.value||((re=I==null?void 0:I.originalEvent)==null?void 0:re.button)!=null&&I.originalEvent.button!==0)return;const se=I==null?void 0:I.lngLat;se&&(x=[se.lng,se.lat],C=!0,k.value=[se.lng,se.lat,se.lng,se.lat],(Se=(Ne=P.dragPan)==null?void 0:Ne.disable)==null||Se.call(Ne))},A=I=>{if(!y.value||!C||!x)return;const se=I==null?void 0:I.lngLat;se&&(k.value=te(x,[se.lng,se.lat]))},W=I=>{if(!y.value||!C||!x)return;const se=I==null?void 0:I.lngLat;if(!se){v();return}const re=te(x,[se.lng,se.lat]),[Ne,Se,Oe,Qe]=re;if(!(Math.abs(Oe-Ne)>0&&Math.abs(Qe-Se)>0)){Ce.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),v();return}ne(re)},J=I=>{y.value&&I.key==="Escape"&&(I.preventDefault(),v())};P.on("mousedown",me),P.on("mousemove",A),P.on("mouseup",W),window.addEventListener("keydown",J),f=()=>{P.off("mousedown",me),P.off("mousemove",A),P.off("mouseup",W),window.removeEventListener("keydown",J)}}async function B(){var A;if(y.value)return;const P=$();!(P!=null&&P.ready)||(await P.ready(),!((A=P.map)==null?void 0:A.value))||(f||M(),y.value=!0,C=!1,x=null,k.value=null,be("crosshair"),Ce.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}const N=e.computed(()=>{var me;const P=(me=c.value)==null?void 0:me.url;return P?/^https?:\/\//i.test(P)||typeof window>"u"||typeof location>"u"?P:`${location.origin}${P}`:""}),F=e.computed(()=>{var P;return((P=c.value)==null?void 0:P.extent)??null}),H=e.computed(()=>u.value?`raster-${u.value}`:void 0),he=e.computed(()=>u.value?`raster-extent-${u.value}`:"raster-extent"),G=e.computed(()=>u.value?`raster-extent-draft-${u.value}`:"raster-extent-draft"),D=e.computed(()=>{const P=H.value??"raster",me=F.value&&F.value.length===4?F.value.join(","):"no-extent";return`${P}-${me}`}),U=e.computed(()=>!!N.value),q=e.computed(()=>{const P=F.value;if(!P||P.length!==4)return null;const[me,A,W,J]=P;return[me,A,W,J].some(xe=>typeof xe!="number"||Number.isNaN(xe))?null:[(me+W)/2,(A+J)/2]}),ee=e.computed(()=>{var xe,Ve;const P=c.value,me=P==null?void 0:P.extent,W=u.value??"—",J=[P!=null&&P.extension?`Формат ${String(P.extension).toUpperCase()}`:null,(P==null?void 0:P.resolution)||null].filter(Boolean).join(", ");return{id:W,name:(P==null?void 0:P.name)||((Ve=(xe=P==null?void 0:P.files)==null?void 0:xe[0])==null?void 0:Ve.name),description:(P==null?void 0:P.description)||J||"Попередній перегляд растрового шару.",coverage:me&&me.length===4?`${nt(me[0])}, ${nt(me[1])} → ${nt(me[2])}, ${nt(me[3])}`:"Покриття уточнюється",crs:P!=null&&P.srid?`EPSG:${P.srid}`:"EPSG:4326",source:P!=null&&P.proj4?P.proj4:"Джерело: Mapnik",updatedAt:P!=null&&P.cache?"Дані кешовано":"Нові дані"}}),z=e.computed(()=>{const P=c.value;return P?[P.source_path,P.srid?`SRID: ${P.srid}`:null,P.is_public?"Публічна":"Не публічна",P.is_active?"Активна":"Неактивна",P.cache?"Кешовано":null].filter(me=>me).join(", "):""}),oe=[{key:"info",label:"Інформація",icon:QC},{key:"files",label:"Файли",icon:eo},{key:"metadata",label:"Метадані",icon:Ur}],ye=oe.map(P=>P.key),we=e.ref(ye.includes(r.query.tab)?r.query.tab:"info"),T=e.ref(!0);e.watch(()=>r.query.tab,P=>{P&&ye.includes(P)&&we.value!==P&&(we.value=P)}),e.watch(we,P=>{r.query.tab!==P&&o.replace({query:{...r.query,tab:P}})});const X=e.computed(()=>Z(c.value)),fe=e.computed(()=>ve(c.value));e.watch(()=>c.value,()=>{Q()},{immediate:!0});async function ie(){var W;const P=$();if(!(P!=null&&P.ready))return;await P.ready(),L();const me=(W=P.map)==null?void 0:W.value;if(!me)return;const A=()=>Y();me.on("moveend",A),me.on("zoomend",A),h=()=>{me.off("moveend",A),me.off("zoomend",A)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{L()}),e.onMounted(()=>{ie()}),e.onBeforeUnmount(()=>{h==null||h(),h=null,f==null||f(),f=null,be("")}),e.watch(u,()=>{pe()},{immediate:!0});async function ce(P){var me;pe(),((me=c.value)==null?void 0:me.srid)!==P.srid&&(Ce.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await K(`/api/gis-xml/${encodeURIComponent(u.value)}`),Ce.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function pe(){const P=u.value;if(!P){c.value=null,g.value=null;return}p.value=!0,g.value=null;try{const me=await fetch(`/api/gis-raster/${encodeURIComponent(P)}`);if(!me.ok)throw new Error(`HTTP ${me.status}`);const A=await me.json();A.xml&&(a.value=!0),c.value=A,A.xml||(Ce.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await K(`/api/gis-xml/${encodeURIComponent(P)}`),Ce.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(P)}?nocache=1`),a.value=!0)}catch(me){console.error("Failed to load raster info",me),c.value=null,g.value=me instanceof Error?me.message:String(me)}finally{p.value=!1}}function K(P){return new Promise((me,A)=>{const W=new EventSource(P),J=[];W.onmessage=xe=>{J.push(xe.data),console.log("Received:",xe.data)},W.addEventListener("end",()=>{W.close(),me(J)}),W.onerror=xe=>{W.close(),me(xe)}})}function Z(P){var me;return(me=P==null?void 0:P.files)!=null&&me.length?P.files.map(A=>({name:A.name,resolution:ke(A.name,P),size:A.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function ke(P,me){const A=P.toLowerCase();return A.endsWith(".tfw")?"Georeference":A.endsWith(".xml")?"Опис":A.endsWith(".tif")||A.endsWith(".tiff")?me!=null&&me.resolution?me.resolution:"Растер":(me==null?void 0:me.resolution)??"Файл"}function ve(P){return P?{baseParams:$e(P),spatial:{crs:{code:P.srid?`EPSG:${P.srid}`:"EPSG:4326",description:P.proj4||"WGS 84 — World Geodetic System 1984"},bounds:Je(P.extent),resolution:Re(P)},statistics:at(P),technical:et(P)}:null}function Ae(P){return P!=null&&P.length?P.map(A=>{var J;if(!A)return"";const W=A.trim().split(/\s+/)[0];return((J=W==null?void 0:W[0])==null?void 0:J.toUpperCase())||""}).filter(Boolean).join(""):""}function $e(P){var xe,Ve;const me=P.bands_count??((xe=P.bands)==null?void 0:xe.length)??"—",A=Ae(P.bands),W=(P.bands??[]).map(I=>I.trim()).filter(I=>I.length>0),J=W.length?W.join(", "):void 0;return[{label:"Розмір растру, px",value:P.width&&P.height?`${P.width}×${P.height}`:"—"},{label:"Формат файлу",value:((Ve=P.extension)==null?void 0:Ve.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:P.total_size?`${P.total_size}`:"—"},{label:"Кількість каналів",value:typeof me=="number"?`${me}${A?` (${A})`:""}`:`${me}${A?` (${A})`:""}`,tooltip:J},{label:"Глибина кольору",value:P.color_depth?`${P.color_depth} біт/канал`:"—"},{label:"Стиснення",value:P.compression||"—"}]}function Je(P){return!P||P.length!==4?[]:[{label:"Північ",value:nt(P[3],"N")},{label:"Схід",value:nt(P[2],"E")},{label:"Південь",value:nt(P[1],"S")},{label:"Захід",value:nt(P[0],"W")}]}function Re(P){const me=[{label:"Роздільна здатність",value:P.resolution||"—"}];return P.width&&P.height&&me.push({label:"Розмір пікселя",value:`${P.width} × ${P.height} px`}),me}function at(P){var me;return(me=P.bands)!=null&&me.length?P.bands.map((A,W)=>{const J=n[W%n.length];return{label:`Канал ${W+1}${A?` (${A})`:""}`,cardClass:J.cardClass,titleClass:J.titleClass,metrics:[{label:"Назва",value:A||`Канал ${W+1}`},{label:"Глибина",value:P.color_depth?`${P.color_depth} біт`:"—"},{label:"Статус",value:P.cache?"Кешовано":"Готово"}]}}):[]}function et(P){var me;return[{label:"Тип даних",value:P.color_depth?`Unsigned Integer ${P.color_depth}-bit`:"—"},{label:"Компресія",value:P.compression||"—"},{label:"Кольорова інтерпретація",value:((me=P.bands)==null?void 0:me.join(", "))||"—"},{label:"SRID",value:P.srid?`EPSG:${P.srid}`:"—"},{label:"Проекція (proj4)",value:P.proj4||"—"},{label:"URL тайла",value:P.url||"—"}]}function nt(P,me){if(P==null||Number.isNaN(P))return"—";const A=`${P.toFixed(5)}°`;return me?`${A} ${me}`:A}return(P,me)=>(e.openBlock(),e.createElementBlock("div",sN,[e.createElementVNode("div",iN,[e.createElementVNode("div",cN,[e.createElementVNode("div",dN,[e.createElementVNode("div",uN,[e.createElementVNode("div",fN,[e.createElementVNode("div",mN,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:d},e.toDisplayString(i.value),1),me[2]||(me[2]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",pN,e.toDisplayString(ee.value.name||"Растер"),1)]),e.createElementVNode("div",gN,[e.createElementVNode("div",yN,[e.createElementVNode("div",hN,[e.createElementVNode("h1",bN,e.toDisplayString(ee.value.name||"Растер"),1)]),z.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:z.value},e.toDisplayString(z.value),9,xN)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",kN,[e.createElementVNode("div",wN,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:ee.value.description},e.toDisplayString(ee.value.description),9,_N)]),e.createVNode(Hr,{"entity-id":u.value||"","entity-info":{name:ee.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:ce},null,8,["entity-id","entity-info"])])])])]),e.createElementVNode("div",EN,[e.createElementVNode("div",CN,[e.createVNode(to,{ref_key:"mapViewRef",ref:l},{default:e.withCtx(()=>[U.value&&a.value?(e.openBlock(),e.createBlock(aN,{key:D.value,"tile-url":N.value,extent:F.value,"layer-id":H.value,"show-raster-extent":m.value,onToggleExtent:me[0]||(me[0]=A=>m.value=A)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(Do,{extent:m.value?F.value:null,"layer-id":he.value},null,8,["extent","layer-id"]),e.createVNode(Do,{extent:k.value,"layer-id":G.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createElementVNode("div",NN,[e.createVNode(rn)]),y.value?(e.openBlock(),e.createElementBlock("div",VN," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),e.createVNode(Zr,null,{default:e.withCtx(()=>[e.createVNode(Wr),e.createVNode(Yr),e.createVNode(Gr),e.createVNode(Yt),q.value?(e.openBlock(),e.createBlock(Yt,{key:0,targetCenter:q.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),_:1})]),_:1},512)])]),e.createVNode(Or,{open:T.value,onToggle:me[1]||(me[1]=A=>T.value=!T.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",T.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",BN,[e.createElementVNode("div",$N,[e.createElementVNode("div",SN,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(oe,A=>e.createElementVNode("button",{key:A.key,type:"button",role:"tab","aria-selected":we.value===A.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",we.value===A.key?"bg-white shadow-sm text-gray-700":""]),onClick:W=>we.value=A.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(A.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",LN,e.toDisplayString(A.label),1)],10,vN)),64))])]),e.createElementVNode("div",TN,[p.value?(e.openBlock(),e.createElementBlock("div",AN," Завантаження метаданих растру… ")):g.value?(e.openBlock(),e.createElementBlock("div",MN," Не вдалося отримати дані: "+e.toDisplayString(g.value),1)):e.createCommentVNode("",!0),we.value==="files"?(e.openBlock(),e.createBlock(ZC,{key:2,files:X.value},null,8,["files"])):we.value==="metadata"?(e.openBlock(),e.createBlock(qr,{key:3,data:c.value,"entity-id":u.value,"entity-type":"raster",onSaved:pe,onEditCssBounds:B},null,8,["data","entity-id"])):fe.value?(e.openBlock(),e.createBlock(HC,{key:4,details:fe.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}})},Symbol.toStringTag,{value:"Module"})),zN={},IN={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 RN(t,n){return e.openBlock(),e.createElementBlock("svg",IN,[...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 jN=Fe(zN,[["render",RN]]),ON={class:"flex flex-col h-full"},UN={class:"flex justify-end mb-3 gap-2"},qN=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:s=>r("update:modelValue",s)});return(s,i)=>(e.openBlock(),e.createElementBlock("div",ON,[e.createElementVNode("div",UN,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:i[0]||(i[0]=d=>s.$emit("save"))},[...i[2]||(i[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(qn,{modelValue:l.value,"onUpdate:modelValue":i[1]||(i[1]=d=>l.value=d),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),HN={class:"flex flex-col flex-1 min-h-0"},WN={class:"flex justify-between mb-3 gap-2"},YN={class:"text-left"},GN={class:"font-medium text-gray-900"},ZN={class:"text-xs text-gray-500"},KN={class:"flex justify-center gap-2"},XN=["checked","onChange"],JN={class:"text-sm font-medium text-gray-900"},QN=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(y=>y.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),i=n,d=e.ref(!1),u=e.ref({table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),c={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},gcol:{type:"text",label:"Колонка geometry"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function p(){u.value={table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},d.value=!0}function a(){d.value=!1}function g(){var h,f;const y=(h=u.value.table)==null?void 0:h.trim(),k=(f=u.value.key)==null?void 0:f.trim();if(!y||!k){Ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}s.value=[...Array.isArray(s.value)?s.value:[],{...u.value,table:y,key:k}],d.value=!1}function m(y,k){var f;const h=((f=k==null?void 0:k.target)==null?void 0:f.checked)??!1;y.active=h,s.value=Array.isArray(s.value)?[...s.value]:[]}return(y,k)=>(e.openBlock(),e.createElementBlock("div",HN,[e.createElementVNode("div",WN,[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:p}," Додати таблицю "),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:k[0]||(k[0]=h=>i("save"))}," Зберегти ")]),e.createVNode(Pt,{modelValue:s.value,"onUpdate:modelValue":k[1]||(k[1]=h=>s.value=h),"columns-scheme":o,"form-scheme":c,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:h})=>[e.createElementVNode("div",YN,[e.createElementVNode("div",GN,e.toDisplayString(h.table),1),e.createElementVNode("div",ZN,e.toDisplayString(h.key),1)])]),activeCell:e.withCtx(({row:h})=>[e.createElementVNode("label",KN,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:h.active,onChange:f=>m(h,f)},null,40,XN)])]),zoomCell:e.withCtx(({row:h})=>[e.createElementVNode("div",JN,e.toDisplayString(h.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:d.value,"onUpdate:visible":k[3]||(k[3]=h=>d.value=h),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:a}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:g}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{values:u.value,"onUpdate:values":k[2]||(k[2]=h=>u.value=h),schema:c},null,8,["values"])]),_:1},8,["visible"])]))}}),eV={class:"flex flex-col flex-1 min-h-0 gap-4"},tV={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},nV=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),s=e.ref(o.card),i=e.defineAsyncComponent(()=>import("@opengis/form").then(u=>u.VsInputText));function d(){r("save",{card_html:s.value,card_table:l.value})}return(u,c)=>(e.openBlock(),e.createElementBlock("div",eV,[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:d},[...c[2]||(c[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(i),{modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=p=>l.value=p)},null,8,["modelValue"])]),e.createElementVNode("div",tV,[e.createVNode(qn,{modelValue:s.value,"onUpdate:modelValue":c[1]||(c[1]=p=>s.value=p),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),oV=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=Ke(),{activateTemporaryLayer:r,deactivateTemporaryLayer:l,setTemporaryLayerOpacity:s}=Nn(o.map),i=e.computed(()=>{var a;const p=`${(a=n==null?void 0:n.tileUrl)==null?void 0:a.trim()}`;return p?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(p)?p:p.startsWith("//")?`${window.location.protocol}${p}`:p.startsWith("/")?`${location.origin}${p}`:`${location.origin}/${p}`:""});let d="",u="";function c(){const p=n.active&&!!i.value;d&&(!p||d!==n.layerId)&&(l(d,u||void 0),d="",u=""),p&&(r({id:n.layerId,title:n.title||n.layerId,url:i.value,opacity:n.opacity},{},n.owner),d=n.layerId,u=n.owner||"")}return e.watch(()=>[n.layerId,i.value,n.active,n.owner],c,{immediate:!0}),e.watch(()=>n.opacity,p=>{!d||!n.active||s(d,p,u||void 0)},{immediate:!0}),e.onUnmounted(()=>{d&&(l(d,u||void 0),d="",u="")}),(p,a)=>e.createCommentVNode("",!0)}}),rV=e.defineComponent({__name:"CartocssMapClickListener",props:{cartocssId:{},infoEnabled:{type:[Boolean,null]},active:{type:[Boolean,null]}},setup(t){const n=t,o=e.computed(()=>n.cartocssId??null),r=e.computed(()=>!!n.infoEnabled&&n.active!==!1),{map:l,ready:s}=Ke(),i=m=>{!m||typeof window>"u"||window.dispatchEvent(new CustomEvent(rr,{detail:m}))},d=async m=>{const y=await fetch(`/api/map-format?${m.toString()}`);if(!y.ok)throw new Error(`API returned ${y.status}`);return y.json()};let u=null,c=null;const p=m=>{if(!m)return null;if(typeof m=="string")try{return JSON.parse(m)}catch{return null}return m},a=async(m,y)=>{var f;const k=o.value?`external:${o.value},${String(m)}`:null,h=new URLSearchParams({layer:o.value??"",id:String(m)});try{const b=await d(h),x=typeof b.html=="string"?b.html:null,C=p(((f=b==null?void 0:b.data)==null?void 0:f.geom)??(b==null?void 0:b.geom)??null);(x||C)&&i({html:x,geometry:C??y,infoToken:k})}catch(b){console.warn("CartoCSS map-format (id) error",b)}},g=async m=>{var f,b,x,C;if(!o.value||n.active===!1)return;if(!r.value){Ce.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const y=(f=m==null?void 0:m.lngLat)==null?void 0:f.lng,k=(b=m==null?void 0:m.lngLat)==null?void 0:b.lat;if(typeof y!="number"||typeof k!="number")return;const h=new URLSearchParams({layer:o.value,lat:k.toFixed(6),lng:y.toFixed(6)});try{const V=await d(h),_=p(((x=V==null?void 0:V.data)==null?void 0:x.geom)??(V==null?void 0:V.geom)??null),w=((C=V==null?void 0:V.data)==null?void 0:C.id)??(V==null?void 0:V.id);if(w!=null){await a(w,_);return}Ll({html:V==null?void 0:V.html})&&i({html:V==null?void 0:V.html,geometry:_,infoToken:null})}catch(V){console.warn("CartoCSS map-format error",V)}};return s().then(()=>{c=l.value,c&&(c.on("click",g),u=()=>c==null?void 0:c.off("click",g))}),e.onBeforeUnmount(()=>{u==null||u(),u=null,c=null}),()=>{}}}),lV=100,aV=e.defineComponent({__name:"MapFullscreenButton",props:{target:{}},setup(t){const n=t,{map:o,ready:r}=Ke(),l=e.ref(!1),s=e.ref(!1);function i(){var a,g;if(n.target)return n.target;const p=(g=(a=o.value)==null?void 0:a.getContainer)==null?void 0:g.call(a);return p?p.closest(".map-view-root")??p:null}function d(){const p=i();s.value=!!(p&&document.fullscreenElement===p)}function u(){window.setTimeout(()=>{var p,a;(a=(p=o.value)==null?void 0:p.resize)==null||a.call(p)},lV)}async function c(){const p=i();if(p)try{document.fullscreenElement===p?await document.exitFullscreen():document.fullscreenElement?(await document.exitFullscreen(),await p.requestFullscreen()):await p.requestFullscreen()}catch(a){console.error("Fullscreen error:",a)}finally{d(),u()}}return e.onMounted(async()=>{await(r==null?void 0:r()),l.value=!!o.value,d(),document.addEventListener("fullscreenchange",d),document.addEventListener("fullscreenchange",u)}),e.onBeforeUnmount(()=>{document.removeEventListener("fullscreenchange",d),document.removeEventListener("fullscreenchange",u)}),(p,a)=>(e.openBlock(),e.createBlock(en,{title:s.value?"Вийти з повного екрана":"Повний екран",tooltip:s.value?"Вийти з повного екрана":"Повний екран",active:s.value,disabled:!l.value,onClick:c},{default:e.withCtx(()=>[s.value?(e.openBlock(),e.createBlock(e.unref(ge.Minimize2),{key:0,class:"w-4 h-4"})):(e.openBlock(),e.createBlock(e.unref(ge.Maximize2),{key:1,class:"w-4 h-4"}))]),_:1},8,["title","tooltip","active","disabled"]))}}),sV=e.defineComponent({__name:"MapCopyLinkButton",props:{url:{default:""}},setup(t){const n=t;async function o(){const r=n.url||(typeof window<"u"?window.location.href:"");if(!r){Ce.notify({type:"warning",title:"Посилання",message:"Немає URL для копіювання"});return}try{await navigator.clipboard.writeText(r),Ce.notify({type:"success",title:"Посилання",message:"Посилання скопійовано"})}catch(l){console.error("Copy link error:",l),Ce.notify({type:"error",title:"Посилання",message:"Не вдалося скопіювати посилання"})}}return(r,l)=>(e.openBlock(),e.createBlock(en,{title:"Копіювати посилання",tooltip:"Копіювати посилання",onClick:o},{default:e.withCtx(()=>[e.createVNode(e.unref(ge.Link2),{class:"w-4 h-4"})]),_:1}))}}),iV={key:0,class:"absolute right-full top-0 mr-2 z-[450] flex",role:"group","aria-label":"Вибір рівня зуму"},cV={class:"flex flex-col items-center rounded-lg border border-gray-200 bg-white/95 py-2.5 pl-1 pr-2 shadow-lg backdrop-blur-sm"},dV=["title","onClick"],uV={key:0,class:"absolute right-5 text-[9px] tabular-nums text-gray-400"},fV=Fe(e.defineComponent({__name:"MapZoomSlider",props:{visible:{type:Boolean},modelValue:{},min:{default:5},max:{default:20}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(),s=e.ref(o.modelValue),i=e.ref(!1);e.watch(()=>o.modelValue,h=>{i.value||(s.value=h)});const d=e.computed(()=>{const h=[];for(let f=o.min;f<=o.max;f+=1)h.push(f);return h}),u=e.computed(()=>{const h=new Set;for(let f=o.min;f<=o.max;f+=5)h.add(f);return h.add(o.max),h}),c=h=>u.value.has(h),p=h=>{const f=o.max-o.min;return f<=0?0:(o.max-h)/f*100},a=h=>{r("update:modelValue",h)},g=h=>{if(!l.value)return;const f=l.value.getBoundingClientRect(),b=(h-f.top)/f.height;s.value=Math.max(o.min,Math.min(o.max,Math.round(o.max-b*(o.max-o.min))))},m=h=>{g(h.clientY)},y=()=>{window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",y),i.value=!1,s.value!==o.modelValue&&r("update:modelValue",s.value)},k=h=>{i.value=!0,g(h.clientY),window.addEventListener("mousemove",m),window.addEventListener("mouseup",y)};return(h,f)=>(e.openBlock(),e.createBlock(e.Transition,{name:"zoom-panel"},{default:e.withCtx(()=>[t.visible?(e.openBlock(),e.createElementBlock("div",iV,[e.createElementVNode("div",cV,[f[1]||(f[1]=e.createElementVNode("span",{class:"mb-1 text-[9px] font-semibold uppercase tracking-wider text-gray-400"}," Zoom ",-1)),e.createElementVNode("div",{ref_key:"sliderRef",ref:l,class:"relative h-44 w-8 cursor-pointer select-none",onMousedown:e.withModifiers(k,["prevent"])},[f[0]||(f[0]=e.createElementVNode("div",{class:"absolute right-0 top-0 bottom-0 w-px bg-gray-200"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,b=>(e.openBlock(),e.createElementBlock("button",{key:b,type:"button",class:"absolute right-0 -translate-y-1/2 flex items-center justify-end group",style:e.normalizeStyle({top:`${p(b)}%`}),title:`Zoom ${b}`,onClick:e.withModifiers(x=>a(b),["stop"])},[e.createElementVNode("span",{class:e.normalizeClass(["block rounded-full",c(b)?"h-px w-2.5 bg-gray-300 group-hover:bg-gray-400":"h-px w-1.5 bg-gray-200 group-hover:bg-gray-300"])},null,2),c(b)?(e.openBlock(),e.createElementBlock("span",uV,e.toDisplayString(b),1)):e.createCommentVNode("",!0)],12,dV))),128)),e.createElementVNode("div",{class:"absolute right-0 -translate-y-1/2 flex items-center",style:e.normalizeStyle({top:`${p(s.value)}%`})},[e.createElementVNode("div",{class:e.normalizeClass(["h-[4px] w-4 rounded-full bg-blue-600/80 shadow-sm transition-all",i.value?"bg-blue-300 transform duration-200":""])},null,2)],4)],544)])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-ca77aba8"]]),mV={class:"text-[0.7rem] font-bold tabular-nums leading-none text-gray-600"},Kr=5,Xr=20,pV=13,gV=.01,yV=200,hV=e.defineComponent({__name:"MapZoomLevelButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1),l=e.ref(!1),s=e.ref(pV),i=e.ref(!1),d=e.ref(Kr),u=e.ref(Xr),c=e.computed(()=>String(s.value));function p(f){return Math.round(Math.min(u.value,Math.max(d.value,f)))}function a(){var C,V;const f=n.value;if(!f)return;const b=(C=f.getMinZoom)==null?void 0:C.call(f),x=(V=f.getMaxZoom)==null?void 0:V.call(f);Number.isFinite(b)&&(d.value=Math.max(Kr,Math.floor(Number(b)))),Number.isFinite(x)&&(u.value=Math.min(Xr,Math.ceil(Number(x)))),d.value>u.value&&(d.value=Kr,u.value=Xr)}function g(){var C;const f=n.value;if(!f||i.value)return;const b=(C=f.getZoom)==null?void 0:C.call(f);if(b==null)return;const x=p(b);s.value!==x&&(s.value=x)}function m(f){var _,w;const b=n.value;if(!(b!=null&&b.easeTo))return;const x=(_=b.getCenter)==null?void 0:_.call(b);if(!x)return;const C=p(f),V=(w=b.getZoom)==null?void 0:w.call(b);V!=null&&Math.abs(V-C)<gV||(i.value=!0,b.easeTo({center:[x.lng,x.lat],zoom:C,duration:yV,essential:!0}))}function y(){i.value=!1,g()}function k(){l.value=!l.value,l.value&&(a(),g())}function h(f){s.value=f,m(f)}return e.onMounted(async()=>{var b;await(o==null?void 0:o());const f=n.value;r.value=!!f,a(),g(),(b=f==null?void 0:f.on)==null||b.call(f,"zoomend",y)}),e.onBeforeUnmount(()=>{var f,b;(b=(f=n.value)==null?void 0:f.off)==null||b.call(f,"zoomend",y)}),(f,b)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(en,{title:l.value?"Закрити вибір зуму":"Вибрати рівень зуму",tooltip:"Рівень зуму",active:l.value,disabled:!r.value,"aria-label":"Рівень зуму",onClick:k},{default:e.withCtx(()=>[e.createElementVNode("div",mV,e.toDisplayString(c.value),1)]),_:1},8,["title","active","disabled"]),e.createVNode(fV,{visible:l.value,"model-value":s.value,min:d.value,max:u.value,"onUpdate:modelValue":h},null,8,["visible","model-value","min","max"])],64))}}),bV=e.defineComponent({__name:"MapRulerButton",props:{active:{type:Boolean}},emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createBlock(en,{title:t.active?"Вимкнути лінійку":"Увімкнути лінійку",tooltip:"Вимірювання",active:t.active,"aria-label":"Вимірювання",onClick:o[0]||(o[0]=r=>n.$emit("click",r))},{default:e.withCtx(()=>[e.createVNode(e.unref(ge.Ruler),{class:"w-4 h-4"})]),_:1},8,["title","active"]))}}),xV=e.defineComponent({__name:"RulerMapClickBridge",props:{active:{type:Boolean}},emits:["map-click"],setup(t,{emit:n}){const o=t,r=n,{map:l,ready:s}=Ke();let i=null;function d(c){if(!o.active)return;const p=c==null?void 0:c.lngLat;typeof(p==null?void 0:p.lat)!="number"||typeof(p==null?void 0:p.lng)!="number"||r("map-click",{lat:p.lat,lng:p.lng})}async function u(){if(i==null||i(),i=null,!o.active)return;await(s==null?void 0:s());const c=l.value;c!=null&&c.on&&(c.on("click",d),i=()=>{var p;return(p=c.off)==null?void 0:p.call(c,"click",d)})}return e.watch(()=>o.active,()=>{u()},{immediate:!0}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(c,p)=>null}}),kV={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},wV={class:"flex-1 relative overflow-hidden"},_V={class:"absolute top-0 left-0 w-full z-20"},EV={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},CV={class:"flex items-start justify-between gap-4"},NV={class:"flex-1 min-w-0"},VV={class:"flex items-center text-sm text-gray-500 mb-3"},BV={class:"text-gray-900 font-medium truncate max-w-xs"},$V={class:"flex items-center justify-between gap-4"},SV={class:"flex-1 min-w-0"},vV={class:"flex items-center gap-3 mb-1"},LV={class:"text-base font-semibold text-gray-900 truncate"},TV={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},AV={class:"text-xs font-medium text-green-700"},MV=["title"],FV={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]"},DV={class:"relative w-full h-full"},PV={class:"absolute top-3 left-3 z-20"},zV={class:"px-3 py-2 flex items-center gap-2 border-b border-gray-100"},IV={class:"text-xs text-gray-700 w-9 text-right"},RV={class:"px-3 py-2 flex items-center gap-2"},jV={for:"show-layer",class:"text-xs text-gray-700 flex items-center gap-1 cursor-pointer"},OV={key:2,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"},UV={class:"flex-1 flex flex-col h-full"},qV={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},HV=["aria-selected","onClick"],WV={class:"leading-none"},YV={class:"flex flex-col flex-1 overflow-y-hidden p-3"},GV={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},ZV="cartocss-demo-001",KV="OpenGIS",ts=2,zo=5,XV=5,JV=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"cartocss",setup(t){const n=He.useRouter(),o=He.useRoute(),r=e.ref(null),l=e.computed(()=>{var re;const I=(re=o.matched[o.matched.length-1])==null?void 0:re.path;return(typeof I=="string"&&I?I:o.path).replace(/\/:id\??$/,"")||"/"}),s=e.computed(()=>{var se;const I=(se=o.meta)==null?void 0:se.title;return typeof I=="string"&&I.trim()?I:"CartoCSS"});function i(){n.push(l.value)}const d=[{key:"css",label:"CSS",icon:Ga},{key:"data",label:"Дані",icon:jN},{key:"metadata",label:"Метадані",icon:Ur},{key:"card",label:"Картка",icon:Za}],u=d.map(I=>I.key),c=e.ref(u.includes(o.query.tab)?o.query.tab:"css"),p=e.ref(!0),a=e.ref(null),g=e.computed(()=>{var I;return(I=a.value)!=null&&I.source_path?d.filter(se=>se.key==="card"||se.key==="metadata"):d}),m=e.computed(()=>o.params.id||ZV),y=e.ref({id:m.value,name:"",description:""});let k=null;const h=e.ref(!1);function f(I){if(Array.isArray(I))return f(I[0]);if(typeof I!="string"&&typeof I!="number")return null;const se=typeof I=="number"?I:Number(I.trim());return Number.isFinite(se)?se:null}function b(I,se){return I.toFixed(se)}function x(I,se,re){const Ne=.5*10**-re;return Math.abs(I-se)>Ne}function C(){var I;return(I=r.value)==null?void 0:I.ctx}function V(){var Xe,st,ct,wt;const I=(st=(Xe=C())==null?void 0:Xe.map)==null?void 0:st.value;if(!I)return;const se=f(o.query.z),re=f(o.query.x),Ne=f(o.query.y);if(se==null||re==null||Ne==null)return;const Se=(ct=I.getCenter)==null?void 0:ct.call(I),Oe=(wt=I.getZoom)==null?void 0:wt.call(I);(!Se||x(Se.lng,re,zo)||x(Se.lat,Ne,zo)||x(Oe??0,se,ts))&&(h.value=!0,I.jumpTo({center:[re,Ne],zoom:se}),h.value=!1)}function _(){var Se,Oe,Qe,Xe;if(h.value)return;const I=(Oe=(Se=C())==null?void 0:Se.map)==null?void 0:Oe.value;if(!I)return;const se=(Qe=I.getCenter)==null?void 0:Qe.call(I),re=(Xe=I.getZoom)==null?void 0:Xe.call(I);if(!se||re==null)return;const Ne={...o.query,z:b(re,ts),x:b(se.lng,zo),y:b(se.lat,zo)};o.query.z===Ne.z&&o.query.x===Ne.x&&o.query.y===Ne.y||n.replace({query:Ne})}function w(I){typeof document>"u"||(document.title=I?`${I} — CartoCSS`:KV)}const $=e.ref(""),L=e.ref([]),Y=e.ref(!1),Q=e.ref(!1),j=e.ref(""),te=e.ref(0),de=e.ref(!0),be=e.ref(1),ae=e.ref(!1),ne=e.ref(null),v=e.ref(!1),M=e.ref(null),B=e.ref([]),N=e.ref(!1),F=e.ref("general");function H(I){B.value=I}function he(I){var se;(se=M.value)==null||se.addPoint(I)}function G(){var I;B.value=[],N.value=!1,(I=M.value)==null||I.clearPoints(),v.value=!1}function D(){if(v.value){G();return}v.value=!0}const U=e.computed(()=>`cartocss-layer-${m.value}`),q=e.computed(()=>`${Math.round(be.value*100)}%`),ee=e.computed(()=>`cartocss-extent-${m.value}`),z=e.computed(()=>`cartocss-extent-draft-${m.value}`),oe=e.computed(()=>{var Se;const I=(Se=j.value)==null?void 0:Se.trim();if(!I)return"";const se=I.includes("?")?"&":"?",re=`${I}${se}nottl=1`,Ne=te.value;return Ne?`${I}${se}ts=${Ne}&nocache=1`:re}),ye=e.ref(""),we=e.ref(""),T=e.computed(()=>{var Oe;const I=(Oe=a.value)==null?void 0:Oe.bounds;if(!Array.isArray(I)||I.length<4)return null;const[se,re,Ne,Se]=I;return[se,re,Ne,Se].some(Qe=>typeof Qe!="number"||Number.isNaN(Qe))?null:[(se+Ne)/2,(re+Se)/2]}),X=e.computed(()=>{var Oe;const I=(Oe=a.value)==null?void 0:Oe.bounds;if(!Array.isArray(I)||I.length<4)return null;const[se,re,Ne,Se]=I;return[se,re,Ne,Se].some(Qe=>typeof Qe!="number"||Number.isNaN(Qe))?null:[se,re,Ne,Se]}),fe=e.computed(()=>{const I=a.value;return I?[I.description,I.group_id?`Група: ${I.group_id}`:null,I.source_path?`Шлях: ${I.source_path}`:null,I.is_public===!0?"Публічний":"Не публічний",I.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", "):""}),ie=e.computed(()=>{var se;const I=(se=a.value)==null?void 0:se.group_id;return I?String(I).toUpperCase():""});let ce=null,pe=!1,K=null;function Z(I){return Number(I.toFixed(XV))}function ke(I,se){const[re,Ne]=I,[Se,Oe]=se;return[Z(Math.min(re,Se)),Z(Math.min(Ne,Oe)),Z(Math.max(re,Se)),Z(Math.max(Ne,Oe))]}function ve(I){const[se,re,Ne,Se]=I;return{type:"Polygon",coordinates:[[[se,re],[Ne,re],[Ne,Se],[se,Se],[se,re]]]}}function Ae(I){var Ne,Se,Oe;const se=(Se=(Ne=C())==null?void 0:Ne.map)==null?void 0:Se.value,re=(Oe=se==null?void 0:se.getCanvas)==null?void 0:Oe.call(se);re!=null&&re.style&&(re.style.cursor=I)}async function $e(I,se){if(!(!m.value||!a.value)){Q.value=!0;try{const re=ve(I),Ne=await fetch(`/api/gis-css/${m.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:re})});if(!Ne.ok)throw new Error(`Failed to save cartocss bounds: ${Ne.status}`);Ce.notify({type:"success",title:"Bounds збережено",message:"Нові межі успішно збережено."}),await J(m.value,{bustCache:!0})}catch(re){console.error("Failed to save CartoCSS bounds",re),a.value&&(a.value={...a.value,bounds:se?[...se]:null}),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Bounds"})}finally{Q.value=!1}}}function Je(I){var re,Ne,Se;const se=(Ne=(re=C())==null?void 0:re.map)==null?void 0:Ne.value;if((Se=se==null?void 0:se.dragPan)!=null&&Se.enable&&se.dragPan.enable(),(I==null?void 0:I.length)===4&&a.value){const Oe=Array.isArray(a.value.bounds)?[...a.value.bounds]:null;a.value={...a.value,bounds:[...I]},$e(I,Oe)}ce=null,pe=!1,ne.value=null,ae.value=!1,Ae("")}function Re(){Je(null)}function at(){var Oe,Qe;const I=(Qe=(Oe=C())==null?void 0:Oe.map)==null?void 0:Qe.value;if(!I)return;const se=Xe=>{var ct,wt,Ft;if(!ae.value||((ct=Xe==null?void 0:Xe.originalEvent)==null?void 0:ct.button)!=null&&Xe.originalEvent.button!==0)return;const st=Xe==null?void 0:Xe.lngLat;st&&(ce=[st.lng,st.lat],pe=!0,ne.value=[st.lng,st.lat,st.lng,st.lat],(Ft=(wt=I.dragPan)==null?void 0:wt.disable)==null||Ft.call(wt))},re=Xe=>{if(!ae.value||!pe||!ce)return;const st=Xe==null?void 0:Xe.lngLat;st&&(ne.value=ke(ce,[st.lng,st.lat]))},Ne=Xe=>{if(!ae.value||!pe||!ce)return;const st=Xe==null?void 0:Xe.lngLat;if(!st){Re();return}const ct=ke(ce,[st.lng,st.lat]),[wt,Ft,yn,Ut]=ct;if(!(Math.abs(yn-wt)>0&&Math.abs(Ut-Ft)>0)){Ce.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),Re();return}Je(ct)},Se=Xe=>{ae.value&&Xe.key==="Escape"&&(Xe.preventDefault(),Re())};I.on("mousedown",se),I.on("mousemove",re),I.on("mouseup",Ne),window.addEventListener("keydown",Se),K=()=>{I.off("mousedown",se),I.off("mousemove",re),I.off("mouseup",Ne),window.removeEventListener("keydown",Se)}}async function et(){var re;const I=C();!(I!=null&&I.ready)||(await I.ready(),!((re=I.map)==null?void 0:re.value))||(K||at(),ae.value=!0,pe=!1,ce=null,ne.value=null,Ae("crosshair"),Ce.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}e.watch(m,I=>{I&&J(I)},{immediate:!0}),e.watch(()=>{var I;return(I=y.value)==null?void 0:I.name},I=>w(I),{immediate:!0});async function nt(){var Ne;const I=C();if(!(I!=null&&I.ready))return;await I.ready(),V();const se=(Ne=I.map)==null?void 0:Ne.value;if(!se)return;const re=()=>_();se.on("moveend",re),se.on("zoomend",re),k=()=>{se.off("moveend",re),se.off("zoomend",re)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{V()}),e.onMounted(()=>{nt()}),e.onBeforeUnmount(()=>{k==null||k(),k=null,K==null||K(),K=null,Ae("")}),e.watch(()=>o.query.tab,I=>{I&&g.value.some(se=>se.key===I)&&c.value!==I&&(c.value=I)}),e.watch(g,I=>{I.length&&!I.some(se=>se.key===c.value)&&(c.value=I[0].key)},{immediate:!0}),e.watch(c,I=>{o.query.tab!==I&&g.value.some(se=>se.key===I)&&n.replace({query:{...o.query,tab:I}})}),e.watch(()=>a.value,I=>{const se=I==null?void 0:I.card_html;ye.value=se,we.value=I==null?void 0:I.card_table},{immediate:!0});function P(){m.value&&J(m.value,{bustCache:!0})}async function me(I,se){if(m.value){Q.value=!0;try{const re=await fetch(`/api/gis-css/${m.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(I)});if(!re.ok)throw new Error(`Failed to save cartocss: ${re.status}`);Ce.notify({type:"success",title:"Збережено",message:se}),await J(m.value,{bustCache:!0})}catch(re){console.error("Failed to save CartoCSS",re),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{Q.value=!1}}}function A(I){if(!I)return null;if(typeof I=="string")try{return JSON.parse(I)}catch(se){return console.warn("Failed to parse CartoCSS config",se),null}return typeof I=="object"?I:null}function W(I){const se=Array.isArray(I)?I:I==null?void 0:I.datasets;return Array.isArray(se)?se.map((re,Ne)=>({table:(re==null?void 0:re.table)||(re==null?void 0:re.id)||`dataset_${Ne+1}`,query:(re==null?void 0:re.query)||"",srid:(re==null?void 0:re.srid)||"",gcol:(re==null?void 0:re.gcol)||"",key:(re==null?void 0:re.key)||(re==null?void 0:re.label)||"Без підпису",active:typeof(re==null?void 0:re.active)=="boolean"?re.active:!0,minzoom:typeof(re==null?void 0:re.zoom)>"u"?"":String(re.zoom),maxzoom:typeof(re==null?void 0:re.maxzoom)>"u"?"":String(re.maxzoom),columns:(re==null?void 0:re.columns)||"",proj4text:(re==null?void 0:re.proj4text)||""})):[]}async function J(I,se){Y.value=!0;try{const re=await fetch(`/api/gis-css/${I}`);if(!re.ok)throw new Error(`Failed to load cartocss: ${re.status}`);const Ne=await re.json(),Se=(Ne==null?void 0:Ne.message)||Ne||{};a.value=Se,y.value={id:Se.cartocss_key||I,name:Se.name||y.value.name,description:Se.description||y.value.description},$.value=typeof Se.style=="string"?Se.style:"";const Oe=A(Se.config??[]);L.value=W(Oe);const Qe=typeof Se.url=="string"?Se.url:"";j.value=Qe,de.value=!!(Qe&&Se.enabled!==!1),te.value=se!=null&&se.bustCache?Date.now():0}catch(re){console.error("Failed to fetch CartoCSS",re),de.value=!1,j.value="",te.value=0,a.value=null}finally{Y.value=!1}}async function xe(){await me({style:$.value||"",config:L.value},"CartoCSS оновлено")}async function Ve(I){const se=await fetch(`/api/gis-css/${m.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(I)});if(!se.ok)throw new Error(`Failed to save cartocss: ${se.status}`);Ce.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(I,se)=>(e.openBlock(),e.createElementBlock("div",kV,[e.createElementVNode("div",wV,[e.createElementVNode("div",_V,[e.createElementVNode("div",EV,[e.createElementVNode("div",CV,[e.createElementVNode("div",NV,[e.createElementVNode("div",VV,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:i},e.toDisplayString(s.value),1),se[7]||(se[7]=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",BV,e.toDisplayString(y.value.name||"CartoCSS"),1)]),e.createElementVNode("div",$V,[e.createElementVNode("div",SV,[e.createElementVNode("div",vV,[e.createElementVNode("h1",LV,e.toDisplayString(y.value.name||"CartoCSS"),1),ie.value?(e.openBlock(),e.createElementBlock("div",TV,[e.createElementVNode("span",AV,e.toDisplayString(ie.value),1)])):e.createCommentVNode("",!0)]),fe.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:fe.value},e.toDisplayString(fe.value),9,MV)):e.createCommentVNode("",!0)])])]),e.createVNode(Hr,{class:"flex-shrink-0","entity-id":m.value,"entity-info":y.value,"form-endpoint":re=>`/api/form/gis.cartocss.table/${re}`,"save-endpoint":re=>`/api/gis-css/${re}`,"entity-label":"CartoCSS","save-method":"post",onSaved:P},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])])]),e.createElementVNode("div",FV,[e.createElementVNode("div",DV,[e.createVNode(to,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var re,Ne;return[e.createElementVNode("div",PV,[e.createVNode(rn,null,{default:e.withCtx(()=>[e.createElementVNode("div",zV,[se[8]||(se[8]=e.createElementVNode("span",{class:"text-xs text-gray-600 whitespace-nowrap"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":se[0]||(se[0]=Se=>be.value=Se),class:"flex-1 h-1 accent-blue-600",style:{"accent-color":"rgb(30, 78, 216)"}},null,512),[[e.vModelText,be.value,void 0,{number:!0}]]),e.createElementVNode("span",IV,e.toDisplayString(q.value),1)]),e.createElementVNode("div",RV,[e.withDirectives(e.createElementVNode("input",{id:"show-layer",type:"checkbox",class:"rounded","onUpdate:modelValue":se[1]||(se[1]=Se=>de.value=Se),style:{"accent-color":"rgb(30, 78, 216)"}},null,512),[[e.vModelCheckbox,de.value]]),e.createElementVNode("label",jV,[de.value?(e.openBlock(),e.createBlock(e.unref(ge.Eye),{key:0,class:"w-3.5 h-3.5"})):(e.openBlock(),e.createBlock(e.unref(ge.EyeOff),{key:1,class:"w-3.5 h-3.5"})),se[9]||(se[9]=e.createTextVNode(" Показати шар ",-1))])])]),_:1})]),e.createVNode(Zr,null,{default:e.withCtx(()=>[e.createVNode(Wr),e.createVNode(Yr),e.createVNode(Gr),e.createVNode(Yt),T.value?(e.openBlock(),e.createBlock(Yt,{key:0,targetCenter:T.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0),e.createVNode(aV),e.createVNode(sV),e.createVNode(bV,{active:v.value,onClick:D},null,8,["active"]),e.createVNode(hV)]),_:1}),v.value?(e.openBlock(),e.createBlock(Ul,{key:0,ref_key:"rulerPanelRef",ref:M,onClose:G,onTabChange:se[2]||(se[2]=Se=>F.value=Se),onPointsChange:H,onShapeClosedChange:se[3]||(se[3]=Se=>N.value=Se)},null,512)):e.createCommentVNode("",!0),v.value&&B.value.length>0?(e.openBlock(),e.createBlock(ql,{key:1,points:B.value,"is-shape-closed":N.value,"label-mode":F.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),e.createVNode(xV,{active:v.value,onMapClick:he},null,8,["active"]),ae.value?(e.openBlock(),e.createElementBlock("div",OV," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),oe.value?(e.openBlock(),e.createBlock(oV,{key:3,"layer-id":U.value,"tile-url":oe.value,active:de.value,opacity:be.value,title:y.value.name,owner:m.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(Do,{extent:X.value,"layer-id":ee.value},null,8,["extent","layer-id"]),e.createVNode(Do,{extent:ne.value,"layer-id":z.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createVNode(rV,{"cartocss-id":m.value,bounds:((re=a.value)==null?void 0:re.bounds)??null,active:de.value&&!ae.value&&!v.value,"info-enabled":(Ne=a.value)==null?void 0:Ne.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(lr,{"map-id":m.value},null,8,["map-id"])]}),_:1},512)])]),a.value?(e.openBlock(),e.createBlock(Or,{key:0,open:p.value,onToggle:se[4]||(se[4]=re=>p.value=!p.value)},null,8,["open"])):e.createCommentVNode("",!0)]),a.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",p.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",UV,[g.value.length>1?(e.openBlock(),e.createElementBlock("div",qV,[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,re=>(e.openBlock(),e.createElementBlock("button",{key:re.key,type:"button",role:"tab","aria-selected":c.value===re.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",c.value===re.key?"bg-white shadow-sm text-gray-700":""]),onClick:Ne=>c.value=re.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(re.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",WV,e.toDisplayString(re.label),1)],10,HV))),128))],4)])):e.createCommentVNode("",!0),e.createElementVNode("div",YV,[Y.value?(e.openBlock(),e.createElementBlock("div",GV," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[c.value==="css"?(e.openBlock(),e.createBlock(qN,{key:0,modelValue:$.value,"onUpdate:modelValue":se[5]||(se[5]=re=>$.value=re),class:"flex-1 min-h-0",onSave:xe},null,8,["modelValue"])):c.value==="data"?(e.openBlock(),e.createBlock(QN,{key:1,modelValue:L.value,"onUpdate:modelValue":se[6]||(se[6]=re=>L.value=re),class:"flex-1 min-h-0 flex flex-col",onSave:xe},null,8,["modelValue"])):c.value==="card"?(e.openBlock(),e.createBlock(nV,{key:2,card:ye.value,table:we.value,class:"flex-1 min-h-0",onSave:Ve},null,8,["card","table"])):c.value==="metadata"?(e.openBlock(),e.createBlock(qr,{key:3,data:a.value,"entity-id":m.value,"entity-type":"css",onSaved:P,onEditCssBounds:et},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}})},Symbol.toStringTag,{value:"Module"})),QV={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},eB=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,s=e.computed({get:()=>r.modelValue,set:d=>l("update:modelValue",d)}),i=e.computed({get:()=>r.form,set:d=>l("update:form",d)});return(d,u)=>(e.openBlock(),e.createElementBlock("section",QV,[u[2]||(u[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:s.value,"onUpdate:values":u[0]||(u[0]=c=>s.value=c),form:i.value,"onUpdate:form":u[1]||(u[1]=c=>i.value=c)},null,8,["schema","values","form"]))]))}}),tB={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},nB=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:s=>r("update:layerIDs",s)});return(s,i)=>(e.openBlock(),e.createElementBlock("section",tB,[i[1]||(i[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),i[2]||(i[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(fl.VsInputArraySelect),{data:"layer_list",api:"/api/suggest/layer_list",modelValue:l.value,"onUpdate:modelValue":i[0]||(i[0]=d=>l.value=d),placeholder:"Шари"},null,8,["modelValue"])]))}}),oB={class:"w-full"},rB=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",oB,[e.createVNode(_o,{class:"w-full h-[calc(100vh-200px)]",height:"h-[calc(100vh-200px)]",id:t.id},null,8,["id"])]))}}),lB={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},aB={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},sB={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"},iB={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},cB={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},dB=["disabled"],uB=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(""),s=e.ref(null);e.watch(()=>o.modelValue,u=>{if(u){try{l.value=JSON.stringify(u,null,2)}catch{l.value="{}"}s.value=null}},{immediate:!0}),e.watch(l,u=>{if(!u.trim()){s.value=null;return}try{JSON.parse(u),s.value=null}catch(c){s.value=c.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:u}=window;if(u&&u.editor){const c=u.editor.getEditors();c.length>0&&c[c.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function i(){r("update:modelValue",null),l.value="",s.value=null}function d(){if(!s.value)try{const u=JSON.parse(l.value);r("save",u),i()}catch(u){console.error("Failed to parse JSON",u)}}return(u,c)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(i,["self"])},[e.createElementVNode("div",lB,[e.createElementVNode("div",aB,[c[1]||(c[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:i,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(ge.X),{size:20})])]),s.value?(e.openBlock(),e.createElementBlock("div",sB," Помилка JSON: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",iB,[e.createVNode(qn,{modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=p=>l.value=p),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",cB,[e.createElementVNode("button",{onClick:i,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:d,disabled:!!s.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,dB)])])])):e.createCommentVNode("",!0)}}),fB={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},mB={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},pB={class:"w-full text-sm"},gB={class:"divide-y divide-gray-200"},yB={class:"px-4 py-3"},hB=["onUpdate:modelValue","onChange"],bB=["value"],xB={class:"px-4 py-3"},kB=["onUpdate:modelValue","onChange"],wB=["value"],_B={class:"px-4 py-3 text-center"},EB=["checked","onChange"],CB={class:"px-4 py-3"},NB={key:0,class:"flex items-center gap-2"},VB=["onClick"],BB=["onClick"],$B={key:1},SB=["onClick"],vB={class:"px-4 py-3 text-right"},LB=["onClick"],TB=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"],s=["top-left","top-right","bottom-left","bottom-right"],i=e.ref(null),d=e.ref(-1),u=e.computed(()=>o.modelValue||[]);function c(){const f=[...u.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",f)}function p(f){Ce.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=u.value.filter((x,C)=>C!==f);r("update:modelValue",b)}})}function a(f,b,x){const C=[...u.value];C[f]={...C[f],[b]:x},r("update:modelValue",C)}function g(f){return!!f&&Object.keys(f).length>0}function m(f,b){d.value=f,i.value=b||{}}function y(f){m(f,{})}function k(f){Ce.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{a(f,"config",void 0)}})}function h(f){d.value>-1&&a(d.value,"config",f),i.value=null,d.value=-1}return(f,b)=>{var x;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:c,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(x=u.value)!=null&&x.length?(e.openBlock(),e.createElementBlock("div",mB,[e.createElementVNode("table",pB,[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",gB,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(C,V)=>(e.openBlock(),e.createElementBlock("tr",{key:V,class:"hover:bg-gray-50"},[e.createElementVNode("td",yB,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>C.type=_,onChange:_=>a(V,"type",C.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,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,bB)),64))],40,hB),[[e.vModelSelect,C.type]])]),e.createElementVNode("td",xB,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>C.position=_,onChange:_=>a(V,"position",C.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(s,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,wB)),64))],40,kB),[[e.vModelSelect,C.position]])]),e.createElementVNode("td",_B,[e.createElementVNode("input",{type:"checkbox",checked:C.visible!==!1,onChange:_=>a(V,"visible",_.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,EB)]),e.createElementVNode("td",CB,[g(C.config)?(e.openBlock(),e.createElementBlock("div",NB,[e.createElementVNode("button",{onClick:_=>m(V,C.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(ge.Pen),{size:16})],8,VB),e.createElementVNode("button",{onClick:_=>k(V),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(ge.X),{size:16})],8,BB)])):(e.openBlock(),e.createElementBlock("div",$B,[e.createElementVNode("button",{onClick:_=>y(V),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(ge.Plus),{size:16})],8,SB)]))]),e.createElementVNode("td",vB,[e.createElementVNode("button",{onClick:_=>p(V),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(ge.Trash2),{size:16})],8,LB)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",fB," Немає віджетів. Додайте перший віджет. ")),e.createVNode(uB,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":b[0]||(b[0]=C=>i.value=C),onSave:h},null,8,["modelValue"])])}}}),AB={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},MB={class:"mx-1"},FB={class:"text-gray-900 font-semibold"},DB=["disabled"],PB={key:0,class:"text-center py-12 mt-6 px-[24px]"},zB={key:1,class:"px-[24px] overflow-y-auto"},IB={class:"space-y-6"},RB={class:"space-y-6"},jB={class:"space-y-6"},OB=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"MapSettings",setup(t){const n=He.useRouter(),o=He.useRoute(),r=e.computed(()=>{var _;return((_=n.resolve("/gis.maps").meta)==null?void 0:_.title)??"Карти"}),l=e.ref(!0),s=e.ref(!1),i=e.ref({}),d=e.ref({}),u=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],c=u.map(_=>_.id),p=_=>_?Array.isArray(_)?_[0]:_:null,a=(()=>{const _=p(o.query.tab);return _&&c.includes(_)?_:"general"})(),g=e.ref(a);e.watch(()=>o.query.tab,_=>{const w=p(_);w&&c.includes(w)&&g.value!==w&&(g.value=w)}),e.watch(g,_=>{o.query.tab!==_&&n.replace({query:{...o.query,tab:_}})});const m=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),y=e.computed({get:()=>(m.value.layers||[]).map(_=>_.id||_),set:_=>{m.value.layers=_}});async function k(_){if(!_.length){d.value={};return}try{const w=new URLSearchParams({json:"1",val:Array.from(new Set(_)).join(",")}),$=await fetch(`/api/suggest/layer_list?${w.toString()}`);if(!$.ok)return;const L=await $.json(),Y=(L==null?void 0:L.data)??L??[],Q=Array.isArray(Y)?Y:[],j={...d.value};Q.forEach(te=>{const de=te.id!=null?String(te.id):"";de&&(j[de]=te.text??te.name??de)}),d.value=j}catch(w){console.error("Failed to fetch layer labels:",w)}}const h=e.computed({get:()=>y.value.map(_=>d.value[_]??_),set:_=>{const w=Object.entries(d.value).reduce((L,[Y,Q])=>(L[Q]=Y,L),{}),$=_.map(L=>w[L]??null).filter(L=>L!=null);y.value=$}}),f=e.computed(()=>{const _=m.value.center;if(!Array.isArray(_)||_.length<2)return"Не задано";const[w,$]=_;return w===void 0||$===void 0||w===null||$===null||Number.isNaN(Number(w))||Number.isNaN(Number($))?"Не задано":`Lng ${Number(w).toFixed(6)}, Lat ${Number($).toFixed(6)}`}),b=e.computed(()=>{const _=m.value.zoom;if(_==null||_==="")return"Не задано";const w=Number(_);return Number.isNaN(w)?"Не задано":w.toFixed(2)}),x=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function C(){try{const w=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();m.value={...w,keywords:w.keywords||[],center:w.center??null,widgets:Array.isArray(w.widgets)?w.widgets:[],layers:(w.layers||[]).map($=>$.id||$)},await k(m.value.layers??[])}catch(_){console.error("Failed to load map:",_),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function V(){var w,$;const _=($=(w=i.value)==null?void 0:w.validate)==null?void 0:$.call(w);if(_){Ce.notify({type:"warning",title:"Валідація",message:Object.entries(_).map(([L,Y])=>`${L}: ${Y}`).join(`
58
- `)});return}s.value=!0;try{const L=JSON.parse(JSON.stringify(m.value));if(L.zoom=Number(L.zoom),Array.isArray(L.center)&&(L.center.every(j=>j==null||j===""||j===0)||L.center.length===0)&&(L.center=null),delete L.created_at,delete L.updated_at,delete L.created_by,delete L.updated_by,delete L.history,delete L.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(L)})).ok)throw new Error("Save failed");Ce.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(L){console.error("Save error:",L),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{s.value=!1}}return e.watch(()=>{var _;return((_=m.value)==null?void 0:_.layers)??[]},_=>k(Array.isArray(_)?_.map(w=>(w==null?void 0:w.id)??w):[]),{immediate:!1}),e.onMounted(async()=>{await C()}),(_,w)=>{const $=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",AB,[e.createVNode(an,{variant:"form",title:m.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode($,{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",MB,[e.createVNode(e.unref(ge.LucideChevronRight),{size:16,class:"shrink-0"})]),e.createElementVNode("span",FB,e.toDisplayString(m.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...w[6]||(w[6]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:w[0]||(w[0]=L=>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:V,disabled:s.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(s.value?"Збереження...":"Зберегти"),9,DB)]),_:1},8,["title"]),l.value?(e.openBlock(),e.createElementBlock("div",PB,[...w[7]||(w[7]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",zB,[e.createVNode(oa,{tabs:u,activeTab:g.value,"onUpdate:activeTab":w[1]||(w[1]=L=>g.value=L)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",IB,[e.createVNode(eB,{schema:x,loading:l.value,modelValue:m.value,"onUpdate:modelValue":w[2]||(w[2]=L=>m.value=L),form:i.value,"onUpdate:form":w[3]||(w[3]=L=>i.value=L)},null,8,["loading","modelValue","form"])],512),[[e.vShow,g.value==="general"]]),e.withDirectives(e.createElementVNode("div",RB,[e.createVNode(nB,{layerIDs:y.value,"onUpdate:layerIDs":w[4]||(w[4]=L=>y.value=L)},null,8,["layerIDs"])],512),[[e.vShow,g.value==="layers"]]),e.withDirectives(e.createVNode(TB,{modelValue:m.value.widgets,"onUpdate:modelValue":w[5]||(w[5]=L=>m.value.widgets=L)},null,8,["modelValue"]),[[e.vShow,g.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",jB,[e.createVNode(rB,{"center-display":f.value,"zoom-display":b.value,"layer-names":h.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,g.value==="map"]])]))])}}}),[["__scopeId","data-v-df90fbac"]])},Symbol.toStringTag,{value:"Module"}));Ze.CartoCSS=hs,Ze.Classifiers=lc,Ze.MapSettings=Cs,Ze.MapWidget=_o,Ze.Permissions=vc,Ze.Raster=ps,Ze.Register=is,Ze.Service=us,Ze.default=_o,Ze.install=rb,Ze.template1=Gl,Ze.template2=Zl,Ze.template3=Kl,Ze.template4=Xl,Ze.template5=Jl,Object.defineProperties(Ze,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
57
+ ${N}`:N}d.value=!1,u.value=[]}function m(){d.value=!1,u.value=[]}function y(){const h=s.value==="html"?"html":"list",f={card_mode:h};h==="html"?f.html=i.value:h==="list"&&(f.list=l.value),r("save","card",f)}const k=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,f)=>(e.openBlock(),e.createElementBlock("div",SE,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:a,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:y,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($E,{modelValue:s.value,"onUpdate:modelValue":f[0]||(f[0]=b=>s.value=b),options:k},null,8,["modelValue"]),e.createElementVNode("div",vE,[s.value==="list"?(e.openBlock(),e.createBlock(Pt,{key:0,modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=b=>l.value=b),"columns-scheme":c,"form-scheme":p,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):s.value==="html"?(e.openBlock(),e.createBlock(Hn,{key:1,modelValue:i.value,"onUpdate:modelValue":f[2]||(f[2]=b=>i.value=b),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(cn,{visible:d.value,"onUpdate:visible":f[3]||(f[3]=b=>d.value=b),selection:u.value,"onUpdate:selection":f[4]||(f[4]=b=>u.value=b),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:g,onCancel:m},null,8,["visible","selection","fields"])]))}}),TE={class:"flex flex-col flex-1 min-h-0"},AE=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,y=>l.value=y||[],{immediate:!0}),e.watch(l,y=>r("update:columns",y),{deep:!0,immediate:!0});const s=e.ref("list"),i=e.ref(!1),d=e.ref([]),u=[{key:"id",label:"Name"},{key:"label",label:"UA"}],c={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"autocomplete"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function p(){d.value=l.value.map(y=>y.name||y.id),i.value=!0}function a(){var f;const y=[...l.value],k=((f=o.fields)==null?void 0:f.filter(b=>d.value.includes(b.name)))||[],h=un(y,k,{selectedKeys:d.value,resolveKey:b=>zt(b)});l.value=h,i.value=!1,d.value=[]}function g(){i.value=!1,d.value=[]}function m(){let y=[];s.value==="all"?y=o.fields||[]:s.value==="none"?y=[]:y=l.value,r("save",y)}return(y,k)=>(e.openBlock(),e.createElementBlock("div",TE,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[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.createElementVNode("button",{onClick:m,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),s.value==="list"?(e.openBlock(),e.createBlock(Pt,{key:0,modelValue:l.value,"onUpdate:modelValue":k[0]||(k[0]=h=>l.value=h),"columns-scheme":u,"form-scheme":c,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(cn,{visible:i.value,"onUpdate:visible":k[1]||(k[1]=h=>i.value=h),selection:d.value,"onUpdate:selection":k[2]||(k[2]=h=>d.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:a,onCancel:g},null,8,["visible","selection","fields"])]))}}),ME=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var y,k,h,f,b;const{map:o,flyTo:r,setZoom:l}=Ke(),s=((k=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:k.$settings)||null,i=t,d=i.id;String(i.id);const u=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,c=qe(d,{source:{type:"vector",tiles:[u],minzoom:0,maxzoom:14},popup:i.layer.popup,card:(h=i.layer)==null?void 0:h.card,layer:{style:(f=i.layer)==null?void 0:f.style}});n({layerHandle:c}),(i.autoCenter??!0)&&r({center:i.layer.center||((b=s==null?void 0:s.map)==null?void 0:b.center)||[30,50],animate:!1});let p=null;function a(){if(!(c!=null&&c.setTiles))return;const x=u.includes("?")?"&":"?",N=`${u}${x}_=${Date.now()}`;c.setTiles([N])}function g(){p&&clearTimeout(p),p=setTimeout(()=>{p=null,m().catch(x=>console.error("Failed to update map layer",x))},300)}async function m(){o.value&&(a(),c.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,g,{deep:!0}),e.watch(()=>{var x;return(x=i.layer)==null?void 0:x.card},x=>{c&&(c.card=x)}),e.onBeforeUnmount(()=>{c.remove()}),(x,N)=>null}}),FE=["title","aria-label","disabled"],DE={key:0,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"},en=e.defineComponent({__name:"MapIconButton",props:{title:{},ariaLabel:{default:""},tooltip:{default:""},active:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:["click"],setup(t){const n=t,o=e.computed(()=>["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100",n.active?"bg-blue-50 text-blue-700 ring-1 ring-blue-300":"bg-white text-gray-700 hover:bg-gray-50"].join(" "));return(r,l)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:e.normalizeClass(o.value),title:t.title,"aria-label":t.ariaLabel||t.title,disabled:t.disabled,onClick:l[0]||(l[0]=e.withModifiers(s=>r.$emit("click",s),["stop"]))},[t.tooltip?(e.openBlock(),e.createElementBlock("span",DE,e.toDisplayString(t.tooltip),1)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],10,FE))}}),Wr=e.defineComponent({__name:"MapZoomInButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1);e.onMounted(async()=>{await(o==null?void 0:o()),r.value=!!n.value});function l(){const s=n.value;s!=null&&s.zoomIn&&s.zoomIn()}return(s,i)=>(e.openBlock(),e.createBlock(en,{title:"Збільшити",tooltip:"Плюс зум",disabled:!r.value,onClick:l},{default:e.withCtx(()=>[e.createVNode(e.unref(he.ZoomIn),{class:"w-4 h-4"})]),_:1},8,["disabled"]))}}),Yr=e.defineComponent({__name:"MapZoomOutButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1);e.onMounted(async()=>{await(o==null?void 0:o()),r.value=!!n.value});function l(){const s=n.value;s!=null&&s.zoomOut&&s.zoomOut()}return(s,i)=>(e.openBlock(),e.createBlock(en,{title:"Зменшити",tooltip:"Мінус зум",disabled:!r.value,onClick:l},{default:e.withCtx(()=>[e.createVNode(e.unref(he.ZoomOut),{class:"w-4 h-4"})]),_:1},8,["disabled"]))}}),Gr=e.defineComponent({__name:"MapCompassButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1),l=e.ref(0),s=e.ref(0),i=e.computed(()=>({transform:`scale(${(1+s.value/70).toFixed(5)}) rotateZ(0deg) rotateX(${s.value}deg) rotateZ(${l.value}deg)`}));function d(){var p,a;const c=n.value;c&&(l.value=Number(((p=c.getBearing)==null?void 0:p.call(c))??0),s.value=Number(((a=c.getPitch)==null?void 0:a.call(c))??0))}e.onMounted(async()=>{var p,a,g;await(o==null?void 0:o());const c=n.value;r.value=!!c,d(),(p=c==null?void 0:c.on)==null||p.call(c,"rotate",d),(a=c==null?void 0:c.on)==null||a.call(c,"pitch",d),(g=c==null?void 0:c.on)==null||g.call(c,"load",d)}),e.onBeforeUnmount(()=>{var p,a,g;const c=n.value;(p=c==null?void 0:c.off)==null||p.call(c,"rotate",d),(a=c==null?void 0:c.off)==null||a.call(c,"pitch",d),(g=c==null?void 0:c.off)==null||g.call(c,"load",d)});function u(){const c=n.value;c!=null&&c.easeTo&&c.easeTo({bearing:0,pitch:0})}return(c,p)=>(e.openBlock(),e.createBlock(en,{title:"Повернути орієнтацію",tooltip:"Компас",disabled:!r.value,onClick:u},{default:e.withCtx(()=>[e.createVNode(e.unref(he.Compass),{class:"w-4 h-4","aria-hidden":"true",style:e.normalizeStyle(i.value)},null,8,["style"])]),_:1},8,["disabled"]))}}),PE={class:"absolute right-3 top-3 z-[450] flex flex-col gap-1 pointer-events-auto"},Zr=e.defineComponent({name:"MapToolbarRight",__name:"MapToolbarRight",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",PE,[e.renderSlot(n.$slots,"default")]))}}),zE={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},IE={class:"flex-1 relative overflow-hidden"},RE={class:"absolute top-0 left-0 w-full z-20"},jE={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},OE={class:"flex items-start justify-between gap-4"},UE={class:"flex-1 min-w-0"},qE={class:"flex items-center text-sm text-gray-500 mb-3"},HE={class:"text-gray-900 font-medium truncate max-w-xs"},WE={class:"flex items-center justify-between gap-4"},YE={class:"flex-1 min-w-0"},GE={class:"flex items-center gap-3 mb-1"},ZE={class:"text-base font-semibold text-gray-900 truncate"},KE={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},XE={class:"text-xs font-medium text-green-700"},JE=["title"],QE={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]"},eC={class:"relative w-full h-full"},tC={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},nC={class:"absolute top-4 left-4 z-20"},oC={class:"absolute bottom-4 left-4 z-20"},rC={class:"flex-1 flex flex-col h-full"},lC={class:"px-3 pt-3 pb-2 border-b border-gray-100"},aC={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"},sC=["aria-selected","onClick"],iC={class:"leading-none"},cC={class:"flex flex-col flex-1 overflow-y-hidden p-3"},dC="OpenGIS",Qa=2,Fo=5,uC=1e3,fC=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var ce,ye;const n=t,o=e.toRef(n,"hideServiceKey"),r=He.useRoute(),l=He.useRouter(),{id:s}=r.params,i=e.ref(null),d=e.ref(null),u=e.ref({}),c=e.ref(null),p=((ye=(ce=e.getCurrentInstance())==null?void 0:ce.appContext.config.globalProperties)==null?void 0:ye.$settings)||null;function a(Z){typeof document>"u"||(document.title=Z?`${Z} — Сервіс`:dC)}let g=null;const m=e.ref(!1);function y(){var Z;return(Z=i.value)==null?void 0:Z.ctx}function k(Z){typeof window>"u"||window.dispatchEvent(new CustomEvent(so,{detail:Z}))}function h(Z){var Ae,$e,Je;const G=($e=(Ae=y())==null?void 0:Ae.map)==null?void 0:$e.value;if(!G||!Z)return[];const ke=(Je=c.value)!=null&&Je.service_id?String(c.value.service_id):null;return(G.queryRenderedFeatures(Z)||[]).filter(Re=>{var pe,M,W,X,be,Ve;const at=((pe=Re==null?void 0:Re.properties)==null?void 0:pe.id)??(Re==null?void 0:Re.id);if(at==null||!(Re!=null&&Re.source)||ke&&String(Re.source)!==ke)return!1;const et=qe(Re.source)||qe((M=Re.layer)==null?void 0:M.id);if(!et)return!1;const nt=(X=(W=et==null?void 0:et.opts)==null?void 0:W.source)==null?void 0:X.type,P=(Ve=(be=et==null?void 0:et.opts)==null?void 0:be.layer)==null?void 0:Ve.type;return nt!=="raster"&&P!=="raster"})}function f(Z){const G=h(Z==null?void 0:Z.point);k({features:G,externalItems:[]})}function b(Z){if(Array.isArray(Z))return b(Z[0]);if(typeof Z!="string"&&typeof Z!="number")return null;const G=typeof Z=="number"?Z:Number(Z.trim());return Number.isFinite(G)?G:null}function x(Z,G){return Z.toFixed(G)}function N(Z,G,ke){const ve=.5*10**-ke;return Math.abs(Z-G)>ve}function V(){var Re,at,et,nt;const Z=(at=(Re=y())==null?void 0:Re.map)==null?void 0:at.value;if(!Z)return;const G=b(r.query.z),ke=b(r.query.x),ve=b(r.query.y);if(G==null||ke==null||ve==null)return;const Ae=(et=Z.getCenter)==null?void 0:et.call(Z),$e=(nt=Z.getZoom)==null?void 0:nt.call(Z);(!Ae||N(Ae.lng,ke,Fo)||N(Ae.lat,ve,Fo)||N($e??0,G,Qa))&&(m.value=!0,Z.jumpTo({center:[ke,ve],zoom:G}),m.value=!1)}function _(){var Ae,$e,Je,Re;if(m.value)return;const Z=($e=(Ae=y())==null?void 0:Ae.map)==null?void 0:$e.value;if(!Z)return;const G=(Je=Z.getCenter)==null?void 0:Je.call(Z),ke=(Re=Z.getZoom)==null?void 0:Re.call(Z);if(!G||ke==null)return;const ve={...r.query,z:x(ke,Qa),x:x(G.lng,Fo),y:x(G.lat,Fo)};r.query.z===ve.z&&r.query.x===ve.x&&r.query.y===ve.y||l.replace({query:ve})}const w=e.ref(null),B=e.ref(""),v=e.ref([]),K=e.ref([]),J=e.ref([]),O=e.ref("list"),ne=e.ref(""),de=e.ref([]),xe=e.ref(!0);let se=null;const te=e.computed(()=>{var Z,G;return((Z=c.value)==null?void 0:Z.id)??((G=c.value)==null?void 0:G.service_id)??null}),D=e.computed(()=>{const Z=(p==null?void 0:p.map)||null,G=(Z==null?void 0:Z.boundary)??null,ke=(Z==null?void 0:Z.katottg)??null;return!G&&!ke?null:{boundary:G,katottg:ke}}),Q=e.computed(()=>{const Z=c.value;if(!Z)return"";const G=[];!o.value&&Z.service_key&&G.push(`Сервіс: ${Z.service_key}`),Z.description&&G.push(Z.description);const ke=Z.group_name||Z.group_id;return ke&&G.push(`Група: ${ke}`),typeof Z.is_public<"u"&&G.push(Z.is_public?"Публічний":"Не публічний"),typeof Z.is_active<"u"&&G.push(Z.is_active?"Активний":"Неактивний"),G.join(", ")}),T=e.computed(()=>{const Z=c.value,G=(Z==null?void 0:Z.group_name)||(Z==null?void 0:Z.group_id);return G?String(G).toUpperCase():""}),E=e.computed(()=>{var ke;const Z=(ke=r.matched[r.matched.length-1])==null?void 0:ke.path;return(typeof Z=="string"&&Z?Z:r.path).replace(/\/:id\??$/,"")||"/"}),L=e.computed(()=>{var G;const Z=(G=r.meta)==null?void 0:G.title;return typeof Z=="string"&&Z.trim()?Z:"Datasets"});function A(){l.push(E.value)}const me=[{key:"style",label:"Стиль",icon:Ga},{key:"popup",label:"Попап",icon:l_},{key:"filter",label:"Фільтр",icon:c_},{key:"legend",label:"Легенда",icon:J2},{key:"card",label:"Картка",icon:Za},{key:"metadata",label:"Метадані",icon:Ur}],I=me.map(Z=>Z.key),F=e.ref("style");e.onMounted(async()=>{const Z=r.query.tab;Z&&I.includes(Z)&&(F.value=Z),await we(),z()});async function z(){var ve;const Z=y();if(!(Z!=null&&Z.ready))return;await Z.ready(),V();const G=(ve=Z.map)==null?void 0:ve.value;if(!G)return;const ke=()=>_();G.on("moveend",ke),G.on("zoomend",ke),G.on("click",f),g=()=>{G.off("moveend",ke),G.off("zoomend",ke),G.off("click",f)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{V()}),e.watch(F,Z=>{r.query.tab!==Z&&l.replace({query:{...r.query,tab:Z}})}),e.watch(()=>r.query.tab,Z=>{Z&&I.includes(Z)&&F.value!==Z&&(F.value=Z)}),e.watch(()=>{var Z;return(Z=c.value)==null?void 0:Z.name},Z=>a(Z),{immediate:!0});function H(Z){if(!Z)return null;try{return JSON.parse(JSON.stringify(Z))}catch(G){return console.warn("Failed to clone style",G),null}}function oe(Z){if(!Z)return null;if(typeof Z=="string")try{return Go(Tr(Z)||null)}catch(G){return console.warn("Failed to parse style yaml",G),null}return Go(H(Z))}function R(Z,G){try{return JSON.stringify(Z)===JSON.stringify(G)}catch{return!1}}function ee(){var G;if(!c.value)return;const Z=oe(w.value);R(Z,((G=c.value)==null?void 0:G.style)??null)||(c.value={...c.value,style:Z})}function ge(){se&&clearTimeout(se),se=setTimeout(()=>{se=null,ee()},uC)}const we=async()=>{try{const Z=await fetch(`/api/gis-service/${s}`);if(!Z.ok)throw new Error(`${Z.status}`);const G=await Z.json();u.value=G||{},d.value=s;const ke=oe(G.style);c.value=G?{...G,style:H(ke)}:null,w.value=ke,B.value=typeof(G==null?void 0:G.style)=="string"?G.style:ke?Ya(ke):"",K.value=(G==null?void 0:G.popup)||[],O.value=G.card_mode==="html"?"html":"list",J.value=G.card,ne.value=G.html,v.value=(G==null?void 0:G.legend)||[],de.value=(G==null?void 0:G.filters)||[]}catch(Z){console.error("Failed to fetch map info",Z)}};e.watch(()=>{var Z;return(Z=c.value)==null?void 0:Z.style},Z=>{w.value=oe(Z)},{deep:!0}),e.watch(()=>w.value,()=>{ge()},{deep:!0}),e.onBeforeUnmount(()=>{se&&(clearTimeout(se),se=null),g==null||g(),g=null});async function S(Z){try{const G=await fetch(`/api/gis-clear-vtile/${Z}`),{message:ke,error:ve,code:Ae}=await G.json();if(Ae===200)return Ce.notify({type:"success",title:"Успіх",message:ke});Ce.notify({type:"error",title:"Помилка",message:ve})}catch(G){Ce.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(G)}}async function Y(Z,G){await ue({[Z]:G},Z)}async function ue(Z,G){if(c.value={...c.value||{},...Z},typeof Z.html<"u"&&(u.value={...u.value||{},html:Z.html}),!!te.value)try{if(!(await fetch(`/api/gis-service/${te.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(Z)})).ok)throw new Error("Save failed");Ce.notify({type:"success",title:"Успіх",message:`${G} saved`}),await we()}catch(ke){Ce.notify({type:"error",title:"Помилка",message:`Failed to save ${G}`}),console.error(ke)}}async function ie(Z,G){if(Z!=="card"){await Y(Z,G);return}const ke=(G==null?void 0:G.card_mode)==="html"?"html":"list",ve=ke==="html"&&typeof(G==null?void 0:G.html)=="string"?G.html:"",Ae=(ke==="html"?[]:null)||(Array.isArray(G==null?void 0:G.list)?G.list:[]);J.value=Ae,O.value=ke,ne.value=ve;const $e={card_mode:ke};ke==="html"&&($e.html=ve),ke==="list"&&($e.card=Ae),await ue($e,"card")}return(Z,G)=>{var ke,ve,Ae;return e.openBlock(),e.createElementBlock("div",zE,[e.createElementVNode("div",IE,[e.createElementVNode("div",RE,[e.createElementVNode("div",jE,[e.createElementVNode("div",OE,[e.createElementVNode("div",UE,[e.createElementVNode("div",qE,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:A},e.toDisplayString(L.value),1),G[11]||(G[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",HE,e.toDisplayString(((ke=c.value)==null?void 0:ke.name)||"Dataset"),1)]),e.createElementVNode("div",WE,[e.createElementVNode("div",YE,[e.createElementVNode("div",GE,[e.createElementVNode("h1",ZE,e.toDisplayString(((ve=c.value)==null?void 0:ve.name)||"Dataset"),1),T.value?(e.openBlock(),e.createElementBlock("div",KE,[e.createElementVNode("span",XE,e.toDisplayString(T.value),1)])):e.createCommentVNode("",!0)]),Q.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:Q.value},e.toDisplayString(Q.value),9,JE)):e.createCommentVNode("",!0)])])]),te.value?(e.openBlock(),e.createBlock(Hr,{key:0,class:"flex-shrink-0","entity-id":te.value,"entity-info":{name:(Ae=c.value)==null?void 0:Ae.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":S,onSaved:we},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",QE,[e.createElementVNode("div",eC,[e.createVNode(no,{ref_key:"mapViewRef",ref:i},{default:e.withCtx(()=>{var $e,Je,Re,at,et,nt,P;return[($e=c.value)!=null&&$e.service_id?(e.openBlock(),e.createBlock(ME,{key:0,id:(Je=c.value)==null?void 0:Je.service_id,layer:c.value,"style-spec":((Re=c.value)==null?void 0:Re.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),te.value?(e.openBlock(),e.createBlock(Yl,{key:1,"layer-id":te.value,boundary:((at=c.value)==null?void 0:at.boundary)||((et=D.value)==null?void 0:et.boundary)||null,katottg:((nt=c.value)==null?void 0:nt.katottg)||((P=D.value)==null?void 0:P.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",tC,[te.value?(e.openBlock(),e.createBlock(sr,{key:0,"layer-id":te.value,filters:de.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),G[12]||(G[12]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",nC,[e.createVNode(rn)]),e.createVNode(Zr,null,{default:e.withCtx(()=>[e.createVNode(Wr),e.createVNode(Yr),e.createVNode(Gr),e.createVNode(Yt),u.value.center?(e.openBlock(),e.createBlock(Yt,{key:0,targetCenter:u.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),_:1}),e.createElementVNode("div",oC,[e.createVNode(ar,{items:v.value||null},null,8,["items"])]),e.createVNode(Sl),e.createVNode(lr,{html:u.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(Or,{open:xe.value,onToggle:G[0]||(G[0]=$e=>xe.value=!xe.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",xe.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",rC,[e.createElementVNode("div",lC,[e.createElementVNode("div",aC,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(me,$e=>e.createElementVNode("button",{key:$e.key,type:"button",role:"tab","aria-selected":F.value===$e.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",F.value===$e.key?"bg-white shadow-sm text-gray-700":""]),onClick:Je=>F.value=$e.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent($e.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",iC,e.toDisplayString($e.label),1)],10,sC)),64))])]),e.createElementVNode("div",cC,[F.value==="style"?(e.openBlock(),e.createBlock(fE,{key:0,token:te.value,"style-text":B.value,"style-yaml":w.value,"onUpdate:styleYaml":G[1]||(G[1]=$e=>w.value=$e),"onUpdate:styleText":G[2]||(G[2]=$e=>B.value=$e),onSave:G[3]||(G[3]=$e=>Y("style",$e))},null,8,["token","style-text","style-yaml"])):F.value==="legend"?(e.openBlock(),e.createBlock(EE,{key:1,token:te.value,columns:v.value,"onUpdate:columns":G[4]||(G[4]=$e=>v.value=$e),onSave:G[5]||(G[5]=$e=>Y("legend",$e))},null,8,["token","columns"])):F.value==="popup"?(e.openBlock(),e.createBlock(gE,{key:2,token:te.value,columns:K.value,fields:u.value.fields,"onUpdate:columns":G[6]||(G[6]=$e=>K.value=$e),onSave:G[7]||(G[7]=$e=>Y("popup",$e))},null,8,["token","columns","fields"])):F.value==="card"?(e.openBlock(),e.createBlock(LE,{key:3,token:te.value,columns:J.value,fields:u.value.fields,"view-mode":O.value,html:ne.value,"onUpdate:columns":G[8]||(G[8]=$e=>J.value=$e),onSave:ie},null,8,["token","columns","fields","view-mode","html"])):F.value==="filter"?(e.openBlock(),e.createBlock(AE,{key:4,token:te.value,fields:u.value.fields,columns:de.value,"onUpdate:columns":G[9]||(G[9]=$e=>de.value=$e),onSave:G[10]||(G[10]=$e=>Y("filters",$e))},null,8,["token","fields","columns"])):F.value==="metadata"?(e.openBlock(),e.createBlock(qr,{key:5,data:c.value,"entity-id":String(e.unref(s)),"entity-type":"service",onSaved:we},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-3ee04cf6"]])},Symbol.toStringTag,{value:"Module"})),mC={class:"flex-1 flex flex-col bg-gray-50 h-screen overflow-hidden p-0 m-0"},pC={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"},gC={class:"flex-1 px-4 sm:px-6 pb-4 overflow-y-auto overflow-x-visible"},yC={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-visible"},hC={class:"p-3 border-b border-gray-200"},bC={class:"flex flex-col sm:flex-row gap-2"},xC={class:"entity-table-root"},kC={class:"gap-2 inline-flex"},wC=["onClick"],_C={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"},EC={class:"text-sm text-gray-500"},CC={class:"font-medium text-gray-700"},NC={class:"font-medium text-gray-700"},VC={class:"font-medium text-gray-700"},BC={class:"flex items-center justify-end gap-3"},$C=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"RastersTablePage",props:{entityKey:{default:"rasters"},entityBasePath:{default:"/gis.rasters"},columnsConfig:{default:()=>[]}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/table")),o=He.useRoute(),r=He.useRouter(),l=t,s=e.computed(()=>{var D;return String(((D=o.meta)==null?void 0:D.title)||"Растри")}),i=e.computed(()=>{var D;return String(((D=o.meta)==null?void 0:D.description)||"")}),d=e.computed(()=>`Пошук ${String(s.value).trim()}...`),u=e.computed(()=>l.entityKey||"rasters"),c=e.computed(()=>l.entityBasePath||"/gis.rasters"),p=e.ref([]),a=e.ref(!0),g=e.ref([]),m=e.ref([]),y=e.ref({}),k=e.ref([]),h=e.ref(String(o.query.search??"")),f=e.ref(Math.max(1,Number(o.query.page)||1)),b=e.ref(15),x=e.ref(0),N=e.computed(()=>x.value>0),V=e.computed(()=>x.value?(f.value-1)*b.value+1:0),_=e.computed(()=>x.value?Math.min(f.value*b.value,x.value):0);function w(D){const Q=new URLSearchParams;return Object.entries(D).forEach(([T,E])=>{if(!(E==null||E==="")){if(Array.isArray(E)){E.forEach(L=>{L!=null&&L!==""&&Q.append(T,String(L))});return}Q.append(T,String(E))}}),Q.toString()}function B(){return`${c.value}/new`}function v(D){return`${c.value}/${D}/edit`}async function K(){try{a.value=!0;const D=`/api/data/gis.${u.value}.table`,Q=w({...y.value,page:f.value,limit:b.value}),T=await fetch(Q?`${D}?${Q}`:D);if(!T.ok)throw new Error(`Rows fetch failed: ${T.status}`);const E=await T.json();p.value=E.rows||[],x.value=Number(E.filtered??E.total??E.count??p.value.length)||0,g.value=l.columnsConfig.length?l.columnsConfig:E.columns||[],m.value=E.filters||[],k.value=E.actions||[],g.value.length&&!g.value[0].link?g.value[0].link=`${c.value}/{id}`:g.value.length&&(g.value[0].link=`${c.value}/{id}`)}catch{p.value=[],x.value=0}finally{a.value=!1}}function J(D){y.value=D,f.value=1,te(),K()}async function O(D,Q,T){const E=await fetch(`/api/form/gis.${u.value}.table/${D.id}`);if(!E.ok)throw new Error(`Form fetch failed: ${E.status}`);const A=(await E.json()).token,me=await fetch(`/api/table/${A}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({[Q]:T})});if(!me.ok)throw Ce.notify({type:"error",title:"Помилка збереження",message:`Поле "${Q}" не оновлено`}),new Error(`Save failed: ${me.status}`);Ce.notify({title:"Збережено",message:`Поле "${Q}" оновлено`})}function ne(D,Q){y.value={...y.value,[D]:Q},f.value=1,te(),K()}function de(D){ne((D==null?void 0:D.name)||"search",(D==null?void 0:D.value)??h.value)}function xe(D){h.value="",ne(D||"search",void 0)}function se(D){!D||D===f.value||(f.value=D,te(),K())}function te(){const D={...o.query,page:String(f.value),...h.value?{search:h.value}:{}};h.value||delete D.search,delete D.view,r.replace({query:D})}return e.onMounted(()=>{K(),document.title=s.value}),e.watch(()=>o.name,()=>{f.value=1,h.value="",K(),document.title=s.value}),e.watch(()=>o.query,D=>{const Q=Math.max(1,Number(D.page)||1),T=String(D.search??""),E=Q!==f.value,L=T!==h.value;!E&&!L||(f.value=Q,h.value=T,y.value={...y.value,search:T||void 0},K())}),(D,Q)=>(e.openBlock(),e.createElementBlock("div",mC,[e.createVNode(sn,{variant:"table"},e.createSlots({title:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),actions:e.withCtx(()=>[e.createElementVNode("a",pC,[e.createVNode(e.unref(he.RefreshCw),{size:16}),Q[2]||(Q[2]=e.createTextVNode(" Оновити растри ",-1))]),e.createElementVNode("a",{onClick:Q[0]||(Q[0]=T=>e.unref(r).push(B())),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(he.Plus),{size:16}),Q[3]||(Q[3]=e.createTextVNode(" Додати ",-1))])]),_:2},[i.value?{name:"description",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.value),1)]),key:"0"}:void 0]),1024),e.createElementVNode("div",gC,[e.createElementVNode("div",yC,[e.createElementVNode("div",hC,[e.createElementVNode("div",bC,[e.createVNode(e.unref(eo.FilterField),{modelValue:h.value,"onUpdate:modelValue":Q[1]||(Q[1]=T=>h.value=T),name:"search",type:"text",layout:"inline",class:"flex-1",width:"100%",cleanable:!0,onChange:de,onClear:xe,placeholder:d.value},null,8,["modelValue","placeholder"]),e.createVNode(e.unref(eo.Filter),{schema:m.value,value:y.value,onChange:J,layout:"inline",mode:"soft",view:"popover",limit:8,class:"flex-shrink-0"},null,8,["schema","value"])])]),e.createElementVNode("div",xC,[e.createVNode(e.unref(n),{rows:p.value,columns:g.value,loading:a.value,router:e.unref(r),selectable:!1,onCellUpdate:O,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:T})=>[e.createElementVNode("div",kC,[e.createElementVNode("button",{onClick:E=>e.unref(r).push(v(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(to)],8,wC)])]),_:1},8,["rows","columns","loading","router"])]),N.value?(e.openBlock(),e.createElementBlock("div",_C,[e.createElementVNode("div",EC,[Q[4]||(Q[4]=e.createTextVNode(" Показано ",-1)),e.createElementVNode("span",CC,e.toDisplayString(V.value),1),Q[5]||(Q[5]=e.createTextVNode(" - ",-1)),e.createElementVNode("span",NC,e.toDisplayString(_.value),1),Q[6]||(Q[6]=e.createTextVNode(" з ",-1)),e.createElementVNode("span",VC,e.toDisplayString(x.value),1)]),e.createElementVNode("div",BC,[e.createVNode(e.unref(Ce.VsPagination),{total:x.value,page:f.value,"page-size":b.value,showPageSizes:!1,pageRange:5,view:"button",color:"gray","onUpdate:page":se,onPageChange:se},null,8,["total","page","page-size"])])])):e.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-63309b89"]])},Symbol.toStringTag,{value:"Module"})),SC={class:"flex-1 overflow-y-auto p-4 sm:p-6"},vC={class:"space-y-3"},LC={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},TC={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},AC={class:"text-xs text-gray-500 mb-1"},MC={key:0,class:"text-base text-md font-semibold text-gray-900"},FC={key:1,class:"text-base text-md font-semibold text-gray-900"},DC={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},PC={class:"space-y-2"},zC={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},IC={class:"text-sm font-semibold text-gray-900"},RC={class:"text-xs text-gray-600 mt-1"},jC={class:"grid grid-cols-2 gap-3"},OC={class:"text-xs text-gray-500 mb-1"},UC={class:"text-sm font-semibold text-gray-900"},qC={class:"bg-gray-50 p-4 rounded-lg"},HC={class:"grid grid-cols-2 gap-4"},WC={class:"text-xs text-gray-500 mb-1"},YC={class:"text-sm font-semibold text-gray-900"},GC=e.defineComponent({directives:{tooltip:Ce.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",SC,[e.createElementVNode("div",vC,[e.createElementVNode("div",LC,[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",TC,[(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",AC,e.toDisplayString(l.label),1),l.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",MC,[e.createTextVNode(e.toDisplayString(l.value),1)])),[[r,l.tooltip]]):(e.openBlock(),e.createElementBlock("p",FC,e.toDisplayString(l.value),1))]))),128))])]),e.createElementVNode("div",DC,[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",PC,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",zC,[e.createElementVNode("p",IC,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",RC,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",jC,[(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",OC,e.toDisplayString(l.label),1),e.createElementVNode("p",UC,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",qC,[e.createElementVNode("div",HC,[(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",WC,e.toDisplayString(l.label),1),e.createElementVNode("p",YC,e.toDisplayString(l.value),1)]))),128))])])])])])])}}}),ZC={class:"flex-1 overflow-y-auto space-y-3 pr-1"},KC={class:"font-medium text-sm text-gray-800"},XC={class:"text-xs text-gray-500"},JC=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ZC,[(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",KC,e.toDisplayString(r.name),1),e.createElementVNode("p",XC,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))]))}}),QC={},eN={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 tN(t,n){return e.openBlock(),e.createElementBlock("svg",eN,[...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 nN=Fe(QC,[["render",tN]]),oN={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},rN={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},lN={class:"flex items-center gap-2"},aN={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},sN={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},iN=["checked"],cN=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,s=qe(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:i}=Ke(),d=e.ref(1);e.watch(()=>n.tileUrl,a=>{if(!a){s.setVisible(!1);return}s.setVisible(!0),s.setTiles([a])},{immediate:!0}),e.watch(()=>d.value,a=>{s.setOpacity(a)},{immediate:!0});let u=null,c=!1;e.watch(()=>n.extent,a=>{if(!a||a.length!==4)return;const g=a.join(",");if(g!==u){if(u=g,!c){c=!0;return}i==null||i([[a[0],a[1]],[a[2],a[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const p=e.computed(()=>`${Math.round(d.value*100)}%`);return(a,g)=>(e.openBlock(),e.createElementBlock("div",oN,[e.createElementVNode("div",rN,[e.createElementVNode("div",lN,[g[2]||(g[2]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":g[0]||(g[0]=m=>d.value=m),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,d.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(p.value),1)])]),e.createElementVNode("div",aN,[e.createElementVNode("label",sN,[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:g[1]||(g[1]=m=>a.$emit("toggle-extent",m.target.checked))},null,40,iN),g[3]||(g[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),Do=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{},lineColor:{},lineWidth:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,l=e.computed(()=>{const{extent:d}=n;if(!d||d.length!==4)return null;const[u,c,p,a]=d;return[u,c,p,a].some(g=>typeof g!="number"||Number.isNaN(g))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[u,c],[p,c],[p,a],[u,a],[u,c]]]}}]}}),s=Ke(),i=qe(o,{sourceId:r,source:{type:"geojson",data:l.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(()=>l.value,d=>{var c;if(!d){i.setVisible(!1),i.setData({type:"FeatureCollection",features:[]});return}i.setVisible(!0),i.setData(d);const u=(c=s.map)==null?void 0:c.value;u!=null&&u.moveLayer&&u.getLayer(o)&&u.moveLayer(o)},{immediate:!0}),(d,u)=>e.createCommentVNode("",!0)}}),dN={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},uN={class:"flex-1 relative overflow-hidden"},fN={class:"absolute top-0 left-0 w-full z-20"},mN={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},pN={class:"flex items-start justify-between gap-4"},gN={class:"flex-1 min-w-0"},yN={class:"flex items-center text-sm text-gray-500 mb-3"},hN={class:"text-gray-900 font-medium truncate max-w-xs"},bN={class:"flex items-center justify-between gap-4"},xN={class:"flex-1 min-w-0"},kN={class:"flex items-center gap-3 mb-1"},wN={class:"text-base font-semibold text-gray-900 truncate"},_N=["title"],EN={class:"flex items-center gap-4 min-w-0"},CN={class:"flex-1 min-w-0"},NN=["title"],VN={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]"},BN={class:"relative w-full h-full"},$N={class:"absolute top-4 left-4 z-20"},SN={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"},vN={class:"flex-1 flex flex-col h-full"},LN={class:"px-3 pt-3 pb-2 border-b border-gray-100"},TN={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"},AN=["aria-selected","onClick"],MN={class:"leading-none"},FN={class:"flex flex-col flex-1 overflow-y-hidden p-3"},DN={key:0,class:"mb-3 text-xs text-slate-500"},PN={key:1,class:"mb-3 text-xs text-rose-600"},zN="OpenGIS",es=2,Po=5,IN=5,RN=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=He.useRouter(),r=He.useRoute(),l=e.ref(null),s=e.computed(()=>{var M;const P=(M=r.matched[r.matched.length-1])==null?void 0:M.path;return(typeof P=="string"&&P?P:r.path).replace(/\/:id\??$/,"")||"/"}),i=e.computed(()=>{var pe;const P=(pe=r.meta)==null?void 0:pe.title;return typeof P=="string"&&P.trim()?P:"Растри"});function d(){o.push(s.value)}const u=e.computed(()=>{var pe;const P=(pe=r.params)==null?void 0:pe.id;return typeof P=="string"?P:void 0}),c=e.ref(null),p=e.ref(!1),a=e.ref(!1),g=e.ref(null),m=e.ref(!0),y=e.ref(!1),k=e.ref(null);let h=null,f=null;const b=e.ref(!1);let x=null,N=!1;function V(P){if(Array.isArray(P))return V(P[0]);if(typeof P!="string"&&typeof P!="number")return null;const pe=typeof P=="number"?P:Number(P.trim());return Number.isFinite(pe)?pe:null}function _(P,pe){return P.toFixed(pe)}function w(P,pe,M){const W=.5*10**-M;return Math.abs(P-pe)>W}function B(){var P;return(P=l.value)==null?void 0:P.ctx}function v(){var j,ae,re,Ne;const P=(ae=(j=B())==null?void 0:j.map)==null?void 0:ae.value;if(!P)return;const pe=V(r.query.z),M=V(r.query.x),W=V(r.query.y);if(pe==null||M==null||W==null)return;const X=(re=P.getCenter)==null?void 0:re.call(P),be=(Ne=P.getZoom)==null?void 0:Ne.call(P);(!X||w(X.lng,M,Po)||w(X.lat,W,Po)||w(be??0,pe,es))&&(b.value=!0,P.jumpTo({center:[M,W],zoom:pe}),b.value=!1)}function K(){var X,be,Ve,j;if(b.value)return;const P=(be=(X=B())==null?void 0:X.map)==null?void 0:be.value;if(!P)return;const pe=(Ve=P.getCenter)==null?void 0:Ve.call(P),M=(j=P.getZoom)==null?void 0:j.call(P);if(!pe||M==null)return;const W={...r.query,z:_(M,es),x:_(pe.lng,Po),y:_(pe.lat,Po)};r.query.z===W.z&&r.query.x===W.x&&r.query.y===W.y||o.replace({query:W})}function J(){var pe;if(typeof document>"u")return;const P=(pe=oe.value)==null?void 0:pe.name;document.title=P?`${P} — Растер`:zN}function O(P){return Number(P.toFixed(IN))}function ne(P,pe){const[M,W]=P,[X,be]=pe;return[O(Math.min(M,X)),O(Math.min(W,be)),O(Math.max(M,X)),O(Math.max(W,be))]}function de(P){const[pe,M,W,X]=P;return{type:"Polygon",coordinates:[[[pe,M],[W,M],[W,X],[pe,X],[pe,M]]]}}function xe(P){var W,X,be;const pe=(X=(W=B())==null?void 0:W.map)==null?void 0:X.value,M=(be=pe==null?void 0:pe.getCanvas)==null?void 0:be.call(pe);M!=null&&M.style&&(M.style.cursor=P)}async function se(P,pe){if(!(!u.value||!c.value))try{const M=de(P),W=await fetch(`/api/gis-metadata/raster/${encodeURIComponent(u.value)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:M})});if(!W.ok)throw new Error(`Failed to save raster metadata geom: ${W.status}`);Ce.notify({type:"success",title:"Extent збережено",message:"Нові межі успішно збережено."}),await ye()}catch(M){console.error("Failed to save raster extent",M),c.value&&(c.value={...c.value,extent:pe?[...pe]:void 0}),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Extent"})}}function te(P){var M,W,X;const pe=(W=(M=B())==null?void 0:M.map)==null?void 0:W.value;if((X=pe==null?void 0:pe.dragPan)!=null&&X.enable&&pe.dragPan.enable(),(P==null?void 0:P.length)===4&&c.value){const be=Array.isArray(c.value.extent)?[...c.value.extent]:null;c.value={...c.value,extent:[...P]},se(P,be)}x=null,N=!1,k.value=null,y.value=!1,xe("")}function D(){te(null)}function Q(){var be,Ve;const P=(Ve=(be=B())==null?void 0:be.map)==null?void 0:Ve.value;if(!P)return;const pe=j=>{var re,Ne,Se;if(!y.value||((re=j==null?void 0:j.originalEvent)==null?void 0:re.button)!=null&&j.originalEvent.button!==0)return;const ae=j==null?void 0:j.lngLat;ae&&(x=[ae.lng,ae.lat],N=!0,k.value=[ae.lng,ae.lat,ae.lng,ae.lat],(Se=(Ne=P.dragPan)==null?void 0:Ne.disable)==null||Se.call(Ne))},M=j=>{if(!y.value||!N||!x)return;const ae=j==null?void 0:j.lngLat;ae&&(k.value=ne(x,[ae.lng,ae.lat]))},W=j=>{if(!y.value||!N||!x)return;const ae=j==null?void 0:j.lngLat;if(!ae){D();return}const re=ne(x,[ae.lng,ae.lat]),[Ne,Se,Oe,Qe]=re;if(!(Math.abs(Oe-Ne)>0&&Math.abs(Qe-Se)>0)){Ce.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),D();return}te(re)},X=j=>{y.value&&j.key==="Escape"&&(j.preventDefault(),D())};P.on("mousedown",pe),P.on("mousemove",M),P.on("mouseup",W),window.addEventListener("keydown",X),f=()=>{P.off("mousedown",pe),P.off("mousemove",M),P.off("mouseup",W),window.removeEventListener("keydown",X)}}async function T(){var M;if(y.value)return;const P=B();!(P!=null&&P.ready)||(await P.ready(),!((M=P.map)==null?void 0:M.value))||(f||Q(),y.value=!0,N=!1,x=null,k.value=null,xe("crosshair"),Ce.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}const E=e.computed(()=>{var pe;const P=(pe=c.value)==null?void 0:pe.url;return P?/^https?:\/\//i.test(P)||typeof window>"u"||typeof location>"u"?P:`${location.origin}${P}`:""}),L=e.computed(()=>{var P;return((P=c.value)==null?void 0:P.extent)??null}),A=e.computed(()=>u.value?`raster-${u.value}`:void 0),me=e.computed(()=>u.value?`raster-extent-${u.value}`:"raster-extent"),I=e.computed(()=>u.value?`raster-extent-draft-${u.value}`:"raster-extent-draft"),F=e.computed(()=>{const P=A.value??"raster",pe=L.value&&L.value.length===4?L.value.join(","):"no-extent";return`${P}-${pe}`}),z=e.computed(()=>!!E.value),H=e.computed(()=>{const P=L.value;if(!P||P.length!==4)return null;const[pe,M,W,X]=P;return[pe,M,W,X].some(be=>typeof be!="number"||Number.isNaN(be))?null:[(pe+W)/2,(M+X)/2]}),oe=e.computed(()=>{var be,Ve;const P=c.value,pe=P==null?void 0:P.extent,W=u.value??"—",X=[P!=null&&P.extension?`Формат ${String(P.extension).toUpperCase()}`:null,(P==null?void 0:P.resolution)||null].filter(Boolean).join(", ");return{id:W,name:(P==null?void 0:P.name)||((Ve=(be=P==null?void 0:P.files)==null?void 0:be[0])==null?void 0:Ve.name),description:(P==null?void 0:P.description)||X||"Попередній перегляд растрового шару.",coverage:pe&&pe.length===4?`${nt(pe[0])}, ${nt(pe[1])} → ${nt(pe[2])}, ${nt(pe[3])}`:"Покриття уточнюється",crs:P!=null&&P.srid?`EPSG:${P.srid}`:"EPSG:4326",source:P!=null&&P.proj4?P.proj4:"Джерело: Mapnik",updatedAt:P!=null&&P.cache?"Дані кешовано":"Нові дані"}}),R=e.computed(()=>{const P=c.value;return P?[P.source_path,P.srid?`SRID: ${P.srid}`:null,P.is_public?"Публічна":"Не публічна",P.is_active?"Активна":"Неактивна",P.cache?"Кешовано":null].filter(pe=>pe).join(", "):""}),ee=[{key:"info",label:"Інформація",icon:nN},{key:"files",label:"Файли",icon:to},{key:"metadata",label:"Метадані",icon:Ur}],ge=ee.map(P=>P.key),we=e.ref(ge.includes(r.query.tab)?r.query.tab:"info"),S=e.ref(!0);e.watch(()=>r.query.tab,P=>{P&&ge.includes(P)&&we.value!==P&&(we.value=P)}),e.watch(we,P=>{r.query.tab!==P&&o.replace({query:{...r.query,tab:P}})});const Y=e.computed(()=>G(c.value)),ue=e.computed(()=>ve(c.value));e.watch(()=>c.value,()=>{J()},{immediate:!0});async function ie(){var W;const P=B();if(!(P!=null&&P.ready))return;await P.ready(),v();const pe=(W=P.map)==null?void 0:W.value;if(!pe)return;const M=()=>K();pe.on("moveend",M),pe.on("zoomend",M),h=()=>{pe.off("moveend",M),pe.off("zoomend",M)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{v()}),e.onMounted(()=>{ie()}),e.onBeforeUnmount(()=>{h==null||h(),h=null,f==null||f(),f=null,xe("")}),e.watch(u,()=>{ye()},{immediate:!0});async function ce(P){var pe;ye(),((pe=c.value)==null?void 0:pe.srid)!==P.srid&&(Ce.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await Z(`/api/gis-xml/${encodeURIComponent(u.value)}`),Ce.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function ye(){const P=u.value;if(!P){c.value=null,g.value=null;return}p.value=!0,g.value=null;try{const pe=await fetch(`/api/gis-raster/${encodeURIComponent(P)}`);if(!pe.ok)throw new Error(`HTTP ${pe.status}`);const M=await pe.json();M.xml&&(a.value=!0),c.value=M,M.xml||(Ce.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await Z(`/api/gis-xml/${encodeURIComponent(P)}`),Ce.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(P)}?nocache=1`),a.value=!0)}catch(pe){console.error("Failed to load raster info",pe),c.value=null,g.value=pe instanceof Error?pe.message:String(pe)}finally{p.value=!1}}function Z(P){return new Promise((pe,M)=>{const W=new EventSource(P),X=[];W.onmessage=be=>{X.push(be.data),console.log("Received:",be.data)},W.addEventListener("end",()=>{W.close(),pe(X)}),W.onerror=be=>{W.close(),pe(be)}})}function G(P){var pe;return(pe=P==null?void 0:P.files)!=null&&pe.length?P.files.map(M=>({name:M.name,resolution:ke(M.name,P),size:M.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function ke(P,pe){const M=P.toLowerCase();return M.endsWith(".tfw")?"Georeference":M.endsWith(".xml")?"Опис":M.endsWith(".tif")||M.endsWith(".tiff")?pe!=null&&pe.resolution?pe.resolution:"Растер":(pe==null?void 0:pe.resolution)??"Файл"}function ve(P){return P?{baseParams:$e(P),spatial:{crs:{code:P.srid?`EPSG:${P.srid}`:"EPSG:4326",description:P.proj4||"WGS 84 — World Geodetic System 1984"},bounds:Je(P.extent),resolution:Re(P)},statistics:at(P),technical:et(P)}:null}function Ae(P){return P!=null&&P.length?P.map(M=>{var X;if(!M)return"";const W=M.trim().split(/\s+/)[0];return((X=W==null?void 0:W[0])==null?void 0:X.toUpperCase())||""}).filter(Boolean).join(""):""}function $e(P){var be,Ve;const pe=P.bands_count??((be=P.bands)==null?void 0:be.length)??"—",M=Ae(P.bands),W=(P.bands??[]).map(j=>j.trim()).filter(j=>j.length>0),X=W.length?W.join(", "):void 0;return[{label:"Розмір растру, px",value:P.width&&P.height?`${P.width}×${P.height}`:"—"},{label:"Формат файлу",value:((Ve=P.extension)==null?void 0:Ve.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:P.total_size?`${P.total_size}`:"—"},{label:"Кількість каналів",value:typeof pe=="number"?`${pe}${M?` (${M})`:""}`:`${pe}${M?` (${M})`:""}`,tooltip:X},{label:"Глибина кольору",value:P.color_depth?`${P.color_depth} біт/канал`:"—"},{label:"Стиснення",value:P.compression||"—"}]}function Je(P){return!P||P.length!==4?[]:[{label:"Північ",value:nt(P[3],"N")},{label:"Схід",value:nt(P[2],"E")},{label:"Південь",value:nt(P[1],"S")},{label:"Захід",value:nt(P[0],"W")}]}function Re(P){const pe=[{label:"Роздільна здатність",value:P.resolution||"—"}];return P.width&&P.height&&pe.push({label:"Розмір пікселя",value:`${P.width} × ${P.height} px`}),pe}function at(P){var pe;return(pe=P.bands)!=null&&pe.length?P.bands.map((M,W)=>{const X=n[W%n.length];return{label:`Канал ${W+1}${M?` (${M})`:""}`,cardClass:X.cardClass,titleClass:X.titleClass,metrics:[{label:"Назва",value:M||`Канал ${W+1}`},{label:"Глибина",value:P.color_depth?`${P.color_depth} біт`:"—"},{label:"Статус",value:P.cache?"Кешовано":"Готово"}]}}):[]}function et(P){var pe;return[{label:"Тип даних",value:P.color_depth?`Unsigned Integer ${P.color_depth}-bit`:"—"},{label:"Компресія",value:P.compression||"—"},{label:"Кольорова інтерпретація",value:((pe=P.bands)==null?void 0:pe.join(", "))||"—"},{label:"SRID",value:P.srid?`EPSG:${P.srid}`:"—"},{label:"Проекція (proj4)",value:P.proj4||"—"},{label:"URL тайла",value:P.url||"—"}]}function nt(P,pe){if(P==null||Number.isNaN(P))return"—";const M=`${P.toFixed(5)}°`;return pe?`${M} ${pe}`:M}return(P,pe)=>(e.openBlock(),e.createElementBlock("div",dN,[e.createElementVNode("div",uN,[e.createElementVNode("div",fN,[e.createElementVNode("div",mN,[e.createElementVNode("div",pN,[e.createElementVNode("div",gN,[e.createElementVNode("div",yN,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:d},e.toDisplayString(i.value),1),pe[2]||(pe[2]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-chevron-right w-4 h-4 mx-1"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)),e.createElementVNode("span",hN,e.toDisplayString(oe.value.name||"Растер"),1)]),e.createElementVNode("div",bN,[e.createElementVNode("div",xN,[e.createElementVNode("div",kN,[e.createElementVNode("h1",wN,e.toDisplayString(oe.value.name||"Растер"),1)]),R.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:R.value},e.toDisplayString(R.value),9,_N)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",EN,[e.createElementVNode("div",CN,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:oe.value.description},e.toDisplayString(oe.value.description),9,NN)]),e.createVNode(Hr,{"entity-id":u.value||"","entity-info":{name:oe.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:ce},null,8,["entity-id","entity-info"])])])])]),e.createElementVNode("div",VN,[e.createElementVNode("div",BN,[e.createVNode(no,{ref_key:"mapViewRef",ref:l},{default:e.withCtx(()=>[z.value&&a.value?(e.openBlock(),e.createBlock(cN,{key:F.value,"tile-url":E.value,extent:L.value,"layer-id":A.value,"show-raster-extent":m.value,onToggleExtent:pe[0]||(pe[0]=M=>m.value=M)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(Do,{extent:m.value?L.value:null,"layer-id":me.value},null,8,["extent","layer-id"]),e.createVNode(Do,{extent:k.value,"layer-id":I.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createElementVNode("div",$N,[e.createVNode(rn)]),y.value?(e.openBlock(),e.createElementBlock("div",SN," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),e.createVNode(Zr,null,{default:e.withCtx(()=>[e.createVNode(Wr),e.createVNode(Yr),e.createVNode(Gr),e.createVNode(Yt),H.value?(e.openBlock(),e.createBlock(Yt,{key:0,targetCenter:H.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),_:1})]),_:1},512)])]),e.createVNode(Or,{open:S.value,onToggle:pe[1]||(pe[1]=M=>S.value=!S.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",S.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",vN,[e.createElementVNode("div",LN,[e.createElementVNode("div",TN,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(ee,M=>e.createElementVNode("button",{key:M.key,type:"button",role:"tab","aria-selected":we.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",we.value===M.key?"bg-white shadow-sm text-gray-700":""]),onClick:W=>we.value=M.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(M.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",MN,e.toDisplayString(M.label),1)],10,AN)),64))])]),e.createElementVNode("div",FN,[p.value?(e.openBlock(),e.createElementBlock("div",DN," Завантаження метаданих растру… ")):g.value?(e.openBlock(),e.createElementBlock("div",PN," Не вдалося отримати дані: "+e.toDisplayString(g.value),1)):e.createCommentVNode("",!0),we.value==="files"?(e.openBlock(),e.createBlock(JC,{key:2,files:Y.value},null,8,["files"])):we.value==="metadata"?(e.openBlock(),e.createBlock(qr,{key:3,data:c.value,"entity-id":u.value,"entity-type":"raster",onSaved:ye,onEditCssBounds:T},null,8,["data","entity-id"])):ue.value?(e.openBlock(),e.createBlock(GC,{key:4,details:ue.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}})},Symbol.toStringTag,{value:"Module"})),jN={},ON={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 UN(t,n){return e.openBlock(),e.createElementBlock("svg",ON,[...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 qN=Fe(jN,[["render",UN]]),HN={class:"flex flex-col h-full"},WN={class:"flex justify-end mb-3 gap-2"},YN=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:s=>r("update:modelValue",s)});return(s,i)=>(e.openBlock(),e.createElementBlock("div",HN,[e.createElementVNode("div",WN,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:i[0]||(i[0]=d=>s.$emit("save"))},[...i[2]||(i[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(Hn,{modelValue:l.value,"onUpdate:modelValue":i[1]||(i[1]=d=>l.value=d),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),GN={class:"flex flex-col flex-1 min-h-0"},ZN={class:"flex justify-between mb-3 gap-2"},KN={class:"text-left"},XN={class:"font-medium text-gray-900"},JN={class:"text-xs text-gray-500"},QN={class:"flex justify-center gap-2"},eV=["checked","onChange"],tV={class:"text-sm font-medium text-gray-900"},nV=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(y=>y.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),i=n,d=e.ref(!1),u=e.ref({table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),c={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},gcol:{type:"text",label:"Колонка geometry"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function p(){u.value={table:"",query:"",srid:"",key:"",columns:"",gcol:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},d.value=!0}function a(){d.value=!1}function g(){var h,f;const y=(h=u.value.table)==null?void 0:h.trim(),k=(f=u.value.key)==null?void 0:f.trim();if(!y||!k){Ce.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}s.value=[...Array.isArray(s.value)?s.value:[],{...u.value,table:y,key:k}],d.value=!1}function m(y,k){var f;const h=((f=k==null?void 0:k.target)==null?void 0:f.checked)??!1;y.active=h,s.value=Array.isArray(s.value)?[...s.value]:[]}return(y,k)=>(e.openBlock(),e.createElementBlock("div",GN,[e.createElementVNode("div",ZN,[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:p}," Додати таблицю "),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:k[0]||(k[0]=h=>i("save"))}," Зберегти ")]),e.createVNode(Pt,{modelValue:s.value,"onUpdate:modelValue":k[1]||(k[1]=h=>s.value=h),"columns-scheme":o,"form-scheme":c,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:h})=>[e.createElementVNode("div",KN,[e.createElementVNode("div",XN,e.toDisplayString(h.table),1),e.createElementVNode("div",JN,e.toDisplayString(h.key),1)])]),activeCell:e.withCtx(({row:h})=>[e.createElementVNode("label",QN,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:h.active,onChange:f=>m(h,f)},null,40,eV)])]),zoomCell:e.withCtx(({row:h})=>[e.createElementVNode("div",tV,e.toDisplayString(h.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:d.value,"onUpdate:visible":k[3]||(k[3]=h=>d.value=h),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:a}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:g}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{values:u.value,"onUpdate:values":k[2]||(k[2]=h=>u.value=h),schema:c},null,8,["values"])]),_:1},8,["visible"])]))}}),oV={class:"flex flex-col flex-1 min-h-0 gap-4"},rV={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},lV=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),s=e.ref(o.card),i=e.defineAsyncComponent(()=>import("@opengis/form").then(u=>u.VsInputText));function d(){r("save",{card_html:s.value,card_table:l.value})}return(u,c)=>(e.openBlock(),e.createElementBlock("div",oV,[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:d},[...c[2]||(c[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(i),{modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=p=>l.value=p)},null,8,["modelValue"])]),e.createElementVNode("div",rV,[e.createVNode(Hn,{modelValue:s.value,"onUpdate:modelValue":c[1]||(c[1]=p=>s.value=p),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),aV=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=Ke(),{activateTemporaryLayer:r,deactivateTemporaryLayer:l,setTemporaryLayerOpacity:s}=Vn(o.map),i=e.computed(()=>{var a;const p=`${(a=n==null?void 0:n.tileUrl)==null?void 0:a.trim()}`;return p?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(p)?p:p.startsWith("//")?`${window.location.protocol}${p}`:p.startsWith("/")?`${location.origin}${p}`:`${location.origin}/${p}`:""});let d="",u="";function c(){const p=n.active&&!!i.value;d&&(!p||d!==n.layerId)&&(l(d,u||void 0),d="",u=""),p&&(r({id:n.layerId,title:n.title||n.layerId,url:i.value,opacity:n.opacity},{},n.owner),d=n.layerId,u=n.owner||"")}return e.watch(()=>[n.layerId,i.value,n.active,n.owner],c,{immediate:!0}),e.watch(()=>n.opacity,p=>{!d||!n.active||s(d,p,u||void 0)},{immediate:!0}),e.onUnmounted(()=>{d&&(l(d,u||void 0),d="",u="")}),(p,a)=>e.createCommentVNode("",!0)}}),sV=e.defineComponent({__name:"CartocssMapClickListener",props:{cartocssId:{},infoEnabled:{type:[Boolean,null]},active:{type:[Boolean,null]}},setup(t){const n=t,o=e.computed(()=>n.cartocssId??null),r=e.computed(()=>!!n.infoEnabled&&n.active!==!1),{map:l,ready:s}=Ke(),i=m=>{!m||typeof window>"u"||window.dispatchEvent(new CustomEvent(rr,{detail:m}))},d=async m=>{const y=await fetch(`/api/map-format?${m.toString()}`);if(!y.ok)throw new Error(`API returned ${y.status}`);return y.json()};let u=null,c=null;const p=m=>{if(!m)return null;if(typeof m=="string")try{return JSON.parse(m)}catch{return null}return m},a=async(m,y)=>{var f;const k=o.value?`external:${o.value},${String(m)}`:null,h=new URLSearchParams({layer:o.value??"",id:String(m)});try{const b=await d(h),x=typeof b.html=="string"?b.html:null,N=p(((f=b==null?void 0:b.data)==null?void 0:f.geom)??(b==null?void 0:b.geom)??null);(x||N)&&i({html:x,geometry:N??y,infoToken:k})}catch(b){console.warn("CartoCSS map-format (id) error",b)}},g=async m=>{var f,b,x,N;if(!o.value||n.active===!1)return;if(!r.value){Ce.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const y=(f=m==null?void 0:m.lngLat)==null?void 0:f.lng,k=(b=m==null?void 0:m.lngLat)==null?void 0:b.lat;if(typeof y!="number"||typeof k!="number")return;const h=new URLSearchParams({layer:o.value,lat:k.toFixed(6),lng:y.toFixed(6)});try{const V=await d(h),_=p(((x=V==null?void 0:V.data)==null?void 0:x.geom)??(V==null?void 0:V.geom)??null),w=((N=V==null?void 0:V.data)==null?void 0:N.id)??(V==null?void 0:V.id);if(w!=null){await a(w,_);return}Ll({html:V==null?void 0:V.html})&&i({html:V==null?void 0:V.html,geometry:_,infoToken:null})}catch(V){console.warn("CartoCSS map-format error",V)}};return s().then(()=>{c=l.value,c&&(c.on("click",g),u=()=>c==null?void 0:c.off("click",g))}),e.onBeforeUnmount(()=>{u==null||u(),u=null,c=null}),()=>{}}}),iV=100,cV=e.defineComponent({__name:"MapFullscreenButton",props:{target:{}},setup(t){const n=t,{map:o,ready:r}=Ke(),l=e.ref(!1),s=e.ref(!1);function i(){var a,g;if(n.target)return n.target;const p=(g=(a=o.value)==null?void 0:a.getContainer)==null?void 0:g.call(a);return p?p.closest(".map-view-root")??p:null}function d(){const p=i();s.value=!!(p&&document.fullscreenElement===p)}function u(){window.setTimeout(()=>{var p,a;(a=(p=o.value)==null?void 0:p.resize)==null||a.call(p)},iV)}async function c(){const p=i();if(p)try{document.fullscreenElement===p?await document.exitFullscreen():document.fullscreenElement?(await document.exitFullscreen(),await p.requestFullscreen()):await p.requestFullscreen()}catch(a){console.error("Fullscreen error:",a)}finally{d(),u()}}return e.onMounted(async()=>{await(r==null?void 0:r()),l.value=!!o.value,d(),document.addEventListener("fullscreenchange",d),document.addEventListener("fullscreenchange",u)}),e.onBeforeUnmount(()=>{document.removeEventListener("fullscreenchange",d),document.removeEventListener("fullscreenchange",u)}),(p,a)=>(e.openBlock(),e.createBlock(en,{title:s.value?"Вийти з повного екрана":"Повний екран",tooltip:s.value?"Вийти з повного екрана":"Повний екран",active:s.value,disabled:!l.value,onClick:c},{default:e.withCtx(()=>[s.value?(e.openBlock(),e.createBlock(e.unref(he.Minimize2),{key:0,class:"w-4 h-4"})):(e.openBlock(),e.createBlock(e.unref(he.Maximize2),{key:1,class:"w-4 h-4"}))]),_:1},8,["title","tooltip","active","disabled"]))}}),dV=e.defineComponent({__name:"MapCopyLinkButton",props:{url:{default:""}},setup(t){const n=t;async function o(){const r=n.url||(typeof window<"u"?window.location.href:"");if(!r){Ce.notify({type:"warning",title:"Посилання",message:"Немає URL для копіювання"});return}try{await navigator.clipboard.writeText(r),Ce.notify({type:"success",title:"Посилання",message:"Посилання скопійовано"})}catch(l){console.error("Copy link error:",l),Ce.notify({type:"error",title:"Посилання",message:"Не вдалося скопіювати посилання"})}}return(r,l)=>(e.openBlock(),e.createBlock(en,{title:"Копіювати посилання",tooltip:"Копіювати посилання",onClick:o},{default:e.withCtx(()=>[e.createVNode(e.unref(he.Link2),{class:"w-4 h-4"})]),_:1}))}}),uV={key:0,class:"absolute right-full top-0 mr-2 z-[450] flex",role:"group","aria-label":"Вибір рівня зуму"},fV={class:"flex flex-col items-center rounded-lg border border-gray-200 bg-white/95 py-2.5 pl-1 pr-2 shadow-lg backdrop-blur-sm"},mV=["title","onClick"],pV={key:0,class:"absolute right-5 text-[9px] tabular-nums text-gray-400"},gV=Fe(e.defineComponent({__name:"MapZoomSlider",props:{visible:{type:Boolean},modelValue:{},min:{default:5},max:{default:20}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(),s=e.ref(o.modelValue),i=e.ref(!1);e.watch(()=>o.modelValue,h=>{i.value||(s.value=h)});const d=e.computed(()=>{const h=[];for(let f=o.min;f<=o.max;f+=1)h.push(f);return h}),u=e.computed(()=>{const h=new Set;for(let f=o.min;f<=o.max;f+=5)h.add(f);return h.add(o.max),h}),c=h=>u.value.has(h),p=h=>{const f=o.max-o.min;return f<=0?0:(o.max-h)/f*100},a=h=>{r("update:modelValue",h)},g=h=>{if(!l.value)return;const f=l.value.getBoundingClientRect(),b=(h-f.top)/f.height;s.value=Math.max(o.min,Math.min(o.max,Math.round(o.max-b*(o.max-o.min))))},m=h=>{g(h.clientY)},y=()=>{window.removeEventListener("mousemove",m),window.removeEventListener("mouseup",y),i.value=!1,s.value!==o.modelValue&&r("update:modelValue",s.value)},k=h=>{i.value=!0,g(h.clientY),window.addEventListener("mousemove",m),window.addEventListener("mouseup",y)};return(h,f)=>(e.openBlock(),e.createBlock(e.Transition,{name:"zoom-panel"},{default:e.withCtx(()=>[t.visible?(e.openBlock(),e.createElementBlock("div",uV,[e.createElementVNode("div",fV,[f[1]||(f[1]=e.createElementVNode("span",{class:"mb-1 text-[9px] font-semibold uppercase tracking-wider text-gray-400"}," Zoom ",-1)),e.createElementVNode("div",{ref_key:"sliderRef",ref:l,class:"relative h-44 w-8 cursor-pointer select-none",onMousedown:e.withModifiers(k,["prevent"])},[f[0]||(f[0]=e.createElementVNode("div",{class:"absolute right-0 top-0 bottom-0 w-px bg-gray-200"},null,-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,b=>(e.openBlock(),e.createElementBlock("button",{key:b,type:"button",class:"absolute right-0 -translate-y-1/2 flex items-center justify-end group",style:e.normalizeStyle({top:`${p(b)}%`}),title:`Zoom ${b}`,onClick:e.withModifiers(x=>a(b),["stop"])},[e.createElementVNode("span",{class:e.normalizeClass(["block rounded-full",c(b)?"h-px w-2.5 bg-gray-300 group-hover:bg-gray-400":"h-px w-1.5 bg-gray-200 group-hover:bg-gray-300"])},null,2),c(b)?(e.openBlock(),e.createElementBlock("span",pV,e.toDisplayString(b),1)):e.createCommentVNode("",!0)],12,mV))),128)),e.createElementVNode("div",{class:"absolute right-0 -translate-y-1/2 flex items-center",style:e.normalizeStyle({top:`${p(s.value)}%`})},[e.createElementVNode("div",{class:e.normalizeClass(["h-[4px] w-4 rounded-full bg-blue-600/80 shadow-sm transition-all",i.value?"bg-blue-300 transform duration-200":""])},null,2)],4)],544)])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-ca77aba8"]]),yV={class:"text-[0.7rem] font-bold tabular-nums leading-none text-gray-600"},Kr=5,Xr=20,hV=13,bV=.01,xV=200,kV=e.defineComponent({__name:"MapZoomLevelButton",setup(t){const{map:n,ready:o}=Ke(),r=e.ref(!1),l=e.ref(!1),s=e.ref(hV),i=e.ref(!1),d=e.ref(Kr),u=e.ref(Xr),c=e.computed(()=>String(s.value));function p(f){return Math.round(Math.min(u.value,Math.max(d.value,f)))}function a(){var N,V;const f=n.value;if(!f)return;const b=(N=f.getMinZoom)==null?void 0:N.call(f),x=(V=f.getMaxZoom)==null?void 0:V.call(f);Number.isFinite(b)&&(d.value=Math.max(Kr,Math.floor(Number(b)))),Number.isFinite(x)&&(u.value=Math.min(Xr,Math.ceil(Number(x)))),d.value>u.value&&(d.value=Kr,u.value=Xr)}function g(){var N;const f=n.value;if(!f||i.value)return;const b=(N=f.getZoom)==null?void 0:N.call(f);if(b==null)return;const x=p(b);s.value!==x&&(s.value=x)}function m(f){var _,w;const b=n.value;if(!(b!=null&&b.easeTo))return;const x=(_=b.getCenter)==null?void 0:_.call(b);if(!x)return;const N=p(f),V=(w=b.getZoom)==null?void 0:w.call(b);V!=null&&Math.abs(V-N)<bV||(i.value=!0,b.easeTo({center:[x.lng,x.lat],zoom:N,duration:xV,essential:!0}))}function y(){i.value=!1,g()}function k(){l.value=!l.value,l.value&&(a(),g())}function h(f){s.value=f,m(f)}return e.onMounted(async()=>{var b;await(o==null?void 0:o());const f=n.value;r.value=!!f,a(),g(),(b=f==null?void 0:f.on)==null||b.call(f,"zoomend",y)}),e.onBeforeUnmount(()=>{var f,b;(b=(f=n.value)==null?void 0:f.off)==null||b.call(f,"zoomend",y)}),(f,b)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(en,{title:l.value?"Закрити вибір зуму":"Вибрати рівень зуму",tooltip:"Рівень зуму",active:l.value,disabled:!r.value,"aria-label":"Рівень зуму",onClick:k},{default:e.withCtx(()=>[e.createElementVNode("div",yV,e.toDisplayString(c.value),1)]),_:1},8,["title","active","disabled"]),e.createVNode(gV,{visible:l.value,"model-value":s.value,min:d.value,max:u.value,"onUpdate:modelValue":h},null,8,["visible","model-value","min","max"])],64))}}),wV=e.defineComponent({__name:"MapRulerButton",props:{active:{type:Boolean}},emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createBlock(en,{title:t.active?"Вимкнути лінійку":"Увімкнути лінійку",tooltip:"Вимірювання",active:t.active,"aria-label":"Вимірювання",onClick:o[0]||(o[0]=r=>n.$emit("click",r))},{default:e.withCtx(()=>[e.createVNode(e.unref(he.Ruler),{class:"w-4 h-4"})]),_:1},8,["title","active"]))}}),_V=e.defineComponent({__name:"RulerMapClickBridge",props:{active:{type:Boolean}},emits:["map-click"],setup(t,{emit:n}){const o=t,r=n,{map:l,ready:s}=Ke();let i=null;function d(c){if(!o.active)return;const p=c==null?void 0:c.lngLat;typeof(p==null?void 0:p.lat)!="number"||typeof(p==null?void 0:p.lng)!="number"||r("map-click",{lat:p.lat,lng:p.lng})}async function u(){if(i==null||i(),i=null,!o.active)return;await(s==null?void 0:s());const c=l.value;c!=null&&c.on&&(c.on("click",d),i=()=>{var p;return(p=c.off)==null?void 0:p.call(c,"click",d)})}return e.watch(()=>o.active,()=>{u()},{immediate:!0}),e.onBeforeUnmount(()=>{i==null||i(),i=null}),(c,p)=>null}}),EV={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},CV={class:"flex-1 relative overflow-hidden"},NV={class:"absolute top-0 left-0 w-full z-20"},VV={class:"px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm"},BV={class:"flex items-start justify-between gap-4"},$V={class:"flex-1 min-w-0"},SV={class:"flex items-center text-sm text-gray-500 mb-3"},vV={class:"text-gray-900 font-medium truncate max-w-xs"},LV={class:"flex items-center justify-between gap-4"},TV={class:"flex-1 min-w-0"},AV={class:"flex items-center gap-3 mb-1"},MV={class:"text-base font-semibold text-gray-900 truncate"},FV={key:0,class:"px-2 py-0.5 bg-green-50 border border-green-200 rounded flex-shrink-0"},DV={class:"text-xs font-medium text-green-700"},PV=["title"],zV={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]"},IV={class:"relative w-full h-full"},RV={class:"absolute top-3 left-3 z-20"},jV={class:"px-3 py-2 flex items-center gap-2 border-b border-gray-100"},OV={class:"text-xs text-gray-700 w-9 text-right"},UV={class:"px-3 py-2 flex items-center gap-2"},qV={for:"show-layer",class:"text-xs text-gray-700 flex items-center gap-1 cursor-pointer"},HV={key:2,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"},WV={class:"flex-1 flex flex-col h-full"},YV={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},GV=["aria-selected","onClick"],ZV={class:"leading-none"},KV={class:"flex flex-col flex-1 overflow-y-hidden p-3"},XV={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},JV="cartocss-demo-001",QV="OpenGIS",ts=2,zo=5,eB=5,tB=Object.freeze(Object.defineProperty({__proto__:null,default:e.defineComponent({__name:"cartocss",setup(t){const n=He.useRouter(),o=He.useRoute(),r=e.ref(null),l=e.computed(()=>{var re;const j=(re=o.matched[o.matched.length-1])==null?void 0:re.path;return(typeof j=="string"&&j?j:o.path).replace(/\/:id\??$/,"")||"/"}),s=e.computed(()=>{var ae;const j=(ae=o.meta)==null?void 0:ae.title;return typeof j=="string"&&j.trim()?j:"CartoCSS"});function i(){n.push(l.value)}const d=[{key:"css",label:"CSS",icon:Ga},{key:"data",label:"Дані",icon:qN},{key:"metadata",label:"Метадані",icon:Ur},{key:"card",label:"Картка",icon:Za}],u=d.map(j=>j.key),c=e.ref(u.includes(o.query.tab)?o.query.tab:"css"),p=e.ref(!0),a=e.ref(null),g=e.computed(()=>{var j;return(j=a.value)!=null&&j.source_path?d.filter(ae=>ae.key==="card"||ae.key==="metadata"):d}),m=e.computed(()=>o.params.id||JV),y=e.ref({id:m.value,name:"",description:""});let k=null;const h=e.ref(!1);function f(j){if(Array.isArray(j))return f(j[0]);if(typeof j!="string"&&typeof j!="number")return null;const ae=typeof j=="number"?j:Number(j.trim());return Number.isFinite(ae)?ae:null}function b(j,ae){return j.toFixed(ae)}function x(j,ae,re){const Ne=.5*10**-re;return Math.abs(j-ae)>Ne}function N(){var j;return(j=r.value)==null?void 0:j.ctx}function V(){var Xe,st,ct,wt;const j=(st=(Xe=N())==null?void 0:Xe.map)==null?void 0:st.value;if(!j)return;const ae=f(o.query.z),re=f(o.query.x),Ne=f(o.query.y);if(ae==null||re==null||Ne==null)return;const Se=(ct=j.getCenter)==null?void 0:ct.call(j),Oe=(wt=j.getZoom)==null?void 0:wt.call(j);(!Se||x(Se.lng,re,zo)||x(Se.lat,Ne,zo)||x(Oe??0,ae,ts))&&(h.value=!0,j.jumpTo({center:[re,Ne],zoom:ae}),h.value=!1)}function _(){var Se,Oe,Qe,Xe;if(h.value)return;const j=(Oe=(Se=N())==null?void 0:Se.map)==null?void 0:Oe.value;if(!j)return;const ae=(Qe=j.getCenter)==null?void 0:Qe.call(j),re=(Xe=j.getZoom)==null?void 0:Xe.call(j);if(!ae||re==null)return;const Ne={...o.query,z:b(re,ts),x:b(ae.lng,zo),y:b(ae.lat,zo)};o.query.z===Ne.z&&o.query.x===Ne.x&&o.query.y===Ne.y||n.replace({query:Ne})}function w(j){typeof document>"u"||(document.title=j?`${j} — CartoCSS`:QV)}const B=e.ref(""),v=e.ref([]),K=e.ref(!1),J=e.ref(!1),O=e.ref(""),ne=e.ref(0),de=e.ref(!0),xe=e.ref(1),se=e.ref(!1),te=e.ref(null),D=e.ref(!1),Q=e.ref(null),T=e.ref([]),E=e.ref(!1),L=e.ref("general");function A(j){T.value=j}function me(j){var ae;(ae=Q.value)==null||ae.addPoint(j)}function I(){var j;T.value=[],E.value=!1,(j=Q.value)==null||j.clearPoints(),D.value=!1}function F(){if(D.value){I();return}D.value=!0}const z=e.computed(()=>`cartocss-layer-${m.value}`),H=e.computed(()=>`${Math.round(xe.value*100)}%`),oe=e.computed(()=>`cartocss-extent-${m.value}`),R=e.computed(()=>`cartocss-extent-draft-${m.value}`),ee=e.computed(()=>{var Se;const j=(Se=O.value)==null?void 0:Se.trim();if(!j)return"";const ae=j.includes("?")?"&":"?",re=`${j}${ae}nottl=1`,Ne=ne.value;return Ne?`${j}${ae}ts=${Ne}&nocache=1`:re}),ge=e.ref(""),we=e.ref(""),S=e.computed(()=>{var Oe;const j=(Oe=a.value)==null?void 0:Oe.bounds;if(!Array.isArray(j)||j.length<4)return null;const[ae,re,Ne,Se]=j;return[ae,re,Ne,Se].some(Qe=>typeof Qe!="number"||Number.isNaN(Qe))?null:[(ae+Ne)/2,(re+Se)/2]}),Y=e.computed(()=>{var Oe;const j=(Oe=a.value)==null?void 0:Oe.bounds;if(!Array.isArray(j)||j.length<4)return null;const[ae,re,Ne,Se]=j;return[ae,re,Ne,Se].some(Qe=>typeof Qe!="number"||Number.isNaN(Qe))?null:[ae,re,Ne,Se]}),ue=e.computed(()=>{const j=a.value;return j?[j.description,j.group_id?`Група: ${j.group_id}`:null,j.source_path?`Шлях: ${j.source_path}`:null,j.is_public===!0?"Публічний":"Не публічний",j.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", "):""}),ie=e.computed(()=>{var ae;const j=(ae=a.value)==null?void 0:ae.group_id;return j?String(j).toUpperCase():""});let ce=null,ye=!1,Z=null;function G(j){return Number(j.toFixed(eB))}function ke(j,ae){const[re,Ne]=j,[Se,Oe]=ae;return[G(Math.min(re,Se)),G(Math.min(Ne,Oe)),G(Math.max(re,Se)),G(Math.max(Ne,Oe))]}function ve(j){const[ae,re,Ne,Se]=j;return{type:"Polygon",coordinates:[[[ae,re],[Ne,re],[Ne,Se],[ae,Se],[ae,re]]]}}function Ae(j){var Ne,Se,Oe;const ae=(Se=(Ne=N())==null?void 0:Ne.map)==null?void 0:Se.value,re=(Oe=ae==null?void 0:ae.getCanvas)==null?void 0:Oe.call(ae);re!=null&&re.style&&(re.style.cursor=j)}async function $e(j,ae){if(!(!m.value||!a.value)){J.value=!0;try{const re=ve(j),Ne=await fetch(`/api/gis-css/${m.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({geom:re})});if(!Ne.ok)throw new Error(`Failed to save cartocss bounds: ${Ne.status}`);Ce.notify({type:"success",title:"Bounds збережено",message:"Нові межі успішно збережено."}),await X(m.value,{bustCache:!0})}catch(re){console.error("Failed to save CartoCSS bounds",re),a.value&&(a.value={...a.value,bounds:ae?[...ae]:null}),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти Bounds"})}finally{J.value=!1}}}function Je(j){var re,Ne,Se;const ae=(Ne=(re=N())==null?void 0:re.map)==null?void 0:Ne.value;if((Se=ae==null?void 0:ae.dragPan)!=null&&Se.enable&&ae.dragPan.enable(),(j==null?void 0:j.length)===4&&a.value){const Oe=Array.isArray(a.value.bounds)?[...a.value.bounds]:null;a.value={...a.value,bounds:[...j]},$e(j,Oe)}ce=null,ye=!1,te.value=null,se.value=!1,Ae("")}function Re(){Je(null)}function at(){var Oe,Qe;const j=(Qe=(Oe=N())==null?void 0:Oe.map)==null?void 0:Qe.value;if(!j)return;const ae=Xe=>{var ct,wt,Ft;if(!se.value||((ct=Xe==null?void 0:Xe.originalEvent)==null?void 0:ct.button)!=null&&Xe.originalEvent.button!==0)return;const st=Xe==null?void 0:Xe.lngLat;st&&(ce=[st.lng,st.lat],ye=!0,te.value=[st.lng,st.lat,st.lng,st.lat],(Ft=(wt=j.dragPan)==null?void 0:wt.disable)==null||Ft.call(wt))},re=Xe=>{if(!se.value||!ye||!ce)return;const st=Xe==null?void 0:Xe.lngLat;st&&(te.value=ke(ce,[st.lng,st.lat]))},Ne=Xe=>{if(!se.value||!ye||!ce)return;const st=Xe==null?void 0:Xe.lngLat;if(!st){Re();return}const ct=ke(ce,[st.lng,st.lat]),[wt,Ft,hn,Ut]=ct;if(!(Math.abs(hn-wt)>0&&Math.abs(Ut-Ft)>0)){Ce.notify({type:"warning",title:"Bounds не змінено",message:"Потрібно протягнути прямокутник з ненульовою площею."}),Re();return}Je(ct)},Se=Xe=>{se.value&&Xe.key==="Escape"&&(Xe.preventDefault(),Re())};j.on("mousedown",ae),j.on("mousemove",re),j.on("mouseup",Ne),window.addEventListener("keydown",Se),Z=()=>{j.off("mousedown",ae),j.off("mousemove",re),j.off("mouseup",Ne),window.removeEventListener("keydown",Se)}}async function et(){var re;const j=N();!(j!=null&&j.ready)||(await j.ready(),!((re=j.map)==null?void 0:re.value))||(Z||at(),se.value=!0,ye=!1,ce=null,te.value=null,Ae("crosshair"),Ce.notify({type:"info",title:"Редагування Bounds",message:"Протягніть прямокутник на карті, щоб задати нові межі."}))}e.watch(m,j=>{j&&X(j)},{immediate:!0}),e.watch(()=>{var j;return(j=y.value)==null?void 0:j.name},j=>w(j),{immediate:!0});async function nt(){var Ne;const j=N();if(!(j!=null&&j.ready))return;await j.ready(),V();const ae=(Ne=j.map)==null?void 0:Ne.value;if(!ae)return;const re=()=>_();ae.on("moveend",re),ae.on("zoomend",re),k=()=>{ae.off("moveend",re),ae.off("zoomend",re)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{V()}),e.onMounted(()=>{nt()}),e.onBeforeUnmount(()=>{k==null||k(),k=null,Z==null||Z(),Z=null,Ae("")}),e.watch(()=>o.query.tab,j=>{j&&g.value.some(ae=>ae.key===j)&&c.value!==j&&(c.value=j)}),e.watch(g,j=>{j.length&&!j.some(ae=>ae.key===c.value)&&(c.value=j[0].key)},{immediate:!0}),e.watch(c,j=>{o.query.tab!==j&&g.value.some(ae=>ae.key===j)&&n.replace({query:{...o.query,tab:j}})}),e.watch(()=>a.value,j=>{const ae=j==null?void 0:j.card_html;ge.value=ae,we.value=j==null?void 0:j.card_table},{immediate:!0});function P(){m.value&&X(m.value,{bustCache:!0})}async function pe(j,ae){if(m.value){J.value=!0;try{const re=await fetch(`/api/gis-css/${m.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)});if(!re.ok)throw new Error(`Failed to save cartocss: ${re.status}`);Ce.notify({type:"success",title:"Збережено",message:ae}),await X(m.value,{bustCache:!0})}catch(re){console.error("Failed to save CartoCSS",re),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{J.value=!1}}}function M(j){if(!j)return null;if(typeof j=="string")try{return JSON.parse(j)}catch(ae){return console.warn("Failed to parse CartoCSS config",ae),null}return typeof j=="object"?j:null}function W(j){const ae=Array.isArray(j)?j:j==null?void 0:j.datasets;return Array.isArray(ae)?ae.map((re,Ne)=>({table:(re==null?void 0:re.table)||(re==null?void 0:re.id)||`dataset_${Ne+1}`,query:(re==null?void 0:re.query)||"",srid:(re==null?void 0:re.srid)||"",gcol:(re==null?void 0:re.gcol)||"",key:(re==null?void 0:re.key)||(re==null?void 0:re.label)||"Без підпису",active:typeof(re==null?void 0:re.active)=="boolean"?re.active:!0,minzoom:typeof(re==null?void 0:re.zoom)>"u"?"":String(re.zoom),maxzoom:typeof(re==null?void 0:re.maxzoom)>"u"?"":String(re.maxzoom),columns:(re==null?void 0:re.columns)||"",proj4text:(re==null?void 0:re.proj4text)||""})):[]}async function X(j,ae){K.value=!0;try{const re=await fetch(`/api/gis-css/${j}`);if(!re.ok)throw new Error(`Failed to load cartocss: ${re.status}`);const Ne=await re.json(),Se=(Ne==null?void 0:Ne.message)||Ne||{};a.value=Se,y.value={id:Se.cartocss_key||j,name:Se.name||y.value.name,description:Se.description||y.value.description},B.value=typeof Se.style=="string"?Se.style:"";const Oe=M(Se.config??[]);v.value=W(Oe);const Qe=typeof Se.url=="string"?Se.url:"";O.value=Qe,de.value=!!(Qe&&Se.enabled!==!1),ne.value=ae!=null&&ae.bustCache?Date.now():0}catch(re){console.error("Failed to fetch CartoCSS",re),de.value=!1,O.value="",ne.value=0,a.value=null}finally{K.value=!1}}async function be(){await pe({style:B.value||"",config:v.value},"CartoCSS оновлено")}async function Ve(j){const ae=await fetch(`/api/gis-css/${m.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)});if(!ae.ok)throw new Error(`Failed to save cartocss: ${ae.status}`);Ce.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(j,ae)=>(e.openBlock(),e.createElementBlock("div",EV,[e.createElementVNode("div",CV,[e.createElementVNode("div",NV,[e.createElementVNode("div",VV,[e.createElementVNode("div",BV,[e.createElementVNode("div",$V,[e.createElementVNode("div",SV,[e.createElementVNode("button",{type:"button",class:"hover:text-gray-700 cursor-pointer transition-colors",onClick:i},e.toDisplayString(s.value),1),ae[7]||(ae[7]=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",vV,e.toDisplayString(y.value.name||"CartoCSS"),1)]),e.createElementVNode("div",LV,[e.createElementVNode("div",TV,[e.createElementVNode("div",AV,[e.createElementVNode("h1",MV,e.toDisplayString(y.value.name||"CartoCSS"),1),ie.value?(e.openBlock(),e.createElementBlock("div",FV,[e.createElementVNode("span",DV,e.toDisplayString(ie.value),1)])):e.createCommentVNode("",!0)]),ue.value?(e.openBlock(),e.createElementBlock("p",{key:0,class:"text-xs text-gray-500 truncate",title:ue.value},e.toDisplayString(ue.value),9,PV)):e.createCommentVNode("",!0)])])]),e.createVNode(Hr,{class:"flex-shrink-0","entity-id":m.value,"entity-info":y.value,"form-endpoint":re=>`/api/form/gis.cartocss.table/${re}`,"save-endpoint":re=>`/api/gis-css/${re}`,"entity-label":"CartoCSS","save-method":"post",onSaved:P},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])])]),e.createElementVNode("div",zV,[e.createElementVNode("div",IV,[e.createVNode(no,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var re,Ne;return[e.createElementVNode("div",RV,[e.createVNode(rn,null,{default:e.withCtx(()=>[e.createElementVNode("div",jV,[ae[8]||(ae[8]=e.createElementVNode("span",{class:"text-xs text-gray-600 whitespace-nowrap"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":ae[0]||(ae[0]=Se=>xe.value=Se),class:"flex-1 h-1 accent-blue-600",style:{"accent-color":"rgb(30, 78, 216)"}},null,512),[[e.vModelText,xe.value,void 0,{number:!0}]]),e.createElementVNode("span",OV,e.toDisplayString(H.value),1)]),e.createElementVNode("div",UV,[e.withDirectives(e.createElementVNode("input",{id:"show-layer",type:"checkbox",class:"rounded","onUpdate:modelValue":ae[1]||(ae[1]=Se=>de.value=Se),style:{"accent-color":"rgb(30, 78, 216)"}},null,512),[[e.vModelCheckbox,de.value]]),e.createElementVNode("label",qV,[de.value?(e.openBlock(),e.createBlock(e.unref(he.Eye),{key:0,class:"w-3.5 h-3.5"})):(e.openBlock(),e.createBlock(e.unref(he.EyeOff),{key:1,class:"w-3.5 h-3.5"})),ae[9]||(ae[9]=e.createTextVNode(" Показати шар ",-1))])])]),_:1})]),e.createVNode(Zr,null,{default:e.withCtx(()=>[e.createVNode(Wr),e.createVNode(Yr),e.createVNode(Gr),e.createVNode(Yt),S.value?(e.openBlock(),e.createBlock(Yt,{key:0,targetCenter:S.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0),e.createVNode(cV),e.createVNode(dV),e.createVNode(wV,{active:D.value,onClick:F},null,8,["active"]),e.createVNode(kV)]),_:1}),D.value?(e.openBlock(),e.createBlock(Ul,{key:0,ref_key:"rulerPanelRef",ref:Q,onClose:I,onTabChange:ae[2]||(ae[2]=Se=>L.value=Se),onPointsChange:A,onShapeClosedChange:ae[3]||(ae[3]=Se=>E.value=Se)},null,512)):e.createCommentVNode("",!0),D.value&&T.value.length>0?(e.openBlock(),e.createBlock(ql,{key:1,points:T.value,"is-shape-closed":E.value,"label-mode":L.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),e.createVNode(_V,{active:D.value,onMapClick:me},null,8,["active"]),se.value?(e.openBlock(),e.createElementBlock("div",HV," Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")):e.createCommentVNode("",!0),ee.value?(e.openBlock(),e.createBlock(aV,{key:3,"layer-id":z.value,"tile-url":ee.value,active:de.value,opacity:xe.value,title:y.value.name,owner:m.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(Do,{extent:Y.value,"layer-id":oe.value},null,8,["extent","layer-id"]),e.createVNode(Do,{extent:te.value,"layer-id":R.value,"line-color":"#0ea5e9","line-width":3},null,8,["extent","layer-id"]),e.createVNode(sV,{"cartocss-id":m.value,bounds:((re=a.value)==null?void 0:re.bounds)??null,active:de.value&&!se.value&&!D.value,"info-enabled":(Ne=a.value)==null?void 0:Ne.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(lr,{"map-id":m.value},null,8,["map-id"])]}),_:1},512)])]),a.value?(e.openBlock(),e.createBlock(Or,{key:0,open:p.value,onToggle:ae[4]||(ae[4]=re=>p.value=!p.value)},null,8,["open"])):e.createCommentVNode("",!0)]),a.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",p.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",WV,[g.value.length>1?(e.openBlock(),e.createElementBlock("div",YV,[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,re=>(e.openBlock(),e.createElementBlock("button",{key:re.key,type:"button",role:"tab","aria-selected":c.value===re.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",c.value===re.key?"bg-white shadow-sm text-gray-700":""]),onClick:Ne=>c.value=re.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(re.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",ZV,e.toDisplayString(re.label),1)],10,GV))),128))],4)])):e.createCommentVNode("",!0),e.createElementVNode("div",KV,[K.value?(e.openBlock(),e.createElementBlock("div",XV," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[c.value==="css"?(e.openBlock(),e.createBlock(YN,{key:0,modelValue:B.value,"onUpdate:modelValue":ae[5]||(ae[5]=re=>B.value=re),class:"flex-1 min-h-0",onSave:be},null,8,["modelValue"])):c.value==="data"?(e.openBlock(),e.createBlock(nV,{key:1,modelValue:v.value,"onUpdate:modelValue":ae[6]||(ae[6]=re=>v.value=re),class:"flex-1 min-h-0 flex flex-col",onSave:be},null,8,["modelValue"])):c.value==="card"?(e.openBlock(),e.createBlock(lV,{key:2,card:ge.value,table:we.value,class:"flex-1 min-h-0",onSave:Ve},null,8,["card","table"])):c.value==="metadata"?(e.openBlock(),e.createBlock(qr,{key:3,data:a.value,"entity-id":m.value,"entity-type":"css",onSaved:P,onEditCssBounds:et},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}})},Symbol.toStringTag,{value:"Module"})),nB={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},oB=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,s=e.computed({get:()=>r.modelValue,set:d=>l("update:modelValue",d)}),i=e.computed({get:()=>r.form,set:d=>l("update:form",d)});return(d,u)=>(e.openBlock(),e.createElementBlock("section",nB,[u[2]||(u[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:s.value,"onUpdate:values":u[0]||(u[0]=c=>s.value=c),form:i.value,"onUpdate:form":u[1]||(u[1]=c=>i.value=c)},null,8,["schema","values","form"]))]))}}),rB={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},lB=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:s=>r("update:layerIDs",s)});return(s,i)=>(e.openBlock(),e.createElementBlock("section",rB,[i[1]||(i[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),i[2]||(i[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(fl.VsInputArraySelect),{data:"layer_list",api:"/api/suggest/layer_list",modelValue:l.value,"onUpdate:modelValue":i[0]||(i[0]=d=>l.value=d),placeholder:"Шари"},null,8,["modelValue"])]))}}),aB={class:"w-full"},sB=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",aB,[e.createVNode(_o,{class:"w-full h-[calc(100vh-200px)]",height:"h-[calc(100vh-200px)]",id:t.id},null,8,["id"])]))}}),iB={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},cB={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},dB={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"},uB={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},fB={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},mB=["disabled"],pB=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(""),s=e.ref(null);e.watch(()=>o.modelValue,u=>{if(u){try{l.value=JSON.stringify(u,null,2)}catch{l.value="{}"}s.value=null}},{immediate:!0}),e.watch(l,u=>{if(!u.trim()){s.value=null;return}try{JSON.parse(u),s.value=null}catch(c){s.value=c.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:u}=window;if(u&&u.editor){const c=u.editor.getEditors();c.length>0&&c[c.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function i(){r("update:modelValue",null),l.value="",s.value=null}function d(){if(!s.value)try{const u=JSON.parse(l.value);r("save",u),i()}catch(u){console.error("Failed to parse JSON",u)}}return(u,c)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(i,["self"])},[e.createElementVNode("div",iB,[e.createElementVNode("div",cB,[c[1]||(c[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:i,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(he.X),{size:20})])]),s.value?(e.openBlock(),e.createElementBlock("div",dB," Помилка JSON: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",uB,[e.createVNode(Hn,{modelValue:l.value,"onUpdate:modelValue":c[0]||(c[0]=p=>l.value=p),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",fB,[e.createElementVNode("button",{onClick:i,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:d,disabled:!!s.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,mB)])])])):e.createCommentVNode("",!0)}}),gB={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},yB={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},hB={class:"w-full text-sm"},bB={class:"divide-y divide-gray-200"},xB={class:"px-4 py-3"},kB=["onUpdate:modelValue","onChange"],wB=["value"],_B={class:"px-4 py-3"},EB=["onUpdate:modelValue","onChange"],CB=["value"],NB={class:"px-4 py-3 text-center"},VB=["checked","onChange"],BB={class:"px-4 py-3"},$B={key:0,class:"flex items-center gap-2"},SB=["onClick"],vB=["onClick"],LB={key:1},TB=["onClick"],AB={class:"px-4 py-3 text-right"},MB=["onClick"],FB=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"],s=["top-left","top-right","bottom-left","bottom-right"],i=e.ref(null),d=e.ref(-1),u=e.computed(()=>o.modelValue||[]);function c(){const f=[...u.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",f)}function p(f){Ce.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=u.value.filter((x,N)=>N!==f);r("update:modelValue",b)}})}function a(f,b,x){const N=[...u.value];N[f]={...N[f],[b]:x},r("update:modelValue",N)}function g(f){return!!f&&Object.keys(f).length>0}function m(f,b){d.value=f,i.value=b||{}}function y(f){m(f,{})}function k(f){Ce.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{a(f,"config",void 0)}})}function h(f){d.value>-1&&a(d.value,"config",f),i.value=null,d.value=-1}return(f,b)=>{var x;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:c,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(x=u.value)!=null&&x.length?(e.openBlock(),e.createElementBlock("div",yB,[e.createElementVNode("table",hB,[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",bB,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(N,V)=>(e.openBlock(),e.createElementBlock("tr",{key:V,class:"hover:bg-gray-50"},[e.createElementVNode("td",xB,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>N.type=_,onChange:_=>a(V,"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(l,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,wB)),64))],40,kB),[[e.vModelSelect,N.type]])]),e.createElementVNode("td",_B,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":_=>N.position=_,onChange:_=>a(V,"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(s,_=>e.createElementVNode("option",{key:_,value:_},e.toDisplayString(_),9,CB)),64))],40,EB),[[e.vModelSelect,N.position]])]),e.createElementVNode("td",NB,[e.createElementVNode("input",{type:"checkbox",checked:N.visible!==!1,onChange:_=>a(V,"visible",_.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,VB)]),e.createElementVNode("td",BB,[g(N.config)?(e.openBlock(),e.createElementBlock("div",$B,[e.createElementVNode("button",{onClick:_=>m(V,N.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(he.Pen),{size:16})],8,SB),e.createElementVNode("button",{onClick:_=>k(V),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(he.X),{size:16})],8,vB)])):(e.openBlock(),e.createElementBlock("div",LB,[e.createElementVNode("button",{onClick:_=>y(V),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(he.Plus),{size:16})],8,TB)]))]),e.createElementVNode("td",AB,[e.createElementVNode("button",{onClick:_=>p(V),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(he.Trash2),{size:16})],8,MB)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",gB," Немає віджетів. Додайте перший віджет. ")),e.createVNode(pB,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":b[0]||(b[0]=N=>i.value=N),onSave:h},null,8,["modelValue"])])}}}),DB={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},PB={class:"mx-1"},zB={class:"text-gray-900 font-semibold"},IB=["disabled"],RB={key:0,class:"text-center py-12 mt-6 px-[24px]"},jB={key:1,class:"px-[24px] overflow-y-auto"},OB={class:"space-y-6"},UB={class:"space-y-6"},qB={class:"space-y-6"},HB=Object.freeze(Object.defineProperty({__proto__:null,default:Fe(e.defineComponent({__name:"MapSettings",setup(t){const n=He.useRouter(),o=He.useRoute(),r=e.computed(()=>{var _;return((_=n.resolve("/gis.maps").meta)==null?void 0:_.title)??"Карти"}),l=e.ref(!0),s=e.ref(!1),i=e.ref({}),d=e.ref({}),u=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],c=u.map(_=>_.id),p=_=>_?Array.isArray(_)?_[0]:_:null,a=(()=>{const _=p(o.query.tab);return _&&c.includes(_)?_:"general"})(),g=e.ref(a);e.watch(()=>o.query.tab,_=>{const w=p(_);w&&c.includes(w)&&g.value!==w&&(g.value=w)}),e.watch(g,_=>{o.query.tab!==_&&n.replace({query:{...o.query,tab:_}})});const m=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),y=e.computed({get:()=>(m.value.layers||[]).map(_=>_.id||_),set:_=>{m.value.layers=_}});async function k(_){if(!_.length){d.value={};return}try{const w=new URLSearchParams({json:"1",val:Array.from(new Set(_)).join(",")}),B=await fetch(`/api/suggest/layer_list?${w.toString()}`);if(!B.ok)return;const v=await B.json(),K=(v==null?void 0:v.data)??v??[],J=Array.isArray(K)?K:[],O={...d.value};J.forEach(ne=>{const de=ne.id!=null?String(ne.id):"";de&&(O[de]=ne.text??ne.name??de)}),d.value=O}catch(w){console.error("Failed to fetch layer labels:",w)}}const h=e.computed({get:()=>y.value.map(_=>d.value[_]??_),set:_=>{const w=Object.entries(d.value).reduce((v,[K,J])=>(v[J]=K,v),{}),B=_.map(v=>w[v]??null).filter(v=>v!=null);y.value=B}}),f=e.computed(()=>{const _=m.value.center;if(!Array.isArray(_)||_.length<2)return"Не задано";const[w,B]=_;return w===void 0||B===void 0||w===null||B===null||Number.isNaN(Number(w))||Number.isNaN(Number(B))?"Не задано":`Lng ${Number(w).toFixed(6)}, Lat ${Number(B).toFixed(6)}`}),b=e.computed(()=>{const _=m.value.zoom;if(_==null||_==="")return"Не задано";const w=Number(_);return Number.isNaN(w)?"Не задано":w.toFixed(2)}),x=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function N(){try{const w=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();m.value={...w,keywords:w.keywords||[],center:w.center??null,widgets:Array.isArray(w.widgets)?w.widgets:[],layers:(w.layers||[]).map(B=>B.id||B)},await k(m.value.layers??[])}catch(_){console.error("Failed to load map:",_),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function V(){var w,B;const _=(B=(w=i.value)==null?void 0:w.validate)==null?void 0:B.call(w);if(_){Ce.notify({type:"warning",title:"Валідація",message:Object.entries(_).map(([v,K])=>`${v}: ${K}`).join(`
58
+ `)});return}s.value=!0;try{const v=JSON.parse(JSON.stringify(m.value));if(v.zoom=Number(v.zoom),Array.isArray(v.center)&&(v.center.every(O=>O==null||O===""||O===0)||v.center.length===0)&&(v.center=null),delete v.created_at,delete v.updated_at,delete v.created_by,delete v.updated_by,delete v.history,delete v.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)})).ok)throw new Error("Save failed");Ce.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(v){console.error("Save error:",v),Ce.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{s.value=!1}}return e.watch(()=>{var _;return((_=m.value)==null?void 0:_.layers)??[]},_=>k(Array.isArray(_)?_.map(w=>(w==null?void 0:w.id)??w):[]),{immediate:!1}),e.onMounted(async()=>{await N()}),(_,w)=>{const B=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",DB,[e.createVNode(sn,{variant:"form",title:m.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(B,{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",PB,[e.createVNode(e.unref(he.LucideChevronRight),{size:16,class:"shrink-0"})]),e.createElementVNode("span",zB,e.toDisplayString(m.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...w[6]||(w[6]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:w[0]||(w[0]=v=>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:V,disabled:s.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(s.value?"Збереження...":"Зберегти"),9,IB)]),_:1},8,["title"]),l.value?(e.openBlock(),e.createElementBlock("div",RB,[...w[7]||(w[7]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",jB,[e.createVNode(oa,{tabs:u,activeTab:g.value,"onUpdate:activeTab":w[1]||(w[1]=v=>g.value=v)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",OB,[e.createVNode(oB,{schema:x,loading:l.value,modelValue:m.value,"onUpdate:modelValue":w[2]||(w[2]=v=>m.value=v),form:i.value,"onUpdate:form":w[3]||(w[3]=v=>i.value=v)},null,8,["loading","modelValue","form"])],512),[[e.vShow,g.value==="general"]]),e.withDirectives(e.createElementVNode("div",UB,[e.createVNode(lB,{layerIDs:y.value,"onUpdate:layerIDs":w[4]||(w[4]=v=>y.value=v)},null,8,["layerIDs"])],512),[[e.vShow,g.value==="layers"]]),e.withDirectives(e.createVNode(FB,{modelValue:m.value.widgets,"onUpdate:modelValue":w[5]||(w[5]=v=>m.value.widgets=v)},null,8,["modelValue"]),[[e.vShow,g.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",qB,[e.createVNode(sB,{"center-display":f.value,"zoom-display":b.value,"layer-names":h.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,g.value==="map"]])]))])}}}),[["__scopeId","data-v-df90fbac"]])},Symbol.toStringTag,{value:"Module"}));Ze.CartoCSS=hs,Ze.Classifiers=lc,Ze.MapSettings=Cs,Ze.MapWidget=_o,Ze.Permissions=vc,Ze.Raster=ps,Ze.Register=is,Ze.Service=us,Ze.default=_o,Ze.install=sb,Ze.template1=Gl,Ze.template2=Zl,Ze.template3=Kl,Ze.template4=Xl,Ze.template5=Jl,Object.defineProperties(Ze,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));