@opengis/gis 0.2.182 → 0.2.183

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 (75) hide show
  1. package/dist/{CardIcon-g4POnzwa.js → CardIcon-CKcvisBB.js} +1 -1
  2. package/dist/{EntityTablePage-B7K_hSYY.js → EntityTablePage-Dj4Ysqkw.js} +1 -1
  3. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BcSv7m_s.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-zNchIX_P.js} +1 -1
  4. package/dist/{MapSettings-C3hn2A7K.js → MapSettings-DH7BzcxB.js} +1 -1
  5. package/dist/{MapToolbarRight.vue_vue_type_script_setup_true_lang-Diu4LI2Z.js → MapToolbarRight.vue_vue_type_script_setup_true_lang-B5aTyoyH.js} +1 -1
  6. package/dist/{RastersTablePage-6Emo2MXj.js → RastersTablePage-BjgVVZDP.js} +1 -1
  7. package/dist/{cartocss-COLdNfzh.js → cartocss-B-5m_Jgg.js} +5 -5
  8. package/dist/{import-utils-DTDbjorg.js → import-utils-Bzs6QWW3.js} +1 -1
  9. package/dist/{index-Czv-aLH-.js → index-DhmYISKS.js} +10 -10
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.umd.cjs +3 -3
  13. package/dist/{raster-CB8C1210.js → raster-XFH5nm6L.js} +3 -3
  14. package/dist/{register-DkQ3WyMI.js → register-CNWivGIA.js} +3 -3
  15. package/dist/{service-BTKNJ8d_.js → service-CAelhYEL.js} +224 -215
  16. package/dist/{vs-datatable-C4NSnPIQ.js → vs-datatable-DkR1zed2.js} +3 -2
  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 +1 -1
  73. package/server/routes/map/functions/gis.icon.js +1 -1
  74. package/server/routes/map/functions/mapFormat.js +11 -2
  75. package/server/routes/services/functions/get.services.js +5 -0
@@ -3,7 +3,7 @@
3
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
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
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,{row:$,column:Y,value:$[Y.key],rowIndex:L},void 0,!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}
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}
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}
@@ -51,8 +51,8 @@ ${t.slice(i+1)}`:u+=t.slice(l),u.slice(1)}function $2(t){let n="",o=0;for(let r=
51
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
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}**
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:_??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>
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
55
  <dt>{{ ${L} }}</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;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,layer:{style:(h=i.layer)==null?void 0:h.style}});n({layerHandle:c}),(i.autoCenter??!0)&&r({center:i.layer.center||((f=s==null?void 0:s.map)==null?void 0:f.center)||[30,50],animate:!1});let p=null;function a(){if(!(c!=null&&c.setTiles))return;const b=u.includes("?")?"&":"?",x=`${u}${b}_=${Date.now()}`;c.setTiles([x])}function g(){p&&clearTimeout(p),p=setTimeout(()=>{p=null,m().catch(b=>console.error("Failed to update map layer",b))},300)}async function m(){o.value&&(a(),c.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,g,{deep:!0}),e.onBeforeUnmount(()=>{c.remove()}),(b,x)=>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(`
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
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"}})}));