@opengis/gis 0.2.85 → 0.2.86

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.
package/dist/index.js CHANGED
@@ -13718,13 +13718,13 @@ const V0 = /* @__PURE__ */ be(O0, [["render", R0]]), B0 = { class: "flex flex-co
13718
13718
  ]))
13719
13719
  ]));
13720
13720
  }
13721
- }), Vx = { class: "space-y-6 flex-1 overflow-y-auto p-0" }, Bx = { class: "flex items-center gap-2 text-sm text-gray-600 mb-4" }, Px = { class: "text-gray-900" }, Ux = { class: "flex items-start justify-between mb-6" }, qx = { class: "flex-1 mr-4" }, Hx = {
13721
+ }), Vx = { class: "space-y-6 flex-1 overflow-y-auto p-0" }, Bx = { class: "flex items-center gap-2 text-sm text-gray-600 mb-4" }, Px = { class: "text-gray-900" }, Ux = { class: "flex items-start justify-between mb-6" }, qx = { class: "flex-1 mr-4" }, Hx = { class: "text-2xl font-bold text-gray-900" }, Wx = {
13722
13722
  key: 0,
13723
- class: "flex items-center gap-2 group"
13724
- }, Wx = { class: "text-2xl font-bold text-gray-900" }, Yx = {
13723
+ class: "flex items-center gap-2 group mt-1"
13724
+ }, Yx = { class: "text-sm text-gray-500" }, Zx = {
13725
13725
  key: 1,
13726
- class: "flex items-center gap-2"
13727
- }, Zx = ["disabled"], Gx = ["disabled"], Kx = { class: "text-sm text-gray-500 mt-1" }, Xx = { class: "flex items-center gap-3" }, Jx = { class: "bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4" }, Qx = { class: "relative max-w-md" }, eb = { class: "vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm" }, tb = { class: "absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3" }, nb = /* @__PURE__ */ fe({
13726
+ class: "flex items-center gap-2 mt-1"
13727
+ }, Gx = ["disabled"], Kx = ["disabled"], Xx = { class: "flex items-center gap-3" }, Jx = { class: "bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4" }, Qx = { class: "relative max-w-md" }, eb = { class: "vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm" }, tb = { class: "absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3" }, nb = /* @__PURE__ */ fe({
13728
13728
  __name: "DictionaryDetails",
13729
13729
  setup(e) {
13730
13730
  const t = ft(), n = ut(), l = R(() => n.params.name), r = N(!1), s = N(null), i = N(null), a = N(""), f = N(""), p = N(""), _ = N(!1), c = N(!1), h = N(null), d = async () => {
@@ -13796,13 +13796,14 @@ const V0 = /* @__PURE__ */ be(O0, [["render", R0]]), B0 = { class: "flex flex-co
13796
13796
  ]),
13797
13797
  o("div", Ux, [
13798
13798
  o("div", qx, [
13799
- _.value ? (u(), y("div", Yx, [
13799
+ o("h1", Hx, P(l.value), 1),
13800
+ _.value ? (u(), y("div", Zx, [
13800
13801
  Re(o("input", {
13801
13802
  ref_key: "editInputRef",
13802
13803
  ref: h,
13803
13804
  "onUpdate:modelValue": O[1] || (O[1] = (B) => p.value = B),
13804
13805
  type: "text",
13805
- class: "text-2xl font-bold text-gray-900 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full",
13806
+ class: "text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",
13806
13807
  onKeydown: [
13807
13808
  Lo(x, ["enter"]),
13808
13809
  Lo(g, ["esc"])
@@ -13817,37 +13818,36 @@ const V0 = /* @__PURE__ */ be(O0, [["render", R0]]), B0 = { class: "flex flex-co
13817
13818
  class: "p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"
13818
13819
  }, [
13819
13820
  le(se(Jl), {
13820
- width: 20,
13821
- height: 20,
13821
+ width: 18,
13822
+ height: 18,
13822
13823
  "stroke-width": 2
13823
13824
  })
13824
- ], 8, Zx),
13825
+ ], 8, Gx),
13825
13826
  o("button", {
13826
13827
  onClick: g,
13827
13828
  disabled: c.value,
13828
13829
  class: "p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"
13829
13830
  }, [
13830
13831
  le(se(cn), {
13831
- width: 20,
13832
- height: 20,
13832
+ width: 18,
13833
+ height: 18,
13833
13834
  "stroke-width": 2
13834
13835
  })
13835
- ], 8, Gx)
13836
- ])) : (u(), y("div", Hx, [
13837
- o("h1", Wx, P(f.value), 1),
13836
+ ], 8, Kx)
13837
+ ])) : (u(), y("div", Wx, [
13838
+ o("p", Yx, P(f.value || "Опис відсутній"), 1),
13838
13839
  o("button", {
13839
13840
  onClick: v,
13840
- class: "opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",
13841
+ class: "p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",
13841
13842
  title: "Редагувати опис"
13842
13843
  }, [
13843
13844
  le(se(pr), {
13844
- width: 18,
13845
- height: 18,
13845
+ width: 16,
13846
+ height: 16,
13846
13847
  "stroke-width": 2
13847
13848
  })
13848
13849
  ])
13849
- ])),
13850
- o("p", Kx, P(l.value), 1)
13850
+ ]))
13851
13851
  ]),
13852
13852
  o("div", Xx, [
13853
13853
  o("button", {
@@ -176,4 +176,4 @@
176
176
  `),C=(i.value??"").trimEnd();i.value=C?`${C}
177
177
  ${T}`:T}s.value=!1,u.value=[]}function d(){s.value=!1,u.value=[]}function m(){const h=a.value==="html"?"html":"list",f={card_mode:h};h==="html"?f.html=i.value:h==="list"&&(f.list=r.value),l("save","card",f)}const g=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(h,f)=>(e.openBlock(),e.createElementBlock("div",_p,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),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(wp,{modelValue:a.value,"onUpdate:modelValue":f[0]||(f[0]=b=>a.value=b),options:g},null,8,["modelValue"]),e.createElementVNode("div",Ep,[a.value==="list"?(e.openBlock(),e.createBlock(Ye,{key:0,modelValue:r.value,"onUpdate:modelValue":f[1]||(f[1]=b=>r.value=b),"columns-scheme":p,"form-scheme":k,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):a.value==="html"?(e.openBlock(),e.createBlock(Ct,{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(it,{visible:s.value,"onUpdate:visible":f[3]||(f[3]=b=>s.value=b),selection:u.value,"onUpdate:selection":f[4]||(f[4]=b=>u.value=b),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:y,onCancel:d},null,8,["visible","selection","fields"])]))}}),Bp={class:"flex flex-col flex-1 min-h-0"},Vp=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,l=n;console.log(o.columns);const r=e.ref(o.columns||[]);e.watch(()=>o.columns,m=>r.value=m||[],{immediate:!0}),e.watch(r,m=>l("update:columns",m),{deep:!0,immediate:!0});const a=e.ref("list"),i=e.ref(!1),s=e.ref([]),u=[{key:"id",label:"Name"},{key:"label",label:"UA"}],p={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:"select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function k(){s.value=r.value.map(m=>m.name||m.id),i.value=!0}function c(){var f;const m=[...r.value],g=((f=o.fields)==null?void 0:f.filter(b=>s.value.includes(b.name)))||[],h=ct(m,g,{selectedKeys:s.value,resolveKey:b=>Ze(b)});r.value=h,i.value=!1,s.value=[]}function y(){i.value=!1,s.value=[]}function d(){let m=[];a.value==="all"?m=o.fields||[]:a.value==="none"?m=[]:m=r.value,l("save",m)}return(m,g)=>(e.openBlock(),e.createElementBlock("div",Bp,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:k,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick: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"}," Зберегти фільтр ")]),a.value==="list"?(e.openBlock(),e.createBlock(Ye,{key:0,modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=h=>r.value=h),"columns-scheme":u,"form-scheme":p,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(it,{visible:i.value,"onUpdate:visible":g[1]||(g[1]=h=>i.value=h),selection:s.value,"onUpdate:selection":g[2]||(g[2]=h=>s.value=h),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:c,onCancel:y},null,8,["visible","selection","fields"])]))}}),ir=Symbol.for("gis.settingsRef");function gn(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[ir];return o||(o=e.ref(n.$settings??null),Object.defineProperty(n,"$settings",{configurable:!0,enumerable:!0,get:()=>o.value,set:l=>{o.value=l}}),n[ir]=o),o}const Rt=e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),l=e.ref(null),r=gn(),a=Uu({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1},controls:{navigation:!0,scale:!0},settings:r});async function i(){var k;await e.nextTick();const p=(k=a.map)==null?void 0:k.value;p!=null&&p.resize&&p.resize()}function s(){typeof ResizeObserver>"u"||l.value||!o.value||(l.value=new ResizeObserver(()=>{i()}),l.value.observe(o.value))}function u(){var p;(p=l.value)==null||p.disconnect(),l.value=null}return e.onMounted(()=>{i(),s(),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",i),u()}),n({ctx:a}),(p,k)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(p.$slots,"default")],512))}}),Cp=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var m,g,h,f;const{map:o,flyTo:l,setZoom:r}=Le(),a=((g=(m=e.getCurrentInstance())==null?void 0:m.appContext.config.globalProperties)==null?void 0:g.$settings)||null,i=t,s=i.id;String(i.id);const u=`${location.origin}/api/vtile/${i.id}/ua/{z}/{x}/{y}.vmt?all=1`,p=fe(s,{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:p}),(i.autoCenter??!0)&&l({center:i.layer.center||((f=a==null?void 0:a.map)==null?void 0:f.center)||[30,50],animate:!1});let k=null;function c(){if(!(p!=null&&p.setTiles))return;const b=u.includes("?")?"&":"?",V=`${u}${b}_=${Date.now()}`;p.setTiles([V])}function y(){k&&clearTimeout(k),k=setTimeout(()=>{k=null,d().catch(b=>console.error("Failed to update map layer",b))},300)}async function d(){o.value&&(c(),p.setStyle(i.styleSpec??null))}return e.watch(()=>i.styleSpec,y,{deep:!0}),e.onBeforeUnmount(()=>{p.remove()}),(b,V)=>null}}),$t=e.ref(null);function $p(){$t.value=null}function vp(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch($t,i=>{i!==o()&&n.value&&(n.value=!1)});function l(){$t.value=o(),n.value=!0}function r(){$t.value===o()&&($t.value=null),n.value=!1}function a(){n.value?r():l()}return{isOpen:n,open:l,close:r,toggle:a}}const Sp={class:"map-filter"},Lp={class:"map-filter__header"},Ap={class:"map-filter__title"},Mp={"aria-hidden":"true"},yn="#map-filter-popover-host",Pt=ie(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,l=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.id)??""}),r=e.computed(()=>`filter-popover-${l.value}`),{isOpen:a,close:i,toggle:s}=vp(r),u=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),p=e.ref(null),k=e.ref(null);let c=null;const y=e.ref({}),d=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),m=e.computed(()=>a.value),g=e.computed(()=>{var w;return Array.isArray((w=o.layer)==null?void 0:w.filters)?o.layer.filters:[]}),h=e.computed(()=>g.value.length>0),f=e.computed(()=>{var w;return((w=o.layer)==null?void 0:w.name)??""}),b=e.computed(()=>g.value),V=e.ref(null),T=e.computed(()=>g.value.length),I=e.computed(()=>T.value<=2),C=e.computed(()=>I.value?"body":typeof window>"u"||V.value?yn:"body"),B=e.computed(()=>{if(!m.value||!I.value)return{};const w=typeof window<"u"?window.innerWidth:280,L=Math.max(280,w-16*2);return{position:"absolute",top:`${u.top}px`,left:`${u.left}px`,transform:u.transform,zIndex:1e3,width:"280px",maxWidth:`${L}px`}});function S(){i()}function M(w,F,L=8){const A=window.scrollY+L,O=window.scrollY+window.innerHeight-L;let Z=w;return Z+F>O&&(Z=O-F),Z<A&&(Z=A),Z}function j(){var H,ae,de;if(!p.value||!I.value)return;const w=p.value.getBoundingClientRect(),F=window.scrollX+8,L=window.scrollX+window.innerWidth-8,A=((H=k.value)==null?void 0:H.offsetWidth)||280,O=((ae=k.value)==null?void 0:ae.offsetHeight)||0;let Z=0,X=0;if((de=o.catalogAnchor)!=null&&de.value){const U=o.catalogAnchor.value.getBoundingClientRect(),q=U.top+window.scrollY;Z=M(q,O,8);const Y=U.right+window.scrollX+12,te=L-A,le=F;X=Math.min(Math.max(Y,le),Math.max(le,te))}else{const U=w.bottom+window.scrollY+8;Z=M(U,O,8);let q=w.left+window.scrollX;q<F&&(q=F),q+A>L&&(q=Math.max(F,L-A)),X=q}u.left=X,u.top=Z,u.transform="none"}function G(){I.value||N(),s(),a.value&&I.value&&e.nextTick(()=>{j(),E(),requestAnimationFrame(()=>j())})}function W(){o.disabled||G()}e.watch(m,w=>{w&&I.value?e.nextTick(()=>{j(),E(),requestAnimationFrame(()=>j())}):(x(),I.value||N())}),e.watch(b,()=>{!m.value||!I.value||e.nextTick(()=>j())},{deep:!0}),e.watch(I,w=>{m.value&&(w?e.nextTick(()=>{j(),E()}):(x(),N()))}),e.watch(()=>o.disabled,w=>{w&&(i(),y.value={})});function K(){!m.value||!I.value||j()}function P(w){const F=l.value;if(!F)return;const L=fe(F);if(!(L!=null&&L.setFilter))return;y.value=w;const A=Object.entries(w).map(([O,Z])=>`${O}=${Z}`).join("|");L.setFilter(A)}function D(w){if(!o.disabled)return;const F=w.currentTarget;if(!F)return;const L=F.getBoundingClientRect();d.left=L.left+L.width/2+window.scrollX,d.top=L.bottom+8+window.scrollY,d.visible=!0}function $(){d.visible=!1}e.onMounted(()=>{N(),window.addEventListener("resize",K),window.addEventListener("scroll",K,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",K),window.removeEventListener("scroll",K,!0),x()});function E(){x(),!(!k.value||!I.value)&&(c=new ResizeObserver(()=>{!m.value||!I.value||j()}),c.observe(k.value))}function x(){c&&(c.disconnect(),c=null)}function N(){typeof window>"u"||typeof document>"u"||(V.value=document.querySelector(yn))}return(w,F)=>h.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:p},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(W,["prevent","stop"]),onMouseenter:D,onMouseleave:$,onFocus:D,onBlur:$},[...F[2]||(F[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),m.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:C.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!I.value}]),style:e.normalizeStyle(B.value),ref_key:"panel",ref:k,onClick:F[1]||(F[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Sp,[e.createElementVNode("div",Lp,[e.createElementVNode("h3",Ap,e.toDisplayString(f.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:S},[e.createElementVNode("span",Mp,[e.createVNode(e.unref(bt),{class:"h-4 w-4"})]),F[3]||(F[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:y.value,limit:10,onChange:F[0]||(F[0]=L=>P(L.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[d.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${d.top}px`,left:`${d.left}px`})},e.toDisplayString(d.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-cc1f0579"]]),Tp={key:0,class:"flex justify-center items-center h-[40px] w-[40px] bg-white text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full"},hn=ie(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",null,[t.filters.length>0?(e.openBlock(),e.createElementBlock("div",Tp,[e.createVNode(Pt,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),Fp={class:"flex flex-row gap-x-3 z-10 relative widget"},Dp=["onClick"],Ip=["src","alt"],xt=e.defineComponent({__name:"BaseMaps",setup(t){var d,m,g;const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o={z:13,x:4790,y:2762};function l(h){if(h)return h.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function r(h,f){let b=h||`layers-${Object.keys(f).length}`,V=1;for(;f[b];)b=`${h}-${V}`,V+=1;return b}const a=e.getCurrentInstance(),i=(d=a==null?void 0:a.appContext.config.globalProperties)==null?void 0:d.$settings,s=i==null?void 0:i.map,u=e.computed(()=>{const h=Array.isArray(s==null?void 0:s.basemaps)?s==null?void 0:s.basemaps:[];if(!h.length)return{};const f={};return h.forEach((b,V)=>{const T=b.name??b.title??`basemap-${V}`,I=(b.id??T??`basemap-${V}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),C=r(I||`basemap-${V}`,f),B=b.preview||(b.url?l(b.url):void 0);f[C]={url:b.url,preview:B,title:T}}),f}),p=e.computed(()=>{const h=u.value;return Object.keys(h).length?h:n}),k=e.ref(Object.keys(p.value)[0]??"gki"),c=fe("base",{source:{type:"raster",tiles:(m=p.value[k.value])!=null&&m.url?[(g=p.value[k.value])==null?void 0:g.url]:[]},beforeId:0});function y(h){if(!p.value[h])return;k.value=h;const f=p.value[h];if(!(f!=null&&f.url)){c.setVisible(!1);return}c.setVisible(!0),c.setTiles([f.url])}return e.watch(()=>p.value,h=>{h[k.value]||(k.value=Object.keys(h)[0]??k.value);const f=h[k.value];f!=null&&f.url?(c.setVisible(!0),c.setTiles([f.url])):c.setVisible(!1)},{immediate:!0}),(h,f)=>(e.openBlock(),e.createElementBlock("div",Fp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(b,V)=>(e.openBlock(),e.createElementBlock("div",{key:V,onClick:T=>y(V)},[V!=="none"&&b.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",k.value===V?"border-blue-500":"border-gray-200"])},[b.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:b.preview,alt:b.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,Ip)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",k.value===V?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(Yr),{class:"w-4 h-4 text-gray-500"})],2))],8,Dp))),128))]))}}),jp={key:0,class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",style:{width:"100%"}},zp={class:"flex flex-col gap-1 p-5"},Op={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},xn=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:l}=Le(),r=e.ref([]);let a=null;function i(k){return k?k.map((c,y)=>{var g;const d=(c==null?void 0:c.name)||(c==null?void 0:c.label)||(c==null?void 0:c.title)||(c==null?void 0:c.id)||`Layer ${y+1}`,m=(c==null?void 0:c.color)||(c==null?void 0:c.fill)||((g=c==null?void 0:c.paint)==null?void 0:g.color)||"#3388ff";return{id:`${d}-${y}`,label:d,color:m}}):[]}function s(k){return k!=null&&k.layers?k.layers.filter(c=>{const y=c.paint||{};return y["fill-color"]||y["line-color"]||y["circle-color"]}).map((c,y)=>{var g;const d=c.paint||{},m=d["fill-color"]||d["line-color"]||d["circle-color"]||"#3388ff";return{id:c.id||`layer-${y}`,label:((g=c.metadata)==null?void 0:g.title)||c.id||`Layer ${y+1}`,color:m}}):[]}async function u(){var y;await l();const k=o.value;if(!k)return;const c=(y=k.getStyle)==null?void 0:y.call(k);r.value=s(c)}function p(){o.value&&(a==null||a())}return e.watch(()=>n.items,async k=>{k!=null?(r.value=i(k),a==null||a()):(await l(),p(),u())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await l(),p(),u())}),e.onBeforeUnmount(()=>{a==null||a(),a=null}),(k,c)=>r.value.length?(e.openBlock(),e.createElementBlock("div",jp,[e.createElementVNode("div",zp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,y=>(e.openBlock(),e.createElementBlock("div",{key:y.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:y.color})},null,4),e.createElementVNode("span",Op,[e.createElementVNode("span",null,e.toDisplayString(y.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function Rp(){const{map:t,ready:n}=Le(),o=e.ref(null),l=e.ref(null),r=e.ref(null),a=e.ref(null);let i=[];function s(){i.forEach(d=>d()),i=[]}const u=d=>{const m=(d==null?void 0:d.properties)||{};return!!(m.cluster||m.point_count||m.point_count_abbreviated)},p=d=>{var f,b;o.value=[d.point.x,d.point.y];const m=t.value.queryRenderedFeatures(d.point);if(!(m!=null&&m.length)){k();return}const g=m.find(V=>!u(V));if(!g){k();return}const h=fe(g.source)||fe((f=g.layer)==null?void 0:f.id);h!=null&&h.popup&&(l.value=((b=h.popup)==null?void 0:b.fields)||h.popup,a.value=g.properties)},k=()=>{l.value=null,a.value=null,o.value=null};async function c(){await n(),t.value&&(s(),t.value.on("mousemove",p),t.value.on("mouseleave",k))}function y(){s(),l.value=null,a.value=null,o.value=null}return n().then(c),{popupCoords:o,popupFields:l,popupValues:a,disable:y,title:r}}const Pp={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Up={class:"space-y-1.5"},qp={class:"font-bold text-slate-700"},Hp={class:"text-slate-700"},sr=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:l,disable:r}=Rp(),{map:a}=Le(),i=e.ref(null),s=e.ref({left:"-9999px",top:"-9999px"}),u=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function p(g,h){if(h==null||h==="")return h;if((g==null?void 0:g.type)==="number"){const f=typeof h=="number"?h:Number(h);if(Number.isFinite(f))return u.format(f)}return h}function k(g,h,f){const b=g.name||g.label||g.title||`field-${f}`,V=g.label||g.title||g.name||b,T=g.name?h[g.name]:void 0,C=(g.name?h[`${g.name}_text`]:void 0)??T??g.value??null;return{key:b,label:V,value:p(g,C)}}const c=e.computed(()=>{const g=o.value||[],h=l.value||{};return g.filter(f=>(f==null?void 0:f.meta)!=="title").map((f,b)=>k(f,h,b)).filter(f=>f.label)}),y=e.computed(()=>{const g=o.value||[],h=l.value||{},f=g.find(b=>(b==null?void 0:b.meta)==="title");return f?k(f,h,0):null}),d=e.computed(()=>{var h;const g=c.value;return(h=y.value)!=null&&h.value?[{...y.value,key:`${y.value.key}-title`,label:"Назва"},...g]:g});function m(){var x,N;if(!d.value.length||!n.value||!i.value){s.value={left:"-9999px",top:"-9999px"};return}const g=i.value,h=g.offsetParent||null,f=(h==null?void 0:h.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},b=((N=(x=a.value)==null?void 0:x.getContainer)==null?void 0:N.call(x))||void 0,V=(b==null?void 0:b.getBoundingClientRect())??f,T=V.left-f.left,I=V.top-f.top,C=g.offsetWidth||0,B=g.offsetHeight||0,S=12,M=8,[j,G]=n.value;let W=T+j+S,K=I+G+S;W+C+M>f.width&&(W=T+j-C-S),K+B+M>f.height&&(K=I+G-B-S);const P=M,D=M,$=Math.max(M,f.width-C-M),E=Math.max(M,f.height-B-M);W=Math.min(Math.max(W,P),$),K=Math.min(Math.max(K,D),E),s.value={left:`${W}px`,top:`${K}px`}}return e.watch([n,d],()=>{e.nextTick(()=>m())}),e.onMounted(()=>{window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",m),r()}),(g,h)=>d.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:i,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(s.value)},[e.createElementVNode("div",Pp,[e.createElementVNode("div",Up,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.key,class:"flex flex-col"},[e.createElementVNode("span",qp,e.toDisplayString(f.label),1),e.createElementVNode("span",Hp,e.toDisplayString(f.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function Wp(){const{map:t,ready:n}=Le(),o=ke.useRoute(),l=ke.useRouter(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(!1),u=e.ref([]),p=e.ref(0),k=e.computed(()=>u.value.length),c=e.computed(()=>s.value||!!r.value||!!i.value);let y=null,d=!1;function m(){r.value=null,a.value=null,i.value=null,s.value=!1,u.value=[],p.value=0}function g(){if(y){try{y()}catch{}y=null}}async function h(){await n();const W=t.value;W&&(g(),m(),W.on("click",f),y=()=>W.off("click",f),G(S()))}function f(W){const K=t.value;if(!K)return;const P=(K.queryRenderedFeatures(W.point)||[]).filter(D=>{var $;return($=D==null?void 0:D.properties)==null?void 0:$.id});if(!P.length){m(),j(null);return}u.value=P,p.value=0,b(p.value)}function b(W){const K=u.value[W];if(!K)return;p.value=W;const P=fe(K.source);I(K,P==null?void 0:P.card)}function V(){p.value>=u.value.length-1||b(p.value+1)}function T(){p.value<=0||b(p.value-1)}async function I(W,K){var $,E,x,N;if(!(($=W==null?void 0:W.properties)!=null&&$.id))return;const P=new URLSearchParams;P.set("layer",W.source),P.set("id",String((E=W.properties)==null?void 0:E.id));const D=Array.isArray(K)&&K.length>0;s.value=D,i.value=null,r.value=null,a.value=W||null;try{const w=await fetch(`/api/map-format?${P.toString()}`);if(!w.ok)throw new Error(`Failed (${w.status})`);const F=await w.json(),L=Array.isArray(F.columns)?F.columns:[],A=Array.isArray(K)?K:[];if(!L.length&&!A.length){console.error("Configure layer in admin"),C();return}r.value={rows:F.rows||{},fields:A,columns:L,html:F.html||null},d||j(a.value);const O=(x=F.rows)==null?void 0:x.geom;if(O){const Z=typeof O=="string"?JSON.parse(O):O;Z&&(a.value={...a.value,geometry:Z,properties:{...((N=a.value)==null?void 0:N.properties)||{},geom:Z,geom_4326:Z}})}}catch(w){console.error("Failed to load feature card:",w),C()}finally{s.value=!1}}function C(){m(),j(null)}function B(){g(),m()}n().then(h),e.onBeforeUnmount(()=>B());function S(){const W=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof W!="string"?null:W.trim()||null}function M(W){var $,E;const K=(W==null?void 0:W.source)??(($=W==null?void 0:W.layer)==null?void 0:$.id),P=(E=W==null?void 0:W.properties)==null?void 0:E.id;return!K||P===void 0||P===null?null:`${K},${P}`.trim()||null}function j(W){const K=M(W),P=S();if(K===P)return;const D={...o.query};K?D.info=K:delete D.info,l.push({query:D}).catch(()=>{})}async function G(W){if(!W){m();return}if(W===M(a.value))return;const[K,P]=W.split(","),D=K==null?void 0:K.trim(),$=P==null?void 0:P.trim();if(!D||!$){m(),j(null);return}d=!0;try{const E={source:D,properties:{id:$}};u.value=[E],p.value=0;const x=fe(D);await I(E,x==null?void 0:x.card)}finally{d=!1}}return e.watch(()=>S(),W=>{W!==M(a.value)&&(d=!0,G(W).finally(()=>{d=!1}))}),{card:r,cardFeature:a,cardError:i,cardLoading:s,isOpen:c,close:C,next:V,prev:T,count:k,index:p}}function Yp(){const{map:t,ready:n}=Le(),o=e.ref([]),l=e.ref(0),r=e.ref(0),a=e.ref(!1),i=e.ref(null),s=e.ref({}),u=e.ref(null),p=e.ref([]),k=e.computed(()=>o.value[r.value]||null),c=e.computed(()=>o.value.length>0);let y=null;const d=()=>{y==null||y.remove(),y=null},m=S=>S?S.type==="FeatureCollection"?S:S.type==="Feature"?{type:"FeatureCollection",features:[S]}:S.type&&Array.isArray(S.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:S,properties:{}}]}:Array.isArray(S.features)?{type:"FeatureCollection",features:S.features}:S.geometry?m(S.geometry):null:null,g=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),h=S=>Number(S.toFixed(5)),f=async S=>{if(await n(),!t.value)return;const M=m(S);M&&(d(),y=fe("feature-highlight",{source:{type:"geojson",data:M},style:g()},t))},b=async(S,M,j)=>{var K,P;const[G,W]=[h(S),h(M)];u.value={x:G,y:W},p.value=j,a.value=!0,i.value=null,o.value=[],s.value={},r.value=0;try{const D=j.map(async w=>{const F=`/api/map-info-point?x=${G}&y=${W}&layers=${w}`,L=await fetch(F);if(!L.ok)return null;const A=await L.json();if(!A.count)return null;const Z=await(await fetch(`${F}&index=0`)).json();return{layerId:w,data:Z,count:A.count}}),E=(await Promise.all(D)).filter(Boolean);if(E.length===0){l.value=0;return}o.value=E.map(w=>w.data);const[x]=o.value;l.value=E.reduce((w,F)=>w+(F.count||0),0),s.value[0]=x;const N=((K=x==null?void 0:x.data)==null?void 0:K.geom_4326)??((P=x==null?void 0:x.data)==null?void 0:P.geom);await f(N)}catch(D){i.value=D.message}finally{a.value=!1}},V=async S=>{if(!u.value||!p.value.length)return;if(s.value[S]){o.value[S]=s.value[S];return}const{x:M,y:j}=u.value,G=p.value.join(","),W=`/api/map-info-point?x=${M}&y=${j}&index=${S}&layers=${G}`;try{a.value=!0;const K=await fetch(W);if(!K.ok)throw new Error("Failed to fetch feature by index");const P=await K.json();o.value[S]=P,s.value[S]=P}catch(K){i.value=K.message}finally{a.value=!1}},T=async()=>{r.value<l.value-1&&(r.value+=1,s.value[r.value]||await V(r.value))},I=async()=>{r.value>0&&(r.value-=1,s.value[r.value]||await V(r.value))},C=()=>{o.value=[],l.value=0,r.value=0,s.value={},u.value=null,p.value=[],d()};e.watch(r,async()=>{var M,j;const S=k.value;if(S){const G=((M=S==null?void 0:S.data)==null?void 0:M.geom_4326)??((j=S==null?void 0:S.data)==null?void 0:j.geom);await f(G)}});let B=null;return e.onMounted(async()=>{await n(),t.value&&(B=async S=>{const{lng:M,lat:j}=S.lngLat,G=fe(),K=Object.entries(G).map(([P,D])=>{var $,E,x,N;return{id:P,service:(($=D==null?void 0:D.opts)==null?void 0:$.service)??((x=(E=D==null?void 0:D.opts)==null?void 0:E.source)==null?void 0:x.service)??null,count:((N=D==null?void 0:D.opts)==null?void 0:N.count)??null,visible:(()=>{var w;try{return((w=t.value)==null?void 0:w.getLayer(P))?t.value.getLayoutProperty(P,"visibility")!=="none":!0}catch{return!0}})()}}).filter(P=>P.service==="ogc"&&P.visible).map(P=>P.id);K.length>0&&await b(M,j,K)},t.value.on("dblclick",B))}),e.onBeforeUnmount(()=>{t.value&&B&&t.value.off("dblclick",B),d()}),{features:o,count:l,index:r,current:k,loading:a,error:i,active:c,next:T,prev:I,close:C}}const cr=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,l=n;function r(p){const k=p.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(k)return k;const c=Array.from(p).map(y=>y.charCodeAt(0).toString(16)).join("").slice(0,8);return c?`layer-${c}`:"layer-temp"}const a=e.computed(()=>{var p;return((p=o.id)==null?void 0:p.trim())||r(o.title)}),i=e.computed(()=>o.buttonText||"Показати шар");function s(){return{id:a.value,title:o.title,url:o.url}}function u(){l("activate",s())}return(p,k)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:u},[e.renderSlot(p.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.value),1)])]))}}),ze=e.ref([]);function Zp(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,l)=>{const r=String(l||"").trim();if(!r)return"";const a=n[r];return a!=null?String(a):""}):t}function bn(t){return t==null?"":String(t).trim()}function kn(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Gp(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Kp(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let l=0;l<n.length;l+=1){const r=n[l];if(!(!r||typeof r.id!="string")&&r.type&&r.type!=="background"&&r.type!=="raster")return r.id}}function wn(t){function n(a,i={},s,u){var b,V;const p=bn(a==null?void 0:a.id),k=((b=a==null?void 0:a.title)==null?void 0:b.trim())||p,c=((V=a==null?void 0:a.url)==null?void 0:V.trim())||"";if(!p||!c)return;const y=Zp(c,i);if(!y)return;const d=u??t;if(!d)return;const m=Gp(d);if(!m)return;const g=ze.value.findIndex(T=>T.id===p);g!==-1&&(kn(ze.value[g]),ze.value.splice(g,1));let h=null;const f=a.beforeId??Kp(m);try{h=fe(p,{source:{type:"raster",tiles:[y],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:p,type:"raster",source:p,paint:{"raster-opacity":a.opacity??.85}},beforeId:f},d)}catch(T){const I=(T==null?void 0:T.message)??"";if(!(typeof I=="string"&&I.includes("Map provider")))throw T;return}ze.value=[...ze.value,{id:p,title:k,originalUrl:c,resolvedUrl:y,owner:s??null,handle:h??null}]}function o(a,i){const s=bn(a);if(!s)return;const u=ze.value.findIndex(k=>k.id===s&&(!i||k.owner===i));if(u===-1)return;const[p]=ze.value.splice(u,1);kn(p)}function l(a){if(!ze.value.length)return;const i=[];ze.value.forEach(s=>{(a?s.owner===a:!0)?kn(s):i.push(s)}),ze.value=i}function r(a,i){const s=bn(a);return s?ze.value.some(u=>u.id===s&&(!i||u.owner===i)):!1}return{temporaryLayers:ze,activateTemporaryLayer:n,deactivateTemporaryLayer:o,clearTemporaryLayers:l,isTemporaryLayerActive:r}}const Xp={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},Jp={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},Qp={class:"min-w-0 flex-1"},em={class:"text-base font-semibold text-slate-900 truncate"},tm={key:0,class:"flex gap-1 mt-1"},nm=["disabled"],om=["disabled"],rm={key:1,class:"flex gap-1 mt-1"},lm=["disabled"],am=["disabled"],im={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},sm={key:0,class:"text-center text-xs text-slate-500"},cm={key:1,class:"text-center text-xs text-red-500"},dm={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},um={class:"divide-y divide-gray-100 py-[5px]"},pm={class:"text-gray-900 font-normal"},mm={key:0,class:"flex gap-1 flex-wrap"},fm={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},gm=["innerHTML"],ym=["innerHTML"],hm={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},xm={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},bm={class:"text-xs tracking-[0.02em] leading-none"},km={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},wm={class:"space-y-1"},_m={class:"flex items-center cursor-pointer gap-2 flex-1"},Em=["checked","onChange"],Nm={class:"text-[13px] text-gray-600"},Bm={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},Vm={key:5,class:"text-center text-xs text-slate-400"},Cm="map:temporary-layer-request",dr="cardHideEmpty",$m=14,ur=ie(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=Wp(),l=Yp(),r=e.computed(()=>l.active.value),a=e.computed(()=>r.value||o.isOpen.value),i=e.computed(()=>r.value?l.loading.value:o.cardLoading.value),s=e.computed(()=>r.value?l.error.value:o.cardError.value),u=e.computed(()=>{var _,v;return r.value?((_=l.current.value)==null?void 0:_.html)||null:((v=o.card.value)==null?void 0:v.html)||null}),p=Le(),k=gn(),c=e.computed(()=>{var _,v;return((v=(_=k.value)==null?void 0:_.map)==null?void 0:v.cardHideEmpty)??null}),y=ke.useRoute(),{activateTemporaryLayer:d,deactivateTemporaryLayer:m,clearTemporaryLayers:g,isTemporaryLayerActive:h}=wn(p.map);function f(_){window.dispatchEvent(new CustomEvent(Cm,{detail:_}))}const b=e.computed(()=>{var _;return((_=o.cardFeature.value)==null?void 0:_.source)??null}),V=e.computed(()=>b.value?`map-card:${b.value}`:"map-card"),T=e.computed(()=>{var J,ne;const _=o.cardFeature.value,v=(_==null?void 0:_.source)||((J=_==null?void 0:_.layer)==null?void 0:J.id),z=((ne=_==null?void 0:_.properties)==null?void 0:ne.id)??(_==null?void 0:_.id);return v&&z!=null?`${v}:${z}`:null}),I=e.ref(null),C=e.ref(null),B=e.ref(0),S=new Map;function M(){if(typeof window>"u")return null;const v=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return v&&v[1]?v[1]:null}const j=e.computed(()=>{const _=typeof n.mapId=="string"?n.mapId.trim():"";if(_.length)return _;const v=typeof y.params.slug=="string"?y.params.slug.trim():"";if(v.length)return v;const z=typeof y.query.slug=="string"?y.query.slug.trim():"";return z.length?z:M()}),G=e.ref(null),W=e.ref(null),K=new Map;function P(_){const v=_.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(v)return v;const z=Array.from(_).map(J=>J.charCodeAt(0).toString(16)).join("").slice(0,8);return z?`layer-${z}`:`layer-${Math.random().toString(36).slice(2,8)}`}function D(_){if(typeof _!="string")return"";const v=_.trim();if(!v)return"";if(/^https?:\/\//i.test(v))return v;if(v.startsWith("//"))return typeof window>"u"?`https:${v}`:`${window.location.protocol}${v}`;const z=typeof window<"u"?window.location.origin:"";return v.startsWith("/")?z?`${z}${v}`:v:z?`${z}/${v}`:v}function $(_){if(_==null)return[];if(Array.isArray(_))return _.flatMap(v=>$(v));if(typeof _=="number")return Number.isFinite(_)?[_]:[];if(typeof _=="string"){const v=_.match(/-?\d+(?:\.\d+)?/g);return!v||!v.length?[]:v.map(z=>Number(z)).filter(z=>Number.isFinite(z))}return[]}function E(_){const v=$(_);if(v.length<4)return null;const[z,J,ne,ce]=v;return[z,J,ne,ce].every(ge=>Number.isFinite(ge))?[z,J,ne,ce]:null}function x(_){if(!_)return null;const v=_.trim();if(!v.length)return null;try{const ne=JSON.parse(v),ce=E(ne);if(ce)return ce}catch{}const z=v.match(/-?\d+(?:\.\d+)?/g);if(!z||z.length<4)return null;const J=z.slice(0,4).map(ne=>Number(ne));return J.every(ne=>Number.isFinite(ne))?[J[0],J[1],J[2],J[3]]:null}function N(_){const v={},z=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let J;for(;(J=z.exec(_))!==null;){const ne=J[1],ce=J[2]??J[3]??J[4]??"";ne&&(v[ne]=ce)}return v}function w(_,v){for(const z of v)if(_[z]!=null&&String(_[z]).trim().length)return String(_[z]).trim();return""}function F(_){if(!(_!=null&&_.length))return;const v=Number(_);return Number.isFinite(v)?v:void 0}function L(_){if(typeof _!="string"||!_.length)return[];const v=[],z=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let J=0,ne;const ce=new Set,ge=ye=>{let Ce=ye,Te=2;for(;ce.has(Ce);)Ce=`${ye}-${Te}`,Te+=1;return ce.add(Ce),Ce};for(;(ne=z.exec(_))!==null;){const[ye,Ce="",Te=""]=ne,_e=ne.index;if(_e>J){const Mr=_.slice(J,_e);Mr.trim().length&&v.push({type:"html",content:Mr})}const Fe=N(Ce),je=w(Fe,["title"])||"Тимчасовий шар",Je=D(w(Fe,["url"]));if(!Je){v.push({type:"html",content:ye}),J=_e+ye.length;continue}const Mt=w(Fe,["id"]),vn=w(Fe,["button-text","buttonText","show","show-label","showLabel"]),zx=F(w(Fe,["tile-size","tileSize"])),Ox=F(w(Fe,["minzoom","minZoom"])),Rx=F(w(Fe,["maxzoom","maxZoom"])),Px=F(w(Fe,["opacity"])),Ux=x(w(Fe,["bounds","data-bounds","bbox"])),qx=Mt||P(`${je}-${Je}`)||P(je),Lr=ge(qx||`layer-${v.length+1}`),Sn=Te.trim(),Ar=/<[^>]+>/.test(Sn),Hx=Ar?Sn:null,Ln=Ar?null:Sn,Wx=vn&&vn.trim().length?vn.trim():Ln&&Ln.trim().length?Ln.trim():void 0;v.push({type:"layer",spec:{id:Lr,title:je,url:Je,tileSize:zx,minzoom:Ox,maxzoom:Rx,opacity:Px,bounds:Ux},componentProps:{title:je,url:Je,id:Lr,buttonText:Wx},slotText:Hx}),J=_e+ye.length}if(J<_.length){const ye=_.slice(J);ye.trim().length&&v.push({type:"html",content:ye})}return!v.length&&_.trim().length&&v.push({type:"html",content:_}),v}function A(_){if(!_)return null;const v=typeof _.id=="string"?_.id.trim():"",z=typeof _.title=="string"?_.title.trim():"",J=D(typeof _.url=="string"?_.url:"");return!v||!J?null:{id:v,title:z||v,url:J,tileSize:_.tileSize,minzoom:_.minzoom,maxzoom:_.maxzoom,opacity:_.opacity,bounds:_.bounds}}const O=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.data??{};const _=o.card.value;return(_==null?void 0:_.rows)??{}}),Z=e.computed(()=>{if(r.value&&l.current.value)return l.current.value.fields??[];const _=o.card.value;if(!_)return[];const v=Array.isArray(_.columns)?_.columns:[];return v.length?v:Array.isArray(_.fields)?_.fields:[]}),X=e.computed(()=>{const _=Z.value;if(!_.length)return[];const v=O.value;return _.map(z=>({key:z.name,label:z.ua||z.label||z.title||z.name,value:v[z.name]??"—",format:z.format||"text"}))}),H=new Set(["—","-","–","−"]);function ae(_){if(_==null)return!0;if(typeof _=="string"){const v=_.trim();return v.length?H.has(v):!0}return!1}function de(_){if(!_)return[];if(Array.isArray(_))return _;if(typeof _=="string"){const v=_.trim();if(v.startsWith("{")&&v.endsWith("}")){const J=v.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return J?J.map(ne=>ne.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const U=e.ref(!1),q=e.ref(!0),Y=()=>{var _,v;return typeof window>"u"?null:((v=(_=window.localStorage)==null?void 0:_.getItem)==null?void 0:v.call(_,dr))??null},te=e.ref(Y()),le=_=>{const v=typeof _=="string"&&_.toLowerCase()==="true";U.value=v,q.value=!v},me=_=>{te.value=_};if(typeof window<"u"){const _=v=>{v.key===dr&&me(v.newValue)};window.addEventListener("storage",_),e.onBeforeUnmount(()=>{window.removeEventListener("storage",_)})}const we=e.computed(()=>typeof te.value=="string");e.watch(te,_=>{le(typeof _=="string"?_:c.value)},{immediate:!0}),e.watch(c,_=>{we.value||le(_)},{immediate:!0});const pe=e.computed(()=>X.value.filter(_=>ae(_.value)).length),Oe=e.computed(()=>U.value&&!q.value?X.value.filter(_=>!ae(_.value)):X.value);function Pe(_){const v=typeof _=="string"?_:"";if(!v.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:v,hiddenCount:0};const J=new DOMParser().parseFromString(v,"text/html");let ne=0;return J.querySelectorAll("dd").forEach(ce=>{var Ce;const ge=((Ce=ce.textContent)==null?void 0:Ce.trim())??"",ye=ce.closest("div");if(ae(ge)){ne+=1,ye?ye.remove():ce.remove();return}}),{sanitized:J.body.innerHTML,hiddenCount:ne}}const R=e.computed(()=>Pe(u.value)),Q=e.computed(()=>u.value?R.value.hiddenCount:0),se=e.computed(()=>pe.value+Q.value),Ve=e.computed(()=>{var _;return U.value&&!q.value&&!!((_=u.value)!=null&&_.trim())}),re=e.computed(()=>U.value&&se.value>0),xe=e.computed(()=>q.value?"Приховати пусті значення":"Показати пусті значення"),Me=e.computed(()=>q.value?Ur:Rr);function ee(){q.value=!q.value}const Ee=e.computed(()=>{const _=Ve.value?R.value.sanitized:u.value??"";return L(_)}),ve=e.computed(()=>Ee.value.filter(_=>_.type==="layer"));function Ue(_){return Array.isArray(_)?_.map((v,z)=>{const J=D(typeof(v==null?void 0:v.url)=="string"?v.url:""),ne=typeof(v==null?void 0:v.geohub)=="string"&&v.geohub.trim().length?`/api-hub/tms/${v.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",ce=((v==null?void 0:v.name)||(v==null?void 0:v.title)||(v==null?void 0:v.label)||`Шар ${z+1}`).toString(),ge=(v==null?void 0:v.id)!=null?String(v.id):P(`${ce}-${z+1}`),ye=(v==null?void 0:v.buttonText)||(v==null?void 0:v.button_text)||null,Ce=(v==null?void 0:v.description)||(v==null?void 0:v.subtitle)||null,Te=J||D(ne)||"";if(!Te)return null;const _e={id:ge,title:ce,url:Te,subtitle:Ce,buttonText:ye||void 0};typeof(v==null?void 0:v.tileSize)=="number"&&(_e.tileSize=v.tileSize),typeof(v==null?void 0:v.tile_size)=="number"&&(_e.tileSize=v.tile_size),typeof(v==null?void 0:v.minzoom)=="number"&&(_e.minzoom=v.minzoom),typeof(v==null?void 0:v.maxzoom)=="number"&&(_e.maxzoom=v.maxzoom),typeof(v==null?void 0:v.opacity)=="number"&&(_e.opacity=v.opacity);const Fe=E((v==null?void 0:v.bounds)??(v==null?void 0:v.bbox)??null);return Fe&&(_e.bounds=Fe),_e}).filter(Boolean):[]}const qe=e.computed(()=>{var J,ne;const _=o.card.value,v=l.current.value,z=[(J=_==null?void 0:_.rows)==null?void 0:J.layers,_==null?void 0:_.layers,(ne=v==null?void 0:v.data)==null?void 0:ne.layers,v==null?void 0:v.layers];for(const ce of z){const ge=Ue(ce);if(ge.length)return ge}return[]}),nt=e.computed(()=>Ee.value.length>0||X.value.length>0||qe.value.length>0),Xe=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function ot(){const _={},v=G.value;if(v&&typeof v=="object"&&Object.entries(v).forEach(([z,J])=>{typeof J=="string"&&(_[z]=J)}),b.value&&(_.layer=b.value),!_.geohub){const z=typeof(v==null?void 0:v.geohub)=="string"?v.geohub:null,J=typeof(v==null?void 0:v.geohub_key)=="string"?v.geohub_key:null,ne=typeof(v==null?void 0:v.geohubId)=="string"?v.geohubId:null;_.geohub=z||J||ne||_.layer||""}return _}async function rt(){const _=b.value;if(!_)return G.value=null,W.value=null,null;if(W.value===_&&G.value)return G.value;if(K.has(_)){const v=K.get(_);return G.value=v,W.value=_,v}try{const v=await fetch(`/api/gis-service/${encodeURIComponent(_)}`);if(!v.ok)return null;const z=await v.json();return K.set(_,z),G.value=z,W.value=_,z}catch{return null}}async function lt(_){if(!(_!=null&&_.id))return;await rt();const v=ot(),z=ve.value.find(ye=>ye.spec.id===_.id),J=qe.value.find(ye=>ye.id===_.id),ne=(z==null?void 0:z.spec)||A(J)||A(_),ce=(z==null?void 0:z.spec.bounds)??(J==null?void 0:J.bounds);if(!ne||h(ne.id,V.value))return;const ge=V.value||void 0;I.value=ge??null,d(ne,v,ge),f({action:"activate",owner:ge,spec:ne,context:v}),Vx(ce)}async function Vx(_){var ce;if(!(_!=null&&_.length))return;const[v,z,J,ne]=_;[v,z,J,ne].every(ge=>Number.isFinite(ge))&&typeof p.fitBounds=="function"&&(await((ce=p.ready)==null?void 0:ce.call(p)),p.fitBounds([[v,z],[J,ne]],{padding:48,maxZoom:18}))}function Cx(_){if(!_)return;const v=Nn()||void 0;m(_,v),f({action:"deactivate",owner:v,spec:{id:_}})}function $x(_){return h(_,Nn())}function vx(_,v){const z=v.target;!!(z!=null&&z.checked)?lt(_):Cx(_.id)}function Nn(){return I.value||V.value||null}e.watch(b,(_,v)=>{_!==v&&(G.value=null,W.value=null)});const{next:_r,prev:Er,count:Bn,index:Wt}=l,Vn=e.computed(()=>o.count.value),Cn=e.computed(()=>o.index.value),Nr=e.computed(()=>Vn.value>1),Br=e.computed(()=>r.value?Bn.value:Vn.value),Vr=e.computed(()=>r.value?Wt.value:Cn.value),Cr=o.next,$r=o.prev;function at(){const _=Nn();_&&(g(_),f({action:"clear",owner:_}),I.value=null)}function Sx(){o.close(),l.close(),at()}e.watch(a,(_,v)=>{!_&&v&&(at(),We())});function vr(){!o.isOpen.value&&!l.active.value&&at()}e.watch(()=>o.isOpen.value,()=>{vr()}),e.watch(()=>l.active.value,()=>{vr()}),e.watch(b,(_,v)=>{_&&v&&_!==v&&at()}),e.watch(Wt,(_,v)=>{_!==v&&at()}),e.watch(T,(_,v)=>{_&&v&&_!==v&&at()});function Lx(_){if(!_)return null;if(_.geometry)return _.geometry;const v=(_==null?void 0:_.data)??(_==null?void 0:_.properties);return v!=null&&v.geom_4326?v.geom_4326:v!=null&&v.geom?v.geom:null}function We(){var _,v;(v=(_=C.value)==null?void 0:_.remove)==null||v.call(_),C.value=null}function Ax(_){var z,J,ne;const v=(_==null?void 0:_.type)||((ne=(J=(z=_==null?void 0:_.features)==null?void 0:z[0])==null?void 0:J.geometry)==null?void 0:ne.type)||"";return v.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:v.includes("LineString")?{type:"line",paint:{"line-color":"#0a57ff","line-width":3,"line-opacity":.9}}:{type:"circle",paint:{"circle-color":"#0a57ff","circle-opacity":.9,"circle-radius":8,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}}let $n=null;function Sr(){const _=Array.isArray(y.query.info)?y.query.info[0]:y.query.info;return typeof _!="string"?null:_.trim()||null}function Mx(_){var ne,ce;if(!_)return null;const v=(_==null?void 0:_.source)??((ne=_==null?void 0:_.layer)==null?void 0:ne.id),z=((ce=_==null?void 0:_.properties)==null?void 0:ce.id)??(_==null?void 0:_.id);return!v||z===void 0||z===null?null:`${v},${z}`.trim()||null}function Yt(_,v){if(_){if(Array.isArray(_)){if(_.length>=2&&typeof _[0]=="number"&&typeof _[1]=="number"){v.push([_[0],_[1]]);return}_.forEach(z=>Yt(z,v));return}typeof _=="object"&&(Array.isArray(_.coordinates)&&Yt(_.coordinates,v),Array.isArray(_.features)&&_.features.forEach(z=>Yt(z==null?void 0:z.geometry,v)))}}function Tx(_){var ye,Ce;if(!_)return null;const v=_.type==="FeatureCollection"?(Ce=(ye=_.features)==null?void 0:ye[0])==null?void 0:Ce.geometry:_.type==="Feature"?_.geometry:_,z=[];if(Yt(v,z),!z.length)return null;let J=z[0][0],ne=z[0][0],ce=z[0][1],ge=z[0][1];return z.forEach(([Te,_e])=>{Te<J&&(J=Te),Te>ne&&(ne=Te),_e<ce&&(ce=_e),_e>ge&&(ge=_e)}),[(J+ne)/2,(ce+ge)/2]}async function Fx(_,v){var ce;const z=Sr();if(!z)return;const J=Mx(_);if(!J||J!==z||$n===z)return;const ne=Tx(v);ne&&(await((ce=p.ready)==null?void 0:ce.call(p)),p.flyTo({center:ne,zoom:$m}),$n=z)}function Dx(_){var ne;if(!_){We();return}const v=(ne=p.map)==null?void 0:ne.value,z={type:"FeatureCollection",features:[{type:"Feature",geometry:_,properties:{}}]};We();const J=Ax(_);if(C.value=fe("feature-card-highlight",{source:{type:"geojson",data:z},layer:{id:"feature-card-highlight",type:J.type,source:"feature-card-highlight",paint:J.paint}},p.map),v!=null&&v.moveLayer){const ce=()=>{try{v.moveLayer("feature-card-highlight")}catch{}},ge=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(ce)}):setTimeout(ce,0)};ge();const ye=()=>ge();v.once("styledata",ye);const Ce=()=>{ge(),v.off("styledata",ye),v.off("idle",Ce)};v.on("idle",Ce)}}function Ix(_){var J,ne;const v=(_==null?void 0:_.source)||((J=_==null?void 0:_.layer)==null?void 0:J.id)||"unknown",z=((ne=_==null?void 0:_.properties)==null?void 0:ne.id)??(_==null?void 0:_.id)??"unknown";return`${v}:${z}`}async function jx(_){var ce,ge,ye,Ce,Te;if(!_)return null;const v=Lx(_);if(v)return v;const z=((ce=_==null?void 0:_.properties)==null?void 0:ce.id)??(_==null?void 0:_.id);if(!z)return null;const J=Ix(_);if(S.has(J))return S.get(J);const ne=[j.value,_==null?void 0:_.source,(ge=_==null?void 0:_.layer)==null?void 0:ge.id].map(_e=>typeof _e=="string"?_e.trim():"").filter(Boolean);for(const _e of ne)try{const Fe=await fetch(`/api/map-features/${encodeURIComponent(_e)}/${encodeURIComponent(String(z))}`);if(!Fe.ok)continue;const je=await Fe.json(),Je=((ye=je==null?void 0:je.data)==null?void 0:ye.geom)||((Ce=je==null?void 0:je.data)==null?void 0:Ce.geometry)||((Te=je==null?void 0:je.data)==null?void 0:Te.geom_4326)||null,Mt=typeof Je=="string"?JSON.parse(Je):Je;if(Mt)return S.set(J,Mt),Mt}catch{continue}return null}async function At(_){B.value+=1;const v=B.value;if(!_||r.value){We();return}if(!Xe.value){We();return}const z=await jx(_);if(v===B.value){if(!z){We();return}Dx(z),Fx(_,z)}}return e.watch(()=>o.cardFeature.value,_=>{At(_)},{immediate:!0}),e.watch(()=>o.index.value,()=>{r.value||At(o.cardFeature.value)}),e.watch(r,_=>{_?We():At(o.cardFeature.value)}),e.watch(j,()=>{!r.value&&o.cardFeature.value&&At(o.cardFeature.value)}),e.watch(Xe,_=>{_?At(o.cardFeature.value):We()}),e.watch(()=>Sr(),()=>{$n=null}),e.onBeforeUnmount(()=>{at(),We()}),(_,v)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[a.value?(e.openBlock(),e.createElementBlock("div",Xp,[e.createElementVNode("div",Jp,[e.createElementVNode("div",Qp,[e.createElementVNode("p",em,[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Vr.value+1)+" / "+e.toDisplayString(Br.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[Nr.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Vr.value+1)+" / "+e.toDisplayString(Br.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),r.value&&e.unref(Bn)>1?(e.openBlock(),e.createElementBlock("div",tm,[e.createElementVNode("button",{onClick:v[0]||(v[0]=(...z)=>e.unref(Er)&&e.unref(Er)(...z)),disabled:e.unref(Wt)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Tn),{class:"h-4 w-4"})],8,nm),e.createElementVNode("button",{onClick:v[1]||(v[1]=(...z)=>e.unref(_r)&&e.unref(_r)(...z)),disabled:e.unref(Wt)===e.unref(Bn)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Fn),{class:"h-4 w-4"})],8,om)])):!r.value&&Nr.value?(e.openBlock(),e.createElementBlock("div",rm,[e.createElementVNode("button",{onClick:v[2]||(v[2]=(...z)=>e.unref($r)&&e.unref($r)(...z)),disabled:Cn.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Tn),{class:"h-4 w-4"})],8,lm),e.createElementVNode("button",{onClick:v[3]||(v[3]=(...z)=>e.unref(Cr)&&e.unref(Cr)(...z)),disabled:Cn.value===Vn.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(Fn),{class:"h-4 w-4"})],8,am)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700 ml-1",onClick:Sx}," ✕ ")]),e.createElementVNode("div",im,[i.value?(e.openBlock(),e.createElementBlock("div",sm," Завантаження даних… ")):s.value?(e.openBlock(),e.createElementBlock("div",cm,e.toDisplayString(s.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[X.value.length?(e.openBlock(),e.createElementBlock("div",dm,[e.createElementVNode("dl",um,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Oe.value,z=>(e.openBlock(),e.createElementBlock("div",{key:z.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",pm,e.toDisplayString(z.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",z.format==="badge"?"font-semibold text-yellow-800":""])},[z.format==="tags"?(e.openBlock(),e.createElementBlock("div",mm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(de(z.value),(J,ne)=>(e.openBlock(),e.createElementBlock("span",{key:ne,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(J),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(z.value),1)],64))],2)]))),128))])])):Ee.value.length?(e.openBlock(),e.createElementBlock("div",fm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ee.value,(z,J)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:J},[z.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:z.content},null,8,gm)):(e.openBlock(),e.createBlock(cr,{key:1,title:z.componentProps.title,url:z.componentProps.url,id:z.componentProps.id,"button-text":z.componentProps.buttonText,onActivate:lt},e.createSlots({_:2},[z.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:z.slotText},null,8,ym)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),ve.value.length?(e.openBlock(),e.createElementBlock("div",hm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ve.value,z=>(e.openBlock(),e.createBlock(cr,{key:z.spec.id,title:z.componentProps.title,url:z.componentProps.url,id:z.spec.id,"button-text":z.componentProps.buttonText,onActivate:lt},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),re.value?(e.openBlock(),e.createElementBlock("div",xm,[e.createElementVNode("button",{type:"button",class:"flex items-center gap-1 justify-end w-full font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-60 cursor-pointer",onClick:ee},[e.createElementVNode("span",bm,e.toDisplayString(xe.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Me.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),qe.value.length?(e.openBlock(),e.createElementBlock("div",km,[v[5]||(v[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",wm,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(qe.value,z=>(e.openBlock(),e.createElementBlock("div",{key:z.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",_m,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:$x(z.id),onChange:J=>vx(z,J)},null,40,Em),v[4]||(v[4]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Nm,e.toDisplayString(z.title),1)]),z.subtitle?(e.openBlock(),e.createElementBlock("div",Bm,e.toDisplayString(z.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),nt.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Vm," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-b9b6f5d5"]]),pr=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var y,d;const n=t,o=((d=(y=e.getCurrentInstance())==null?void 0:y.appContext.config.globalProperties)==null?void 0:d.$settings)||null,{map:l,ready:r}=Le();let a=null;function i(){a==null||a.remove(),a=null}function s(m){if(!m)return null;if(typeof m=="string")try{m=JSON.parse(m)}catch{return null}return m.type==="FeatureCollection"?m:m.type==="Feature"?{type:"FeatureCollection",features:[m]}:m.type&&Array.isArray(m.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:m,properties:{}}]}:Array.isArray(m.features)?{type:"FeatureCollection",features:m.features}:m.geometry?s(m.geometry):null}function u(m){var f,b,V;return{type:"line",color:"#8e4484",width:2,opacity:((((V=(b=(f=m==null?void 0:m.features)==null?void 0:f[0])==null?void 0:b.geometry)==null?void 0:V.type)||"").includes("Polygon"),.95)}}async function p(m){const g=await fetch(m);if(!g.ok)throw new Error(String(g.status));return g.json()}async function k(m,g){if(m){const h=/^https?:\/\//.test(m)?m:new URL(m,location.origin).toString(),f=await p(h).catch(()=>null),b=s(f);if(b)return b}if(g){const h=await p(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(g)}`).catch(()=>null),f=s(h);if(f)return f}return null}async function c(){var f,b,V,T;if(!n.layerId||!l.value){i();return}typeof r=="function"&&await r().catch(()=>{});const m=n.boundary??((f=n.settingsMap)==null?void 0:f.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,g=n.katottg??((V=n.settingsMap)==null?void 0:V.katottg)??((T=o==null?void 0:o.map)==null?void 0:T.katottg)??null;if(!m&&!g){i();return}const h=await k(m,g);if(!h){i();return}i(),a=fe(`${n.layerId}-boundary`,{source:{type:"geojson",data:h},style:u(h)},l)}return e.watch(()=>{var m,g;return[n.layerId,n.boundary,n.katottg,(m=n.settingsMap)==null?void 0:m.boundary,(g=n.settingsMap)==null?void 0:g.katottg,l.value]},()=>{c()},{immediate:!0}),e.onBeforeUnmount(i),(m,g)=>null}}),vm={class:"map-center-control"},Sm=["aria-label"],Lm={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"},tt=ie(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:l}=Le(),r=e.ref(null),a=e.ref(null),i=e.ref(null),s=e.ref(null),u=gn(),p=e.computed(()=>{var b;return((b=u.value)==null?void 0:b.map)??null});function k(b){if(Array.isArray(b)&&b.length>=2){const[V,T]=b.slice(0,2).map(I=>Number(I));return Number.isNaN(V)||Number.isNaN(T)?null:[V,T]}if(b&&typeof b=="object"){const V=b,T=V.lng??V.lon??V.long??V.x,I=V.lat??V.y;if(T!=null&&I!=null){const C=Number(T),B=Number(I);if(!Number.isNaN(C)&&!Number.isNaN(B))return[C,B]}}if(typeof b=="string"){const V=b.split(",").map(T=>Number(T.trim()));if(V.length>=2&&V.every(T=>!Number.isNaN(T)))return[V[0],V[1]]}return null}function c(b){const V=k(b);V&&(r.value=V)}function y(b){const V=Number(b);Number.isNaN(V)||(a.value=V)}e.watch(()=>n.center,b=>c(b),{immediate:!0}),e.watch(()=>n.zoom,b=>y(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{i.value=k(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const V=Number(b);s.value=Number.isNaN(V)?null:V},{immediate:!0}),e.watch(()=>{var b;return(b=p.value)==null?void 0:b.center},b=>{c(b)},{immediate:!0}),e.watch(()=>{var b;return(b=p.value)==null?void 0:b.zoom},b=>{y(b)},{immediate:!0});const d=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),m=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),g=e.computed(()=>!!i.value);e.onMounted(async()=>{await(l==null?void 0:l());const b=o.value;if(b){if(!r.value){const V=b.getCenter();r.value=[V.lng,V.lat]}a.value==null&&(a.value=b.getZoom())}});function h(){const b=o.value;if(!b)return;const V=r.value||(()=>{const I=b.getCenter();return[I.lng,I.lat]})(),T=a.value??b.getZoom();b.flyTo({center:V,zoom:T})}function f(){const b=o.value;if(!b||!i.value)return;const V=s.value??a.value??b.getZoom();b.flyTo({center:i.value,zoom:V})}return(b,V)=>(e.openBlock(),e.createElementBlock("div",vm,[g.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(h,["stop"])},[V[0]||(V[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(Zr),{class:"w-4 h-4"})])),g.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":m.value,onClick:e.withModifiers(f,["stop"])},[e.createElementVNode("span",Lm,e.toDisplayString(d.value),1),e.createVNode(e.unref(Kr),{class:"w-4 h-4"})],8,Sm)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),Am={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Mm={class:"flex-1 relative overflow-hidden"},Tm={class:"absolute top-0 left-0 w-full z-20"},Fm={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Dm={class:"flex items-center gap-3 h-[2.75rem]"},Im={class:"font-semibold text-lg text-gray-800 line-clamp-1"},jm={key:0,class:"text-xs text-gray-500 truncate"},zm=["title"],Om={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Rm={class:"relative w-full h-full"},Pm={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},Um={class:"absolute top-4 left-4 z-20"},qm={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Hm={class:"absolute bottom-4 left-4 z-20"},Wm={class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},Ym={class:"flex-1 flex flex-col h-full"},Zm={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Gm={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"},Km=["aria-selected","onClick"],Xm={class:"leading-none"},Jm={class:"flex flex-col flex-1 overflow-y-hidden p-3"},Qm="OpenGIS",ef=1e3,tf=ie(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var w,F;const n=t,o=e.toRef(n,"hideServiceKey"),l=ke.useRoute(),r=ke.useRouter(),{id:a}=l.params,i=e.ref(null),s=e.ref({}),u=e.ref(null),p=((F=(w=e.getCurrentInstance())==null?void 0:w.appContext.config.globalProperties)==null?void 0:F.$settings)||null;function k(L){typeof document>"u"||(document.title=L?`${L} — Сервіс`:Qm)}const c=e.ref(null),y=e.ref(""),d=e.ref([]),m=e.ref([]),g=e.ref([]),h=e.ref("list"),f=e.ref(""),b=e.ref([]);let V=null;const T=e.computed(()=>{var L,A;return((L=u.value)==null?void 0:L.id)??((A=u.value)==null?void 0:A.service_id)??null}),I=e.computed(()=>{const L=(p==null?void 0:p.map)||null,A=(L==null?void 0:L.boundary)??null,O=(L==null?void 0:L.katottg)??null;return!A&&!O?null:{boundary:A,katottg:O}}),C=e.computed(()=>{const L=u.value;if(!L)return"";const A=[];!o.value&&L.service_key&&A.push(`Сервіс: ${L.service_key}`),L.description&&A.push(L.description);const O=L.group_name||L.group_id;return O&&A.push(`Група: ${O}`),typeof L.is_public<"u"&&A.push(L.is_public?"Публічний":"Не публічний"),typeof L.is_active<"u"&&A.push(L.is_active?"Активний":"Неактивний"),A.join(", ")}),B=[{key:"style",label:"Стиль",icon:er},{key:"popup",label:"Попап",icon:Lu},{key:"filter",label:"Фільтр",icon:Fu},{key:"legend",label:"Легенда",icon:Nu},{key:"card",label:"Картка",icon:tr}],S=B.map(L=>L.key),M=e.ref("style");e.onMounted(async()=>{const L=l.query.tab;L&&S.includes(L)&&(M.value=L),await D()}),e.watch(M,L=>{l.query.tab!==L&&r.replace({query:{...l.query,tab:L}})}),e.watch(()=>l.query.tab,L=>{L&&S.includes(L)&&M.value!==L&&(M.value=L)}),e.watch(()=>{var L;return(L=u.value)==null?void 0:L.name},L=>k(L),{immediate:!0});function j(L){if(!L)return null;try{return JSON.parse(JSON.stringify(L))}catch(A){return console.warn("Failed to clone style",A),null}}function G(L){if(!L)return null;if(typeof L=="string")try{return dn(Qo.load(L)||null)}catch(A){return console.warn("Failed to parse style yaml",A),null}return dn(j(L))}function W(L,A){try{return JSON.stringify(L)===JSON.stringify(A)}catch{return!1}}function K(){var A;if(!u.value)return;const L=G(c.value);W(L,((A=u.value)==null?void 0:A.style)??null)||(u.value={...u.value,style:L})}function P(){V&&clearTimeout(V),V=setTimeout(()=>{V=null,K()},ef)}const D=async()=>{try{const L=await fetch(`/api/gis-service/${a}`);if(!L.ok)throw new Error(`${L.status}`);const A=await L.json();s.value=A||{},i.value=a;const O=G(A.style);u.value=A?{...A,style:j(O)}:null,c.value=O,y.value=typeof(A==null?void 0:A.style)=="string"?A.style:O?Qo.dump(O):"",m.value=(A==null?void 0:A.popup)||[],h.value=A.card_mode==="html"?"html":"list",g.value=A.card,f.value=A.html,d.value=(A==null?void 0:A.legend)||[],b.value=(A==null?void 0:A.filters)||[]}catch(L){console.error("Failed to fetch map info",L)}};e.watch(()=>{var L;return(L=u.value)==null?void 0:L.style},L=>{c.value=G(L)},{deep:!0}),e.watch(()=>c.value,()=>{P()},{deep:!0}),e.onBeforeUnmount(()=>{V&&(clearTimeout(V),V=null)});async function $(L,A){await x({[L]:A},L)}function E(){const L=j(c.value);u.value=u.value?{...u.value,style:L}:u.value}async function x(L,A){if(u.value={...u.value||{},...L},typeof L.html<"u"&&(s.value={...s.value||{},html:L.html}),!!T.value)try{if(!(await fetch(`/api/gis-service/${T.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(L)})).ok)throw new Error("Save failed");ue.notify({type:"success",title:"Успіх",message:`${A} saved`}),await D()}catch(O){ue.notify({type:"error",title:"Помилка",message:`Failed to save ${A}`}),console.error(O)}}async function N(L,A){if(L!=="card"){await $(L,A);return}const O=(A==null?void 0:A.card_mode)==="html"?"html":"list",Z=O==="html"&&typeof(A==null?void 0:A.html)=="string"?A.html:"",X=(O==="html"?[]:null)||(Array.isArray(A==null?void 0:A.list)?A.list:[]);g.value=X,h.value=O,f.value=Z;const H={card_mode:O};O==="html"&&(H.html=Z),O==="list"&&(H.card=X),await x(H,"card")}return(L,A)=>{var O,Z,X;return e.openBlock(),e.createElementBlock("div",Am,[e.createElementVNode("div",Mm,[e.createElementVNode("div",Tm,[e.createElementVNode("div",Fm,[e.createElementVNode("div",Dm,[e.createElementVNode("button",{onClick:A[0]||(A[0]=H=>L.$router.back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...A[10]||(A[10]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",Im,e.toDisplayString((O=u.value)==null?void 0:O.name),1),C.value?(e.openBlock(),e.createElementBlock("div",jm,e.toDisplayString(C.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(Z=u.value)==null?void 0:Z.description},e.toDisplayString((X=u.value)==null?void 0:X.description),9,zm)])]),e.createElementVNode("div",Om,[e.createElementVNode("div",Rm,[e.createVNode(Rt,null,{default:e.withCtx(()=>{var H,ae,de,U,q,Y,te;return[(H=u.value)!=null&&H.service_id?(e.openBlock(),e.createBlock(Cp,{key:0,id:(ae=u.value)==null?void 0:ae.service_id,layer:u.value,"style-spec":((de=u.value)==null?void 0:de.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),T.value?(e.openBlock(),e.createBlock(pr,{key:1,"layer-id":T.value,boundary:((U=u.value)==null?void 0:U.boundary)||((q=I.value)==null?void 0:q.boundary)||null,katottg:((Y=u.value)==null?void 0:Y.katottg)||((te=I.value)==null?void 0:te.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Pm,[T.value?(e.openBlock(),e.createBlock(hn,{key:0,"layer-id":T.value,filters:b.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),A[11]||(A[11]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",Um,[e.createVNode(xt)]),e.createElementVNode("div",qm,[e.createVNode(tt),s.value.center?(e.openBlock(),e.createBlock(tt,{key:0,targetCenter:s.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Hm,[e.createVNode(xn,{items:d.value||null},null,8,["items"])]),e.createVNode(sr),e.createVNode(ur,{html:s.value.html},null,8,["html"])]}),_:1})])])]),e.createElementVNode("div",Wm,[e.createElementVNode("div",Ym,[e.createElementVNode("div",Zm,[e.createElementVNode("div",Gm,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(B,H=>e.createElementVNode("button",{key:H.key,type:"button",role:"tab","aria-selected":M.value===H.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",M.value===H.key?"bg-white shadow-sm text-gray-700":""]),onClick:ae=>M.value=H.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(H.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Xm,e.toDisplayString(H.label),1)],10,Km)),64))])]),e.createElementVNode("div",Jm,[M.value==="style"?(e.openBlock(),e.createBlock(Pu,{key:0,token:T.value,"style-text":y.value,"style-yaml":c.value,"onUpdate:styleYaml":A[1]||(A[1]=H=>c.value=H),"onUpdate:styleText":A[2]||(A[2]=H=>y.value=H),onUpdate:E},null,8,["token","style-text","style-yaml"])):M.value==="legend"?(e.openBlock(),e.createBlock(yp,{key:1,token:T.value,columns:d.value,"onUpdate:columns":A[3]||(A[3]=H=>d.value=H),onSave:A[4]||(A[4]=H=>$("legend",H))},null,8,["token","columns"])):M.value==="popup"?(e.openBlock(),e.createBlock(sp,{key:2,token:T.value,columns:m.value,fields:s.value.fields,"onUpdate:columns":A[5]||(A[5]=H=>m.value=H),onSave:A[6]||(A[6]=H=>$("popup",H))},null,8,["token","columns","fields"])):M.value==="card"?(e.openBlock(),e.createBlock(Np,{key:3,token:T.value,columns:g.value,fields:s.value.fields,"view-mode":h.value,html:f.value,"onUpdate:columns":A[7]||(A[7]=H=>g.value=H),onSave:N},null,8,["token","columns","fields","view-mode","html"])):M.value==="filter"?(e.openBlock(),e.createBlock(Vp,{key:4,token:T.value,fields:s.value.fields,columns:b.value,"onUpdate:columns":A[8]||(A[8]=H=>b.value=H),onSave:A[9]||(A[9]=H=>$("filters",H))},null,8,["token","fields","columns"])):e.createCommentVNode("",!0)])])])])}}}),[["__scopeId","data-v-5e9526e9"]]),nf={class:"flex-1 overflow-y-auto p-4 sm:p-6"},of={class:"space-y-3"},rf={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},lf={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},af={class:"text-xs text-gray-500 mb-1"},sf={key:0,class:"text-base text-md font-semibold text-gray-900"},cf={key:1,class:"text-base text-md font-semibold text-gray-900"},df={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},uf={class:"space-y-2"},pf={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},mf={class:"text-sm font-semibold text-gray-900"},ff={class:"text-xs text-gray-600 mt-1"},gf={class:"grid grid-cols-2 gap-3"},yf={class:"text-xs text-gray-500 mb-1"},hf={class:"text-sm font-semibold text-gray-900"},xf={class:"bg-gray-50 p-4 rounded-lg"},bf={class:"grid grid-cols-2 gap-4"},kf={class:"text-xs text-gray-500 mb-1"},wf={class:"text-sm font-semibold text-gray-900"},_f=e.defineComponent({directives:{tooltip:ue.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const l=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",nf,[e.createElementVNode("div",of,[e.createElementVNode("div",rf,[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",lf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,r=>(e.openBlock(),e.createElementBlock("div",{key:r.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",af,e.toDisplayString(r.label),1),r.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",sf,[e.createTextVNode(e.toDisplayString(r.value),1)])),[[l,r.tooltip]]):(e.openBlock(),e.createElementBlock("p",cf,e.toDisplayString(r.value),1))]))),128))])]),e.createElementVNode("div",df,[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",uf,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",pf,[e.createElementVNode("p",mf,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",ff,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",gf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,r=>(e.openBlock(),e.createElementBlock("div",{key:r.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",yf,e.toDisplayString(r.label),1),e.createElementVNode("p",hf,e.toDisplayString(r.value),1)]))),128))])]),e.createElementVNode("div",xf,[e.createElementVNode("div",bf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,r=>(e.openBlock(),e.createElementBlock("div",{key:r.label},[e.createElementVNode("p",kf,e.toDisplayString(r.label),1),e.createElementVNode("p",wf,e.toDisplayString(r.value),1)]))),128))])])])])])])}}}),Ef={class:"flex-1 overflow-y-auto space-y-3 pr-1"},Nf={class:"font-medium text-sm text-gray-800"},Bf={class:"text-xs text-gray-500"},Vf=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Ef,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,l=>(e.openBlock(),e.createElementBlock("div",{key:l.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",Nf,e.toDisplayString(l.name),1),e.createElementVNode("p",Bf,e.toDisplayString(l.resolution)+" • "+e.toDisplayString(l.size)+"MB",1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",l.statusClass])},e.toDisplayString(l.status),3)]))),128))]))}}),Cf={},$f={xmlns:"http://www.w3.org/2000/svg",width:"12px",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function vf(t,n){return e.openBlock(),e.createElementBlock("svg",$f,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8",fill:"none",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e.createElementVNode("polygon",{fill:"none",points:"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])}const Sf=ie(Cf,[["render",vf]]),Lf={},Af={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 Mf(t,n){return e.openBlock(),e.createElementBlock("svg",Af,[...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 Tf=ie(Lf,[["render",Mf]]),Ff={class:"absolute top-[5.5rem] left-4 z-30 flex items-center gap-2 rounded-full bg-white/90 px-3 py-1 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},Df=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{}},setup(t){const n=t,o=n.layerId||"raster-preview-layer",l=`${o}-source`,r=n.extent&&n.extent.length===4?[...n.extent]:void 0,a=fe(o,{sourceId:l,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...r?{bounds:r}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":.95}},beforeId:n.beforeId??null}),{fitBounds:i}=Le(),s=e.ref(.95);e.watch(()=>n.tileUrl,c=>{if(!c){a.setVisible(!1);return}a.setVisible(!0),a.setTiles([c])},{immediate:!0}),e.watch(()=>s.value,c=>{a.setOpacity(c)},{immediate:!0});let u=null,p=!1;e.watch(()=>n.extent,c=>{if(!c||c.length!==4)return;const y=c.join(",");if(y!==u){if(u=y,!p){p=!0;return}i==null||i([[c[0],c[1]],[c[2],c[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const k=e.computed(()=>`${Math.round(s.value*100)}%`);return(c,y)=>(e.openBlock(),e.createElementBlock("div",Ff,[y[1]||(y[1]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":y[0]||(y[0]=d=>s.value=d),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,s.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(k.value),1)]))}}),If=["href"],jf={key:0,class:"py-6 px-4 text-sm text-gray-500"},zf={key:1,class:"py-6 px-4 text-sm text-red-600"},Of={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},Rf=["disabled"],Pf=["disabled"],Uf=192,mr=8,vt=8,fr=e.defineComponent({__name:"HeaderActions",props:{entityId:{},entityInfo:{},table:{},formEndpoint:{type:[String,Function]},saveEndpoint:{type:[String,Function]},entityLabel:{},editButtonText:{},saveMethod:{}},emits:["saved"],setup(t,{emit:n}){const o=t,l=n,r=e.defineAsyncComponent(()=>import("@opengis/core").then(A=>A.VsModal)),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.ref(!1),s=e.ref(null),u=e.ref(null),p=e.ref(null),k=e.ref(null),c=e.computed(()=>k.value?{position:"fixed",top:`${k.value.top}px`,left:`${k.value.left}px`}:{});e.watch(i,A=>{A&&e.nextTick(E)});const y=e.ref(!1),d=e.ref(null),m=e.ref({}),g=e.ref(null),h=e.ref(""),f=e.ref(!1),b=e.ref(!1),V=e.ref(null),T=e.computed(()=>o.entityId||""),I=(A,O)=>A?typeof A=="function"?A(O):typeof A!="string"?"":A.includes(":id")?O?A.replace(":id",encodeURIComponent(O)):"":A:"",C=e.computed(()=>{var A;return(A=o.table)==null?void 0:A.trim()}),B=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(C.value)return A=>`/api/form/${C.value}/${A}`}),S=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(C.value)return A=>`/api/table/${A}`}),M=e.computed(()=>I(B.value,T.value)),j=e.computed(()=>o.saveEndpoint?I(o.saveEndpoint,T.value):V.value?`/api/table/${encodeURIComponent(V.value)}`:I(S.value,T.value)),G=e.computed(()=>I("/api/gis-clear-rtile/:id",T.value)),W=e.computed(()=>{var Z,X,H;const A=(X=(Z=o.entityInfo)==null?void 0:Z.name)==null?void 0:X.trim();if(A)return`Редагування ${A}`;const O=(H=o.entityLabel)==null?void 0:H.trim();return O?`Редагування ${O}`:"Редагування"}),K=e.computed(()=>o.editButtonText||"Редагувати"),P=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function D(){i.value||E(),i.value=!i.value}function $(){i.value=!1}function E(){var Y;if(typeof window>"u"||!u.value)return;const A=u.value.getBoundingClientRect(),O=window.innerWidth,Z=window.innerHeight,X=A.left,H=Math.max(O-Uf-vt,vt),ae=Math.min(Math.max(X,vt),H),de=((Y=p.value)==null?void 0:Y.offsetHeight)??0,U=A.bottom+mr;let q=U;if(de&&U+de>Z-vt){const te=A.top-mr-de;q=Math.max(te,vt)}k.value={top:q,left:ae}}function x(A){var Z,X;if(!s.value&&!p.value)return;const O=A.target;O&&((Z=s.value)!=null&&Z.contains(O)||(X=p.value)!=null&&X.contains(O))||(i.value=!1)}function N(){i.value&&E()}e.onMounted(()=>{window.addEventListener("click",x),window.addEventListener("resize",N),window.addEventListener("scroll",N,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",x),window.removeEventListener("resize",N),window.removeEventListener("scroll",N,!0)});async function w(){var A,O,Z;if(!(!T.value||!M.value)){$(),y.value=!0,f.value=!0,h.value="",d.value=null,m.value={},V.value=null;try{const X=await fetch(M.value);if(!X.ok)throw new Error(`Failed to load form: ${X.status}`);const H=await X.json();m.value=(H==null?void 0:H.data)||{},d.value=(H==null?void 0:H.schema)||null;const ae=typeof(H==null?void 0:H.token)=="string"&&H.token||typeof((A=H==null?void 0:H.tokens)==null?void 0:A.edit)=="string"&&H.tokens.edit||typeof((O=H==null?void 0:H.tokens)==null?void 0:O.edit_token)=="string"&&H.tokens.edit_token||typeof((Z=H==null?void 0:H.data)==null?void 0:Z.token)=="string"&&H.data.token||null;V.value=ae,g.value=null}catch(X){console.error("Failed to load edit form",X),h.value="Не вдалося завантажити форму редагування"}finally{f.value=!1}}}function F(){y.value=!1,d.value=null,h.value="",V.value=null}async function L(){var A,O;if(!(!T.value||!j.value)){if(g.value){const Z=(O=(A=g.value).validate)==null?void 0:O.call(A);if(Z){ue.notify({type:"warning",title:"Validation",message:Object.entries(Z).map(([X,H])=>`${X}: ${H}`).join(`
178
178
  `)});return}}b.value=!0;try{const Z=await fetch(j.value,{method:P.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(m.value)});if(!Z.ok)throw new Error(`Failed to save: ${Z.status}`);ue.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),l("saved"),F()}catch(Z){console.error("Failed to save edit form",Z),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(A,O)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:u,type:"button",onClick:e.withModifiers(D,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...O[3]||(O[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:p,style:e.normalizeStyle(c.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]"},[G.value?(e.openBlock(),e.createElementBlock("a",{key:0,href:G.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:$},[e.createVNode(e.unref(zr),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),O[4]||(O[4]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,If)):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:w},[e.createVNode(e.unref(Jr),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(K.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(r),{teleport:"#modal",visible:y.value,"onUpdate:visible":O[2]||(O[2]=Z=>y.value=Z),title:W.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Of,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:F,disabled:b.value}," Скасувати ",8,Rf),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:L,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,Pf)])]),default:e.withCtx(()=>[f.value?(e.openBlock(),e.createElementBlock("div",jf," Завантаження форми редагування… ")):h.value?(e.openBlock(),e.createElementBlock("div",zf,e.toDisplayString(h.value),1)):(e.openBlock(),e.createBlock(e.unref(a),{key:2,values:m.value,"onUpdate:values":O[0]||(O[0]=Z=>m.value=Z),form:g.value,"onUpdate:form":O[1]||(O[1]=Z=>g.value=Z),schema:d.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),qf={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},Hf={class:"flex-1 relative overflow-hidden"},Wf={class:"absolute top-0 left-0 w-full z-20"},Yf={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},Zf={class:"flex items-center gap-3 min-w-0"},Gf={class:"flex flex-col min-w-0"},Kf={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Xf={key:0,class:"text-xs text-gray-500 truncate"},Jf={class:"flex items-center gap-4"},Qf={class:"flex-1 min-w-0"},e0=["title"],t0={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},n0={class:"relative w-full h-full"},o0={class:"absolute top-4 left-4 z-20"},r0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},l0={class:"w-[520px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},a0={class:"flex-1 flex flex-col h-full"},i0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},s0={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-2 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},c0=["aria-selected","onClick"],d0={class:"leading-none"},u0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},p0={key:0,class:"mb-3 text-xs text-slate-500"},m0={key:1,class:"mb-3 text-xs text-rose-600"},f0="OpenGIS",g0=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=ke.useRouter(),l=ke.useRoute(),r=e.computed(()=>{var N;const x=(N=l.params)==null?void 0:N.id;return typeof x=="string"?x:void 0}),a=e.ref(null),i=e.ref(!1),s=e.ref(null);function u(){var N;if(typeof document>"u")return;const x=(N=g.value)==null?void 0:N.name;document.title=x?`${x} — Растер`:f0}const p=e.computed(()=>{var N;const x=(N=a.value)==null?void 0:N.url;return x?/^https?:\/\//i.test(x)||typeof window>"u"||typeof location>"u"?x:`${location.origin}${x}`:""}),k=e.computed(()=>{var x;return((x=a.value)==null?void 0:x.extent)??null}),c=e.computed(()=>r.value?`raster-${r.value}`:void 0),y=e.computed(()=>{const x=c.value??"raster",N=k.value&&k.value.length===4?k.value.join(","):"no-extent";return`${x}-${N}`}),d=e.computed(()=>!!p.value),m=e.computed(()=>{const x=k.value;if(!x||x.length!==4)return null;const[N,w,F,L]=x;return[N,w,F,L].some(A=>typeof A!="number"||Number.isNaN(A))?null:[(N+F)/2,(w+L)/2]}),g=e.computed(()=>{var L,A;const x=a.value,N=x==null?void 0:x.extent;return{id:r.value??"—",name:(x==null?void 0:x.name)||((A=(L=x==null?void 0:x.files)==null?void 0:L[0])==null?void 0:A.name),description:x!=null&&x.extension?`Формат ${x.extension.toUpperCase()}`:"Попередній перегляд растрового шару. Реальні метадані підвантажуються.",coverage:N&&N.length===4?`${E(N[0])}, ${E(N[1])} → ${E(N[2])}, ${E(N[3])}`:"Покриття уточнюється",crs:x!=null&&x.srid?`EPSG:${x.srid}`:"EPSG:4326",source:x!=null&&x.proj4?x.proj4:"Джерело: Mapnik",updatedAt:x!=null&&x.cache?"Дані кешовано":"Нові дані"}}),h=e.computed(()=>{const x=a.value;return x?[x.source_path,x.description,x.is_public?"Публічна":"Не публічна",x.is_active?"Архівна":"Активна"].filter(N=>N).join(", "):""}),f=[{key:"info",label:"Інформація",icon:Tf},{key:"files",label:"Файли",icon:Sf}],b=f.map(x=>x.key),V=e.ref(b.includes(l.query.tab)?l.query.tab:"info");e.watch(()=>l.query.tab,x=>{x&&b.includes(x)&&V.value!==x&&(V.value=x)}),e.watch(V,x=>{l.query.tab!==x&&o.replace({query:{...l.query,tab:x}})});const T=e.computed(()=>S(a.value)),I=e.computed(()=>j(a.value));e.watch(()=>a.value,()=>{u()},{immediate:!0}),e.watch(r,()=>{B()},{immediate:!0});function C(){B()}async function B(){const x=r.value;if(!x){a.value=null,s.value=null;return}i.value=!0,s.value=null;try{const N=await fetch(`/api/gis-raster/${encodeURIComponent(x)}`);if(!N.ok)throw new Error(`HTTP ${N.status}`);const w=await N.json();a.value=w}catch(N){console.error("Failed to load raster info",N),a.value=null,s.value=N instanceof Error?N.message:String(N)}finally{i.value=!1}}function S(x){var N;return(N=x==null?void 0:x.files)!=null&&N.length?x.files.map(w=>({name:w.name,resolution:M(w.name,x),size:w.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function M(x,N){const w=x.toLowerCase();return w.endsWith(".tfw")?"Georeference":w.endsWith(".xml")?"Опис":w.endsWith(".tif")||w.endsWith(".tiff")?N!=null&&N.resolution?N.resolution:"Растер":(N==null?void 0:N.resolution)??"Файл"}function j(x){return x?{baseParams:W(x),spatial:{crs:{code:x.srid?`EPSG:${x.srid}`:"EPSG:4326",description:x.proj4||"WGS 84 — World Geodetic System 1984"},bounds:K(x.extent),resolution:P(x)},statistics:D(x),technical:$(x)}:null}function G(x){return x!=null&&x.length?x.map(w=>{var L;if(!w)return"";const F=w.trim().split(/\s+/)[0];return((L=F==null?void 0:F[0])==null?void 0:L.toUpperCase())||""}).filter(Boolean).join(""):""}function W(x){var A,O;const N=x.bands_count??((A=x.bands)==null?void 0:A.length)??"—",w=G(x.bands),F=(x.bands??[]).map(Z=>Z.trim()).filter(Z=>Z.length>0),L=F.length?F.join(", "):void 0;return[{label:"Розмір растру, px",value:x.width&&x.height?`${x.width}×${x.height}`:"—"},{label:"Формат файлу",value:((O=x.extension)==null?void 0:O.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:x.total_size?`${x.total_size}`:"—"},{label:"Кількість каналів",value:typeof N=="number"?`${N}${w?` (${w})`:""}`:`${N}${w?` (${w})`:""}`,tooltip:L},{label:"Глибина кольору",value:x.color_depth?`${x.color_depth} біт/канал`:"—"},{label:"Стиснення",value:x.compression||"—"}]}function K(x){return!x||x.length!==4?[]:[{label:"Північ",value:E(x[3],"N")},{label:"Схід",value:E(x[2],"E")},{label:"Південь",value:E(x[1],"S")},{label:"Захід",value:E(x[0],"W")}]}function P(x){const N=[{label:"Роздільна здатність",value:x.resolution||"—"}];return x.width&&x.height&&N.push({label:"Розмір пікселя",value:`${x.width} × ${x.height} px`}),N}function D(x){var N;return(N=x.bands)!=null&&N.length?x.bands.map((w,F)=>{const L=n[F%n.length];return{label:`Канал ${F+1}${w?` (${w})`:""}`,cardClass:L.cardClass,titleClass:L.titleClass,metrics:[{label:"Назва",value:w||`Канал ${F+1}`},{label:"Глибина",value:x.color_depth?`${x.color_depth} біт`:"—"},{label:"Статус",value:x.cache?"Кешовано":"Готово"}]}}):[]}function $(x){var N;return[{label:"Тип даних",value:x.color_depth?`Unsigned Integer ${x.color_depth}-bit`:"—"},{label:"Компресія",value:x.compression||"—"},{label:"Кольорова інтерпретація",value:((N=x.bands)==null?void 0:N.join(", "))||"—"},{label:"SRID",value:x.srid?`EPSG:${x.srid}`:"—"},{label:"Проекція (proj4)",value:x.proj4||"—"},{label:"URL тайла",value:x.url||"—"}]}function E(x,N){if(x==null||Number.isNaN(x))return"—";const w=`${x.toFixed(5)}°`;return N?`${w} ${N}`:w}return(x,N)=>(e.openBlock(),e.createElementBlock("div",qf,[e.createElementVNode("div",Hf,[e.createElementVNode("div",Wf,[e.createElementVNode("div",Yf,[e.createElementVNode("div",Zf,[e.createElementVNode("button",{type:"button",onClick:N[0]||(N[0]=w=>e.unref(o).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...N[1]||(N[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",Gf,[e.createElementVNode("div",Kf,e.toDisplayString(g.value.name),1),h.value?(e.openBlock(),e.createElementBlock("div",Xf,e.toDisplayString(h.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Jf,[e.createElementVNode("div",Qf,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:g.value.description},e.toDisplayString(g.value.description),9,e0)]),e.createVNode(fr,{"entity-id":r.value||"","entity-info":{name:g.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:C},null,8,["entity-id","entity-info"])])])]),e.createElementVNode("div",t0,[e.createElementVNode("div",n0,[e.createVNode(Rt,null,{default:e.withCtx(()=>[d.value?(e.openBlock(),e.createBlock(Df,{key:y.value,"tile-url":p.value,extent:k.value,"layer-id":c.value},null,8,["tile-url","extent","layer-id"])):e.createCommentVNode("",!0),e.createElementVNode("div",o0,[e.createVNode(xt)]),e.createElementVNode("div",r0,[e.createVNode(tt),m.value?(e.openBlock(),e.createBlock(tt,{key:0,targetCenter:m.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1})])])]),e.createElementVNode("div",l0,[e.createElementVNode("div",a0,[e.createElementVNode("div",i0,[e.createElementVNode("div",s0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(f,w=>e.createElementVNode("button",{key:w.key,type:"button",role:"tab","aria-selected":V.value===w.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",V.value===w.key?"bg-white shadow-sm text-gray-700":""]),onClick:F=>V.value=w.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(w.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",d0,e.toDisplayString(w.label),1)],10,c0)),64))])]),e.createElementVNode("div",u0,[i.value?(e.openBlock(),e.createElementBlock("div",p0," Завантаження метаданих растру… ")):s.value?(e.openBlock(),e.createElementBlock("div",m0," Не вдалося отримати дані: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),V.value==="files"?(e.openBlock(),e.createBlock(Vf,{key:2,files:T.value},null,8,["files"])):I.value?(e.openBlock(),e.createBlock(_f,{key:3,details:I.value},null,8,["details"])):e.createCommentVNode("",!0)])])])]))}}),y0={},h0={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 x0(t,n){return e.openBlock(),e.createElementBlock("svg",h0,[...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 b0=ie(y0,[["render",x0]]),k0={class:"flex flex-col h-full"},w0={class:"flex justify-end mb-3 gap-2"},_0=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,l=n,r=e.computed({get:()=>o.modelValue,set:a=>l("update:modelValue",a)});return(a,i)=>(e.openBlock(),e.createElementBlock("div",k0,[e.createElementVNode("div",w0,[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]=s=>a.$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(Ct,{modelValue:r.value,"onUpdate:modelValue":i[1]||(i[1]=s=>r.value=s),language:"css",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),E0={class:"flex flex-col flex-1 min-h-0"},N0={class:"flex justify-between mb-3 gap-2"},B0={class:"text-left"},V0={class:"font-medium text-gray-900"},C0={class:"text-xs text-gray-500"},$0={class:"flex justify-center gap-2"},v0=["checked","onChange"],S0={class:"text-sm font-medium text-gray-900"},L0=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"}],l=e.defineAsyncComponent(()=>import("@opengis/core").then(m=>m.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),a=e.useModel(t,"modelValue"),i=n,s=e.ref(!1),u=e.ref({table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),p={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function k(){u.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},s.value=!0}function c(){s.value=!1}function y(){var h,f;const m=(h=u.value.table)==null?void 0:h.trim(),g=(f=u.value.key)==null?void 0:f.trim();if(!m||!g){ue.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}a.value=[...Array.isArray(a.value)?a.value:[],{...u.value,table:m,key:g}],s.value=!1}function d(m,g){var f;const h=((f=g==null?void 0:g.target)==null?void 0:f.checked)??!1;m.active=h,a.value=Array.isArray(a.value)?[...a.value]:[]}return(m,g)=>(e.openBlock(),e.createElementBlock("div",E0,[e.createElementVNode("div",N0,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500",onClick:k}," Додати таблицю "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:g[0]||(g[0]=h=>i("save"))}," Зберегти ")]),e.createVNode(Ye,{modelValue:a.value,"onUpdate:modelValue":g[1]||(g[1]=h=>a.value=h),"columns-scheme":o,"form-scheme":p,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:h})=>[e.createElementVNode("div",B0,[e.createElementVNode("div",V0,e.toDisplayString(h.table),1),e.createElementVNode("div",C0,e.toDisplayString(h.key),1)])]),activeCell:e.withCtx(({row:h})=>[e.createElementVNode("label",$0,[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=>d(h,f)},null,40,v0)])]),zoomCell:e.withCtx(({row:h})=>[e.createElementVNode("div",S0,e.toDisplayString(h.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(l),{teleport:"#modal",visible:s.value,"onUpdate:visible":g[3]||(g[3]=h=>s.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:c}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:y}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:u.value,"onUpdate:values":g[2]||(g[2]=h=>u.value=h),schema:p},null,8,["values"])]),_:1},8,["visible"])]))}}),A0={class:"flex flex-col flex-1 min-h-0 gap-4"},M0={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},T0=e.defineComponent({__name:"cartocss-card-tab",props:{card:{default:""},table_name:{default:""}},emits:["save"],setup(t,{emit:n}){const o=t,l=n,r=e.defineAsyncComponent(()=>import("@opengis/form")),a=e.ref(o.card??""),i=e.ref({table_name:o.table_name??""}),s={table_name:{type:"text",label:"Таблиця",placeholder:"table_name"}};e.watch(()=>o.card,p=>{a.value=typeof p=="string"?p:""},{immediate:!0}),e.watch(()=>o.table_name,p=>{i.value.table_name=typeof p=="string"?p:""},{immediate:!0});function u(){l("save","card",{card:a.value,table_name:i.value.table_name})}return(p,k)=>(e.openBlock(),e.createElementBlock("div",A0,[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:u},[...k[2]||(k[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(r),{values:i.value,"onUpdate:values":k[0]||(k[0]=c=>i.value=c),schema:s},null,8,["values"])]),e.createElementVNode("div",M0,[e.createVNode(Ct,{modelValue:a.value,"onUpdate:modelValue":k[1]||(k[1]=c=>a.value=c),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),F0=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:.85}},setup(t){const n=t,o=Le(),{activateTemporaryLayer:l,deactivateTemporaryLayer:r}=wn(o.map),a=e.computed(()=>{var k;const p=`${(k=n==null?void 0:n.tileUrl)==null?void 0:k.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 i="",s="";function u(){const p=n.active&&!!a.value;i&&(!p||i!==n.layerId)&&(r(i,s||void 0),i="",s=""),p&&(l({id:n.layerId,title:n.title||n.layerId,url:a.value,opacity:n.opacity},{},n.owner),i=n.layerId,s=n.owner||"")}return e.watch(()=>[n.layerId,a.value,n.active,n.owner],u,{immediate:!0}),e.onUnmounted(()=>{i&&(r(i,s||void 0),i="",s="")}),()=>{}}}),D0={class:"flex h-screen bg-gradient-to-br from-slate-50 to-white"},I0={class:"flex-1 relative overflow-hidden"},j0={class:"absolute top-0 left-0 w-full z-20"},z0={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},O0={class:"flex items-center gap-3 min-w-0"},R0={class:"flex flex-col min-w-0"},P0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},U0={key:0,class:"text-xs text-gray-500 truncate"},q0={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},H0={class:"relative w-full h-full"},W0={class:"absolute top-4 left-4 z-20"},Y0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Z0={key:0,class:"w-[650px] bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg"},G0={class:"flex-1 flex flex-col h-full"},K0={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},X0={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"},J0=["aria-selected","onClick"],Q0={class:"leading-none"},eg={class:"flex flex-col flex-1 overflow-y-hidden p-4"},tg={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},ng="cartocss-demo-001",og="OpenGIS",rg=e.defineComponent({__name:"cartocss",setup(t){const n=ke.useRouter(),o=ke.useRoute(),l=[{key:"css",label:"CSS",icon:er},{key:"data",label:"Дані",icon:b0},{key:"card",label:"Картка",icon:tr}],r=l.map(D=>D.key),a=e.ref(r.includes(o.query.tab)?o.query.tab:"css"),i=e.ref(null),s=e.computed(()=>{var D;return(D=i.value)!=null&&D.source_path?l.filter($=>$.key==="card"):l}),u=e.computed(()=>o.params.id||ng),p=e.ref({id:u.value,name:"",description:""});function k(D){typeof document>"u"||(document.title=D?`${D} — CartoCSS`:og)}const c=e.ref("");e.ref("");const y=e.ref([]),d=e.ref(!1),m=e.ref(!1),g=e.ref(""),h=e.ref(0),f=e.ref(!1),b=e.computed(()=>`cartocss-layer-${u.value}`),V=e.computed(()=>{var N;const D=(N=g.value)==null?void 0:N.trim();if(!D)return"";const $=D.includes("?")?"&":"?",E=`${D}${$}nottl=1`,x=h.value;return x?`${D}${$}ts=${x}&nocache=1`:E}),T=e.ref(""),I=e.ref(""),C=e.computed(()=>{var w;const D=(w=i.value)==null?void 0:w.bounds;if(!Array.isArray(D)||D.length<4)return null;const[$,E,x,N]=D;return[$,E,x,N].some(F=>typeof F!="number"||Number.isNaN(F))?null:[($+x)/2,(E+N)/2]}),B=e.computed(()=>{const D=i.value;return D?(y.value.map(E=>E==null?void 0:E.table).filter(Boolean),[D.description,D.group_id?`Група: ${D.group_id}`:null,D.source_path?`Шлях: ${D.source_path}`:null,D.is_public===!0?"Публічний":"Не публічний",D.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", ")):""});e.watch(u,D=>{D&&W(D)},{immediate:!0}),e.watch(()=>{var D;return(D=p.value)==null?void 0:D.name},D=>k(D),{immediate:!0}),e.watch(()=>o.query.tab,D=>{D&&s.value.some($=>$.key===D)&&a.value!==D&&(a.value=D)}),e.watch(s,D=>{D.length&&!D.some($=>$.key===a.value)&&(a.value=D[0].key)},{immediate:!0}),e.watch(a,D=>{o.query.tab!==D&&s.value.some($=>$.key===D)&&n.replace({query:{...o.query,tab:D}})}),e.watch(()=>i.value,D=>{const $=typeof(D==null?void 0:D.card)=="string"?D.card:typeof(D==null?void 0:D.html)=="string"?D.html:"";T.value=$,I.value=typeof(D==null?void 0:D.table_name)=="string"?D.table_name:typeof(D==null?void 0:D.source_path)=="string"?D.source_path:""},{immediate:!0});function S(){u.value&&W(u.value,{bustCache:!0})}async function M(D,$){if(u.value){m.value=!0;try{const E=await fetch(`/api/gis-css/${u.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(D)});if(!E.ok)throw new Error(`Failed to save cartocss: ${E.status}`);ue.notify({type:"success",title:"Збережено",message:$}),await W(u.value,{bustCache:!0})}catch(E){console.error("Failed to save CartoCSS",E),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{m.value=!1}}}function j(D){if(!D)return null;if(typeof D=="string")try{return JSON.parse(D)}catch($){return console.warn("Failed to parse CartoCSS config",$),null}return typeof D=="object"?D:null}function G(D){const $=Array.isArray(D)?D:D==null?void 0:D.datasets;return Array.isArray($)?$.map((E,x)=>({table:(E==null?void 0:E.table)||(E==null?void 0:E.id)||`dataset_${x+1}`,query:(E==null?void 0:E.query)||"",srid:(E==null?void 0:E.srid)||"",key:(E==null?void 0:E.key)||(E==null?void 0:E.label)||"Без підпису",active:typeof(E==null?void 0:E.active)=="boolean"?E.active:!0,minzoom:typeof(E==null?void 0:E.zoom)>"u"?"":String(E.zoom),maxzoom:typeof(E==null?void 0:E.maxzoom)>"u"?"":String(E.maxzoom),columns:(E==null?void 0:E.columns)||"",proj4text:(E==null?void 0:E.proj4text)||""})):[]}async function W(D,$){d.value=!0;try{const E=await fetch(`/api/gis-css/${D}`);if(!E.ok)throw new Error(`Failed to load cartocss: ${E.status}`);const x=await E.json(),N=(x==null?void 0:x.message)||x||{};i.value=N,p.value={id:N.cartocss_key||D,name:N.name||p.value.name,description:N.description||p.value.description},c.value=typeof N.style=="string"?N.style:"";const w=j(N.config??[]);y.value=G(w);const F=typeof N.url=="string"?N.url:"";g.value=F,f.value=!!(F&&N.enabled!==!1),h.value=$!=null&&$.bustCache?Date.now():0}catch(E){console.error("Failed to fetch CartoCSS",E),f.value=!1,g.value="",h.value=0,i.value=null}finally{d.value=!1}}async function K(){await M({style:c.value||"",config:y.value},"CartoCSS оновлено")}async function P(D,$){if(D!=="card")return;const E={},x=typeof($==null?void 0:$.card)=="string"?$.card:T.value;typeof x=="string"&&(E.card=x,T.value=x);const N=typeof($==null?void 0:$.table_name)=="string"?$.table_name:I.value;typeof N=="string"&&(E.table_name=N,I.value=N),await M(E,"Картка CartoCSS оновлена")}return(D,$)=>(e.openBlock(),e.createElementBlock("div",D0,[e.createElementVNode("div",I0,[e.createElementVNode("div",j0,[e.createElementVNode("div",z0,[e.createElementVNode("div",O0,[e.createElementVNode("button",{type:"button",onClick:$[0]||($[0]=E=>e.unref(n).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...$[3]||($[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",R0,[e.createElementVNode("div",P0,e.toDisplayString(p.value.name),1),B.value?(e.openBlock(),e.createElementBlock("div",U0,e.toDisplayString(B.value),1)):e.createCommentVNode("",!0)])]),e.createVNode(fr,{"entity-id":u.value,"entity-info":p.value,"form-endpoint":E=>`/api/form/gis.cartocss.table/${E}`,"save-endpoint":E=>`/api/gis-css/${E}`,"entity-label":"CartoCSS","save-method":"post",onSaved:S},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])]),e.createElementVNode("div",q0,[e.createElementVNode("div",H0,[e.createVNode(Rt,null,{default:e.withCtx(()=>[e.createElementVNode("div",W0,[e.createVNode(xt)]),e.createElementVNode("div",Y0,[e.createVNode(tt),C.value?(e.openBlock(),e.createBlock(tt,{key:0,targetCenter:C.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),V.value?(e.openBlock(),e.createBlock(F0,{key:0,"layer-id":b.value,"tile-url":V.value,active:f.value,title:p.value.name,owner:u.value},null,8,["layer-id","tile-url","active","title","owner"])):e.createCommentVNode("",!0)]),_:1})])])]),i.value?(e.openBlock(),e.createElementBlock("div",Z0,[e.createElementVNode("div",G0,[s.value.length>1?(e.openBlock(),e.createElementBlock("div",K0,[e.createElementVNode("div",X0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,E=>(e.openBlock(),e.createElementBlock("button",{key:E.key,type:"button",role:"tab","aria-selected":a.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",a.value===E.key?"bg-white shadow-sm text-gray-700":""]),onClick:x=>a.value=E.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(E.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Q0,e.toDisplayString(E.label),1)],10,J0))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("div",eg,[d.value?(e.openBlock(),e.createElementBlock("div",tg," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[a.value==="css"?(e.openBlock(),e.createBlock(_0,{key:0,modelValue:c.value,"onUpdate:modelValue":$[1]||($[1]=E=>c.value=E),class:"flex-1 min-h-0",onSave:K},null,8,["modelValue"])):a.value==="data"?(e.openBlock(),e.createBlock(L0,{key:1,modelValue:y.value,"onUpdate:modelValue":$[2]||($[2]=E=>y.value=E),class:"flex-1 min-h-0 flex flex-col",onSave:K},null,8,["modelValue"])):a.value==="card"?(e.openBlock(),e.createBlock(T0,{key:2,card:T.value,"table-name":I.value,class:"flex-1 min-h-0",onSave:P},null,8,["card","table-name"])):e.createCommentVNode("",!0)],64))])])])):e.createCommentVNode("",!0)]))}}),lg={class:"w-full mb-6"},ag={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},ig=["onClick"],sg=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,l=r=>{o("update:activeTab",r)};return(r,a)=>(e.openBlock(),e.createElementBlock("div",lg,[e.createElementVNode("div",ag,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,i=>(e.openBlock(),e.createElementBlock("button",{key:i.id,onClick:s=>l(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,ig))),128))])]))}}),cg={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},dg=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")),l=t,r=n,a=e.computed({get:()=>l.modelValue,set:s=>r("update:modelValue",s)}),i=e.computed({get:()=>l.form,set:s=>r("update:form",s)});return(s,u)=>(e.openBlock(),e.createElementBlock("section",cg,[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:a.value,"onUpdate:values":u[0]||(u[0]=p=>a.value=p),form:i.value,"onUpdate:form":u[1]||(u[1]=p=>i.value=p)},null,8,["schema","values","form"]))]))}}),ug={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},pg=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},layerNames:{},options:{}},emits:["update:layerIDs","update:layerNames"],setup(t,{emit:n}){const o=t,l=n,r=e.computed({get:()=>o.layerIDs,set:a=>l("update:layerIDs",a)});return e.computed({get:()=>o.layerNames,set:a=>l("update:layerNames",a)}),(a,i)=>(e.openBlock(),e.createElementBlock("section",ug,[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(An.VsInputArraySelect),{options:t.options,modelValue:r.value,"onUpdate:modelValue":i[0]||(i[0]=s=>r.value=s),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),mg={class:"mapLayer-info__inner"},fg={class:"mapLayer-info__item-label"},_n=ie(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,l=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),r=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>l.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${l.top}px`,left:`${l.left}px`,transform:l.transform,display:"block"}:{display:"none"});function u(g){if(l.open){y();return}const h=g.currentTarget,f=h==null?void 0:h.closest(".mapLayer-info");if(!f){y();return}r.value=f,l.open=!0,e.nextTick(()=>{p(),d(),requestAnimationFrame(()=>{p()})})}function p(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,V=window.scrollY+h,T=window.scrollY+window.innerHeight-h,I=a.value.offsetWidth||Math.min(300,window.innerWidth-24),C=a.value.offsetHeight||0;let B=g.left+window.scrollX+(g.width-I)/2;B<f&&(B=f),B+I>b&&(B=Math.max(f,b-I)),l.left=B;let S=g.bottom+window.scrollY+h;S+C>T&&(S=g.top+window.scrollY-C-h,S<V&&(S=Math.max(V,T-C))),S<V&&(S=V),S+C>T&&(S=Math.max(V,T-C)),l.top=S,l.transform="none"}function k(g){var f,b;if(!l.open)return;const h=g.target;(f=r.value)!=null&&f.contains(h)||(b=a.value)!=null&&b.contains(h)||y()}function c(g){g.key==="Escape"&&y()}function y(){m(),l.open=!1,r.value=null,a.value=null}function d(){m(),a.value&&(i=new ResizeObserver(()=>{p()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>p())},{deep:!0}),n({close:y}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:r},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(u,["prevent","stop"])},[...h[1]||(h[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",mg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"mapLayer-info__item"},[e.createElementVNode("div",fg,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),gg={key:0,class:"map-info__title"},yg={class:"map-info__actions"},hg={key:0,class:"map-info__menu"},xg=["href"],bg=["innerHTML"],gr=ie(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),l=e.ref(!1),r=e.ref(null),a=e.ref(null),i=e.ref({top:0,left:0});ke.useRouter();const s=e.ref(!0),u=e.ref(!1),p=e.computed(()=>Array.isArray(n.links)?n.links.filter(T=>(T==null?void 0:T.name)&&(T==null?void 0:T.slug)):[]),k=e.computed(()=>({top:`${i.value.top}px`,left:`${i.value.left}px`})),c=e.computed(()=>{const T=[];return n.mapName&&T.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&T.push({label:"Опис",value:n.mapDescription,breakLine:!0}),T});function y(T){return T==null?!1:T.replace(/<[^>]*>/g,"").trim().length>0}const d=e.computed(()=>y(n.content)),m=e.computed(()=>d.value);function g(T){T.stopPropagation(),l.value=!l.value}function h(){const T=r.value;if(!T||!a.value)return;const I=T.getBoundingClientRect(),C=12,B=8,S=window.scrollX+C,M=window.scrollX+window.innerWidth-C,j=window.scrollY+C,G=window.scrollY+window.innerHeight-C,W=a.value.offsetWidth||160,K=a.value.offsetHeight||0;let P=I.bottom+window.scrollY+B,D=I.left+window.scrollX;D+W>M&&(D=I.right+window.scrollX-W,D<S&&(D=S)),D<S&&(D=S),P+K>G&&(P=I.top+window.scrollY-K-B,P<j&&(P=Math.max(j,G-K))),P<j&&(P=j),P+K>G&&(P=Math.max(j,G-K)),i.value={top:P,left:D}}function f(T){if(!l.value)return;const I=o.value;if(!I){l.value=!1;return}I.contains(T.target)||(l.value=!1)}e.watch(l,T=>{T?e.nextTick(()=>{h(),requestAnimationFrame(()=>{h()}),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h)}):(window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h))});function b(){s.value=!s.value}function V(){u.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",f,!0),V(),m.value?u.value&&(s.value=!1):s.value=!1,window.addEventListener("resize",V)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",f,!0),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h),window.removeEventListener("resize",V)}),(T,I)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[t.title||p.value.length||c.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([d.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",gg,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",yg,[p.value.length?(e.openBlock(),e.createElementBlock("div",hg,[e.createElementVNode("button",{ref_key:"menuButton",ref:r,type:"button",class:"map-info__menu-button",onClick:g,"aria-label":"Показати посилання"},[...I[1]||(I[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:a,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(k.value),onClick:I[0]||(I[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,C=>(e.openBlock(),e.createElementBlock("a",{key:C.slug||C.name,href:`/maps/${C.slug}`,class:"map-info__popover-link"},e.toDisplayString(C.name),9,xg))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),c.value.length?(e.openBlock(),e.createBlock(_n,{key:1,items:c.value},null,8,["items"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:b,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":s.value})},[...I[2]||(I[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!s.value}]),innerHTML:t.content},null,10,bg)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),kg={class:"opacity-popover__content"},wg={class:"opacity-popover__value"},yr=ie(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),l=e.ref(100),r=e.ref(null),a=e.ref(null),i=e.reactive({top:0,left:0});function s(){var I;const c=(I=a.value)==null?void 0:I.querySelector("button");if(!c||!r.value)return;const y=c.getBoundingClientRect(),d=260,m=r.value.offsetHeight||60,g=8,h=12,f=window.innerWidth,b=window.innerHeight;let V=y.bottom+g+window.scrollY,T=y.left+window.scrollX;T+d>f-h&&(T=f-d-h+window.scrollX),T<h+window.scrollX&&(T=h+window.scrollX),V+m>b+window.scrollY-h&&(V=y.top-m-g+window.scrollY,V<h+window.scrollY&&(V=b-m-h+window.scrollY)),i.top=V,i.left=T}function u(){o.value=!o.value,o.value&&e.nextTick(s)}function p(){var m;const c=fe(n.layerId),y=(l.value??100)/100;if(c!=null&&c.setOpacity){c.setOpacity(y);return}const d=(m=c==null?void 0:c.getLayer)==null?void 0:m.call(c);if(d)switch(d.type){case"raster":c.updatePaint({"raster-opacity":y});break;case"fill":c.updatePaint({"fill-opacity":y});break;case"line":c.updatePaint({"line-opacity":y});break;case"circle":c.updatePaint({"circle-opacity":y});break;case"symbol":c.updatePaint({"icon-opacity":y});break}}function k(c){var d,m;if(!o.value)return;const y=c.target;(d=r.value)!=null&&d.contains(y)||(m=a.value)!=null&&m.contains(y)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",k),window.addEventListener("scroll",s,!0),window.addEventListener("resize",s)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k),window.removeEventListener("scroll",s,!0),window.removeEventListener("resize",s)}),(c,y)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:a},[e.renderSlot(c.$slots,"trigger",{toggle:u,opacity:l.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(u,["stop"])},e.toDisplayString(l.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:r,class:"opacity-popover",style:e.normalizeStyle({top:i.top+"px",left:i.left+"px"})},[e.createElementVNode("div",kg,[y[1]||(y[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":y[0]||(y[0]=d=>l.value=d),class:"opacity-popover__range",onInput:p},null,544),[[e.vModelText,l.value]]),e.createElementVNode("span",wg,e.toDisplayString(l.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),_g={class:"layers-panel"},Eg={class:"layers-panel__header"},Ng={class:"layers-panel__heading"},Bg={class:"layers-panel__heading-title"},Vg={class:"layers-panel__title"},Cg={class:"layers-panel__count"},$g={key:0,class:"layers-panel__description"},vg={class:"layers-panel__header-actions"},Sg={class:"layers-panel__bulk-actions"},Lg={class:"layers-panel__header-controls"},Ag={class:"layers-panel__label"},Mg={class:"layers-panel__label-row"},Tg=["checked","onChange"],Fg={class:"layers-panel__title-block"},Dg={class:"layers-panel__name"},Ig={class:"layers-panel__meta text-slate-500"},jg=["onClick"],zg={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Og={key:0,class:"layers-panel__actions"},Rg=["innerHTML","onClick"],hr="map:temporary-layer-request",Pg="#5763ba",xr=ie(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,l=e.ref({}),r=e.ref(!0),a=e.ref(!1),i=Le(),{temporaryLayers:s,activateTemporaryLayer:u,deactivateTemporaryLayer:p,clearTemporaryLayers:k}=wn(i.map),c=e.computed(()=>{const w=o.layers.map(L=>({...L,isTemporary:!1,owner:null,visible:L.visible!==!1})),F=s.value.map(L=>({id:L.id,name:L.title,visible:l.value[L.id]??!0,actions:[],filters:null,isTemporary:!0,owner:L.owner??null,handle:L.handle??null,card:L.card??null,popup:L.popup??null,style:L.style??null,group_name:null,count:null,holder:null}));return[...w,...F]}),y=e.computed(()=>c.value.length),d=e.computed(()=>c.value.filter(w=>T(w.id)).length),m=e.computed(()=>y.value>0&&d.value===y.value),g=e.computed(()=>s.value.length>0),h=n;function f(){var w;for(let F=0;F<o.layers.length;F++){const L=o.layers[F],A=b(L);if(!A)continue;const O=fe(L.id,A),Z=L.visible!==!1;l.value[L.id]=Z,Z||(w=O==null?void 0:O.setVisible)==null||w.call(O,!1)}}function b(w){const F=w.id;if(!F)return null;const L=(w.type||w.service_type||w.service||"").toString().toLowerCase(),A=w.service_url||w.url||null;if(!!A&&(L==="tms"||L==="wmts"||L==="wms"||L==="ogc")){const X=V(A);return X?{sourceId:F,source:{type:"raster",tiles:[X],tileSize:w.tileSize||256,minzoom:w.minzoom??0,maxzoom:w.maxzoom??22,scheme:w.scheme||"xyz"},layer:{id:F,type:"raster",source:F},card:w.card,popup:w.popup}:null}if(L==="cartocss"){const X=w.url?V(w.url):`${location.origin}/api/gis-rtile/${F}/{z}/{x}/{y}.png`;return X?{sourceId:F,source:{type:"raster",tiles:[X],tileSize:w.tileSize||256,minzoom:w.minzoom??0,maxzoom:w.maxzoom??22},layer:{id:F,type:"raster",source:F},card:w.card,popup:w.popup}:null}const Z=`${location.origin}/api/vtile/${F}/ua/{z}/{x}/{y}.vmt`;return{sourceId:F,source:{type:"vector",tiles:[Z],minZoom:4,maxZoom:14},layer:{id:F,source:F,"source-layer":F,style:w.style},card:w.card,popup:w.popup}}function V(w){return w?/^https?:\/\//i.test(w)?w:w.startsWith("//")?`${window.location.protocol}${w}`:w.startsWith("/")?`${location.origin}${w}`:`${location.origin}/${w}`:null}function T(w){const F=l.value[w];return F??!0}function I(w){var A,O;if(!(w!=null&&w.id))return null;const F=(A=w.title)==null?void 0:A.trim(),L=(O=w.url)==null?void 0:O.trim();return!F||!L?null:{id:w.id,title:F,url:L,tileSize:w.tileSize,minzoom:w.minzoom,maxzoom:w.maxzoom,opacity:w.opacity}}function C(w){if(!w)return;const F=w.owner;if(w.action==="clear"){const A=s.value.filter(O=>!F||O.owner===F).map(O=>O.id);k(F),A.forEach(O=>{O in l.value&&delete l.value[O]});return}const L=I(w.spec);if(L){if(w.action==="activate"){u(L,w.context||{},F),l.value[L.id]=!0;return}w.action==="deactivate"&&(p(L.id,F),delete l.value[L.id])}}function B(w){w instanceof CustomEvent&&C(w.detail)}e.watch(()=>s.value.map(w=>w.id),(w,F)=>{const L=new Set(F||[]),A=new Set(w);w.forEach(O=>{O in l.value||(l.value[O]=!0)}),L.forEach(O=>{A.has(O)||delete l.value[O]})},{immediate:!0});function S(w,F){var A,O,Z;if(w.isTemporary){if(!F){p(w.id,w.owner||void 0),delete l.value[w.id];return}l.value[w.id]=!0;const X=w.handle||((A=s.value.find(H=>H.id===w.id))==null?void 0:A.handle);(O=X==null?void 0:X.setVisible)==null||O.call(X,!0);return}l.value[w.id]=F;const L=fe(w.id);(Z=L==null?void 0:L.setVisible)==null||Z.call(L,F)}function M(w,F){const L=F.target;S(w,L.checked)}function j(w){c.value.forEach(F=>S(F,w))}function G(){j(!m.value)}function W(w){return w.isTemporary?[{label:"Назва",value:w.name??null},{label:"Тип",value:"Тимчасовий шар"},w.owner?{label:"Джерело",value:w.owner}:null].filter(Boolean):[{label:"Назва",value:w.name??null},{label:"Назва групи",value:w.group_name||null},{label:"Кількість",value:w.count??null},{label:"Балансоутримувач",value:w.holder??null}]}function K(w){const F=w.trim();return F?!!(/^#[\da-fA-F]{3,8}$/.test(F)||/^rgb\s*\(/.test(F)||/^rgba\s*\(/.test(F)||/^hsl\s*\(/.test(F)||/^hsla\s*\(/.test(F)||/^[a-zA-Z]+$/.test(F)&&F.length<25):!1}function P(w){var F,L,A,O,Z,X;if(!w)return null;if(typeof w=="string"){const H=w.trim();return!H||!K(H)?null:H}if(Array.isArray(w)){for(const H of w){const ae=P(H);if(ae)return ae}return null}if(typeof w=="object"){const H=w;return P(H.color??H.fill??H.stroke??H.lineColor??H.fillColor??((F=H.paint)==null?void 0:F["fill-color"])??((L=H.paint)==null?void 0:L["line-color"])??((A=H.paint)==null?void 0:A["circle-color"])??((O=H.paint)==null?void 0:O.color)??((Z=H.paint)==null?void 0:Z.lineColor)??((X=H.paint)==null?void 0:X.fillColor)??H.paint??H.value)}return null}function D(w){const F=Array.isArray(w==null?void 0:w.legend)?w.legend[0]:w==null?void 0:w.legend,L=P(F);return L||P(w==null?void 0:w.style)||Pg}function $(w){return{"--layers-panel-checkbox-color":D(w)}}function E(){if(!s.value.length)return;const w=s.value.map(F=>F.id);k(),w.forEach(F=>delete l.value[F])}function x(){r.value=!r.value}function N(){a.value=window.innerWidth<=768}return e.onMounted(()=>{f(),window.addEventListener(hr,B),N(),a.value&&(r.value=!1),window.addEventListener("resize",N)}),e.watch(()=>{var w;return((w=o.layers)==null?void 0:w.length)??0},(w,F)=>{w>0&&F===0&&f()}),e.onBeforeUnmount(()=>{window.removeEventListener(hr,B),window.removeEventListener("resize",N)}),(w,F)=>{var L,A;return e.openBlock(),e.createElementBlock("div",_g,[e.createElementVNode("div",Eg,[e.createElementVNode("div",Ng,[e.createElementVNode("div",Bg,[e.createElementVNode("h2",Vg,e.toDisplayString(((L=t.config)==null?void 0:L.title)||"Шари"),1),e.createElementVNode("span",Cg," ("+e.toDisplayString(d.value)+" з "+e.toDisplayString(y.value)+") ",1)]),(A=t.config)!=null&&A.description?(e.openBlock(),e.createElementBlock("div",$g,[e.createElementVNode("p",null,e.toDisplayString(t.config.description),1)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",vg,[e.createElementVNode("div",Sg,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:G},e.toDisplayString(m.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Lg,[c.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:x,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":r.value})},[...F[0]||(F[0]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0),g.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:E}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!r.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,O=>{var Z;return e.openBlock(),e.createElementBlock("div",{key:O.id,class:"layers-panel__item"},[e.createElementVNode("label",Ag,[e.createElementVNode("div",Mg,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:T(O.id),style:e.normalizeStyle($(O)),onChange:X=>M(O,X)},null,44,Tg),e.createElementVNode("div",Fg,[e.createElementVNode("span",Dg,e.toDisplayString(O.name),1)]),e.createElementVNode("div",Ig,[T(O.id)&&!O.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(yr,{"layer-id":O.id,class:"flex"},{trigger:e.withCtx(({toggle:X})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(X,["prevent","stop"])},[e.createElementVNode("div",zg,[e.createVNode(e.unref(Wr))])],8,jg)]),_:1},8,["layer-id"]),e.createVNode(Pt,{count:Array.isArray(O.filters)?O.filters.length:0,layer:O},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(_n,{items:W(O)},null,8,["items"])])])]),(Z=O.actions)!=null&&Z.length?(e.openBlock(),e.createElementBlock("div",Og,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(O.actions,X=>(e.openBlock(),e.createElementBlock("button",{key:X.widget||X.id||X.icon,type:"button",class:"layers-panel__action",innerHTML:X.icon,onClick:H=>h("action",{layerId:X.widget})},null,8,Rg))),128))])):e.createCommentVNode("",!0)])}),128))],2)])}}}),[["__scopeId","data-v-9b1b17e7"]]),Ug={class:"catalog-tab__search relative mt-[10px]"},qg={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-[40%] left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}},Hg={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Wg={key:0,class:"text-sm text-gray-400 text-center mt-6"},Yg=["onClick"],Zg={class:"flex items-center gap-x-3"},Gg={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Kg={class:"text-xs opacity-60 text-[#4b5563]"},Xg={class:"flex items-center cursor-pointer gap-2 flex-1"},Jg=["checked","onChange"],Qg={class:"text-[13px] text-gray-600 max-w-[260px]"},ey={class:"flex items-center gap-2"},ty=ie(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,l=n,r=e.reactive({}),a=e.ref(null),i=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),s=e.computed(()=>{const g=o.search.trim().toLowerCase();return o.catalog.groups.map(h=>{const f=g?h.layers.filter(b=>(typeof b.name=="string"?b.name:"").toLowerCase().includes(g)):h.layers;return{...h,layers:f}}).filter(h=>h.layers.length>0)}),u=e.computed({get:()=>o.search,set:g=>l("update:search",g)});function p(g){r[g]=!r[g],$p()}function k(g){return!!r[g]}function c(g,h){if(o.selected.includes(h)){i.visible=!1,i.layerId=null;return}const f=g.currentTarget;if(!f)return;const b=f.getBoundingClientRect(),V=typeof window<"u"?window.scrollX:0,T=typeof window<"u"?window.scrollY:0;i.left=b.left+b.width/2+V,i.top=b.bottom+8+T,i.layerId=h,i.visible=!0}function y(){i.visible=!1,i.layerId=null}function d(g){return[{label:"Назва",value:m(g.name)},{label:"Сервіс",value:m(g.service)},{label:"Посилання",value:m(g.url),breakLine:!0}]}function m(g){return g==null||g===""?null:String(g)}return e.watch(()=>o.selected?o.selected.slice():[],g=>{!i.visible||!i.layerId||g.includes(i.layerId)&&(i.visible=!1,i.layerId=null)}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:a,class:"catalog-tab"},[e.createElementVNode("div",Ug,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[0]||(h[0]=f=>u.value=f),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,u.value]]),(e.openBlock(),e.createElementBlock("svg",qg,[...h[1]||(h[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",Hg,[s.value.length===0?(e.openBlock(),e.createElementBlock("div",Wg," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:b=>p(f.id)},[e.createElementVNode("div",Zg,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",k(f.id)?"rotate-90":""])},[...h[2]||(h[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",Gg,e.toDisplayString(f.name),1)]),e.createElementVNode("div",Kg,e.toDisplayString(f.layers.length),1)],8,Yg),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.layers,b=>(e.openBlock(),e.createElementBlock("div",{key:b.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Xg,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(b.id),onChange:V=>g.$emit("toggle-layer",b.id,V.target.checked,b)},null,40,Jg),h[3]||(h[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Qg,e.toDisplayString(b.name),1)]),e.createElementVNode("div",ey,[Array.isArray(b.filters)&&b.filters.length?(e.openBlock(),e.createBlock(Pt,{key:0,count:b.filters.length,layer:b,disabled:!t.selected.includes(b.id),onMouseenter:V=>c(V,b.id),onMouseleave:y,onFocus:V=>c(V,b.id),onBlur:y},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(_n,{items:d(b)},null,8,["items"])])]))),128))],512),[[e.vShow,k(f.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[i.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${i.top}px`,left:`${i.left}px`})},e.toDisplayString(i.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-f68d8bda"]]),ny={class:"flex flex-col gap-0"},oy={class:"text-xs text-slate-600 font-semibold"},ry=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,l=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),r=e.ref(null),a=e.ref(null);let i=null;const s=e.computed(()=>{if(!l.open)return{display:"none"};const g=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${g}px`,maxWidth:`${g}px`,top:`${l.top}px`,left:`${l.left}px`,transform:l.transform,display:"block"}});function u(){if(l.open){y();return}if(!r.value){y();return}l.open=!0,e.nextTick(()=>{p(),d(),requestAnimationFrame(()=>{p()})})}function p(){if(!l.open||!r.value||!a.value)return;const g=r.value.getBoundingClientRect(),h=12,f=window.scrollX+h,b=window.scrollX+window.innerWidth-h,V=window.scrollY+h,T=window.scrollY+window.innerHeight-h,I=a.value.offsetWidth||Math.min(460,window.innerWidth-24),C=a.value.offsetHeight||0;let B=g.left+window.scrollX+(g.width-I)/2;B<f&&(B=f),B+I>b&&(B=Math.max(f,b-I)),l.left=B;let S=g.bottom+window.scrollY+h;S+C>T&&(S=g.top+window.scrollY-C-h,S<V&&(S=Math.max(V,T-C))),S<V&&(S=V),S+C>T&&(S=Math.max(V,T-C)),l.top=S,l.transform="none"}function k(g){var f,b;if(!l.open)return;const h=g.target;(f=r.value)!=null&&f.contains(h)||(b=a.value)!=null&&b.contains(h)||y()}function c(g){g.key==="Escape"&&y()}function y(){m(),l.open=!1,r.value=null,a.value=null}function d(){m(),a.value&&(i=new ResizeObserver(()=>{p()}),i.observe(a.value))}function m(){i&&(i.disconnect(),i=null)}return e.onMounted(()=>{document.addEventListener("click",k,!0),document.addEventListener("keydown",c),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k,!0),document.removeEventListener("keydown",c),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),m()}),e.watch(()=>o.items,()=>{l.open&&e.nextTick(()=>p())},{deep:!0}),n({close:y}),(g,h)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:r},[e.createElementVNode("div",{onClick:e.withModifiers(u,["prevent","stop"])},[e.renderSlot(g.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[l.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(s.value),ref_key:"popoverEl",ref:a,onClick:h[0]||(h[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",ny,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",oy,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),ly={class:"selected-tab"},ay={class:"selected-tab__actions"},iy={key:0,class:"selected-tab__scroll"},sy=["onDragstart","onDragover","onDrop"],cy={class:"selected-tab__item-header"},dy={class:"selected-tab__item-info"},uy=["checked","onChange"],py={class:"selected-tab__item-name"},my={class:"selected-tab__item-controls"},fy=["onClick"],gy={class:"selected-tab__menu-inner"},yy=ie(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,l=n,r=e.reactive({}),a=e.ref(null),i=e.ref(null),s=new Map,u=e.reactive({top:0,left:0}),p=e.ref(null),k=e.reactive({top:0,left:0}),c=e.ref(null),y=new Map,d=e.reactive({});function m(x){var N;for(const w of((N=o.catalog)==null?void 0:N.groups)??[]){const F=w.layers.find(L=>L.id===x);if(F)return F}return null}e.watch(()=>o.selected,x=>{x.forEach(N=>{r[N]==null&&(r[N]=100)})},{immediate:!0});function g(){if(!a.value)return;const x=s.get(a.value);if(!x)return;const N=x.getBoundingClientRect();u.top=N.bottom+8+window.scrollY,u.left=N.left+window.scrollX}e.watch(()=>o.selected,x=>{x.forEach(N=>{d[N]==null&&(d[N]=!0)})},{immediate:!0});function h(x,N){d[x]=N;const w=fe(x);w&&w.setVisible(N)}function f(x,N){N?y.set(x,N):y.delete(x)}function b(x){p.value=p.value===x?null:x,p.value&&e.nextTick(()=>{V(x),requestAnimationFrame(()=>{V(x)})})}function V(x){const N=y.get(x);if(!N||!c.value)return;const w=N.getBoundingClientRect(),F=12,L=6,A=window.scrollX+F,O=window.scrollX+window.innerWidth-F,Z=window.scrollY+F,X=window.scrollY+window.innerHeight-F,H=c.value.offsetWidth||190,ae=c.value.offsetHeight||0;let de=w.bottom+window.scrollY+L,U=w.left+window.scrollX;U+H>O&&(U=w.right+window.scrollX-H,U<A&&(U=A)),U<A&&(U=A),de+ae>X&&(de=w.top+window.scrollY-ae-L,de<Z&&(de=Math.max(Z,X-ae))),de<Z&&(de=Z),de+ae>X&&(de=Math.max(Z,X-ae)),k.top=de,k.left=U}function T(x){const N=fe(x);N&&N.remove(),l("remove",x),p.value=null}function I(x){const N=x.target,w=a.value,F=p.value;if(w){const L=i.value,A=s.get(w);if(L&&L.contains(N)||A&&A.contains(N))return;a.value=null}if(F){const L=c.value,A=y.get(F);if(L&&L.contains(N)||A&&A.contains(N))return;p.value=null}}function C(){a.value&&g(),p.value&&V(p.value)}e.onMounted(()=>{document.addEventListener("click",I),window.addEventListener("resize",C),window.addEventListener("scroll",C,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",I),window.removeEventListener("resize",C),window.removeEventListener("scroll",C,!0)});const{map:B}=Le();function S(x){var L,A,O;if(!x)return;const N=fe(x),w=m(x);if(!N&&!w)return;if(((L=w==null?void 0:w.extent)==null?void 0:L.length)===4&&((A=B.value)!=null&&A.fitBounds)){const Z=w.extent.map(X=>Number(X));if(Z.every(X=>Number.isFinite(X))){const[X,H,ae,de]=Z;B.value.fitBounds([[X,H],[ae,de]],{padding:40}),p.value=null;return}}(O=N==null?void 0:N.getSource)!=null&&O.call(N)&&(p.value=null)}const M=e.ref(null),j=e.ref(null);function G(x,N){M.value=N,j.value=N,x.dataTransfer&&(x.dataTransfer.effectAllowed="move",x.dataTransfer.setData("text/plain",String(N)))}function W(x){j.value=x}function K(x,N){if(x.preventDefault(),M.value===null||M.value===N){M.value=null,j.value=null;return}const w=[...o.selected],[F]=w.splice(M.value,1);w.splice(N,0,F),l("reorder",w),M.value=null,j.value=null}function P(){M.value=null,j.value=null}function D(x){return x==null||x===""?null:String(x)}function $(x,N){return!Array.isArray(x)||x.length===0?null:`${x.length} ${N}`}function E(x){var de,U,q,Y,te,le;const N=fe(x),w=m(x);if(!N&&!w)return[];const F=(w==null?void 0:w.name)||((U=(de=N==null?void 0:N.opts)==null?void 0:de.layer)==null?void 0:U.name)||null,L=(w==null?void 0:w.service)||((q=N==null?void 0:N.opts)==null?void 0:q.service)||null,A=(Y=N==null?void 0:N.getSource)==null?void 0:Y.call(N),O=A&&"tiles"in A?(te=A.tiles)==null?void 0:te[0]:(w==null?void 0:w.url)||null,Z=(w==null?void 0:w.source_path)||null,X=(N==null?void 0:N.popup)||(w==null?void 0:w.popup),H=(N==null?void 0:N.card)||(w==null?void 0:w.card),ae=(w==null?void 0:w.filters)||((le=N==null?void 0:N.opts)==null?void 0:le.filters);return[{label:"Назва",value:D(F)},{label:"Сервіс",value:D(L)},{label:"Посилання",value:D(O),breakLine:!0},{label:"Джерело",value:D(Z),breakLine:!0},{label:"Popup",value:$(X,"полів")},{label:"Картка",value:$(H,"полів")},{label:"Фільтри",value:$(ae,"фільтрів")}]}return(x,N)=>(e.openBlock(),e.createElementBlock("div",ly,[e.createElementVNode("div",ay,[e.createElementVNode("button",{class:"selected-tab__add",onClick:N[0]||(N[0]=w=>l("select-layer"))},[...N[3]||(N[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),t.selected.length?(e.openBlock(),e.createElementBlock("div",iy,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.selected,(w,F)=>{var L;return e.openBlock(),e.createElementBlock("div",{key:w,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":M.value===F,"selected-tab__item--over":j.value===F}]),draggable:"true",onDragstart:A=>G(A,F),onDragover:e.withModifiers(A=>W(F),["prevent"]),onDrop:A=>K(A,F),onDragend:P},[e.createElementVNode("div",cy,[e.createElementVNode("div",dy,[N[4]||(N[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox",checked:d[w]??!0,onChange:A=>h(w,A.target.checked)},null,40,uy),e.createElementVNode("span",py,e.toDisplayString(((L=m(w))==null?void 0:L.name)||"Шар"),1)]),e.createElementVNode("div",my,[e.createVNode(yr,{"layer-id":w},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:A=>f(w,A),onClick:e.withModifiers(A=>b(w),["stop"])},[...N[5]||(N[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,fy)])])],42,sy)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[p.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:c,class:"selected-tab__menu",style:e.normalizeStyle({top:k.top+"px",left:k.left+"px"})},[e.createElementVNode("div",gy,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:N[1]||(N[1]=w=>S(p.value))},[...N[6]||(N[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),e.createVNode(ry,{items:E(p.value)},{default:e.withCtx(()=>[...N[7]||(N[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)])]),_:1},8,["items"]),N[9]||(N[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:N[2]||(N[2]=w=>T(p.value))},[...N[8]||(N[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-39b6f281"]]),hy={class:"filter-tab"},xy={key:0,class:"filter-tab__header"},by={class:"filter-tab__title"},ky={key:1,class:"filter-tab__content rounded-md"},wy={class:"filter-tab__scroll"},_y={key:2,class:"filter-tab__empty"},Ey=ie(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),l=t,r=n,a=e.computed(()=>{var u;return((u=l.layer)==null?void 0:u.filters)??[]}),i=e.computed(()=>a.value.length>0);function s(u){r("change",u.data)}return(u,p)=>(e.openBlock(),e.createElementBlock("div",hy,[t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",xy,[e.createElementVNode("div",null,[e.createElementVNode("p",by,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&i.value?(e.openBlock(),e.createElementBlock("div",ky,[e.createElementVNode("div",wy,[e.createVNode(e.unref(o),{view:"vertical",schema:a.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:p[0]||(p[0]=k=>s(k))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",_y,[...p[1]||(p[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),Ny={class:"flex items-center justify-between mb-1"},By={class:"flex items-center gap-2"},Vy={class:"text-lg font-semibold text-gray-800"},Cy={key:0},$y={key:1,class:"block text-sm font-normal text-gray-500"},vy={class:"flex items-center gap-2"},Sy={class:"flex mb-4 border-b border-gray-200"},Ly={class:"map-catalog-widget__body"},br=ie(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=ke.useRoute(),o=ke.useRouter();function l(){const $=n.query["catalog-tab"];return(Array.isArray($)?$[0]:$)==="selected"?"selected":"catalog"}const r=e.ref(l()),a=e.ref({groups:[]}),i=e.ref([]),s=e.ref(""),{map:u}=Le(),p=e.reactive({}),k=e.ref(null),c=e.ref(!0),y=e.ref(!1);function d($){return a.value.groups.map(E=>E.layers.find(x=>x.id===$)).find(Boolean)||null}function m(){const $=k.value;if(!$)return;delete p[$];const E=fe($);E!=null&&E.setFilter&&E.setFilter("")}function g($,E){const x=fe($);if(p[$]={...E},!(x!=null&&x.setFilter))return;const N=Object.entries(E).filter(([,w])=>w!=null&&w!=="").map(([w,F])=>`${w}=${F}`);x.setFilter(N.join("|"))}function h($){const E=k.value;E&&g(E,$)}function f($){const E=$.url;let x=null;if(E&&(x=E.startsWith("http")?E:`${window.location.origin}${E}`),!x)return null;const N=($.service||"").toString().toLowerCase(),w=$.count??null;return N&&N!=="vtile"?{service:N,count:w,source:{type:"raster",tiles:[x],tileSize:256,minzoom:0,maxzoom:20}}:{service:N,count:w,source:{type:"vector",tiles:[x],minzoom:0,maxzoom:14},layer:{style:$.style},card:$.card,popup:$.popup}}function b($,E,x){var L;const N=x??d($);if(!N)return;const w=f(N);if(!w)return;const F=fe(N.id,w,u);if(F)if(F.setVisible(E),E){if(!i.value.includes($)&&(i.value.push($),(L=u.value)!=null&&L.getLayer($)))try{u.value.moveLayer($)}catch(A){console.warn("Cannot move new layer",$,A)}}else i.value=i.value.filter(A=>A!==$),k.value===$&&(m(),k.value=null)}function V(){i.value.forEach($=>{const E=fe($);E&&E.setVisible(!1)}),i.value=[]}function T($){i.value=[...$],e.nextTick(()=>{var w;if(!u.value)return;const E=((w=u.value.getStyle())==null?void 0:w.layers)??[];let x;const N=F=>E.filter(L=>{var A,O;return(L==null?void 0:L.source)===F||(L==null?void 0:L.id)===F||((O=(A=L==null?void 0:L.id)==null?void 0:A.startsWith)==null?void 0:O.call(A,`${F}`))}).map(L=>L.id);for(let F=$.length-1;F>=0;F-=1){const L=$[F],A=N(L);A.length&&(A.forEach(O=>{var Z;if((Z=u.value)!=null&&Z.getLayer(O))try{u.value.moveLayer(O,x)}catch(X){console.warn("Cannot move layer",O,X)}}),x=A[0])}})}function I($){!$||!Array.isArray($.filters)||$.filters.length===0||i.value.includes($.id)&&(k.value=$.id,p[$.id]||(p[$.id]={}),r.value="filter")}function C(){r.value="catalog"}const B=e.computed(()=>k.value?d(k.value):null),S=e.computed(()=>{const $=k.value;return $?p[$]??{}:{}}),M=e.computed(()=>a.value.groups.reduce(($,E)=>$+E.layers.length,0)),j=e.computed(()=>r.value==="selected"?"Вибрані шари":r.value==="filter"?"Фільтр шарів":"Каталог"),G=e.computed(()=>r.value==="selected"?i.value.length:r.value==="catalog"?M.value:null),W=e.computed(()=>{var $;return r.value==="filter"?(($=B.value)==null?void 0:$.name)??"":""});async function K(){const E=await(await fetch("/api/gis-layer-list")).json(),x=new Map;E.forEach(F=>{const L=F.group_id??"other";x.has(L)||x.set(L,{id:L,name:F.group_name||"Інші шари",layers:[]}),x.get(L).layers.push(F)}),a.value={groups:Array.from(x.values())};const N=n.query.layers;if(!N)return;const w=Array.isArray(N)?N[0]:N;typeof w=="string"&&w.split(",").forEach(F=>{const L=F.trim();if(!L)return;const A=d(L);A&&b(L,!0,A)})}e.watch(k,$=>{!$&&r.value==="filter"&&(r.value="catalog")}),e.watch(B,$=>{!$&&k.value&&(k.value=null)}),e.watch(i,$=>{const E={...n.query};$.length?E.layers=$.join(","):delete E.layers,o.replace({query:E}).catch(()=>{})},{deep:!0});function P(){c.value=!c.value}function D(){y.value=window.innerWidth<=768}return e.onMounted(()=>{K(),D(),y.value&&(c.value=!1),window.addEventListener("resize",D)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",D)}),($,E)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",G.value>1?"min-h-[250px]":"min-h-[0px]"])},[e.createElementVNode("div",Ny,[e.createElementVNode("div",By,[E[5]||(E[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",Vy,[e.createTextVNode(e.toDisplayString(j.value)+" ",1),G.value!==null?(e.openBlock(),e.createElementBlock("span",Cy,"("+e.toDisplayString(G.value)+")",1)):e.createCommentVNode("",!0),W.value?(e.openBlock(),e.createElementBlock("span",$y,e.toDisplayString(W.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",vy,[e.createElementVNode("button",{onClick:V,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...E[6]||(E[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-0023ade8><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-0023ade8></path><path d="M21 3v5h-5" data-v-0023ade8></path><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" data-v-0023ade8></path><path d="M8 16H3v5" data-v-0023ade8></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:P,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":c.value})},[...E[7]||(E[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!c.value}])},[e.createElementVNode("div",Sy,[e.createElementVNode("button",{onClick:E[0]||(E[0]=x=>r.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:E[1]||(E[1]=x=>r.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",Ly,[r.value==="catalog"?(e.openBlock(),e.createBlock(ty,{key:0,class:"map-catalog-widget__scroll",catalog:a.value,selected:i.value,search:s.value,"onUpdate:search":E[2]||(E[2]=x=>s.value=x),onToggleLayer:b,onOpenFilter:I},null,8,["catalog","selected","search"])):r.value==="selected"?(e.openBlock(),e.createBlock(yy,{key:1,catalog:a.value,selected:i.value,onToggleLayer:b,onSelectLayer:E[3]||(E[3]=x=>r.value="catalog"),onReorder:T,onRemove:E[4]||(E[4]=x=>i.value=i.value.filter(N=>N!==x))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(Ey,{key:2,layer:B.value,value:S.value,onChange:h,onClose:C},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-0023ade8"]]),Ay={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},My={class:"flex items-start justify-between gap-3 p-5 pb-3"},Ty={class:"inline-block text-xl font-semibold text-gray-800"},Fy={key:0,class:"mt-1 text-sm text-gray-500"},Dy={class:"flex items-center gap-[6px]"},Iy={class:"px-5 pb-5 space-y-6"},jy={key:0,class:"space-y-2"},zy={class:"flex flex-wrap gap-4"},Oy=["value"],Ry={key:1,class:"text-sm text-gray-500"},Py={key:2,class:"text-sm text-gray-500"},Uy={class:"text-4xl font-medium text-gray-800"},qy={class:"space-y-[14px]"},Hy={class:"flex items-center gap-[10px] text-gray-600"},Wy={class:"font-medium text-gray-700"},Yy={class:"flex items-center justify-end text-end gap-3"},Zy={class:"font-medium text-gray-800"},Gy={class:"min-w-[40px] font-medium text-[#3C3C4399]"},kr=ie(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,l=e.ref(!0),r=e.ref(!1),a=e.ref([]),i=e.ref(null),s=e.ref(null),u=e.ref(null),p=e.ref(null),k=e.ref(null),c=e.ref({}),y=e.ref(null);function d($){return $&&JSON.parse(JSON.stringify($))}const m=e.computed(()=>{const $=o.config.layer;if(typeof $!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const E=$.trim();if(!E)throw new Error("MapAttributeWidget: `layer` must be non-empty");return E}),g=e.computed(()=>{const{list:$,attribute:E}=o.config;if(Array.isArray($)&&$.length)return $.map(x=>({id:(x==null?void 0:x.id)!=null?String(x.id).trim():"",text:(x==null?void 0:x.text)!=null&&String(x.text).trim()||null})).filter(x=>x.id.length);if(Array.isArray(E))return E.map(x=>x!=null?String(x).trim():"").filter(x=>x.length).map(x=>({id:x,text:null}));if(typeof E=="string"){const x=E.trim();if(!x)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:x,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),h=e.computed(()=>g.value.map($=>({id:$.id,label:$.text||c.value[$.id]||$.id})));e.watch(g,$=>{if(!$.length){y.value=null,a.value=[];return}(!y.value||!$.some(E=>E.id===y.value))&&(y.value=$[0].id)},{immediate:!0});const f=e.computed(()=>{var $;return y.value||(($=g.value[0])==null?void 0:$.id)||null});e.watch(m,()=>{var $,E;(E=($=s.value)==null?void 0:$.remove)==null||E.call($),s.value=null,u.value=null,p.value=null,k.value=null,c.value={}});const b=e.computed(()=>{var $;return($=p.value)!=null&&$.length?{id:m.value,name:u.value,filters:p.value}:null}),V=e.computed(()=>{var $,E;return((E=($=b.value)==null?void 0:$.filters)==null?void 0:E.length)||0});async function T($){var N;const E=await fetch(`/api/gis-service/${encodeURIComponent($)}`);if(!E.ok){let w="Не вдалося завантажити налаштування шару";try{const F=await E.json();w=((N=F==null?void 0:F.message)==null?void 0:N.error)||(F==null?void 0:F.message)||w}catch{}throw new Error(w)}const x=await E.json();return u.value=(x==null?void 0:x.name)||null,p.value=Array.isArray(x==null?void 0:x.filters)?x.filters:null,k.value=d((x==null?void 0:x.style)||{}),c.value=((x==null?void 0:x.attributes)||[]).reduce((w,F)=>{const L=typeof(F==null?void 0:F.name)=="string"?F.name.trim():"",A=typeof(F==null?void 0:F.ua)=="string"?F.ua.trim():"";return L&&(w[L]=A||L),w},{}),x}function I($,E){let x=fe($);if(!x){const N=`${location.origin}/api/vtile/${$}/ua/{z}/{x}/{y}.vmt`;x=fe($,{source:{type:"vector",tiles:[N],minzoom:0,maxzoom:14},layer:{id:$,source:$,"source-layer":$,style:(E==null?void 0:E.style)||{}},card:E==null?void 0:E.card,popup:E==null?void 0:E.popup})}return s.value=x,x}async function C($,E){var w;const x=`/api/gis-service/${encodeURIComponent($)}/${encodeURIComponent(E)}`,N=await fetch(x);if(!N.ok){let F="Не вдалося отримати статистику";try{const L=await N.json();F=((w=L==null?void 0:L.message)==null?void 0:w.error)||(L==null?void 0:L.message)||F}catch{}throw new Error(F)}return N.json()}function B($){const E=new Map;return $&&($.rules||[]).forEach(N=>{const w=(N==null?void 0:N.value)??(N==null?void 0:N.id);w!=null&&E.set(String(w),N)}),E}function S($,E,x,N,w){if(typeof(E==null?void 0:E.color)=="string"&&E.color.trim())return E.color.trim();const F=o.config.colors||{};if(F[$])return F[$];const A=B(x==null?void 0:x.style).get($);return typeof(A==null?void 0:A.color)=="string"&&A.color.trim()?A.color.trim():n[w%n.length]}function M($,E,x,N){var w;return(E==null?void 0:E.text)||(E==null?void 0:E.label)||(E==null?void 0:E.name)||(E==null?void 0:E[`${N}_text`])||((w=B(x==null?void 0:x.style).get($))==null?void 0:w.label)||$}function j($,E,x,N){if(!$)return;const w=d((E==null?void 0:E.style)||k.value)||{},F=N.trim();if(!F)return;const L={...w.colors||{},...o.config.colors||{}};F===N&&x.forEach(A=>{A.color.trim()&&(L[A.id]=A.color)}),$.setStyle({...w,type:w.type||"polygon",colorAttr:F,opacity:.8,colors:L})}async function G(){var F,L;a.value=[],i.value=null;const $=m.value,E=f.value;if(!E)return;r.value=!0;const x=await T($);I($,x);const N=await C($,E),w=Array.isArray(N==null?void 0:N.rows)?N.rows.map((A,O)=>{const Z=(A==null?void 0:A.id)??(A==null?void 0:A.value),X=Z!=null?String(Z):"";if(!X)return null;const H=M(X,A,x,E),ae=Number((A==null?void 0:A.count)??0)||0,de=S(X,A,x,E,O);return{id:X,label:H,count:ae,color:de}}).filter(Boolean):[];a.value=w,i.value=((F=N==null?void 0:N.field)==null?void 0:F.label)||((L=N==null?void 0:N.field)==null?void 0:L.name)||null,j(s.value,x,w,E),r.value=!1}e.watch(()=>[m.value,f.value],()=>{G()},{immediate:!0});const W=e.computed(()=>"Набори даних"),K=e.computed(()=>a.value.reduce(($,E)=>$+E.count,0)),P=e.computed(()=>{var x;const $=f.value;return((x=h.value.find(N=>N.id===$))==null?void 0:x.label)||null||i.value||$||null});function D($){return K.value?`${($/K.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var $,E;(E=($=s.value)==null?void 0:$.remove)==null||E.call($)}),($,E)=>l.value?(e.openBlock(),e.createElementBlock("div",Ay,[e.createElementVNode("div",My,[e.createElementVNode("div",null,[e.createElementVNode("h2",Ty,e.toDisplayString(W.value),1),P.value&&h.value.length===1?(e.openBlock(),e.createElementBlock("p",Fy,e.toDisplayString(P.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Dy,[b.value?(e.openBlock(),e.createBlock(Pt,{key:0,class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",count:V.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:E[1]||(E[1]=x=>l.value=!1)},[...E[3]||(E[3]=[e.createElementVNode("svg",{class:"w-4 h-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",viewBox:"0 0 24 24"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])]),e.createElementVNode("div",Iy,[h.value.length>1?(e.openBlock(),e.createElementBlock("div",jy,[e.createElementVNode("div",zy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,x=>(e.openBlock(),e.createElementBlock("label",{key:x.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:x.id,"onUpdate:modelValue":E[2]||(E[2]=N=>y.value=N)},null,8,Oy),[[e.vModelRadio,y.value]]),e.createElementVNode("span",null,e.toDisplayString(x.label),1)]))),128))])])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",Ry,"Завантаження…")):a.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Uy,e.toDisplayString(K.value),1),e.createElementVNode("ul",qy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,x=>(e.openBlock(),e.createElementBlock("li",{key:x.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",Hy,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:x.color})},null,4),e.createElementVNode("span",Wy,e.toDisplayString(x.label),1)]),e.createElementVNode("div",Yy,[e.createElementVNode("span",Zy,e.toDisplayString(x.count),1),e.createElementVNode("span",Gy,e.toDisplayString(D(x.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Py,"Дані відсутні"))])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"py-2 px-2.5 max-h-[38px] inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50",onClick:E[0]||(E[0]=x=>l.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Ky={class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},Xy=["title"],Jy={key:0,class:"vs-select__options absolute z-50 mt-1 w-auto min-w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900"},Qy=["onClick"],eh=["placeholder"],th={class:"absolute inset-y-0 right-2 flex items-center gap-1"},nh={class:"divide-y divide-gray-100"},oh=["onClick"],St="search-geom-source",Lt="search-geom-layer-fill",Ut="search-geom-layer-line",rh=30,lh=8,ah="https://data.softpro.ua/api-user/gis-url-proxy",ih="https://geo.rv.ua/api-user/dzk.api",sh="https://nominatim.openstreetmap.org/search",wr=ie(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n=t,o=Le(),l=e.getCurrentInstance();function r(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var te,le,me;const U=(te=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:te.$settings,q=(le=U==null?void 0:U.map)==null?void 0:le.searchViewbox;if(q)return q;const Y=r();return(me=Y==null?void 0:Y.map)==null?void 0:me.searchViewbox}const s=!!a()?["xy","parcel","address"]:["xy","parcel"],u=e.computed(()=>{var q,Y;const U=(Y=(q=n.config)==null?void 0:q.tools)==null?void 0:Y.filter(te=>s.includes(te));return U&&U.length?U:s}),p=e.computed(()=>{var U,q;return((q=(U=n.config)==null?void 0:U.placeholder)==null?void 0:q.trim())||"Пошук…"}),k=e.ref(u.value[0]);e.watch(u,U=>{U.includes(k.value)||(k.value=U[0])});const c=e.ref(""),y=e.ref(!1),d=e.ref(null),m=e.ref(null),g=e.ref([]),h=e.ref(null),f=e.computed(()=>k.value==="address"&&g.value.length>0),b=e.computed(()=>{var U;return((U=n.config)==null?void 0:U.addressDebounceMs)??1e3});let V=null;const T=e.ref(!1);let I=null;function C(){I&&(I.remove(),I=null)}function B(){var q;const U=(q=o.map)==null?void 0:q.value;U&&(U.getLayer(Lt)&&U.removeLayer(Lt),U.getLayer(Ut)&&U.removeLayer(Ut),U.getSource(St)&&U.removeSource(St))}function S(U){var le,me,we,pe;if(!((le=n.config)!=null&&le.showMarker)||!U)return;const q=(me=o.map)==null?void 0:me.value;if(!q)return;B(),j();const Y={type:"Feature",geometry:U,properties:{}};q.addSource(St,{type:"geojson",data:Y});const te=((we=n.config)==null?void 0:we.geometryColor)||((pe=n.config)==null?void 0:pe.markerColor)||"#3B82F6";q.addLayer({id:Lt,type:"fill",source:St,paint:{"fill-color":te,"fill-opacity":.3}}),q.addLayer({id:Ut,type:"line",source:St,paint:{"line-color":te,"line-width":1,"line-opacity":1}}),G(q)}let M=null;function j(){M&&(cancelAnimationFrame(M),M=null)}function G(U){const Y=performance.now();function te(le){if(!U.getLayer(Lt))return;const we=(le-Y)%1200/1200,pe=Math.sin(we*Math.PI),Oe=.2+pe*.3,Pe=1+pe*1;U.setPaintProperty(Lt,"fill-opacity",Oe),U.setPaintProperty(Ut,"line-width",Pe),M=requestAnimationFrame(te)}M=requestAnimationFrame(te)}function W(U,q){var le,me,we;if(!((le=n.config)!=null&&le.showMarker))return;C(),B();const Y=(me=o.map)==null?void 0:me.value;if(!Y)return;if(q){S(q);return}const te=((we=n.config)==null?void 0:we.markerColor)||"#3B82F6";I=new maplibregl.Marker({color:te}).setLngLat([U.lng,U.lat]).addTo(Y)}const K=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function P(){if(!m.value)return;const U=m.value.getBoundingClientRect(),q=U.width+rh,Y=U.left+window.scrollX,te=U.bottom+window.scrollY+lh;K.left=`${Y}px`,K.top=`${te}px`,K.width=`${q}px`,K.display="block"}const D=()=>{f.value&&P()};function $(){V&&(clearTimeout(V),V=null)}e.watch(k,()=>{c.value="",y.value=!1,g.value=[],$(),T.value=!1,C(),B()}),e.watch(f,U=>{U?e.nextTick(()=>{P()}):K.display="none"}),e.watch(c,U=>{if(k.value!=="address"){g.value=[],$();return}if(!U.trim()){g.value=[],$();return}$(),V=window.setTimeout(()=>{Z(U).catch(q=>{const Y=(q==null?void 0:q.message)||"Помилка пошуку адреси";ue.notify({type:"error",title:"Пошук адреси",message:Y})})},b.value)});function E(U){k.value=U}function x(){c.value="",g.value=[],T.value=!1,C(),B()}function N(U){const q=U.target;if(y.value){const Y=d.value;Y&&!Y.contains(q)&&(y.value=!1)}if(f.value){const Y=h.value;Y&&!Y.contains(q)&&(g.value=[])}}e.onMounted(()=>{window.addEventListener("click",N,!0),window.addEventListener("scroll",D,!0),window.addEventListener("resize",D)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",N,!0),window.removeEventListener("scroll",D,!0),window.removeEventListener("resize",D),$(),C(),B()});function w(U){return U==="xy"?"Координати":U==="parcel"?"Кадастр":"Адреси"}function F(U){const q=U.replace(/[,]+/g," ").trim();if(!q)return null;const Y=q.split(/\s+/).filter(Boolean);if(Y.length<2)return null;const te=Y.slice(0,2).map(Number);if(!te.every(R=>Number.isFinite(R)))return null;let[le,me]=te,we=le,pe=me;const Oe=R=>Math.abs(R)<=90,Pe=R=>Math.abs(R)<=180;if(!Oe(we)||!Pe(pe))if(Oe(pe)&&Pe(we))we=me,pe=le;else return null;return{lat:we,lng:pe}}function L(U){return((U==null?void 0:U.items)||[]).map((Y,te)=>{var le,me,we;return{id:String((Y==null?void 0:Y.id)??te),title:(Y==null?void 0:Y.title)||((le=Y==null?void 0:Y.address)==null?void 0:le.label)||"Знайдений обʼєкт",lat:Number((me=Y==null?void 0:Y.position)==null?void 0:me.lat),lng:Number((we=Y==null?void 0:Y.position)==null?void 0:we.lng)}})}function A(U){const q=(U==null?void 0:U.result)||(U==null?void 0:U.data)||U;if(!q)return[];const Y=q.geom_centroid;if(!Y||!Array.isArray(Y.coordinates))return[];const[te,le]=Y.coordinates;return!Number.isFinite(le)||!Number.isFinite(te)?[]:[{id:"parcel",title:q.cadnum||q.cad_num||"Земельна ділянка",lat:le,lng:te,geom:q.geom||null}]}function O(U){return(Array.isArray(U==null?void 0:U.features)?U.features:[]).map((Y,te)=>{var R,Q,se;const le=(R=Y==null?void 0:Y.geometry)==null?void 0:R.coordinates,me=Number(le==null?void 0:le[0]),we=Number(le==null?void 0:le[1]);if(!Number.isFinite(we)||!Number.isFinite(me))return null;const pe=(Y==null?void 0:Y.properties)||{},Oe=((Q=pe==null?void 0:pe.geocoding)==null?void 0:Q.label)||(pe==null?void 0:pe.display_name)||(pe==null?void 0:pe.label)||"Адреса";return{id:String(((se=pe==null?void 0:pe.geocoding)==null?void 0:se.place_id)||(pe==null?void 0:pe.place_id)||te),title:Oe,lat:we,lng:me}}).filter(Y=>!!Y)}async function Z(U){g.value=[],$();const q=new URL(sh);q.searchParams.set("format","geojson"),q.searchParams.set("q",U),q.searchParams.set("addressdetails","1"),q.searchParams.set("bounded","1");const Y=a();Y&&q.searchParams.set("viewbox",Y);const te=await fetch(q.toString());if(!te.ok)throw new Error(`HTTP ${te.status}`);const le=await te.json(),me=O(le);if(!me.length){ue.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}g.value=me}function X(U){ae(U),g.value=[],c.value=U.title}function H(U){const Y=U.replace(/\s+/g,"").split(":");if(console.log(Y),Y.length!==4)return!1;const te=[10,2,3,4];return Y.every((le,me)=>le.length===te[me]&&/^\d+$/.test(le))}function ae(U){var Y,te;const q=((Y=n.config)==null?void 0:Y.zoom)??17;(te=o.flyTo)==null||te.call(o,{center:[U.lng,U.lat],zoom:q}),W(U,U.geom),T.value=!0}async function de(){const U=c.value.trim();if(U){if(k.value==="xy"){const q=F(U);if(!q){ue.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}ae(q);return}if(k.value==="address"){try{await Z(U)}catch(q){const Y=(q==null?void 0:q.message)||"Помилка пошуку адреси";ue.notify({type:"error",title:"Пошук адреси",message:Y})}return}try{const q=new URL(k.value==="here"?ah:ih);if(k.value==="here")q.searchParams.set("searchtext",U);else{if(!H(U)){ue.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}q.searchParams.set("cad_num",U)}const Y=await fetch(q.toString());if(!Y.ok)throw new Error(`HTTP ${Y.status}`);const te=await Y.json(),le=k.value==="here"?L(te):A(te);if(!le.length)ue.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const me=le[0];ae(me)}}catch(q){const Y=(q==null?void 0:q.message)||"Помилка пошуку";ue.notify({type:"error",title:"Пошук",message:Y})}}}return(U,q)=>(e.openBlock(),e.createElementBlock("div",Ky,[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(de,["prevent"])},[u.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:d,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:q[0]||(q[0]=Y=>y.value=!y.value)},[e.createElementVNode("span",{class:"block w-full truncate",title:w(k.value)},e.toDisplayString(w(k.value)),9,Xy),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":y.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...q[3]||(q[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),y.value?(e.openBlock(),e.createElementBlock("div",Jy,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,Y=>(e.openBlock(),e.createElementBlock("li",{key:Y,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:te=>E(Y)},e.toDisplayString(w(Y)),9,Qy))),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:m,class:"relative flex-1 min-w-[140px]"},[k.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(An.VsInputMask),{key:0,modelValue:c.value,"onUpdate:modelValue":q[1]||(q[1]=Y=>c.value=Y),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",T.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":q[2]||(q[2]=Y=>c.value=Y),placeholder:p.value,type:"text",class:e.normalizeClass(["vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",T.value?"!pr-14":"!pr-8"])},null,10,eh)),[[e.vModelText,c.value,void 0,{trim:!0}]]),e.createElementVNode("div",th,[T.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:x},[...q[4]||(q[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})],-1)])])):e.createCommentVNode("",!0),q[5]||(q[5]=e.createElementVNode("button",{type:"submit",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Пошук"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-4.35-4.35m0 0A7.5 7.5 0 1 0 5 5a7.5 7.5 0 0 0 11.65 11.65Z"})])],-1))]),f.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:h,class:"vs-select__options mt-1 bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900 z-50 max-h-60 overflow-auto",style:e.normalizeStyle(K)},[e.createElementVNode("ul",nh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,Y=>(e.openBlock(),e.createElementBlock("li",{key:Y.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:te=>X(Y)},e.toDisplayString(Y.title),9,oh))),128))])],4)])):e.createCommentVNode("",!0)],512)],32)]))}}),[["__scopeId","data-v-d773179e"]]),ch="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",dh="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",uh=ie(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:l,removeControl:r}=Le(),a=e.ref(null),i=e.ref(null),s=e.ref(null),u=e.ref(null);let p=null;function k(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function c(C){if(Array.from(document.styleSheets).some(M=>{var j;return(j=M==null?void 0:M.href)==null?void 0:j.includes(C)}))return;const S=document.createElement("link");S.rel="stylesheet",S.href=C,document.head.appendChild(S)}function y(C){return new Promise((B,S)=>{const M=Array.from(document.scripts).find(G=>G.src===C);if(M){if(M._loaded)return B();M.addEventListener("load",()=>B()),M.addEventListener("error",()=>S(new Error(`Failed ${C}`)));return}const j=document.createElement("script");j.src=C,j.async=!0,j.onload=()=>{j._loaded=!0,B()},j.onerror=()=>S(new Error(`Failed ${C}`)),document.head.appendChild(j)})}function d(){var B,S,M;const C=window;return C.MapboxExportControl||((B=C.mapboxgl)==null?void 0:B.MapboxExportControl)||((S=C.mapboxglExport)==null?void 0:S.MapboxExportControl)||((M=C.mapboxglExport)==null?void 0:M.default)||null}function m(){const C=document.createElementNS("http://www.w3.org/2000/svg","svg");return C.setAttribute("xmlns","http://www.w3.org/2000/svg"),C.setAttribute("viewBox","0 0 24 24"),C.setAttribute("width","18"),C.setAttribute("height","18"),C.setAttribute("fill","none"),C.setAttribute("stroke","currentColor"),C.setAttribute("stroke-width","2"),C.setAttribute("stroke-linecap","round"),C.setAttribute("stroke-linejoin","round"),C.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((S,M)=>{const j=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(S).forEach(([G,W])=>{j.setAttribute(G,W)}),C.appendChild(j)}),C}function g(){const C=document.createElement("button");C.id="print-btn",C.type="button",C.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),C.setAttribute("aria-label","Друк карти");const B=m(),S=document.createElement("span");return S.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),S.textContent="Друк карти",S.setAttribute("aria-hidden","true"),C.appendChild(B),C.appendChild(S),C.addEventListener("click",M=>{M.stopPropagation(),h()}),u.value=C,C}function h(){if(!s.value)return;s.value.style.display==="block"?b():f()}function f(){var C,B,S;s.value&&(s.value.style.display="block",(C=u.value)==null||C.classList.add("scale-105","shadow-xl"),(B=i.value)==null||B.toggleCrosshair(!0),(S=i.value)==null||S.togglePrintableArea(!0),document.addEventListener("click",V))}function b(){var C,B,S;s.value&&(s.value.style.display="none",(C=u.value)==null||C.classList.remove("scale-105","shadow-xl"),(B=i.value)==null||B.toggleCrosshair(!1),(S=i.value)==null||S.togglePrintableArea(!1),document.removeEventListener("click",V))}function V(C){const B=a.value;B&&(C.target&&B.contains(C.target)||b())}function T(C){const B={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};C.querySelectorAll("label, option").forEach(M=>{var G;const j=(G=M.textContent)==null?void 0:G.trim();j&&B[j]&&(M.textContent=B[j])});const S=C.querySelector("button");S&&(S.textContent="Друкувати")}function I(C){const B=C.querySelector(".mapboxgl-export-list");if(!B||!a.value)return;s.value=B;const S=C.querySelector("button");if(S&&(S.style.display="none"),C.style.display="none",!u.value){const j=g();a.value.appendChild(j)}B.style.display="none";const M="_printControlBound";if(!B[M]){const j=G=>G.stopPropagation();B.addEventListener("click",j),B.addEventListener("mousedown",j),B[M]=!0}a.value.appendChild(B),T(B)}return e.onMounted(async()=>{await(o==null?void 0:o());const C=n.value;if(!C)return;c(ch),k();try{await y(dh)}catch(M){console.warn("[MapPrintControl] load error",M);return}const B=d();if(!B)return;const S=new B({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(i.value=S,typeof S.onAdd=="function"){const M=S.onAdd.bind(S);S.onAdd=j=>{const G=M(j);return setTimeout(()=>G&&I(G),50),G}}l?l(S,"top-right"):C.addControl(S,"top-right"),p=M=>{M.key==="Escape"&&b()},document.addEventListener("keyup",p)}),e.onBeforeUnmount(()=>{b(),p&&(document.removeEventListener("keyup",p),p=null);const C=n.value;if(i.value)try{r?r(i.value):C==null||C.removeControl(i.value)}catch{}i.value=null}),(C,B)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:a,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),ph={class:"cursor-coordinates"},mh={class:"cursor-coordinates__text"},fh=ie(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",ph,[e.createElementVNode("span",mh,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),gh={class:"minimap__wrapper"},qt="minimap-viewport",yh="minimap-viewport-layer",hh=ie(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var V,T,I,C;const n=t,o=((T=(V=e.getCurrentInstance())==null?void 0:V.appContext.config.globalProperties)==null?void 0:T.$settings)||null,l=et((I=o==null?void 0:o.map)==null?void 0:I.center)||[30,50],r=e.ref(null),a=e.shallowRef(null),i=(C=n.options)==null?void 0:C.active,s=e.ref(i===void 0?!1:!!i);function u(B,S){return typeof B=="number"&&Number.isFinite(B)?B:S}const p=e.computed(()=>{var G,W;const B=(G=n.options)==null?void 0:G.width,S=(W=n.options)==null?void 0:W.height,M=u(n.width??B,210),j=u(n.height??S,150);return{width:`${M}px`,height:`${j}px`}});function k(){var S,M;const B=(M=(S=n.mapContext)==null?void 0:S.map)==null?void 0:M.value;if(!B||typeof B.getStyle!="function")return null;try{const j=B.getStyle();return j?JSON.parse(JSON.stringify(j)):null}catch{return null}}let c=null;function y(){var G;if(typeof window>"u"||a.value||!r.value)return;const B=k(),S=l,M={container:r.value,style:B??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:S,zoom:((G=n.options)==null?void 0:G.zoom)??3,interactive:!1,attributionControl:!1},j={...M,...n.options??{}};j.container=M.container,a.value=new maplibregl.Map(j),a.value.on("load",()=>{m(),h()})}function d(){if(!a.value)return;const B=k();B&&(a.value.once("styledata",()=>{m(),h()}),a.value.setStyle(B))}function m(){if(a.value){if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{m(),h()});return}a.value.getSource(qt)||(a.value.addSource(qt,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),a.value.addLayer({id:yh,type:"fill",source:qt,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function g(){s.value=!s.value,s.value&&e.nextTick(()=>{var B;return(B=a.value)==null?void 0:B.resize()})}function h(){var K,P;const B=(P=(K=n.mapContext)==null?void 0:K.map)==null?void 0:P.value;if(!a.value||!B||!B.getBounds)return;if(typeof a.value.isStyleLoaded=="function"&&!a.value.isStyleLoaded()){a.value.once("styledata",()=>{h()});return}const S=B.getBounds();if(!S)return;const M=S.getNorthEast(),j=S.getSouthWest();if(!M||!j)return;const G=[[j.lng,M.lat],[M.lng,M.lat],[M.lng,j.lat],[j.lng,j.lat],[j.lng,M.lat]],W=a.value.getSource(qt);if(!W){m();return}W.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[G]},properties:{}})}function f(){var M;const B=n.mapContext,S=(M=B==null?void 0:B.map)==null?void 0:M.value;!(B!=null&&B.on)||!S||(c==null||c(),c=B.on("move",h),h())}async function b(){const B=n.mapContext;if(B){if(typeof B.ready=="function")try{await B.ready()}catch{return}f()}}return e.onMounted(()=>{y(),b()}),e.watch(()=>n.mapContext,()=>{b(),h()}),e.watch(()=>{var B,S;return(S=(B=n.mapContext)==null?void 0:B.map)==null?void 0:S.value},()=>{a.value&&(d(),b())}),e.watch(p,()=>{a.value&&e.nextTick(()=>{var B;return(B=a.value)==null?void 0:B.resize()})}),e.watch(()=>n.options,()=>{var S;c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null);const B=(S=n.options)==null?void 0:S.active;typeof B=="boolean"&&(s.value=B),e.nextTick(()=>{y(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{c==null||c(),c=null,a.value&&(a.value.remove(),a.value=null)}),(B,S)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":s.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:g},[e.createVNode(e.unref(jr))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",gh,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:r,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(p.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,s.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),xh={key:2,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},bh={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},kh={class:"map-widget__overlay-grid"},wh={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},_h={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Eh={class:"map-widget__stack"},Nh={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Bh={class:"map-widget__stack map-widget__stack--bottom"},Vh={key:0,class:"map-widget__state"},Ch={key:1,class:"map-widget__state map-widget__state--error"},Ht=ie(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var we,pe,Oe,Pe;const n=t,o=ke.useRoute(),l=ke.useRouter(),r=e.ref(null),a=e.ref({}),i=e.ref(null),s=e.ref(!1),u=e.ref(null),p=e.ref(!1),k=e.ref([]),c=e.computed(()=>n.id||"main"),y=e.computed(()=>{var R,Q;return{height:((R=n.height)==null?void 0:R.trim())||((Q=a.value)==null?void 0:Q.height)||"calc(100vh - 65px)"}}),d=e.computed(()=>{var R;return((R=a.value)==null?void 0:R.name)??null}),m=e.computed(()=>{var R;return((R=a.value)==null?void 0:R.description)??null}),g=e.computed(()=>{var R;return K((R=a.value)==null?void 0:R.maps)}),h=e.computed(()=>{var Q,se;const R=((Q=a.value)==null?void 0:Q.minZoom)??((se=a.value)==null?void 0:se.minzoom)??null;return typeof R=="number"?R:null}),f=e.computed(()=>{var Q,se;const R=((Q=a.value)==null?void 0:Q.maxZoom)??((se=a.value)==null?void 0:se.maxzoom)??null;return typeof R=="number"?R:typeof n.maxZoom=="number"?n.maxZoom:20}),b=e.ref(null),V=e.computed(()=>{if(!b.value)return null;const{lng:R,lat:Q}=b.value;return`${Q.toFixed(6)}, ${R.toFixed(6)}`}),T=e.computed(()=>{var R;return((R=r.value)==null?void 0:R.ctx)??null}),I=e.computed(()=>{var R;return((R=a.value)==null?void 0:R.minimap)??null});function C(R){if(!R||typeof R!="object")return R;const Q=et(R.center);return Q?{...R,center:Q}:R}const B=((pe=(we=e.getCurrentInstance())==null?void 0:we.appContext.config.globalProperties)==null?void 0:pe.$settings)||null;function S(R){if(R==null)return null;const Q=Number(typeof R=="string"?R.trim():R);return Number.isFinite(Q)?Q:null}const M=et((Oe=B==null?void 0:B.map)==null?void 0:Oe.center),j=S((Pe=B==null?void 0:B.map)==null?void 0:Pe.zoom),G=e.computed(()=>{const R=(B==null?void 0:B.map)||null,Q=(R==null?void 0:R.boundary)??null,se=(R==null?void 0:R.katottg)??null;return!Q&&!se?null:{boundary:Q,katottg:se}});function W(R){return typeof R=="string"&&R.trim()?R.trim().toLowerCase():"top-left"}function K(R){return Array.isArray(R)?R:R&&typeof R=="object"?Object.values(R).filter(Boolean):[]}const P=e.computed(()=>{var R;return K((R=a.value)==null?void 0:R.widgets)}),D=e.computed(()=>P.value.some(R=>(R==null?void 0:R.type)==="basemaps")),$=["left","right"],E=e.computed(()=>{const R={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},Q={"top-left":{side:"left",align:"top"},"bottom-left":{side:"left",align:"bottom"},"top-right":{side:"right",align:"top"},"bottom-right":{side:"right",align:"bottom"}};return P.value.forEach(se=>{const Ve=W(se.position),re=Q[Ve]??{side:"left",align:"top"};R[re.side][re.align].push(se)}),R});function x(R){return Array.isArray(R)?R[0]??null:typeof R=="string"?R:null}async function N(){var Q;await e.nextTick();const R=(Q=r.value)==null?void 0:Q.ctx;return R?(R.ready&&await R.ready(),R):null}function w(){var R,Q,se;return((se=(Q=(R=r.value)==null?void 0:R.ctx)==null?void 0:Q.map)==null?void 0:se.value)??null}function F(){const R=w();if(!R)return null;const Q=R.getCenter();return{z:R.getZoom().toFixed(2),x:Q.lng.toFixed(5),y:Q.lat.toFixed(5)}}async function L(){var se;const R=await N(),Q=(se=R==null?void 0:R.map)==null?void 0:se.value;Q&&(typeof h.value=="number"&&Q.setMinZoom(h.value),typeof f.value=="number"&&Q.setMaxZoom(f.value))}async function A(){var re;if(i.value)return;const R=await N(),Q=(re=R==null?void 0:R.map)==null?void 0:re.value;if(!Q)return;const se=Q.getCenter(),Ve=Q.getZoom();i.value={center:[se.lng,se.lat],zoom:Ve}}function O(){const R=F();if(!R)return;const Q=x(o.query.x),se=x(o.query.y),Ve=x(o.query.z);Q===R.x&&se===R.y&&Ve===R.z||l.replace({query:{...o.query,...R}}).catch(()=>{})}function Z(R,Q,se=1e-6){return Math.abs(R-Q)<=se}async function X(){var ve;const R=await N(),Q=(ve=R==null?void 0:R.map)==null?void 0:ve.value;if(!R||!Q)return;const se=parseFloat(x(o.query.x)??""),Ve=parseFloat(x(o.query.y)??""),re=parseFloat(x(o.query.z)??""),xe=!Number.isNaN(se),Me=!Number.isNaN(Ve),ee=!Number.isNaN(re);let Ee=!1;if(xe&&Me){const Ue=Q.getCenter();(!Z(Ue.lng,se)||!Z(Ue.lat,Ve))&&(Q.setCenter([se,Ve]),Ee=!0)}ee&&Q.setZoom(re),(!xe||!Me||!ee||Ee)&&O()}let H=null,ae=null;function de(R){const Q=R==null?void 0:R.lngLat;Q&&(b.value={lng:Q.lng,lat:Q.lat})}async function U(){const R=await N();R!=null&&R.on&&(H==null||H(),H=R.on("moveend",O),ae==null||ae(),ae=R.on("mousemove",de))}e.onUnmounted(()=>{H==null||H(),H=null,ae==null||ae(),ae=null});async function q(R=!1){var se,Ve;p.value=!1,u.value=null,b.value=null;const Q=R||!n.data;s.value=Q;try{const re=Q?await(async()=>{const ve=await fetch(`/api/gis-map/${encodeURIComponent(c.value)}`);if(!ve.ok)throw new Error(`Помилка завантаження (${ve.status})`);return ve.json()})():n.data;Q||(p.value=!0);const xe=et(re.center)??M,Me=K(re.layers).map(ve=>C(ve)),ee=S(re.zoom)??j;a.value={...re,center:xe??null,zoom:ee??re.zoom??null,layers:Me,widgets:re.widgets},k.value=re.tools||["home","print"];const Ee=await N();Ee&&(xe&&((se=Ee.setCenter)==null||se.call(Ee,xe)),ee!=null&&((Ve=Ee.setZoom)==null||Ve.call(Ee,ee)),i.value||await A()),await L(),await X(),await U(),p.value=!0}catch(re){u.value=(re==null?void 0:re.message)||"Не вдалося завантажити карту"}finally{Q&&(s.value=!1)}}const Y=e.computed(()=>{var Ve;const R=new Map;return K((Ve=a.value)==null?void 0:Ve.layers).forEach(re=>{if(!(re!=null&&re.id))return;const xe=C(re)||re;R.set(re.id,{...xe})}),P.value.filter(re=>(re==null?void 0:re.type)==="layers").flatMap(re=>{var xe;return K((xe=re==null?void 0:re.config)==null?void 0:xe.layers)}).forEach(re=>{if(!(re!=null&&re.id))return;const xe=R.get(re.id)||{},Me=C(re)||re;R.set(re.id,{...xe,...Me,actions:re.actions||xe.actions||null,name:xe.name||re.name||re.title||xe.title||re.id,title:xe.title||re.title||xe.name||null,visible:xe.visible??re.visible??!0})}),Array.from(R.values())}),te=e.ref([]);function le(R){te.value.includes(R)?te.value=te.value.filter(Q=>Q!==R):te.value.push(R)}const me=e.computed(()=>R=>te.value.includes(R.id));return e.watch([h,f],()=>{L()},{immediate:!0}),e.watch(c,()=>{q(!0)}),e.watch(()=>n.data,R=>{R&&q()}),e.onMounted(()=>{q()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{X()}),(R,Q)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(y.value)},[Q[2]||(Q[2]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode(Rt,{ref_key:"mapViewRef",ref:r,class:"map-widget__view"},{default:e.withCtx(()=>{var se,Ve,re,xe;return[D.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(xt,{key:0,class:"hidden"})),G.value?(e.openBlock(),e.createBlock(pr,{key:1,"layer-id":"app-boundary",boundary:G.value.boundary,katottg:G.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),T.value?(e.openBlock(),e.createElementBlock("div",xh,[V.value?(e.openBlock(),e.createBlock(fh,{key:0,coordinates:V.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(hh,{"map-context":T.value,options:I.value},null,8,["map-context","options"])])):e.createCommentVNode("",!0),e.createElementVNode("div",bh,[k.value.includes("home")?(e.openBlock(),e.createBlock(tt,{key:0,center:((se=a.value)==null?void 0:se.center)||((Ve=i.value)==null?void 0:Ve.center)||null,zoom:((re=a.value)==null?void 0:re.zoom)??((xe=i.value)==null?void 0:xe.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),k.value.includes("print")?(e.openBlock(),e.createBlock(uh,{key:1})):e.createCommentVNode("",!0)]),p.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("div",kh,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList($,Me=>e.createElementVNode("div",{key:Me,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Me}`])},[Me==="left"?(e.openBlock(),e.createElementBlock("div",wh)):e.createCommentVNode("",!0),E.value[Me].top.length?(e.openBlock(),e.createElementBlock("div",_h,[e.createElementVNode("div",Eh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value[Me].top,ee=>{var Ee,ve,Ue,qe,nt,Xe,ot,rt;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ee.id||ee.type,class:"map-overlay__item"},[ee.type==="info"?(e.openBlock(),e.createBlock(gr,{key:0,title:((Ee=ee.config)==null?void 0:Ee.title)||ee.title||null,content:((ve=ee.config)==null?void 0:ve.content)||"",links:g.value,"map-name":d.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):ee.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Ue=ee.config)==null?void 0:Ue.api)||null},null,8,["api"])):ee.type==="layers"?(e.openBlock(),e.createBlock(xr,{key:2,layers:Y.value,onAction:Q[0]||(Q[0]=lt=>le(lt.layerId)),config:ee.config},null,8,["layers","config"])):ee.type==="basemaps"?(e.openBlock(),e.createBlock(xt,{key:3,layers:((qe=ee.config)==null?void 0:qe.layers)||null,"default-layer":((nt=ee.config)==null?void 0:nt.default)||null,title:ee.title||((Xe=ee.config)==null?void 0:Xe.title)||null},null,8,["layers","default-layer","title"])):ee.type==="legend"?(e.openBlock(),e.createBlock(xn,{key:4,items:((ot=ee.config)==null?void 0:ot.items)||[]},null,8,["items"])):ee.type==="filters"&&me.value(ee)?(e.openBlock(),e.createBlock(hn,{key:5,"layer-id":(rt=ee.config)==null?void 0:rt.layer,onClose:le},null,8,["layer-id"])):ee.type==="dataset"||ee.type==="attribute"?(e.openBlock(),e.createBlock(kr,{key:6,config:ee.config},null,8,["config"])):ee.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:ee.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ee.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),E.value[Me].bottom.length?(e.openBlock(),e.createElementBlock("div",Nh,[e.createElementVNode("div",Bh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value[Me].bottom,ee=>{var Ee,ve,Ue,qe,nt,Xe,ot,rt;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ee.id||ee.type,class:"map-overlay__item"},[ee.type==="info"?(e.openBlock(),e.createBlock(gr,{key:0,title:((Ee=ee.config)==null?void 0:Ee.title)||ee.title||null,content:((ve=ee.config)==null?void 0:ve.content)||"",links:g.value,"map-name":d.value,"map-description":m.value},null,8,["title","content","links","map-name","map-description"])):ee.type==="catalog"?(e.openBlock(),e.createBlock(br,{key:1,api:((Ue=ee.config)==null?void 0:Ue.api)||null},null,8,["api"])):ee.type==="layers"?(e.openBlock(),e.createBlock(xr,{key:2,layers:Y.value,onAction:Q[1]||(Q[1]=lt=>le(lt.layerId)),config:ee.config},null,8,["layers","config"])):ee.type==="basemaps"?(e.openBlock(),e.createBlock(xt,{key:3,layers:((qe=ee.config)==null?void 0:qe.layers)||null,"default-layer":((nt=ee.config)==null?void 0:nt.default)||null,title:ee.title||((Xe=ee.config)==null?void 0:Xe.title)||null},null,8,["layers","default-layer","title"])):ee.type==="legend"?(e.openBlock(),e.createBlock(xn,{key:4,items:((ot=ee.config)==null?void 0:ot.items)||[]},null,8,["items"])):ee.type==="filters"&&me.value(ee)?(e.openBlock(),e.createBlock(hn,{key:5,"layer-id":(rt=ee.config)==null?void 0:rt.layer,onClose:le},null,8,["layer-id"])):ee.type==="dataset"||ee.type==="attribute"?(e.openBlock(),e.createBlock(kr,{key:6,config:ee.config},null,8,["config"])):ee.type==="search"?(e.openBlock(),e.createBlock(wr,{key:7,config:ee.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ee.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(sr),e.createVNode(ur,{"map-id":c.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),s.value?(e.openBlock(),e.createElementBlock("div",Vh,"Завантаження карти…")):u.value?(e.openBlock(),e.createElementBlock("div",Ch,e.toDisplayString(u.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-362a1a19"]]),$h={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},vh={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},Sh=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",$h,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",vh,[e.createVNode(Ht,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Lh={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},Ah={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Mh={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"},Th={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},Fh={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Dh=["disabled"],Ih=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,l=n,r=e.ref(""),a=e.ref(null);e.watch(()=>o.modelValue,u=>{if(u){try{r.value=JSON.stringify(u,null,2)}catch{r.value="{}"}a.value=null}},{immediate:!0}),e.watch(r,u=>{if(!u.trim()){a.value=null;return}try{JSON.parse(u),a.value=null}catch(p){a.value=p.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:u}=window;if(u&&u.editor){const p=u.editor.getEditors();p.length>0&&p[p.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function i(){l("update:modelValue",null),r.value="",a.value=null}function s(){if(!a.value)try{const u=JSON.parse(r.value);l("save",u),i()}catch(u){console.error("Failed to parse JSON",u)}}return(u,p)=>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",Lh,[e.createElementVNode("div",Ah,[p[1]||(p[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(bt),{size:20})])]),a.value?(e.openBlock(),e.createElementBlock("div",Mh," Помилка JSON: "+e.toDisplayString(a.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Th,[e.createVNode(Ct,{modelValue:r.value,"onUpdate:modelValue":p[0]||(p[0]=k=>r.value=k),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",Fh,[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:s,disabled:!!a.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,Dh)])])])):e.createCommentVNode("",!0)}}),jh={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-gray-50"},zh={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},Oh={class:"w-full text-sm"},Rh={class:"divide-y divide-gray-200"},Ph={class:"px-4 py-3"},Uh=["onUpdate:modelValue","onChange"],qh=["value"],Hh={class:"px-4 py-3"},Wh=["onUpdate:modelValue","onChange"],Yh=["value"],Zh={class:"px-4 py-3 text-center"},Gh=["checked","onChange"],Kh={class:"px-4 py-3"},Xh={key:0,class:"flex items-center gap-2"},Jh=["onClick"],Qh=["onClick"],e1={key:1},t1=["onClick"],n1={class:"px-4 py-3 text-right"},o1=["onClick"],r1=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,l=n,r=["catalog","legend","basemaps","info","layers","dataset","filters","search"],a=["top-left","top-right","bottom-left","bottom-right"],i=e.ref(null),s=e.ref(-1),u=e.computed(()=>o.modelValue||[]);function p(){const f=[...u.value,{type:"info",position:"top-left",visible:!0,config:{}}];l("update:modelValue",f)}function k(f){ue.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=u.value.filter((V,T)=>T!==f);l("update:modelValue",b)}})}function c(f,b,V){const T=[...u.value];T[f]={...T[f],[b]:V},l("update:modelValue",T)}function y(f){return!!f&&Object.keys(f).length>0}function d(f,b){s.value=f,i.value=b||{}}function m(f){d(f,{})}function g(f){ue.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{c(f,"config",void 0)}})}function h(f){s.value>-1&&c(s.value,"config",f),i.value=null,s.value=-1}return(f,b)=>{var V;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:p,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(V=u.value)!=null&&V.length?(e.openBlock(),e.createElementBlock("div",zh,[e.createElementVNode("table",Oh,[b[2]||(b[2]=e.createElementVNode("thead",{class:"bg-gray-50 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",Rh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(T,I)=>(e.openBlock(),e.createElementBlock("tr",{key:I,class:"hover:bg-gray-50"},[e.createElementVNode("td",Ph,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":C=>T.type=C,onChange:C=>c(I,"type",T.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(r,C=>e.createElementVNode("option",{key:C,value:C},e.toDisplayString(C),9,qh)),64))],40,Uh),[[e.vModelSelect,T.type]])]),e.createElementVNode("td",Hh,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":C=>T.position=C,onChange:C=>c(I,"position",T.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(a,C=>e.createElementVNode("option",{key:C,value:C},e.toDisplayString(C),9,Yh)),64))],40,Wh),[[e.vModelSelect,T.position]])]),e.createElementVNode("td",Zh,[e.createElementVNode("input",{type:"checkbox",checked:T.visible!==!1,onChange:C=>c(I,"visible",C.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,Gh)]),e.createElementVNode("td",Kh,[y(T.config)?(e.openBlock(),e.createElementBlock("div",Xh,[e.createElementVNode("button",{onClick:C=>d(I,T.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(Xr),{size:16})],8,Jh),e.createElementVNode("button",{onClick:C=>g(I),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(bt),{size:16})],8,Qh)])):(e.openBlock(),e.createElementBlock("div",e1,[e.createElementVNode("button",{onClick:C=>m(I),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(Zt),{size:16})],8,t1)]))]),e.createElementVNode("td",n1,[e.createElementVNode("button",{onClick:C=>k(I),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(Qr),{size:16})],8,o1)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",jh," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Ih,{teleport:"#modal",modelValue:i.value,"onUpdate:modelValue":b[0]||(b[0]=T=>i.value=T),onSave:h},null,8,["modelValue"])])}}}),l1={class:"relative min-h-svh flex-1 flex-col flex gap-4 bg-white p-8 overflow-y-auto"},a1={class:"max-w-6xl mx-auto w-full"},i1={class:"flex items-center justify-between mb-6"},s1={class:"mb-2 text-2xl font-semibold text-gray-900"},c1={class:"flex items-center gap-2"},d1=["disabled"],u1={key:0,class:"text-center py-12"},p1={class:"space-y-6"},m1={class:"space-y-6"},f1={class:"space-y-6"},g1=ie(e.defineComponent({__name:"MapSettings",setup(t){const n=ke.useRouter(),o=ke.useRoute(),l=e.ref(!0),r=e.ref(!1),a=e.ref([]),i=e.ref({}),s=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],u=s.map(C=>C.id),p=C=>C?Array.isArray(C)?C[0]:C:null,k=(()=>{const C=p(o.query.tab);return C&&u.includes(C)?C:"general"})(),c=e.ref(k);e.watch(()=>o.query.tab,C=>{const B=p(C);B&&u.includes(B)&&c.value!==B&&(c.value=B)}),e.watch(c,C=>{o.query.tab!==C&&n.replace({query:{...o.query,tab:C}})});const y=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),d=e.computed({get:()=>(y.value.layers||[]).map(C=>C.id||C),set:C=>{y.value.layers=C}}),m=e.computed(()=>a.value.map(C=>({id:C.id,text:C.name||C.id}))),g=e.computed({get:()=>d.value.map(C=>{const B=m.value.find(S=>S.id===C);return B?B.text:C}),set:C=>{const B=C.map(S=>{const M=m.value.find(j=>j.text===S);return M?M.id:null}).filter(S=>S!==null);d.value=B}}),h=e.computed(()=>{const C=y.value.center;if(!Array.isArray(C)||C.length<2)return"Не задано";const[B,S]=C;return B===void 0||S===void 0||B===null||S===null||Number.isNaN(Number(B))||Number.isNaN(Number(S))?"Не задано":`Lng ${Number(B).toFixed(6)}, Lat ${Number(S).toFixed(6)}`}),f=e.computed(()=>{const C=y.value.zoom;if(C==null||C==="")return"Не задано";const B=Number(C);return Number.isNaN(B)?"Не задано":B.toFixed(2)}),b=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function V(){try{const C=await fetch("/api/gis-layer-list");C.ok&&(a.value=await C.json())}catch(C){console.error("Failed to load available layers:",C)}}async function T(){try{const B=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();y.value={...B,keywords:B.keywords||[],center:B.center??null,widgets:Array.isArray(B.widgets)?B.widgets:[],layers:(B.layers||[]).map(S=>S.id||S)}}catch(C){console.error("Failed to load map:",C),ue.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function I(){var B,S;const C=(S=(B=i.value)==null?void 0:B.validate)==null?void 0:S.call(B);if(C){ue.notify({type:"warning",title:"Валідація",message:Object.entries(C).map(([M,j])=>`${M}: ${j}`).join(`
179
- `)});return}r.value=!0;try{const M=JSON.parse(JSON.stringify(y.value));if(M.zoom=Number(M.zoom),Array.isArray(M.center)&&(M.center.every(W=>W==null||W===""||W===0)||M.center.length===0)&&(M.center=null),delete M.created_at,delete M.updated_at,delete M.created_by,delete M.updated_by,delete M.history,delete M.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)})).ok)throw new Error("Save failed");ue.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(M){console.error("Save error:",M),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{r.value=!1}}return e.onMounted(async()=>{await V(),T()}),(C,B)=>(e.openBlock(),e.createElementBlock("main",l1,[e.createElementVNode("div",a1,[e.createElementVNode("div",i1,[e.createElementVNode("div",null,[e.createElementVNode("h1",s1,e.toDisplayString(y.value.name||"Налаштування карти"),1),B[7]||(B[7]=e.createElementVNode("p",{class:"text-gray-600"},"Редагування параметрів карти",-1))]),e.createElementVNode("div",c1,[e.createElementVNode("a",{onClick:B[0]||(B[0]=S=>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:I,disabled:r.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(r.value?"Збереження...":"Зберегти"),9,d1)])]),l.value?(e.openBlock(),e.createElementBlock("div",u1,[...B[8]||(B[8]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(sg,{tabs:s,activeTab:c.value,"onUpdate:activeTab":B[1]||(B[1]=S=>c.value=S)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",p1,[e.createVNode(dg,{schema:b,loading:l.value,modelValue:y.value,"onUpdate:modelValue":B[2]||(B[2]=S=>y.value=S),form:i.value,"onUpdate:form":B[3]||(B[3]=S=>i.value=S)},null,8,["loading","modelValue","form"])],512),[[e.vShow,c.value==="general"]]),e.withDirectives(e.createElementVNode("div",m1,[e.createVNode(pg,{options:m.value,layerIDs:d.value,"onUpdate:layerIDs":B[4]||(B[4]=S=>d.value=S),layerNames:g.value,"onUpdate:layerNames":B[5]||(B[5]=S=>g.value=S)},null,8,["options","layerIDs","layerNames"])],512),[[e.vShow,c.value==="layers"]]),e.withDirectives(e.createVNode(r1,{modelValue:y.value.widgets,"onUpdate:modelValue":B[6]||(B[6]=S=>y.value.widgets=S)},null,8,["modelValue"]),[[e.vShow,c.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",f1,[e.createVNode(Sh,{"center-display":h.value,"zoom-display":f.value,"layer-names":g.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,c.value==="map"]])],64))])]))}}),[["__scopeId","data-v-75f83258"]]),y1={class:"flex-1 overflow-y-auto p-0 overflow-x-hidden max-h-[70%] lg:max-h-[80%] xl:max-h-[83%] 2xl:max-h-[95%]"},h1={class:"pt-0 mt-0"},x1={key:0,class:"flex items-center justify-center py-12"},b1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},k1={key:2,class:"text-center py-12 text-gray-500"},w1={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},_1=["onClick"],E1={class:"flex items-start justify-between"},N1={class:"flex items-start gap-3"},B1={class:"flex-1 min-w-0"},V1={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},C1=["onClick"],$1={class:"relative"},v1=["onClick"],S1={key:0,class:"absolute left-full top-1/2 -translate-y-1/2 ml-2 px-2 py-1 bg-white text-gray-600 text-xs rounded shadow-sm z-10 whitespace-nowrap animate-fade-in-out border border-gray-200/70"},L1={class:"text-xs text-gray-600 line-clamp-2"},A1={class:"flex items-center gap-2 shrink-0"},M1={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},T1={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},En=30,F1=ie(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const l=t,r=o,a=ke.useRouter(),i=ke.useRoute(),s=e.ref(Number(i.query.page)||1),u=e.ref(!1),p=e.ref(0),k=e.ref([]),c=e.computed(()=>{const B=(s.value-1)*En,S=B+En;return k.value.slice(B,S)}),y=e.ref(!0),d=e.ref(null),m=e.ref(null);let g=null,h=null;const f=(B="",S="")=>{const M=new URLSearchParams,j=B.trim();j&&M.set("search",j);const G=(S||"").trim();G&&M.set("type",G);const W=M.toString();return W?`/api/user-cls?${W}`:"/api/user-cls"},b=async(B="",S="")=>{try{y.value=!0,d.value=null;const M=f(B,S),j=await fetch(M);if(!j.ok)throw new Error(`HTTP error: ${j.status}`);const G=await j.json();if(k.value=G.data,!B.trim())p.value=G.data.length;else if(p.value===0){const W=await fetch(f("",S));if(W.ok){const K=await W.json();p.value=K.data.length}}r("update:counts",{filtered:k.value.length,total:p.value})}catch(M){d.value=M instanceof Error?M.message:"Failed to load classifiers",console.error("Error fetching classifiers:",M)}finally{y.value=!1}};e.onMounted(()=>{u.value=!0,b(l.search,l.type??"")}),e.watch(()=>[l.search,l.type],([B,S])=>{g&&clearTimeout(g),g=setTimeout(()=>{b(B,S??""),s.value=1},300)});const V=B=>{a.push({name:"classifier-detail",params:{name:B.name}})},T=()=>{b(l.search,l.type??"")},I=async B=>{try{await navigator.clipboard.writeText(B),m.value=B,h&&clearTimeout(h),h=setTimeout(()=>{m.value=null},500)}catch(S){console.error("Failed to copy text: ",S)}};n({refetch:T});const C=B=>{s.value=B,a.replace({query:{...i.query,page:String(B)}})};return(B,S)=>(e.openBlock(),e.createElementBlock("div",y1,[e.createElementVNode("div",h1,[y.value?(e.openBlock(),e.createElementBlock("div",x1,[e.createVNode(e.unref(Dn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",b1,e.toDisplayString(d.value),1)):k.value.length===0?(e.openBlock(),e.createElementBlock("div",k1," Нічого не знайдено ")):e.createCommentVNode("",!0),k.value.length>0?(e.openBlock(),e.createElementBlock("div",w1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(M,j)=>(e.openBlock(),e.createElementBlock("div",{key:j,class:"w-full border border-gray-200 bg-white rounded-lg p-4 text-left hover:shadow-md transition-all hover:border-gray-300 cursor-pointer",onClick:G=>V(M)},[e.createElementVNode("div",E1,[e.createElementVNode("div",N1,[M.type==="sql"?(e.openBlock(),e.createBlock(e.unref(Hr),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(Gr),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",B1,[e.createElementVNode("div",V1,[e.createElementVNode("h4",{onClick:e.withModifiers(G=>I(M.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(M.name),9,C1),e.createElementVNode("div",$1,[e.createElementVNode("button",{onClick:e.withModifiers(G=>I(M.name),["stop"]),class:"pt-1 mt-0.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors"},[e.createVNode(e.unref(qr),{width:14,height:14,"stroke-width":2})],8,v1),m.value===M.name?(e.openBlock(),e.createElementBlock("div",S1," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",L1,e.toDisplayString(M.description||"Опис відсутній"),1)])]),e.createElementVNode("div",A1,[M.type!="sql"?(e.openBlock(),e.createElementBlock("span",M1,e.toDisplayString(M.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(Pr),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,_1))),128))])):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",T1,[e.createVNode(e.unref(ue.VsPagination),{total:k.value.length,page:s.value,"page-size":En,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":C,onPageChange:C},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-e728e68b"]]),D1={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},I1={class:""},j1={class:"text-2xl font-bold mb-2 flex items-center gap-2"},z1={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},O1={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},R1={class:"w-full md:w-auto"},P1=["value"],U1={class:"relative w-full lg:w-[16rem]"},q1={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},H1={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},W1=["value"],Y1=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,l=n,r=i=>{const s=i.target.value;l("update:filter",s)},a=e.ref(!1);return(i,s)=>(e.openBlock(),e.createElementBlock("div",D1,[e.createElementVNode("div",I1,[e.createElementVNode("h1",j1,[s[3]||(s[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",z1,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),s[4]||(s[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",O1,[e.createElementVNode("div",R1,[s[6]||(s[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:r},[...s[5]||(s[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,P1)]),e.createElementVNode("div",U1,[e.createElementVNode("div",q1,[e.createElementVNode("div",H1,[e.createVNode(e.unref(In),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:s[0]||(s[0]=u=>i.$emit("update:modelValue",u.target.value))},null,40,W1),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:s[1]||(s[1]=u=>i.$emit("update:modelValue",""))},[e.createVNode(e.unref(bt),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:s[2]||(s[2]=u=>a.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(Zt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),s[7]||(s[7]=e.createTextVNode(" Додати ",-1))])])]))}}),Z1={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},G1={key:0,class:"flex items-center justify-center py-12"},K1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},X1={key:2,class:"text-center py-12 text-gray-500"},J1={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},Q1={class:"bg-gray-50 border-b border-gray-200"},ex={class:"divide-y divide-gray-200"},tx={class:"px-4 py-3 w-1/12"},nx={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},ox={class:"px-4 py-3 text-sm text-gray-600 font-mono"},rx=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,l=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],r=e.ref([]),a=e.ref(!0),i=e.ref(null),s=e.computed(()=>{var c;if(!((c=o.search)!=null&&c.trim()))return r.value;const k=o.search.toLowerCase().trim();return r.value.filter(y=>{var d,m;return((d=y.text)==null?void 0:d.toLowerCase().includes(k))||((m=y.id)==null?void 0:m.toLowerCase().includes(k))})}),u=async k=>{try{a.value=!0,i.value=null;const c=await fetch(`/api/suggest/${encodeURIComponent(k)}`);if(!c.ok)throw new Error(`HTTP error: ${c.status}`);const y=await c.json();r.value=y.data}catch(c){i.value=c instanceof Error?c.message:"Failed to load items",console.error("Error fetching suggest items:",c)}finally{a.value=!1}};return e.onMounted(()=>{o.classifierName&&u(o.classifierName)}),e.watch(()=>o.classifierName,k=>{k&&u(k)}),n({refetch:()=>{u(o.classifierName)}}),(k,c)=>(e.openBlock(),e.createElementBlock("div",Z1,[a.value?(e.openBlock(),e.createElementBlock("div",G1,[e.createVNode(e.unref(Dn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):i.value?(e.openBlock(),e.createElementBlock("div",K1,e.toDisplayString(i.value),1)):r.value.length===0?(e.openBlock(),e.createElementBlock("div",X1," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",J1,[e.createElementVNode("thead",Q1,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,y=>e.createElementVNode("th",{key:y.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[y.width,y.align]])},e.toDisplayString(y.label),3)),64))])]),e.createElementVNode("tbody",ex,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,y=>(e.openBlock(),e.createElementBlock("tr",{key:y.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",tx,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:y.color})},null,4)]),e.createElementVNode("td",nx,e.toDisplayString(y.text),1),e.createElementVNode("td",ox,e.toDisplayString(y.id),1)]))),128))])]))]))}}),lx={class:"space-y-6 flex-1 overflow-y-auto p-0"},ax={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},ix={class:"text-gray-900"},sx={class:"flex items-start justify-between mb-6"},cx={class:"flex-1 mr-4"},dx={key:0,class:"flex items-center gap-2 group"},ux={class:"text-2xl font-bold text-gray-900"},px={key:1,class:"flex items-center gap-2"},mx=["disabled"],fx=["disabled"],gx={class:"text-sm text-gray-500 mt-1"},yx={class:"flex items-center gap-3"},hx={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},xx={class:"relative max-w-md"},bx={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},kx={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},wx=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=ke.useRouter(),o=ke.useRoute(),l=e.computed(()=>o.params.name),r=e.ref(!1),a=e.ref(null),i=e.ref(null),s=e.ref(""),u=e.ref(""),p=e.ref(""),k=e.ref(!1),c=e.ref(!1),y=e.ref(null),d=async()=>{var V;try{const T=await fetch(`/api/user-cls?name=${encodeURIComponent(l.value)}`);if(!T.ok)return;const C=(V=(await T.json()).data)==null?void 0:V[0];C&&(u.value=C.description||"")}catch(T){console.error("Error fetching classifier details:",T)}},m=()=>{p.value=u.value,k.value=!0,e.nextTick(()=>{var V;(V=y.value)==null||V.focus()})},g=()=>{k.value=!1,p.value=""},h=async()=>{try{c.value=!0;const I=(await(await fetch(`/api/suggest/${encodeURIComponent(l.value)}`)).json()).data||[],C={name:l.value,description:p.value.trim()||null,data:I},B=await fetch(`/api/user-cls/${encodeURIComponent(l.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(C)});if(!B.ok)throw new Error(`HTTP error: ${B.status}`);u.value=p.value,k.value=!1}catch(V){console.error("Error saving description:",V)}finally{c.value=!1}};e.onMounted(()=>{d()}),e.watch(l,()=>{d()});const f=()=>{a.value=null,r.value=!0},b=V=>{a.value=V,r.value=!0};return(V,T)=>(e.openBlock(),e.createElementBlock("div",lx,[e.createElementVNode("div",null,[e.createElementVNode("div",ax,[e.createElementVNode("button",{onClick:T[0]||(T[0]=I=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),T[4]||(T[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",ix,e.toDisplayString(l.value),1)]),e.createElementVNode("div",sx,[e.createElementVNode("div",cx,[k.value?(e.openBlock(),e.createElementBlock("div",px,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":T[1]||(T[1]=I=>p.value=I),type:"text",class:"text-2xl font-bold text-gray-900 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full",onKeydown:[e.withKeys(h,["enter"]),e.withKeys(g,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,p.value]]),e.createElementVNode("button",{onClick:h,disabled:c.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(Or),{width:20,height:20,"stroke-width":2})],8,mx),e.createElementVNode("button",{onClick:g,disabled:c.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(bt),{width:20,height:20,"stroke-width":2})],8,fx)])):(e.openBlock(),e.createElementBlock("div",dx,[e.createElementVNode("h1",ux,e.toDisplayString(u.value),1),e.createElementVNode("button",{onClick:m,class:"opacity-0 group-hover:opacity-100 p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(jn),{width:18,height:18,"stroke-width":2})])])),e.createElementVNode("p",gx,e.toDisplayString(l.value),1)]),e.createElementVNode("div",yx,[e.createElementVNode("button",{onClick:f,class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(Zt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),T[5]||(T[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:T[2]||(T[2]=I=>e.unref(n).back()),class:"px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium"}," Назад ")])])]),e.createElementVNode("div",hx,[e.createElementVNode("div",xx,[e.createElementVNode("div",bx,[e.createElementVNode("div",kx,[e.createVNode(e.unref(In),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":T[3]||(T[3]=I=>s.value=I),type:"text",placeholder:"Пошук за назвою або описом...",class:"pl-9 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-200 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg"},null,512),[[e.vModelText,s.value]])])])]),e.createVNode(rx,{ref_key:"detailsTableRef",ref:i,"classifier-name":l.value,search:s.value,onEdit:b},null,8,["classifier-name","search"])]))}}),_x={class:"flex-col justify-between h-full"},Ex={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},Nx=e.defineComponent({__name:"index",setup(t){const n=ke.useRoute(),o=e.ref(""),l=e.ref(""),r=e.ref(null),a=e.ref({filtered:0,total:0}),i=u=>{a.value=u},s=()=>{var u;(u=r.value)==null||u.refetch()};return(u,p)=>(e.openBlock(),e.createElementBlock("div",_x,[e.createElementVNode("div",Ex,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Y1,{key:0,modelValue:o.value,"onUpdate:modelValue":p[0]||(p[0]=k=>o.value=k),filter:l.value,"onUpdate:filter":p[1]||(p[1]=k=>l.value=k),counts:a.value,onRefresh:s},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(wx,{key:2})):(e.openBlock(),e.createBlock(F1,{key:1,ref_key:"gridRef",ref:r,search:o.value,type:l.value,"onUpdate:counts":i},null,8,["search","type"]))]),p[2]||(p[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}});function Bx(t){t.component("MapCustom",Ht)}be.CartoCSS=rg,be.Classifiers=Nx,be.MapSettings=g1,be.MapWidget=Ht,be.Raster=g0,be.Register=ec,be.Service=tf,be.default=Ht,be.install=Bx,be.template1=Pn,be.template2=Un,be.template3=qn,be.template4=Hn,be.template5=Wn,Object.defineProperties(be,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
179
+ `)});return}r.value=!0;try{const M=JSON.parse(JSON.stringify(y.value));if(M.zoom=Number(M.zoom),Array.isArray(M.center)&&(M.center.every(W=>W==null||W===""||W===0)||M.center.length===0)&&(M.center=null),delete M.created_at,delete M.updated_at,delete M.created_by,delete M.updated_by,delete M.history,delete M.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)})).ok)throw new Error("Save failed");ue.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(M){console.error("Save error:",M),ue.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{r.value=!1}}return e.onMounted(async()=>{await V(),T()}),(C,B)=>(e.openBlock(),e.createElementBlock("main",l1,[e.createElementVNode("div",a1,[e.createElementVNode("div",i1,[e.createElementVNode("div",null,[e.createElementVNode("h1",s1,e.toDisplayString(y.value.name||"Налаштування карти"),1),B[7]||(B[7]=e.createElementVNode("p",{class:"text-gray-600"},"Редагування параметрів карти",-1))]),e.createElementVNode("div",c1,[e.createElementVNode("a",{onClick:B[0]||(B[0]=S=>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:I,disabled:r.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(r.value?"Збереження...":"Зберегти"),9,d1)])]),l.value?(e.openBlock(),e.createElementBlock("div",u1,[...B[8]||(B[8]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(sg,{tabs:s,activeTab:c.value,"onUpdate:activeTab":B[1]||(B[1]=S=>c.value=S)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",p1,[e.createVNode(dg,{schema:b,loading:l.value,modelValue:y.value,"onUpdate:modelValue":B[2]||(B[2]=S=>y.value=S),form:i.value,"onUpdate:form":B[3]||(B[3]=S=>i.value=S)},null,8,["loading","modelValue","form"])],512),[[e.vShow,c.value==="general"]]),e.withDirectives(e.createElementVNode("div",m1,[e.createVNode(pg,{options:m.value,layerIDs:d.value,"onUpdate:layerIDs":B[4]||(B[4]=S=>d.value=S),layerNames:g.value,"onUpdate:layerNames":B[5]||(B[5]=S=>g.value=S)},null,8,["options","layerIDs","layerNames"])],512),[[e.vShow,c.value==="layers"]]),e.withDirectives(e.createVNode(r1,{modelValue:y.value.widgets,"onUpdate:modelValue":B[6]||(B[6]=S=>y.value.widgets=S)},null,8,["modelValue"]),[[e.vShow,c.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",f1,[e.createVNode(Sh,{"center-display":h.value,"zoom-display":f.value,"layer-names":g.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,c.value==="map"]])],64))])]))}}),[["__scopeId","data-v-75f83258"]]),y1={class:"flex-1 overflow-y-auto p-0 overflow-x-hidden max-h-[70%] lg:max-h-[80%] xl:max-h-[83%] 2xl:max-h-[95%]"},h1={class:"pt-0 mt-0"},x1={key:0,class:"flex items-center justify-center py-12"},b1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},k1={key:2,class:"text-center py-12 text-gray-500"},w1={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},_1=["onClick"],E1={class:"flex items-start justify-between"},N1={class:"flex items-start gap-3"},B1={class:"flex-1 min-w-0"},V1={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},C1=["onClick"],$1={class:"relative"},v1=["onClick"],S1={key:0,class:"absolute left-full top-1/2 -translate-y-1/2 ml-2 px-2 py-1 bg-white text-gray-600 text-xs rounded shadow-sm z-10 whitespace-nowrap animate-fade-in-out border border-gray-200/70"},L1={class:"text-xs text-gray-600 line-clamp-2"},A1={class:"flex items-center gap-2 shrink-0"},M1={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},T1={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},En=30,F1=ie(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const l=t,r=o,a=ke.useRouter(),i=ke.useRoute(),s=e.ref(Number(i.query.page)||1),u=e.ref(!1),p=e.ref(0),k=e.ref([]),c=e.computed(()=>{const B=(s.value-1)*En,S=B+En;return k.value.slice(B,S)}),y=e.ref(!0),d=e.ref(null),m=e.ref(null);let g=null,h=null;const f=(B="",S="")=>{const M=new URLSearchParams,j=B.trim();j&&M.set("search",j);const G=(S||"").trim();G&&M.set("type",G);const W=M.toString();return W?`/api/user-cls?${W}`:"/api/user-cls"},b=async(B="",S="")=>{try{y.value=!0,d.value=null;const M=f(B,S),j=await fetch(M);if(!j.ok)throw new Error(`HTTP error: ${j.status}`);const G=await j.json();if(k.value=G.data,!B.trim())p.value=G.data.length;else if(p.value===0){const W=await fetch(f("",S));if(W.ok){const K=await W.json();p.value=K.data.length}}r("update:counts",{filtered:k.value.length,total:p.value})}catch(M){d.value=M instanceof Error?M.message:"Failed to load classifiers",console.error("Error fetching classifiers:",M)}finally{y.value=!1}};e.onMounted(()=>{u.value=!0,b(l.search,l.type??"")}),e.watch(()=>[l.search,l.type],([B,S])=>{g&&clearTimeout(g),g=setTimeout(()=>{b(B,S??""),s.value=1},300)});const V=B=>{a.push({name:"classifier-detail",params:{name:B.name}})},T=()=>{b(l.search,l.type??"")},I=async B=>{try{await navigator.clipboard.writeText(B),m.value=B,h&&clearTimeout(h),h=setTimeout(()=>{m.value=null},500)}catch(S){console.error("Failed to copy text: ",S)}};n({refetch:T});const C=B=>{s.value=B,a.replace({query:{...i.query,page:String(B)}})};return(B,S)=>(e.openBlock(),e.createElementBlock("div",y1,[e.createElementVNode("div",h1,[y.value?(e.openBlock(),e.createElementBlock("div",x1,[e.createVNode(e.unref(Dn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):d.value?(e.openBlock(),e.createElementBlock("div",b1,e.toDisplayString(d.value),1)):k.value.length===0?(e.openBlock(),e.createElementBlock("div",k1," Нічого не знайдено ")):e.createCommentVNode("",!0),k.value.length>0?(e.openBlock(),e.createElementBlock("div",w1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(M,j)=>(e.openBlock(),e.createElementBlock("div",{key:j,class:"w-full border border-gray-200 bg-white rounded-lg p-4 text-left hover:shadow-md transition-all hover:border-gray-300 cursor-pointer",onClick:G=>V(M)},[e.createElementVNode("div",E1,[e.createElementVNode("div",N1,[M.type==="sql"?(e.openBlock(),e.createBlock(e.unref(Hr),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(Gr),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",B1,[e.createElementVNode("div",V1,[e.createElementVNode("h4",{onClick:e.withModifiers(G=>I(M.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(M.name),9,C1),e.createElementVNode("div",$1,[e.createElementVNode("button",{onClick:e.withModifiers(G=>I(M.name),["stop"]),class:"pt-1 mt-0.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors"},[e.createVNode(e.unref(qr),{width:14,height:14,"stroke-width":2})],8,v1),m.value===M.name?(e.openBlock(),e.createElementBlock("div",S1," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",L1,e.toDisplayString(M.description||"Опис відсутній"),1)])]),e.createElementVNode("div",A1,[M.type!="sql"?(e.openBlock(),e.createElementBlock("span",M1,e.toDisplayString(M.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(Pr),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,_1))),128))])):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",T1,[e.createVNode(e.unref(ue.VsPagination),{total:k.value.length,page:s.value,"page-size":En,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":C,onPageChange:C},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-e728e68b"]]),D1={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},I1={class:""},j1={class:"text-2xl font-bold mb-2 flex items-center gap-2"},z1={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},O1={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},R1={class:"w-full md:w-auto"},P1=["value"],U1={class:"relative w-full lg:w-[16rem]"},q1={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},H1={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},W1=["value"],Y1=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,l=n,r=i=>{const s=i.target.value;l("update:filter",s)},a=e.ref(!1);return(i,s)=>(e.openBlock(),e.createElementBlock("div",D1,[e.createElementVNode("div",I1,[e.createElementVNode("h1",j1,[s[3]||(s[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",z1,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),s[4]||(s[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",O1,[e.createElementVNode("div",R1,[s[6]||(s[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:r},[...s[5]||(s[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,P1)]),e.createElementVNode("div",U1,[e.createElementVNode("div",q1,[e.createElementVNode("div",H1,[e.createVNode(e.unref(In),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:s[0]||(s[0]=u=>i.$emit("update:modelValue",u.target.value))},null,40,W1),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:s[1]||(s[1]=u=>i.$emit("update:modelValue",""))},[e.createVNode(e.unref(bt),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:s[2]||(s[2]=u=>a.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(Zt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),s[7]||(s[7]=e.createTextVNode(" Додати ",-1))])])]))}}),Z1={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},G1={key:0,class:"flex items-center justify-center py-12"},K1={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},X1={key:2,class:"text-center py-12 text-gray-500"},J1={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},Q1={class:"bg-gray-50 border-b border-gray-200"},ex={class:"divide-y divide-gray-200"},tx={class:"px-4 py-3 w-1/12"},nx={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},ox={class:"px-4 py-3 text-sm text-gray-600 font-mono"},rx=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,l=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],r=e.ref([]),a=e.ref(!0),i=e.ref(null),s=e.computed(()=>{var c;if(!((c=o.search)!=null&&c.trim()))return r.value;const k=o.search.toLowerCase().trim();return r.value.filter(y=>{var d,m;return((d=y.text)==null?void 0:d.toLowerCase().includes(k))||((m=y.id)==null?void 0:m.toLowerCase().includes(k))})}),u=async k=>{try{a.value=!0,i.value=null;const c=await fetch(`/api/suggest/${encodeURIComponent(k)}`);if(!c.ok)throw new Error(`HTTP error: ${c.status}`);const y=await c.json();r.value=y.data}catch(c){i.value=c instanceof Error?c.message:"Failed to load items",console.error("Error fetching suggest items:",c)}finally{a.value=!1}};return e.onMounted(()=>{o.classifierName&&u(o.classifierName)}),e.watch(()=>o.classifierName,k=>{k&&u(k)}),n({refetch:()=>{u(o.classifierName)}}),(k,c)=>(e.openBlock(),e.createElementBlock("div",Z1,[a.value?(e.openBlock(),e.createElementBlock("div",G1,[e.createVNode(e.unref(Dn),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):i.value?(e.openBlock(),e.createElementBlock("div",K1,e.toDisplayString(i.value),1)):r.value.length===0?(e.openBlock(),e.createElementBlock("div",X1," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",J1,[e.createElementVNode("thead",Q1,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,y=>e.createElementVNode("th",{key:y.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[y.width,y.align]])},e.toDisplayString(y.label),3)),64))])]),e.createElementVNode("tbody",ex,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,y=>(e.openBlock(),e.createElementBlock("tr",{key:y.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",tx,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:y.color})},null,4)]),e.createElementVNode("td",nx,e.toDisplayString(y.text),1),e.createElementVNode("td",ox,e.toDisplayString(y.id),1)]))),128))])]))]))}}),lx={class:"space-y-6 flex-1 overflow-y-auto p-0"},ax={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},ix={class:"text-gray-900"},sx={class:"flex items-start justify-between mb-6"},cx={class:"flex-1 mr-4"},dx={class:"text-2xl font-bold text-gray-900"},ux={key:0,class:"flex items-center gap-2 group mt-1"},px={class:"text-sm text-gray-500"},mx={key:1,class:"flex items-center gap-2 mt-1"},fx=["disabled"],gx=["disabled"],yx={class:"flex items-center gap-3"},hx={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},xx={class:"relative max-w-md"},bx={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},kx={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},wx=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=ke.useRouter(),o=ke.useRoute(),l=e.computed(()=>o.params.name),r=e.ref(!1),a=e.ref(null),i=e.ref(null),s=e.ref(""),u=e.ref(""),p=e.ref(""),k=e.ref(!1),c=e.ref(!1),y=e.ref(null),d=async()=>{var V;try{const T=await fetch(`/api/user-cls?name=${encodeURIComponent(l.value)}`);if(!T.ok)return;const C=(V=(await T.json()).data)==null?void 0:V[0];C&&(u.value=C.description||"")}catch(T){console.error("Error fetching classifier details:",T)}},m=()=>{p.value=u.value,k.value=!0,e.nextTick(()=>{var V;(V=y.value)==null||V.focus()})},g=()=>{k.value=!1,p.value=""},h=async()=>{try{c.value=!0;const I=(await(await fetch(`/api/suggest/${encodeURIComponent(l.value)}`)).json()).data||[],C={name:l.value,description:p.value.trim()||null,data:I},B=await fetch(`/api/user-cls/${encodeURIComponent(l.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(C)});if(!B.ok)throw new Error(`HTTP error: ${B.status}`);u.value=p.value,k.value=!1}catch(V){console.error("Error saving description:",V)}finally{c.value=!1}};e.onMounted(()=>{d()}),e.watch(l,()=>{d()});const f=()=>{a.value=null,r.value=!0},b=V=>{a.value=V,r.value=!0};return(V,T)=>(e.openBlock(),e.createElementBlock("div",lx,[e.createElementVNode("div",null,[e.createElementVNode("div",ax,[e.createElementVNode("button",{onClick:T[0]||(T[0]=I=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),T[4]||(T[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",ix,e.toDisplayString(l.value),1)]),e.createElementVNode("div",sx,[e.createElementVNode("div",cx,[e.createElementVNode("h1",dx,e.toDisplayString(l.value),1),k.value?(e.openBlock(),e.createElementBlock("div",mx,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:y,"onUpdate:modelValue":T[1]||(T[1]=I=>p.value=I),type:"text",class:"text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",onKeydown:[e.withKeys(h,["enter"]),e.withKeys(g,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,p.value]]),e.createElementVNode("button",{onClick:h,disabled:c.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(Or),{width:18,height:18,"stroke-width":2})],8,fx),e.createElementVNode("button",{onClick:g,disabled:c.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(bt),{width:18,height:18,"stroke-width":2})],8,gx)])):(e.openBlock(),e.createElementBlock("div",ux,[e.createElementVNode("p",px,e.toDisplayString(u.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:m,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(jn),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",yx,[e.createElementVNode("button",{onClick:f,class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(Zt),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),T[5]||(T[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:T[2]||(T[2]=I=>e.unref(n).back()),class:"px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium"}," Назад ")])])]),e.createElementVNode("div",hx,[e.createElementVNode("div",xx,[e.createElementVNode("div",bx,[e.createElementVNode("div",kx,[e.createVNode(e.unref(In),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":T[3]||(T[3]=I=>s.value=I),type:"text",placeholder:"Пошук за назвою або описом...",class:"pl-9 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-200 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg"},null,512),[[e.vModelText,s.value]])])])]),e.createVNode(rx,{ref_key:"detailsTableRef",ref:i,"classifier-name":l.value,search:s.value,onEdit:b},null,8,["classifier-name","search"])]))}}),_x={class:"flex-col justify-between h-full"},Ex={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},Nx=e.defineComponent({__name:"index",setup(t){const n=ke.useRoute(),o=e.ref(""),l=e.ref(""),r=e.ref(null),a=e.ref({filtered:0,total:0}),i=u=>{a.value=u},s=()=>{var u;(u=r.value)==null||u.refetch()};return(u,p)=>(e.openBlock(),e.createElementBlock("div",_x,[e.createElementVNode("div",Ex,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Y1,{key:0,modelValue:o.value,"onUpdate:modelValue":p[0]||(p[0]=k=>o.value=k),filter:l.value,"onUpdate:filter":p[1]||(p[1]=k=>l.value=k),counts:a.value,onRefresh:s},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(wx,{key:2})):(e.openBlock(),e.createBlock(F1,{key:1,ref_key:"gridRef",ref:r,search:o.value,type:l.value,"onUpdate:counts":i},null,8,["search","type"]))]),p[2]||(p[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}});function Bx(t){t.component("MapCustom",Ht)}be.CartoCSS=rg,be.Classifiers=Nx,be.MapSettings=g1,be.MapWidget=Ht,be.Raster=g0,be.Register=ec,be.Service=tf,be.default=Ht,be.install=Bx,be.template1=Pn,be.template2=Un,be.template3=qn,be.template4=Hn,be.template5=Wn,Object.defineProperties(be,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/gis",
3
- "version": "0.2.85",
3
+ "version": "0.2.86",
4
4
  "type": "module",
5
5
  "author": "Softpro",
6
6
  "main": "./dist/index.js",