@opengis/gis 0.1.65 → 0.1.67
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.css +1 -0
- package/dist/index.js +3656 -0
- package/dist/index.umd.cjs +48 -0
- package/module/gis/table/site.gis.registers.table.json +6 -0
- package/module/gis/table/site.gis.services.table.json +9 -16
- package/package.json +53 -54
- package/server/plugins/mapnik/funcs/map.proto +241 -0
- package/server/plugins/mapnik/funcs/mapnik.js +73 -72
- package/server/routes/map/controllers/rtile.js +1 -0
- package/server/routes/map/index.mjs +6 -0
- package/server/routes/map/vtile1.js +98 -0
- package/dist/import-file.cjs +0 -869
- package/dist/import-file.css +0 -1
- package/dist/import-file.js +0 -33340
- package/server/plugins/mapnik/index.mjs +0 -12
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
(function(q,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@opengis/filter")):typeof define=="function"&&define.amd?define(["exports","vue","@opengis/filter"],e):(q=typeof globalThis<"u"?globalThis:q||self,e(q.MapCustom={},q.Vue,q.openGISfilter))})(this,(function(q,e,$e){"use strict";const D=(t,o)=>{const n=t.__vccOpts||t;for(const[l,r]of o)n[l]=r;return n},Ie={key:0,class:"p-5 pb-0 flex justify-between items-center"},Fe={class:"inline-block font-semibold text-lg text-gray-800"},je={class:"flex flex-col gap-1 p-5"},Pe={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},De={key:0,class:"ms-2 text-xs text-gray-500"},Me=D({__name:"vs-legend-widget",props:{config:{type:Object,required:!0}},setup(t){const o=t,n=e.computed(()=>{var r;return((r=o.config)==null?void 0:r.items)||[]}),l=e.computed(()=>{var r;return((r=o.config)==null?void 0:r.title)||""});return(r,a)=>(e.openBlock(),e.createElementBlock("div",{class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative",style:e.normalizeStyle({width:t.config.width||"100%"})},[l.value?(e.openBlock(),e.createElementBlock("div",Ie,[e.createElementVNode("h2",Fe,e.toDisplayString(l.value),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.value,c=>(e.openBlock(),e.createElementBlock("div",{class:"flex items-center",key:c.label},[e.createElementVNode("span",{class:e.normalizeClass(["shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px]",[c.shape==="square"?"rounded-sm":"",c.shape==="circle"?"rounded-full":"",c.shape==="line"?"w-6 h-0.5":"",c.shape==="dashed-line"?"w-6 h-0.5 dashed-line":""]]),style:e.normalizeStyle({backgroundColor:c.color})},null,6),e.createElementVNode("span",Pe,[e.createElementVNode("span",null,e.toDisplayString(c.label),1),c.count!==void 0?(e.openBlock(),e.createElementBlock("span",De," ("+e.toDisplayString(c.count)+") ",1)):e.createCommentVNode("",!0)])]))),128))])],4))}},[["__scopeId","data-v-dd12cf90"]]),Te={class:"flex flex-row gap-x-3 z-10 relative"},ze=["onClick"],Ae=["src","alt"],Oe={__name:"vs-basemaps-widget",props:{map:{type:Object,required:!0},config:{type:Object,default:()=>({})},position:{type:String,default:"bottom-left"}},setup(t){const o=t,n=e.ref("voyager"),l=e.computed(()=>{var h;if(!((h=o.config)!=null&&h.layers))return[];const u=o.config.layers.map(s=>({id:s.id,title:s.label||s.title,url:s.url,service:s.type,category:"Базові карти",attribution:s.attribution,image:s.image,enabled:!0,owner:s.owner||"Unknown"}));return u.push({id:"__none__",title:"Без підложки",url:"",service:"",category:"Базові карти",attribution:"",enabled:!0,owner:""}),u});function r(u){return{version:8,sources:{[u.id]:{type:"raster",tiles:[u.url],tileSize:256,attribution:u.attribution||""}},layers:[{id:u.id,type:"raster",source:u.id}]}}const a=u=>{if(!o.map)return;const h=o.map.getStyle(),s=l.value.map(p=>p.id),d=h.layers.filter(p=>!s.includes(p.id)),i={};for(const p in h.sources)s.includes(p)||(i[p]=h.sources[p]);if(u.id==="__none__"){const p={version:8,sources:{...i},layers:[...d]};o.map.setStyle(p);return}const g=r(u);o.map.setStyle(g),o.map.once("styledata",()=>{for(const[p,m]of Object.entries(i))o.map.getSource(p)||o.map.addSource(p,m);for(const p of d)o.map.getLayer(p.id)||o.map.addLayer(p)})},c=u=>{n.value=u;const h=l.value.find(s=>s.id===u);h&&o.map&&a(h)};return e.onMounted(()=>{var u;(u=o.config)!=null&&u.default&&(n.value=o.config.default),c(n.value)}),(u,h)=>{const s=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",Te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,d=>e.withDirectives((e.openBlock(),e.createElementBlock("div",{trigger:"hover",placement:"top",key:d.id},[e.createElementVNode("div",{class:e.normalizeClass(["w-14 h-14 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",n.value===d.id?"border-blue-400":"border-transparent"]),onClick:i=>c(d.id)},[d.image?(e.openBlock(),e.createElementBlock("img",{key:0,src:d.image,alt:d.title,class:e.normalizeClass(["object-cover rounded-lg",d.id==="__none__"?"w-10 h-10":"w-12 h-12"])},null,10,Ae)):e.createCommentVNode("",!0)],10,ze)])),[[s,d.title]])),128))])}}};function le(t){if(!t.attrType||!t.attribute||!t.rules)return t.color||"#ccc";const o=t.rules.map(n=>[["==",["get",t.attribute],n.id||n.value],n.color]);return o.push(t.color||"#ccc"),["case",...o.flat()]}function Ue(t){if(!t.attrType||t.attrType!=="icon-by-attribute"||!t.attribute||!t.rules)return t.default_icon||null;const o=t.rules.map(n=>[["==",["get",t.attribute],n.value],n.icon]);return o.push(t.default_icon||"marker.svg"),["case",...o.flat()]}function Ve(t){if(!t.attrType||t.attrType!=="attribute-pattern"||!t.attribute||!t.rules)return t.fillPattern||"";const o=t.rules.map(n=>[["==",["get",t.attribute],n.value],n.fillPattern||""]);return o.push(t.fillPattern||""),["case",...o.flat()]}function J(t,o="stroke",n="#ccc"){return["case",["boolean",["feature-state","hovered"],!1],"#ff0000",["boolean",["feature-state","selected"],!1],"#ff0000",t[o]||n]}function Re(t){const o=[{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":le(t),"fill-outline-color":J(t,"stroke","#ccc"),"fill-opacity":t.opacity||1,...t.attrType==="attribute-pattern"&&{"fill-pattern":Ve(t)},...t.fillPattern&&!t.attrType&&{"fill-pattern":t.fillPattern}}},{type:"line",paint:{"line-color":J(t,"stroke","#ccc"),"line-width":t.width||2,"line-opacity":t.lineOpacity||t.opacity||1}}];return t.pointZoom&&o.push({type:"circle",maxzoom:t.pointZoom,paint:{"circle-color":t.color||"#ccc","circle-stroke-color":J(t,"stroke","#ccc"),"circle-stroke-width":t.width||2,"circle-opacity":t.opacity||1}}),o}function He(t){return[{type:"line",paint:{"line-color":J(t,"color",le(t)),"line-width":t.width||2,"line-opacity":t.opacity||1,...t.dashArray&&{"line-dasharray":t.dashArray}},layout:{...t.lineCap&&{"line-cap":t.lineCap},...t.lineJoin&&{"line-join":t.lineJoin}}}]}function We(t){const o=[{type:"circle",maxzoom:t.icon&&+t.iconZoom||22,paint:{"circle-radius":t.radius||6,"circle-stroke-color":J(t,"stroke","#ccc"),"circle-stroke-width":t.width||2,"circle-color":le(t),"circle-opacity":t.opacity||1}}];return t!=null&&t.clusterZoom?(o.push({type:"circle",filter:["has","point_count"],paint:{"circle-color":["step",["get","point_count"],"#51bbd6",100,"#f1f075",750,"#f28cb1"],"circle-radius":["step",["get","point_count"],20,100,30,750,40]}}),o.push({type:"symbol",filter:["has","point_count"],layout:{"text-field":["get","point_count"],"text-font":["Open Sans Regular"],"text-size":12}})):t.icon&&o.push({type:"symbol",minzoom:+t.iconZoom||16,layout:{"icon-image":t.icon,"icon-allow-overlap":!0}}),o}function Ze(t,o,n){const l=t.type||"point";return l==="polygon"?[{type:"fill",...n!==void 0?{maxzoom:n}:{},paint:{"fill-color":le(t),"fill-outline-color":J(t,"stroke","#ccc"),"fill-opacity":t.opacity||1,...t.attrType==="attribute-pattern"&&{"fill-pattern":Ve(t)},...t.fillPattern&&!t.attrType&&{"fill-pattern":t.fillPattern}}},{type:"line",...n!==void 0?{maxzoom:n}:{},paint:{"line-color":J(t,"stroke","#ccc"),"line-width":t.width||2,"line-opacity":t.lineOpacity||t.opacity||1}}]:l==="line"?[{type:"line",...n!==void 0?{maxzoom:n}:{},paint:{"line-color":J(t,"color",le(t)),"line-width":t.width||2,"line-opacity":t.opacity||1,...t.dashArray&&{"line-dasharray":t.dashArray}},layout:{...t.lineCap&&{"line-cap":t.lineCap},...t.lineJoin&&{"line-join":t.lineJoin}}}]:[{type:"circle",...n!==void 0?{maxzoom:n}:{},paint:{"circle-radius":t.radius||6,"circle-stroke-color":J(t,"stroke","#ccc"),"circle-stroke-width":t.width||2,"circle-color":le(t),"circle-opacity":t.opacity||1}}]}function Ce(t){var n,l;if(!t)return null;if(t.attrType==="icon-by-attribute"&&t.iconZoom){const r=Ue(t),a=Array.isArray(r)&&r[0]==="case"?r:["case",["==",["get",t.attribute],((l=(n=t.rules)==null?void 0:n[0])==null?void 0:l.value)||""],r,r],c=Ze(t,void 0,+t.iconZoom),u={type:"symbol",minzoom:+t.iconZoom,layout:{"icon-image":a,"icon-size":(t==null?void 0:t.icon_size)||1,"icon-allow-overlap":!0,"icon-anchor":(t==null?void 0:t.icon_anchor)||"bottom"},paint:{"icon-opacity":t.opacity||1}};return[...c,u]}const o=t.type||"point";return o==="polygon"?Re(t):o==="line"?He(t):We(t)}function qe(t){return t.startsWith("http")?t:`${window.location.origin}${t}`}function Ge(t){const{id:o,sourceLayer:n,url:l,bounds:r,title:a,style:c,service:u,service_type:h,source_type:s,data:d}=t,i=qe(l),g=h||u||s||"vector";switch(g){case"vtile":case"vector":return Qe(o,n,i,r,a,c);case"raster":return Ye(o,i,r,a,c);case"geojson":return Ke(o,d||i,r,a,c);default:throw new Error(`Unsupported layer service type: ${g}`)}}function Je(t){switch(t){case"polygon":return{type:"polygon",color:"#3388ff",opacity:.5};case"line":return{type:"line",color:"#3388ff",opacity:1};case"point":default:return{type:"point",color:"#3388ff",radius:6,opacity:1}}}function Qe(t,o,n,l,r,a){const c=o||(n.match(/\/vtile\/([^/]+)/)||[])[1]||t,u={type:"vector",tiles:[n],...l&&{bounds:l}},d=Ce(a||{}).map((i,g)=>({...i,id:`${t}-${g}`,"source-layer":c,source:t}));return{id:t,title:r,source:u,layers:d,visible:!0}}function Ye(t,o,n,l,r){const a={type:"raster",tiles:[o],tileSize:256,...n&&{bounds:n}},c=r||{},u={id:t,type:"raster",source:t,layout:{visibility:"visible"},...c&&{paint:c}};return{id:t,title:l,source:a,layers:[u],visible:!0}}function Ke(t,o,n,l,r){var d;const a={type:"geojson",data:o,...n&&{bounds:n}};let c="point";if(o&&o.features&&o.features.length>0){const i=(d=o.features[0].geometry)==null?void 0:d.type;i==="Polygon"||i==="MultiPolygon"?c="polygon":i==="LineString"||i==="MultiLineString"?c="line":c="point"}const u=r||Je(c),s=Ce(u).map((i,g)=>({...i,id:`${t}-${g}`,source:t}));return{id:t,title:l,source:a,layers:s,visible:!0}}function Xe(t){if(!t||t.attrType!=="icon-by-attribute")return[];const o=new Set;return t.default_icon&&o.add(t.default_icon),Array.isArray(t.rules)&&t.rules.forEach(n=>{n.icon&&o.add(n.icon)}),Array.from(o).map(n=>({name:n,url:(t.icon_base_url||"")+n}))}function et(t){const o=new Set;function n(l){typeof l=="string"?o.add(l):Array.isArray(l)&&l.forEach(n)}return t&&t["icon-image"]&&n(t["icon-image"]),Array.from(o)}async function Be(t,o){const n=o.map(async({name:l,url:r})=>{const a=await t.loadImage(r);return{name:l,data:a.data}});try{const l=await Promise.all(n);for(const{name:r,data:a}of l)t.hasImage(r)||t.addImage(r,a)}catch(l){console.error("Failed to load icons:",l)}}function tt(t,o,n="/icons/"){const r=et(o).map(a=>({name:a,url:n+a}));return Be(t,r)}async function X(t,o){const n=Ge(o),l=Xe(o.style);l.length>0&&await Be(t,l),o.layout&&o.layout["icon-image"]&&await tt(t,o.layout),t.getSource(n.id)||t.addSource(n.id,n.source);for(const r of n.layers)o.visible!==void 0&&(r.layout={...r.layout,visibility:o.visible?"visible":"none"}),t.getLayer(r.id)?t.setLayoutProperty(r.id,"visibility",o.visible?"visible":"none"):await t.addLayer(r);return n}function ae(t,o){t.getStyle().layers.filter(r=>r.source===o).forEach(r=>{t.removeLayer(r.id)}),t.getSource(o)&&t.removeSource(o)}const ot={class:"w-full flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative"},nt={class:"flex flex-col justify-between h-full pb-5 px-5"},rt={key:0,class:"relative mb-[10px]"},lt={width:"16",height:"17",viewBox:"0 0 16 17",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-1/2 left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0px, -50%)"}},at={key:1,class:"mb-4"},it={class:""},st={class:"space-y-2"},ct={class:"flex items-center gap-[10px] text-gray-500"},dt={class:"dataset-checkbox-container flex"},pt=["onUpdate:modelValue","onChange"],mt={class:"text-sm"},ht=["onClick"],ut=["innerHTML"],gt={key:0,class:"text-sm text-gray-500 text-center py-2"},ft={__name:"vs-layers-widget",props:{map:{type:Object,required:!0},history:{type:Boolean,default:!1},config:{type:Object,default:()=>({layers:[],search:!1,allow_toggle_all:!1})},position:{type:String,default:"bottom-left"},hasFilters:{type:Boolean,default:!1}},emits:["set-filter-layer","update:enabledLayerIds"],setup(t,{emit:o}){const n=t,l=o,r=e.ref(""),a=e.ref([]);function c(){const m=new URLSearchParams(window.location.search).get("layers");return m?m.split(","):[]}function u(p){const m=new URLSearchParams(window.location.search);p.length>0?m.set("layers",p.join(",")):m.delete("layers");const _=`${window.location.pathname}?${m.toString()}`;window.history.replaceState({},"",_)}e.onMounted(()=>{let p=[];n.history&&(p=c()),p.length>0?a.value=n.config.layers.map(m=>({...m,visible:p.includes(String(m.id))})):a.value=n.config.layers.map(m=>({...m,visible:m.visible??!1})),a.value.forEach(m=>{m.visible&&X(n.map,m)}),l("update:enabledLayerIds",d())});const h=e.computed(()=>{if(!r.value)return a.value;const p=r.value.toLowerCase();return a.value.filter(m=>(m.title||m.name||m.label||"").toLowerCase().includes(p))}),s=e.computed(()=>a.value.every(p=>p.visible)),d=()=>a.value.filter(p=>p.visible).map(p=>p.id),i=p=>{p.visible?X(n.map,p):(ae(n.map,p.id),l("set-filter-layer",null)),n.map.getStyle().layers.filter(L=>L.source===p.id).forEach(L=>{n.map.setLayoutProperty(L.id,"visibility",p.visible?"visible":"none")}),l("update:enabledLayerIds",d())},g=()=>{const p=!s.value;a.value.forEach(m=>{m.visible=p,p?X(n.map,m):ae(n.map,m.id)}),p||l("set-filter-layer",null),l("update:enabledLayerIds",d())};return e.watch(()=>d(),p=>{n.history&&u(p)},{deep:!0}),(p,m)=>(e.openBlock(),e.createElementBlock("div",ot,[m[2]||(m[2]=e.createElementVNode("div",{class:"p-5 pb-3 flex justify-between items-center"},[e.createElementVNode("h2",{class:"inline-block font-semibold text-lg text-gray-800"},"Шари")],-1)),e.createElementVNode("div",nt,[t.config.search?(e.openBlock(),e.createElementBlock("div",rt,[e.withDirectives(e.createElementVNode("input",{type:"text","onUpdate:modelValue":m[0]||(m[0]=_=>r.value=_),placeholder:"Введіть назву шару...",class:"py-[7px] ps-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 disabled:opacity-50 disabled:pointer-events-none"},null,512),[[e.vModelText,r.value]]),(e.openBlock(),e.createElementBlock("svg",lt,[...m[1]||(m[1]=[e.createElementVNode("path",{d:"M7.33333 13.1667C10.2789 13.1667 12.6667 10.7789 12.6667 7.83333C12.6667 4.88781 10.2789 2.5 7.33333 2.5C4.38781 2.5 2 4.88781 2 7.83333C2 10.7789 4.38781 13.1667 7.33333 13.1667Z",stroke:"#6B7280","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M13.9995 14.5L11.1328 11.6333",stroke:"#6B7280","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))])):e.createCommentVNode("",!0),t.config.allow_toggle_all?(e.openBlock(),e.createElementBlock("div",at,[e.createElementVNode("button",{onClick:g,class:"w-full py-[7px] bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors"},e.toDisplayString(s.value?"Вимкнути всі":"Увімкнути всі"),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",it,[e.createElementVNode("ul",st,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,_=>(e.openBlock(),e.createElementBlock("li",{key:_.id,class:"flex flex-wrap justify-between items-center gap-x-2"},[e.createElementVNode("label",ct,[e.createElementVNode("span",dt,[e.withDirectives(e.createElementVNode("input",{class:"dataset-checkbox",type:"checkbox","onUpdate:modelValue":L=>_.visible=L,onChange:()=>i(_)},null,40,pt),[[e.vModelCheckbox,_.visible]])]),e.createElementVNode("span",mt,e.toDisplayString(_.title||_.name||_.label),1)]),_.actions&&_.visible?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.actions,L=>(e.openBlock(),e.createElementBlock("div",{key:L.id},[e.createElementVNode("button",{class:"text-sm text-gray-500",onClick:S=>p.$emit("show-widget",L.widget)},[e.createElementVNode("div",{innerHTML:L.icon},null,8,ut)],8,ht)]))),128)):e.createCommentVNode("",!0)]))),128)),r.value&&h.value.length===0?(e.openBlock(),e.createElementBlock("li",gt," Шарів не знайдено ")):e.createCommentVNode("",!0)])])])]))}};e.defineComponent({props:{modelValue:{type:Boolean,default:()=>!1},title:{type:String,default:()=>""},disabled:{type:Boolean,default:()=>!1}},data(){return{}},mounted(){this.modelValue||this.$emit("update:modelValue",!1)},computed:{modelState:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},labelCursorClasses(){return[{"cursor-not-allowed":this.disabled},{"cursor-pointer":!this.disabled}]}},methods:{handleEnterDown(t){const{keyCode:o}=t;o===13&&(this.modelState=!this.modelState)},addKeyHandler(){window.addEventListener("keydown",this.handleEnterDown)},removeKeyHandler(){window.removeEventListener("keydown",this.handleEnterDown)}}});const pe=async(t,o,n,l=10)=>{var _,L,S,k;if(!o||!n)return;await e.nextTick();const r=await(n==null?void 0:n.getBoundingClientRect()),a=await(o==null?void 0:o.getBoundingClientRect());if(!a||!r)return;const c=await parseInt((_=o==null?void 0:o.getBoundingClientRect())==null?void 0:_.height),u=await parseInt((L=o==null?void 0:o.getBoundingClientRect())==null?void 0:L.width),h=await parseInt((S=n==null?void 0:n.getBoundingClientRect())==null?void 0:S.height),s=await parseInt((k=n==null?void 0:n.getBoundingClientRect())==null?void 0:k.width),d=await window.innerHeight,i=await window.innerWidth;let g=0,p=0;const m=a.bottom+l+h;switch(t){case"top":a.top-r.height-l<0?g=a.top-r.height+l+h+c:g=a.top-r.height-l,i>s+a.right+30?p=a.left-r.width/2+a.width/2:p=i-30-s;break;case"bottom":d>m?g=a.bottom+l:g=a.bottom-l-h-c,p=a.left-r.width/2+a.width/2;break;case"left":g=a.top-r.height/2+a.height/2,a.left-r.width-l>0?p=a.left-r.width-l:p=10;break;case"right":g=a.top-r.height/2+a.height/2,i-u>s?p=a.right+l:p=i-30-s;break;case"top-right":a.top-r.height-l<0?g=a.top-r.height+l+h+c:g=a.top-r.height-l,i-u>s?p=a.right+l:p=i-30-s;break;case"top-left":a.top-r.height-l<0?g=a.top-r.height+l+h+c:g=a.top-r.height-l,a.left-r.width-l>0?p=a.left-r.width-l:p=10;break;case"top-start":a.top-r.height-l<0?g=a.top-r.height+l+h+c:g=a.top-r.height-l,a.left>0?p=a.left:p=10;break;case"bottom-right":d>m?g=a.bottom+l:g=a.bottom-l-h-c,i-u>s?p=a.left:p=i-30-s;break;case"bottom-left":d>m?g=a.bottom+l:g=a.bottom-l-h-c,a.left>0?p=a.right-s:p=10;break;case"bottom-start":d>m?g=a.bottom+l:g=a.bottom-l-h-c,a.left>0?p=a.left:p=10;break}g+h>d?g=d-h-l:g<0&&(g=l),p+s>i?p=i-s-l:p<0&&(p=l),n instanceof HTMLElement&&(n.style.top=`${g}px`,n.style.left=`${p}px`,n.style.position="fixed")},yt={class:"text-center"},bt={class:"py-2 px-4 w-full text-sm text-stone-800 bg-white shadow-[0_10px_40px_10px_rgba(0,0,0,0.08)] rounded-lg focus:outline-none focus:bg-stone-100 dark:bg-neutral-900 dark:text-neutral-200 dark:focus:bg-neutral-800 after:h-4 after:absolute after:-bottom-4 after:start-0 after:w-full before:h-4 before:absolute before:-top-4 before:start-0 before:w-full"},ie=e.defineComponent({__name:"vs-popover",props:{isOpen:{type:Boolean,default:!1},placement:{default:"top"},gap:{default:8},width:{default:""},disabled:{type:Boolean,default:!1},trigger:{default:"click"},teleport:{default:"body"}},emits:["isvisible"],setup(t,{expose:o,emit:n}){const l=t,r=n,a=e.ref(!1),c=e.ref([]),u=e.ref(null),h=e.ref(null),s=e.ref(null),d=x=>{var F,G;if(!x){a.value=!1;return}(F=h.value)!=null&&F.contains(x.target)||(G=s.value)!=null&&G.contains(x.target)||(a.value=!1)},i=x=>{a.value&&s.value&&!s.value.contains(x.target)&&(a.value=!1)},g=()=>{a.value=!1},p=()=>{a.value&&(a.value=!1)},m=()=>{let x=u.value;for(;x&&x!==document.body;)(x.scrollHeight>x.clientHeight||x.scrollWidth>x.clientWidth)&&(x.addEventListener("scroll",g),c.value.push(x)),x=x.parentElement;document.body&&(document.body.addEventListener("scroll",g),c.value.push(document.body))},_=()=>{c.value.forEach(x=>{x.removeEventListener("scroll",g)}),c.value=[]};e.watch(a,x=>{x?(m(),window.addEventListener("resize",()=>pe(l.placement,h.value,s.value)),pe(l.placement,h.value,s.value)):window.removeEventListener("resize",()=>pe(l.placement,h.value,s.value)),r("isvisible",x)}),e.onMounted(()=>{window.addEventListener("click",d),window.addEventListener("popstate",p),window.addEventListener("scroll",i,!0),m()}),e.onBeforeUnmount(()=>{window.removeEventListener("click",d),window.removeEventListener("popstate",p),_()});const L=()=>{a.value=!0,pe(l.placement,h.value,s.value)},S=()=>{a.value=!1},k=async()=>{await pe(l.placement,h.value,s.value),a.value=!a.value};return o({togglePopover:k}),(x,F)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"popover",ref:u,class:"vs-popover inline-block"},[e.createElementVNode("div",yt,[x.trigger==="click"?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverRef",ref:h,onClick:k,class:e.normalizeClass({"pointer-events-none":x.disabled})},[e.renderSlot(x.$slots,"reference",{},()=>[F[0]||(F[0]=e.createElementVNode("button",null,"Click me!",-1))])],2)):e.createCommentVNode("",!0),x.trigger==="hover"?(e.openBlock(),e.createElementBlock("div",{key:1,ref_key:"popoverRef",ref:h,onMouseover:L,onMouseleave:S,class:e.normalizeClass({"pointer-events-none":x.disabled})},[e.renderSlot(x.$slots,"reference",{},()=>[F[1]||(F[1]=e.createElementVNode("button",null,"Click me!",-1))])],34)):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:x.teleport},[e.createVNode(e.Transition,{name:"fade"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{class:e.normalizeClass(["vsTailwind vs-popover__content",x.placement]),ref_key:"contentPop",ref:s,style:e.normalizeStyle({width:x.width?x.width+"px":"fit-content",zIndex:10002})},[e.createElementVNode("div",bt,[e.renderSlot(x.$slots,"default",{},()=>[F[2]||(F[2]=e.createElementVNode("span",null,"Popover content",-1))])])],6),[[e.vShow,a.value]])]),_:3})],8,["to"]))])],512))}});e.reactive({visible:!0});const wt={class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative"},xt={key:0,class:"p-5 pb-3 flex justify-between items-start gap-[30px]"},kt={class:"inline-block font-semibold text-lg text-gray-800 dark:text-neutral-200"},_t={class:"flex flex-col gap-1"},Et={class:"flex flex-col gap-1 p-5 pt-0"},Vt=["innerHTML"],Ct=D({__name:"vs-info-widget",props:{config:{type:Object,required:!0}},setup(t){const o=t,n=e.computed(()=>{var a;return((a=o.config)==null?void 0:a.title)||""}),l=e.computed(()=>{var a;return((a=o.config)==null?void 0:a.content)||""}),r=e.computed(()=>{var a;return((a=o.config)==null?void 0:a.goTo)||[]});return(a,c)=>{var h,s;const u=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",wt,[n.value||(h=r.value)!=null&&h.length?(e.openBlock(),e.createElementBlock("div",xt,[e.createElementVNode("h2",kt,e.toDisplayString(n.value),1),(s=r.value)!=null&&s.length?(e.openBlock(),e.createBlock(e.unref(ie),{key:0,placement:"bottom"},{reference:e.withCtx(()=>[e.createVNode(e.unref(ie),{trigger:"hover",placement:"right"},{reference:e.withCtx(()=>[...c[0]||(c[0]=[e.createElementVNode("div",{class:"flex items-center justify-center h-8 w-8 transition-colors rounded-full hover:bg-gray-100 cursor-pointer"},[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)])]),default:e.withCtx(()=>[c[1]||(c[1]=e.createTextVNode(" Перейти на карту ",-1))]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",_t,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,d=>(e.openBlock(),e.createElementBlock("div",{key:d.label},[d.url?(e.openBlock(),e.createBlock(u,{key:0,to:d.url,class:"text-sm text-gray-800 dark:text-neutral-200 hover:bg-gray-100 hover:text-blue-600 transition-colors rounded px-2 py-1 block"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(d.label),1)]),_:2},1032,["to"])):e.createCommentVNode("",!0)]))),128))])]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Et,[e.createElementVNode("div",{innerHTML:l.value},null,8,Vt)])])}}},[["__scopeId","data-v-629caa82"]]),Bt={class:"w-full flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative overflow-hidden"},Lt={key:0,class:"p-5 pb-3 flex justify-between items-center"},Nt={class:"inline-block font-semibold text-lg text-gray-800"},vt={key:1,class:"flex"},St={class:"flex items-center mx-[8px]"},$t={class:"min-h-[34px] max-h-[34px] overflow-hidden min-w-[34px] flex justify-center items-center bg-stone-100 text-stone-800 py-2 px-3 text-sm rounded-lg"},It={class:"min-h-[34px] flex justify-center items-center text-stone-500 py-2 px-1.5 text-sm"},Ft={class:"flex flex-col justify-between pb-5 px-5 h-full overflow-y-auto flex-1 [&::-webkit-scrollbar]:h-1.5 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-gray-300 [&::-webkit-scrollbar-track]:bg-transparent"},jt={key:0,class:"text-center"},Pt={key:1,class:"text-red-500"},Dt={key:2},Mt=["innerHTML"],Tt={key:1,class:"flow-root"},zt={class:"-my-3 divide-y divide-gray-100 text-sm"},At={class:"font-medium text-gray-900"},Ot={class:"text-gray-700 sm:col-span-2"},Ut={key:2,class:"vs-map-card-info__nodata"},Rt={key:3,class:"pt-4 flex justify-end"},Ht=["href"],Le={__name:"vs-card-widget",props:{config:{type:Object,required:!0},cardValues:{type:Object,required:!0}},emits:["close","content-resize"],setup(t,{emit:o}){const n=t,l=o,r=e.computed(()=>{var S;return((S=n.config)==null?void 0:S.title)||""}),a=e.computed(()=>!!(typeof window.app=="object"&&window.app&&window.app.config)),c=e.ref([]),u=e.ref(!1),h=e.ref(null),s=e.ref(0),d=e.computed(()=>s.value+1),i=e.computed(()=>{var S;return((S=n.info)==null?void 0:S.length)||0}),g=e.computed(()=>c.value[s.value]),p=e.computed(()=>{if(!g.value)return{};const{rows:S,columns:k}=g.value;return!S||!k?{}:k.reduce((x,F)=>(!F.hide&&!["geom","geodata","id"].includes(F.name)&&(x[F.ua]=S[F.name]??"-"),x),{})});async function m(){var S,k,x,F,G,Q;u.value=!0,h.value=null;try{const U={id:(S=n.cardValues)==null?void 0:S.id,layer:typeof((k=n.cardValues)==null?void 0:k.layer)=="object"?(F=(x=n.cardValues)==null?void 0:x.layer)==null?void 0:F.id:(G=n.cardValues)==null?void 0:G.layer,map:(Q=n.cardValues)==null?void 0:Q.map},ke=await fetch("/api/map-format?"+new URLSearchParams(U)).then(fe=>fe.json());c.value[s.value]=ke}catch(U){h.value=(U==null?void 0:U.message)||"Помилка запиту"}finally{u.value=!1,await e.nextTick(),l("content-resize")}}function _(){s.value<n.info.length-1&&(s.value+=1,c.value[s.value]||m())}function L(){s.value>0&&(s.value-=1,c.value[s.value]||m())}return e.onMounted(async()=>{await e.nextTick(),m()}),e.watch(()=>n.info,()=>{s.value=0,m(),l("content-resize")},{deep:!0}),e.watch([()=>n.cardValues,()=>n.config],async()=>{await e.nextTick(),m(),l("content-resize")}),(S,k)=>{var x,F;return e.openBlock(),e.createElementBlock("div",Bt,[r.value?(e.openBlock(),e.createElementBlock("div",Lt,[e.createElementVNode("h2",Nt,e.toDisplayString(r.value),1),e.createElementVNode("button",{type:"button",class:"size-8 inline-flex justify-center items-center gap-x-2 rounded-full border border-transparent bg-gray-100 text-gray-800 hover:bg-gray-200 focus:outline-none focus:bg-gray-200 disabled:opacity-50 disabled:pointer-events-none dark:bg-neutral-700 dark:hover:bg-neutral-600 dark:text-neutral-400 dark:focus:bg-neutral-600 ml-2",onClick:k[0]||(k[0]=G=>l("close"))},[...k[1]||(k[1]=[e.createElementVNode("svg",{class:"shrink-0 size-4 cursor-pointer",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"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])):e.createCommentVNode("",!0),i.value>1?(e.openBlock(),e.createElementBlock("div",vt,[e.createElementVNode("button",{type:"button",class:e.normalizeClass([{"opacity-flex items-center justify-between border-b px-[16px] py-[8px]50 pointer-events-none":d.value===1},"min-h-[34px] min-w-[34px] py-2 px-2.5 inline-flex justify-center items-center gap-x-2 text-sm rounded-lg text-stone-800 hover:bg-stone-100 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-stone-100"]),onClick:L}," ◀ ",2),e.createElementVNode("div",St,[e.createElementVNode("span",$t,e.toDisplayString(d.value),1),k[2]||(k[2]=e.createElementVNode("span",{class:"min-h-[34px] flex justify-center items-center text-stone-500 py-2 px-1.5 text-sm"},"з",-1)),e.createElementVNode("span",It,e.toDisplayString(i.value),1)]),e.createElementVNode("button",{type:"button",onClick:_,class:e.normalizeClass([{"opacity-50 pointer-events-none":d.value===i.value},"min-h-[34px] min-w-[34px] py-2 px-2.5 inline-flex justify-center items-center gap-x-2 text-sm rounded-lg text-stone-800 hover:bg-stone-100 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-stone-100"])}," ▶ ",2)])):e.createCommentVNode("",!0),e.createElementVNode("div",Ft,[u.value?(e.openBlock(),e.createElementBlock("div",jt,"Завантаження даних...")):h.value?(e.openBlock(),e.createElementBlock("div",Pt," Помилка завантаження даних ")):(e.openBlock(),e.createElementBlock("div",Dt,[(x=g.value)!=null&&x.html?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:g.value.html,class:"custom-table-html border-b"},null,8,Mt)):Object.keys(p.value).length?(e.openBlock(),e.createElementBlock("div",Tt,[e.createElementVNode("dl",zt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(G,Q)=>(e.openBlock(),e.createElementBlock("div",{key:Q,class:"grid grid-cols-1 gap-1 py-3 even:bg-gray-50 sm:grid-cols-3 sm:gap-4"},[e.createElementVNode("dt",At,e.toDisplayString(Q),1),e.createElementVNode("dd",Ot,e.toDisplayString(G),1)]))),128))])])):(e.openBlock(),e.createElementBlock("div",Ut,"Даних не знайдено."))])),(F=g.value)!=null&&F.cardInterface&&a.value?(e.openBlock(),e.createElementBlock("div",Rt,[e.createElementVNode("a",{href:`/card/${g.value.cardInterface}/${g.value.id}`,target:"_blank",class:"w-full !cursor-pointer text-center gap-2 px-3 py-1.5 bg-blue-600 text-white rounded hover:bg-blue-700 transition text-sm font-medium"}," Перейти в реєстр ",8,Ht)])):e.createCommentVNode("",!0)])])}}},Wt={class:"size-full flex flex-col bg-white border border-gray-200 shadow-2xs rounded-xl dark:bg-neutral-800 dark:border-neutral-700"},Zt={key:0,class:"p-5 pb-0 items-center"},qt={class:"inline-block font-semibold text-lg text-gray-800 dark:text-neutral-200"},Gt={class:"h-full p-5"},Jt={class:"h-full flex flex-col justify-between space-y-4"},Qt={class:"space-y-4"},Yt={key:0,class:"flex gap-x-1 w-full h-2.5 rounded-full overflow-hidden"},Kt=["aria-valuenow"],Xt={class:"text-sm text-gray-500 px-2 w-full py-2 cursor-pointer !flex flex-row items-center rounded-lg group hover:bg-gray-100"},eo=["for"],to={key:0,width:"16",height:"auto",src:"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J3doaXRlJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPjxwYXRoIGQ9J00xMi4yMDcgNC43OTNhMSAxIDAgMDEwIDEuNDE0bC01IDVhMSAxIDAgMDEtMS40MTQgMGwtMi0yYTEgMSAwIDAxMS40MTQtMS40MTRMNi41IDkuMDg2bDQuMjkzLTQuMjkzYTEgMSAwIDAxMS40MTQgMHonLz48L3N2Zz4="},oo=["id","onUpdate:modelValue"],no={class:"ml-2 text-gray-800 dark:text-neutral-200"},ro={key:0,class:"ms-auto text-xs text-gray-500 dark:text-neutral-500"},lo={__name:"vs-attributre-widget",props:{config:{type:Object,required:!0},map:{type:Object,required:!0}},setup(t){const o=t,n=e.computed(()=>{var h;return((h=o.config)==null?void 0:h.title)||""}),l=e.ref([]),r=e.computed(()=>o.config.layer.style.rules.some(h=>h.count!==void 0)),a=e.computed(()=>o.config.layer.style.rules.reduce((h,s)=>h+(s.count||0),0)),c=h=>!h||a.value===0?0:Math.round(h/a.value*100),u=()=>{const s=o.config.layer.style.rules.filter((d,i)=>l.value[i]).map(d=>d.id||d.value).join(",");if(o.config.layer.id){const d=o.map.getSource(o.config.layer.id);if(d){const g=d.tiles[0].split("?filter=")[0],p=s?`${g}?filter=${o.config.layer.style.attribute}=${s}`:g;d.setTiles([p])}}};return e.onMounted(()=>{var h;(h=o.config)!=null&&h.layer&&(X(o.map,o.config.layer),l.value=new Array(o.config.layer.style.rules.length).fill(!1))}),(h,s)=>(e.openBlock(),e.createElementBlock("div",Wt,[n.value?(e.openBlock(),e.createElementBlock("div",Zt,[e.createElementVNode("div",null,[e.createElementVNode("h2",qt,e.toDisplayString(n.value),1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Gt,[e.createElementVNode("div",Jt,[e.createElementVNode("div",Qt,[r.value?(e.openBlock(),e.createElementBlock("div",Yt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.config.layer.style.rules,(d,i)=>(e.openBlock(),e.createElementBlock("div",{key:i,class:"flex flex-col justify-center overflow-hidden text-xs text-white text-center whitespace-nowrap",style:e.normalizeStyle({width:`${c(d.count)}%`,backgroundColor:d.color}),role:"progressbar","aria-valuenow":c(d.count),"aria-valuemin":"0","aria-valuemax":"100"},null,12,Kt))),128))])):e.createCommentVNode("",!0),e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.config.layer.style.rules,(d,i)=>(e.openBlock(),e.createElementBlock("li",{key:i},[e.createElementVNode("div",Xt,[e.createElementVNode("label",{for:`filter-${i}`,class:"flex items-center w-full cursor-pointer"},[e.createElementVNode("div",{class:"w-[18px] h-[18px] border rounded-[4px] flex items-center justify-center",style:e.normalizeStyle({background:l.value[i]?d.color||"#2563eb":"#fff",borderColor:l.value[i]?d.color||"#2563eb":d.color||"#d9d9d9"})},[l.value[i]?(e.openBlock(),e.createElementBlock("img",to)):e.createCommentVNode("",!0)],4),e.withDirectives(e.createElementVNode("input",{type:"checkbox",id:`filter-${i}`,"onUpdate:modelValue":g=>l.value[i]=g,onChange:u,class:"hidden",disabled:!1},null,40,oo),[[e.vModelCheckbox,l.value[i]]]),e.createElementVNode("span",no,e.toDisplayString(d.label||d.text),1),r.value?(e.openBlock(),e.createElementBlock("span",ro,"("+e.toDisplayString(d.count)+")",1)):e.createCommentVNode("",!0)],8,eo)])]))),128))])])])])]))}},ao={class:"hover:bg-gray-100 rounded-lg flex items-center ml-[20px] py-[8px] px-[8px]"},io=["for"],so={class:"custom-checkbox-wrapper"},co=["id","checked"],po={class:"custom-checkbox"},mo={key:0,xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},ho={class:"flex items-center justify-between ml-2 w-full"},uo=["title"],go={key:0,class:"text-xs opacity-60 text-[#4b5563]"},fo=D({__name:"vs-map-catalog-item",props:{layer:{type:Object,required:!0},map:{type:Object,default:()=>null},selectedLayers:{type:Array,default:()=>[]}},emits:["select","remove"],setup(t,{emit:o}){const n=t,l=o,r=e.computed(()=>n.selectedLayers.some(u=>u.id===n.layer.id)),a=u=>Intl.NumberFormat("uk",{notation:"compact"}).format(u),c=u=>{l(u?"select":"remove",n.layer)};return(u,h)=>{var s,d,i,g,p;return e.openBlock(),e.createElementBlock("div",ao,[e.createElementVNode("label",{class:"flex items-center w-full cursor-pointer",for:t.layer.id},[e.createElementVNode("div",so,[e.createElementVNode("input",{id:t.layer.id,type:"checkbox",checked:r.value,onChange:h[0]||(h[0]=m=>c(m.target.checked)),class:"custom-checkbox-input"},null,40,co),e.createElementVNode("div",po,[r.value?(e.openBlock(),e.createElementBlock("svg",mo,[...h[1]||(h[1]=[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",ho,[e.createElementVNode("div",{class:"whitespace-nowrap text text-ellipsis max-w-[260px] overflow-hidden text-[13px] text-[#4b5563]",title:(s=t.layer)==null?void 0:s.name},e.toDisplayString(((d=t.layer)==null?void 0:d.name)||((i=t.layer)==null?void 0:i.title)),9,uo),isNaN(a((g=t.layer)==null?void 0:g.count))?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",go,e.toDisplayString(a((p=t.layer)==null?void 0:p.count)),1))])],8,io)])}}},[["__scopeId","data-v-b96f3537"]]),yo={},bo={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"};function wo(t,o){return e.openBlock(),e.createElementBlock("svg",bo,[...o[0]||(o[0]=[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"},null,-1),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"},null,-1),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"},null,-1),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"},null,-1)])])}const xo=D(yo,[["render",wo]]),ko={},_o={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"};function Eo(t,o){return e.openBlock(),e.createElementBlock("svg",_o,[...o[0]||(o[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1),e.createElementVNode("path",{d:"M12 16v-4"},null,-1),e.createElementVNode("path",{d:"M12 8h.01"},null,-1)])])}const Vo=D(ko,[["render",Eo]]),Co={},Bo={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-table"};function Lo(t,o){return e.openBlock(),e.createElementBlock("svg",Bo,[...o[0]||(o[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 No=D(Co,[["render",Lo]]),vo={},So={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"};function $o(t,o){return e.openBlock(),e.createElementBlock("svg",So,[...o[0]||(o[0]=[e.createStaticVNode('<path d="M3 6h18"></path><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path><line x1="10" x2="10" y1="11" y2="17"></line><line x1="14" x2="14" y1="11" y2="17"></line>',5)])])}const Io=D(vo,[["render",$o]]),Fo={},jo={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 text-gray-600"};function Po(t,o){return e.openBlock(),e.createElementBlock("svg",jo,[...o[0]||(o[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"},null,-1)])])}const Do=D(Fo,[["render",Po]]),Mo={},To={width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function zo(t,o){return e.openBlock(),e.createElementBlock("svg",To,[...o[0]||(o[0]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Ao=D(Mo,[["render",zo]]),Oo={},Uo={width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Ro(t,o){return e.openBlock(),e.createElementBlock("svg",Uo,[...o[0]||(o[0]=[e.createStaticVNode('<g clip-path="url(#clip0_231_103)"><path d="M12 20L9 21V12.5L4.52 7.572C4.18545 7.20393 4.00005 6.7244 4 6.227V4H20V6.172C19.9999 6.70239 19.7891 7.21101 19.414 7.586L15 12" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M21.121 20.1209C21.5406 19.7014 21.8265 19.1668 21.9423 18.5849C22.0581 18.0029 21.9988 17.3997 21.7717 16.8514C21.5447 16.3032 21.1602 15.8346 20.6668 15.5049C20.1734 15.1752 19.5934 14.9993 19 14.9993C18.4066 14.9993 17.8266 15.1752 17.3332 15.5049C16.8398 15.8346 16.4553 16.3032 16.2283 16.8514C16.0012 17.3997 15.9419 18.0029 16.0577 18.5849C16.1735 19.1668 16.4594 19.7014 16.879 20.1209C17.297 20.5399 18.004 21.1659 19 21.9999C20.051 21.1099 20.759 20.4839 21.121 20.1209Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path><path d="M19 18V18.01" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path></g><defs><clipPath id="clip0_231_103"><rect width="24" height="24" fill="white"></rect></clipPath></defs>',2)])])}const Ho=D(Oo,[["render",Ro]]);function Wo(){const o=new URLSearchParams(window.location.search).get("layers");return o?o.split(","):[]}function Zo(t){const o=new URLSearchParams(window.location.search);t.length>0?o.set("layers",t.join(",")):o.delete("layers");const n=`${window.location.pathname}?${o.toString()}`;window.history.replaceState({},"",n)}const qo={components:{VsPopover:ie,VsLayersItem:fo,ZoomInIcon:xo,InfoIcon:Vo,TableIcon:No,TrashIcon:Io,DotsIcon:Do,ChevronRightIcon:Ao,FilterIcon:Ho},props:{center:{type:Array,default:()=>[26.2516,50.6199]},zoom:{type:Number,default:12},map:{type:Object,default:()=>null},history:{type:Boolean,default:!1}},emits:["content-resize"],data(){return{layers:null,rawCatalog:null,categories:null,selectedCategory:"",search:"",activeView:"catalog",selectedLayers:[],mounted:!1,draggedLayerIndex:null,filterType:"",filterCategory:""}},computed:{searchedLayers(){return this.layers.filter(({name:t})=>t==null?void 0:t.toLowerCase().match(this.search.toLowerCase()))}},async mounted(){if(this.mounted=!0,await this.getLayers(),this.categories=this.layersCategories(),this.history){const t=Wo();t.length>0&&this.layers&&(t.forEach(o=>{const n=this.layers.find(l=>String(l.id)===o);if(n&&!this.selectedLayers.find(l=>l.id===n.id)){const l={...n,visible:!0,opacity:100,showFilters:!1};this.selectedLayers.push(l),X(this.map,l)}}),this.activeView="selected")}this._resizeObserver=new window.ResizeObserver(()=>{this.$emit("content-resize")}),this.$nextTick(()=>{const t=this.$el;t&&this._resizeObserver.observe(t)})},beforeUnmount(){this._resizeObserver&&this._resizeObserver.disconnect()},watch:{selectedLayers:{handler(t){this.history&&Zo(t.map(o=>o.id))},deep:!0}},methods:{async getLayers(){try{const t=await fetch("/api/map-catalog").then(n=>n.json()),o=(t.services||[]).filter(n=>n.service_type!=="other");this.layers=[...o,...t.rasters||[]],this.$emit("catalog-layers",this.layers),this.rawCatalog={...t,services:o}}catch(t){console.error("Помилка завантаження шарів:",t)}},layersCategories(){return this.rawCatalog?{Сервіси:this.rawCatalog.services||[],Растри:this.rawCatalog.rasters||[]}:{}},selectCategory(t){this.selectedCategory=this.selectedCategory===t?"":t},formatNumber(t){return Intl.NumberFormat("uk",{notation:"compact"}).format(t)},onEnter(){this.layers.filter(({name:t})=>t==null?void 0:t.toLowerCase().match(this.search.toLowerCase()))},clearSearch(){this.search=""},addToSelected(t){if(!this.selectedLayers.find(o=>o.id===t.id)){const o={...t,visible:!0,opacity:100,showFilters:!1};this.selectedLayers.unshift(o),X(this.map,o)}},deleteLayer(t){const o=this.selectedLayers.findIndex(n=>n.id===t.id);o!==-1&&this.selectedLayers.splice(o,1),ae(this.map,t.id)},async toggleLayerVisibility(t){try{t.visible?(await X(this.map,t),this.updateLayerOpacity(t)):await ae(this.map,t.id)}catch(o){console.error("Error toggling layer visibility:",o),t.visible=!t.visible}},onLayerOpacityChange(t){this.updateLayerOpacity(t)},updateLayerOpacity(t){if(this.map){const o=this.map.getStyle().layers.filter(l=>l.id.includes(t.id)),n=t.opacity/100;o.forEach(l=>{l.type==="fill"?(t.originalFillOpacity||(t.originalFillOpacity=this.map.getPaintProperty(l.id,"fill-opacity")||1),this.map.setPaintProperty(l.id,"fill-opacity",t.originalFillOpacity*n)):l.type==="raster"?this.map.setPaintProperty(l.id,"raster-opacity",n):l.type==="line"?this.map.setPaintProperty(l.id,"line-opacity",n):l.type==="circle"?(this.map.setPaintProperty(l.id,"circle-opacity",n),this.map.setPaintProperty(l.id,"circle-stroke-opacity",n)):l.type==="symbol"&&(this.map.setPaintProperty(l.id,"icon-opacity",n),this.map.setPaintProperty(l.id,"text-opacity",n))})}},async handleRemoveFromCatalog(t){const o=this.selectedLayers.find(n=>n.id===t.id);o!=null&&o.visible&&await ae(this.map,t.id),this.deleteLayer(t)},clearSelectedLayers(){this.selectedLayers.forEach(async t=>{t.visible&&await ae(this.map,t.id)}),this.selectedLayers=[]},zoomToLayer(t){this.fitBoundsByLayer(t)},showLayerInfo(t){},showLayerTable(t){},showLayerFilter(t){t.showFilters=!t.showFilters},fitBoundsByLayer(t){t&&t.bbox&&Array.isArray(t.bbox)&&t.bbox.length===4&&this.map&&this.map.fitBounds([[t.bbox[0],t.bbox[1]],[t.bbox[2],t.bbox[3]]],{padding:50,duration:0})},async handleFilterChange({url:t},o){const n=this.map.getSource(o.id);if(n){const r=n.tiles[0].split("?filter=")[0],a=t?`${r}?filter=${t}`:r;n.setTiles([a])}},popoverActions(t){return[{label:"Збільшити до шару",icon:"ZoomInIcon",class:Array.isArray(t.bbox)&&t.bbox.length===4?"text-gray-700 hover:bg-gray-100":"text-gray-700 hover:bg-gray-100 opacity-50 cursor-not-allowed",handler:"zoomToLayer"},{label:"Інформація про шар",icon:"InfoIcon",class:"text-gray-700 hover:bg-gray-100 opacity-50 cursor-not-allowed",handler:"showLayerInfo"},{label:"Таблиця шару",icon:"TableIcon",class:"text-gray-700 hover:bg-gray-100 opacity-50 cursor-not-allowed",handler:"showLayerTable"},{divider:!0},{label:"Видалити шар",icon:"TrashIcon",class:"text-red-600 hover:bg-red-50",handler:"deleteLayer"}]},onDragStart(t){this.draggedLayerIndex=t},onDragOver(t){},onDrop(t){if(this.draggedLayerIndex===null||this.draggedLayerIndex===t)return;const o=this.selectedLayers[this.draggedLayerIndex];if(this.selectedLayers.splice(this.draggedLayerIndex,1),this.selectedLayers.splice(t,0,o),this.draggedLayerIndex=null,this.map&&this.selectedLayers.length>1)for(let n=this.selectedLayers.length-1;n>=0;n--){const l=this.selectedLayers[n];l.visible&&this.map.getStyle().layers.find(r=>r.id.includes(l.id))&&this.map.getStyle().layers.forEach(r=>{r.id.includes(l.id)&&this.map.moveLayer(r.id)})}},onDragEnd(){this.draggedLayerIndex=null}}},Go={class:"w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm"},Jo={class:"flex items-center justify-between mb-4"},Qo={class:"flex items-center gap-2"},Yo={class:"text-lg font-semibold text-gray-800"},Ko={key:0},Xo={key:1},en={class:"flex mb-4 border-b border-gray-200"},tn={key:0},on={class:"mb-4"},nn={key:0,class:"space-y-2 max-h-[400px] overflow-y-auto pr-1 [&::-webkit-scrollbar]:h-1.5 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-gray-300 [&::-webkit-scrollbar-track]:bg-transparent"},rn=["onDragstart","onDragover","onDrop"],ln={class:"flex items-center justify-between"},an={class:"flex items-center gap-2 cursor-move"},sn=["onUpdate:modelValue","onChange"],cn={class:"text-gray-800"},dn={class:"flex items-center gap-2"},pn={class:"relative"},mn={class:"flex items-center gap-2"},hn=["onUpdate:modelValue","onInput"],un={class:"text-xs text-gray-600 whitespace-nowrap"},gn=["onClick"],fn={class:"relative"},yn={class:"w-48"},bn={key:0,class:"my-1 border-gray-200"},wn=["disabled","onClick"],xn={class:"p-1 rounded-full hover:bg-gray-100 transition-colors","aria-label":"Layer actions"},kn={key:0,class:"bg-blue-50 rounded-md mt-2"},_n={class:"px-2 pt-2 text-blue-600 hover:text-blue-700 transition-colors"},En={key:0,class:"text-center text-[14px] text-[#4b5563]"},Vn={class:"relative mt-[10px]"},Cn={key:0,class:"vs-layers-catalog__list flex-1 scrollable-container overflow-auto mt-2 catalog-list"},Bn={key:0,class:"text-center text-[14px] text-[#4b5563]"},Ln={key:0,class:"text-center text-[14px] text-[#4b5563]"},Nn=["onClick"],vn={class:"flex items-center gap-x-3"},Sn=["title"],$n={class:"text-xs opacity-60 text-[#4b5563]"};function In(t,o,n,l,r,a){var p;const c=e.resolveComponent("VsPopover"),u=e.resolveComponent("DotsIcon"),h=e.resolveComponent("VsFilter"),s=e.resolveComponent("searchIcon"),d=e.resolveComponent("closeIcon"),i=e.resolveComponent("VsLayersItem"),g=e.resolveComponent("chevronRightIcon");return e.openBlock(),e.createElementBlock("div",Go,[e.createElementVNode("div",Jo,[e.createElementVNode("div",Qo,[o[7]||(o[7]=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",Yo,[e.createTextVNode(e.toDisplayString(r.activeView==="catalog"?"Каталог":"Вибрані шари")+" ",1),r.activeView==="catalog"?(e.openBlock(),e.createElementBlock("span",Ko,"("+e.toDisplayString(((p=r.layers)==null?void 0:p.length)||0)+")",1)):(e.openBlock(),e.createElementBlock("span",Xo,"("+e.toDisplayString(r.selectedLayers.length)+")",1))])]),e.createElementVNode("button",{class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers",onClick:o[0]||(o[0]=(...m)=>a.clearSelectedLayers&&a.clearSelectedLayers(...m))},[...o[8]||(o[8]=[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-ed5e991a><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-ed5e991a></path><path d="M21 3v5h-5" data-v-ed5e991a></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-ed5e991a></path><path d="M8 16H3v5" data-v-ed5e991a></path></svg>',1)])])]),e.createElementVNode("div",en,[e.createElementVNode("button",{class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.activeView==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"]),onClick:o[1]||(o[1]=m=>r.activeView="catalog")}," Каталог ",2),e.createElementVNode("button",{class:e.normalizeClass(["px-4 py-2 text-sm font-medium",r.activeView==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"]),onClick:o[2]||(o[2]=m=>r.activeView="selected")}," Вибрані шари ",2)]),r.activeView==="selected"?(e.openBlock(),e.createElementBlock("div",tn,[e.createElementVNode("div",on,[e.createElementVNode("button",{class:"flex items-center gap-2 text-blue-600 hover:text-blue-700 transition-colors px-3 py-2 rounded-md bg-blue-50 hover:bg-blue-100 w-full justify-center",onClick:o[3]||(o[3]=m=>r.activeView="catalog")},[...o[9]||(o[9]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),r.mounted?(e.openBlock(),e.createElementBlock("div",nn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.selectedLayers,(m,_)=>{var L,S;return e.openBlock(),e.createElementBlock("div",{key:m.id||_,class:e.normalizeClass(["border border-gray-200 rounded-md p-3 mb-2 bg-white shadow-sm text-[13px] text-[#4b5563]",{dragging:r.draggedLayerIndex===_}]),draggable:"true",onDragstart:k=>a.onDragStart(_),onDragover:e.withModifiers(k=>a.onDragOver(_),["prevent"]),onDrop:k=>a.onDrop(_),onDragend:o[4]||(o[4]=(...k)=>a.onDragEnd&&a.onDragEnd(...k))},[e.createElementVNode("div",ln,[e.createElementVNode("div",an,[o[10]||(o[10]=e.createStaticVNode('<svg width="16" height="16" fill="none" stroke="#9ca3af" stroke-width="2" viewBox="0 0 24 24" class="mr-1 shrink-0" data-v-ed5e991a><circle cx="5" cy="5" r="1.5" data-v-ed5e991a></circle><circle cx="5" cy="12" r="1.5" data-v-ed5e991a></circle><circle cx="5" cy="19" r="1.5" data-v-ed5e991a></circle><circle cx="12" cy="5" r="1.5" data-v-ed5e991a></circle><circle cx="12" cy="12" r="1.5" data-v-ed5e991a></circle><circle cx="12" cy="19" r="1.5" data-v-ed5e991a></circle><circle cx="19" cy="5" r="1.5" data-v-ed5e991a></circle><circle cx="19" cy="12" r="1.5" data-v-ed5e991a></circle><circle cx="19" cy="19" r="1.5" data-v-ed5e991a></circle></svg>',1)),e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:"w-4 h-4 text-blue-600 rounded focus:ring-blue-500","onUpdate:modelValue":k=>m.visible=k,onChange:k=>a.toggleLayerVisibility(m)},null,40,sn),[[e.vModelCheckbox,m.visible]]),e.createElementVNode("span",cn,e.toDisplayString(m.name||m.title||m.label),1)]),e.createElementVNode("div",dn,[e.createElementVNode("div",pn,[e.createVNode(c,{placement:"bottom"},{reference:e.withCtx(()=>[e.createElementVNode("div",{class:"text-sm text-gray-600 hover:text-gray-800 transition-colors px-2 py-1 rounded hover:bg-gray-100 cursor-pointer",onClick:k=>a.updateLayerOpacity(m)},e.toDisplayString(m.opacity||100)+"% ",9,gn)]),default:e.withCtx(()=>[e.createElementVNode("div",mn,[o[11]||(o[11]=e.createElementVNode("label",{class:"text-gray-600 whitespace-nowrap"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":k=>m.opacity=k,onInput:k=>a.onLayerOpacityChange(m),class:"h-2 w-full accent-blue-600 rounded-lg cursor-pointer bg-gray-200"},null,40,hn),[[e.vModelText,m.opacity]]),e.createElementVNode("span",un,e.toDisplayString(Math.round(m.opacity))+"% ",1)])]),_:2},1024)]),e.createElementVNode("div",fn,[e.createVNode(c,{placement:"bottom"},{reference:e.withCtx(()=>[e.createElementVNode("div",xn,[e.createVNode(u)])]),default:e.withCtx(()=>[e.createElementVNode("div",yn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.popoverActions(m),(k,x)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:x},[k.divider?(e.openBlock(),e.createElementBlock("hr",bn)):(e.openBlock(),e.createElementBlock("button",{key:1,class:e.normalizeClass("w-full p-2 text-left text-sm flex items-center gap-2 "+(k.class||"")),disabled:k.disabled,onClick:F=>!k.disabled&&t.$options.methods[k.handler].call(this,m)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(k.icon),{class:"lucide"})),e.createTextVNode(" "+e.toDisplayString(k.label),1)],10,wn))],64))),128))])]),_:2},1024)])])]),m.showFilters?(e.openBlock(),e.createElementBlock("div",kn,[e.createElementVNode("div",_n," Фільтри для шару: "+e.toDisplayString(m.name||m.title||m.label),1),e.withDirectives(e.createVNode(h,{ref_for:!0,ref:"filter",scheme:m.filters,header:!1,urlSeparator:"true",view:"plain",name:"filter",onFilterChange:k=>a.handleFilterChange(k,m)},null,8,["scheme","onFilterChange"]),[[e.vShow,(L=m.filters)==null?void 0:L.length]]),e.withDirectives(e.createElementVNode("div",null,[...o[12]||(o[12]=[e.createElementVNode("div",{class:"px-2 text-[14px] text-[#4b5563]"}," Фільтри для шару відсутні ",-1)])],512),[[e.vShow,!((S=m.filters)!=null&&S.length)]])])):e.createCommentVNode("",!0)],42,rn)}),128)),r.selectedLayers.length===0?(e.openBlock(),e.createElementBlock("div",En,[...o[13]||(o[13]=[e.createElementVNode("p",null,'Щоб додати шар, натисніть на кнопку "Вибрати шар".',-1)])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Vn,[e.withDirectives(e.createElementVNode("input",{title:"value",placeholder:"Введіть назву шару...","onUpdate:modelValue":o[5]||(o[5]=m=>r.search=m),type:"text",class:"py-[7px] pl-2 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 disabled:opacity-50 disabled:pointer-events-none dark:bg-neutral-700 dark:border-transparent dark:text-neutral-400 dark:placeholder:text-neutral-400 dark:focus:bg-neutral-800 dark:focus:ring-neutral-600",onKeyup:o[6]||(o[6]=e.withKeys((...m)=>a.onEnter&&a.onEnter(...m),["enter"]))},null,544),[[e.vModelText,r.search]]),e.createVNode(s,{class:"absolute top-1/2 left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}}),r.search?(e.openBlock(),e.createBlock(d,{key:0,class:"absolute top-1/2 right-[10px] w-[16px] h-[16px] cursor-pointer",style:{transform:"translate(0, -50%)"},onClick:a.clearSearch},null,8,["onClick"])):e.createCommentVNode("",!0)]),r.categories?(e.openBlock(),e.createElementBlock("div",Cn,[r.search?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.searchedLayers,(m,_)=>(e.openBlock(),e.createBlock(i,{key:_,layer:m,map:n.map,selectedLayers:r.selectedLayers,onSelect:a.addToSelected,onRemove:a.handleRemoveFromCatalog},null,8,["layer","map","selectedLayers","onSelect","onRemove"]))),128)),a.searchedLayers.length===0?(e.openBlock(),e.createElementBlock("div",Bn," Нічого не знайдено ")):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[!r.categories||Object.keys(r.categories).length===0?(e.openBlock(),e.createElementBlock("div",Ln," Каталог порожній ")):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(Object.keys(r.categories),m=>(e.openBlock(),e.createElementBlock("div",{key:m},[e.createElementVNode("div",{class:"hover:bg-gray-100 focus:bg-gray-100 px-2.5 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:_=>a.selectCategory(m)},[e.createElementVNode("div",vn,[e.createVNode(g,{class:e.normalizeClass({"rotate-up":m===r.selectedCategory,"rotate-down":m!==r.selectedCategory})},null,8,["class"]),e.createElementVNode("div",{class:"max-w-[260px] text-[14px] text-[#4b5563]",title:m},e.toDisplayString(m),9,Sn)]),e.createElementVNode("div",$n,e.toDisplayString(a.formatNumber(r.categories[m].length)),1)],8,Nn),e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.categories[m],(_,L)=>(e.openBlock(),e.createBlock(i,{key:L,layer:_,map:n.map,selectedLayers:r.selectedLayers,onSelect:a.addToSelected,onRemove:a.handleRemoveFromCatalog},null,8,["layer","map","selectedLayers","onSelect","onRemove"]))),128))],512),[[e.vShow,m===r.selectedCategory]])]))),128))],64))])):e.createCommentVNode("",!0)],64))])}const Fn=D(qo,[["render",In],["__scopeId","data-v-ed5e991a"]]),jn={key:0,class:"w-full flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},Pn={key:0,class:"p-5 pb-3 flex justify-between items-center"},Dn={class:"inline-block font-semibold text-lg text-gray-800 dark:text-neutral-200"},Mn={class:"flex flex-col justify-between h-full"},Tn={__name:"vs-filters-widget",props:{config:{type:Object,required:!0},map:{type:Object,required:!0},enabledLayerIds:{type:Array,default:()=>[]}},setup(t){const o=t,n=e.computed(()=>{var c;return((c=o.config)==null?void 0:c.filters)||[]}),l=e.computed(()=>n.value),r=e.computed(()=>{var u;const c=(u=o.config)==null?void 0:u.conditions;return!c||!c.layers?!0:o.enabledLayerIds.some(h=>c.layers.includes(h))}),a=async({data:c})=>{var i;const u=Object.entries(c).map(g=>g.join("=")).join("|"),h=(i=o.config)==null?void 0:i.conditions,s=(h==null?void 0:h.layers)||[],d=o.enabledLayerIds.filter(g=>s.includes(g));d.length&&d.forEach(g=>{const p=o.map.getSource(g);if(p){const _=p.tiles[0].split("?filter=")[0],L=u?`${_}?filter=${u}`:_;p.setTiles([L])}})};return(c,u)=>r.value?(e.openBlock(),e.createElementBlock("div",jn,[t.config.title?(e.openBlock(),e.createElementBlock("div",Pn,[e.createElementVNode("h2",Dn,e.toDisplayString(t.config.title),1)])):e.createCommentVNode("",!0),e.createElementVNode("div",Mn,[e.createVNode(e.unref($e),{ref:"filter",schema:l.value,view:"vertical",onChange:a},null,8,["schema"])])])):e.createCommentVNode("",!0)}},zn={type:"button",class:"py-2 px-2.5 inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg bg-white text-gray-800 hover:bg-gray-50 focus:outline-none focus:bg-gray-49 h-[38px] shadow-md"},An={class:"flex gap-[5px] items-center"},On={class:"text-gray-600"},Un={key:0,class:"w-[16px] h-[16px] font-medium bg-gray-800 text-white rounded-full flex items-center justify-center text-[10px]"},Rn={__name:"vs-inline-filters-widget",props:{config:{type:Object,required:!0},map:{type:Object,required:!0},enabledLayerIds:{type:Array,default:()=>[]}},setup(t){const o=t,n=e.ref(0),l=e.ref(null),r=e.computed(()=>{var s;return((s=o.config)==null?void 0:s.filters)||[]}),a=e.computed(()=>r.value.map(s=>({...s,id:s.name}))),c=e.computed(()=>{var d;const s=(d=o.config)==null?void 0:d.conditions;return!s||!s.layers?!0:o.enabledLayerIds.some(i=>s.layers.includes(i))}),u=e.computed(()=>{var s;if(o.enabledLayerIds&&o.enabledLayerIds.length){const i=(((s=o.config)==null?void 0:s.layers)||[]).find(g=>g.id===o.enabledLayerIds[0]);return(i==null?void 0:i.title)||(i==null?void 0:i.name)||(i==null?void 0:i.label)||o.enabledLayerIds[0]}return""}),h=async({url:s})=>{var p,m;const d=(p=o.config)==null?void 0:p.conditions;if(!d){const _=(m=o.config)==null?void 0:m.layer_id;if(!_)return;const L=o.map.getSource(_);if(L){const k=L.tiles[0].split("?filter=")[0],x=s?`${k}?filter=${s}`:k;L.setTiles([x])}return}const i=(d==null?void 0:d.layers)||[],g=o.enabledLayerIds.filter(_=>i.includes(_));g.length&&g.forEach(_=>{const L=o.map.getSource(_);if(L){const k=L.tiles[0].split("?filter=")[0],x=s?`${k}?filter=${s}`:k;L.setTiles([x])}})};return e.watch(()=>o.enabledLayerIds,s=>{(!s||!s.length)&&l.value&&(l.value.activeFilters={},n.value=0)}),e.watch(()=>{var s;return(s=l.value)==null?void 0:s.activeFilters},s=>{n.value=Object.keys(s||{}).length},{deep:!0}),(s,d)=>{const i=e.resolveComponent("VsPopover"),g=e.resolveComponent("VsFilterList");return c.value&&a.value.length?(e.openBlock(),e.createBlock(g,{key:0,ref_key:"filter",ref:l,isDialog:t.config.dialog??!0,scheme:a.value,urlSeparator:"true",view:"plain",name:"filter",onFilterChange:h},{button:e.withCtx(({visible:p})=>[e.createVNode(i,{teleport:"body",trigger:"hover",placement:"bottom"},{reference:e.withCtx(()=>[e.createElementVNode("button",zn,[e.createElementVNode("div",An,[d[0]||(d[0]=e.createElementVNode("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M12 20L9 21V12.5L4.52 7.572C4.18545 7.20393 4.00005 6.7244 4 6.227V4H20V6.172C19.9999 6.70239 19.7891 7.21101 19.414 7.586L15 12",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M21.121 20.1209C21.5406 19.7014 21.8265 19.1668 21.9423 18.5849C22.0581 18.0029 21.9988 17.3997 21.7717 16.8514C21.5447 16.3032 21.1602 15.8346 20.6668 15.5049C20.1734 15.1752 19.5934 14.9993 19 14.9993C18.4066 14.9993 17.8266 15.1752 17.3332 15.5049C16.8398 15.8346 16.4553 16.3032 16.2283 16.8514C16.0012 17.3997 15.9419 18.0029 16.0577 18.5849C16.1735 19.1668 16.4594 19.7014 16.879 20.1209C17.297 20.5399 18.004 21.1659 19 21.9999C20.051 21.1099 20.759 20.4839 21.121 20.1209Z",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M19 18V18.01",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),e.createElementVNode("span",On,e.toDisplayString(u.value),1),n.value?(e.openBlock(),e.createElementBlock("span",Un,e.toDisplayString(n.value),1)):e.createCommentVNode("",!0)])])]),default:e.withCtx(()=>[d[1]||(d[1]=e.createTextVNode(" Відкрити бокову панель ",-1))]),_:1})]),_:1},8,["isDialog","scheme"])):e.createCommentVNode("",!0)}}},Hn={name:"VsListWidget",props:{config:{type:Object,required:!0}},data(){return{items:[],total:0,currentPage:1,limit:16,rootEl:null,resizeObserver:null}},methods:{async fetchData(){const t={page:this.currentPage,limit:this.limit};try{const o=await fetch(this.config.api+"?"+new URLSearchParams(t)).then(n=>n.json());this.items=o.rows,this.total=o.total,this.$emit("content-resize")}catch(o){console.error("Error fetching data:",o)}},handlePageChange(t){this.currentPage=t,this.fetchData()},changeLimit(t){this.limit=t,this.currentPage=1,this.fetchData()}},mounted(){this.fetchData(),this.resizeObserver=new ResizeObserver(()=>{this.$emit("content-resize")}),this.$nextTick(()=>{this.$refs.rootEl&&this.resizeObserver.observe(this.$refs.rootEl)})},beforeUnmount(){this.resizeObserver&&this.$refs.rootEl&&(this.resizeObserver.unobserve(this.$refs.rootEl),this.resizeObserver.disconnect())}},Wn={class:"bg-white p-4 rounded-lg h-full flex flex-col overflow-hidden",ref:"rootEl"},Zn={key:0,class:"flex flex-col flex-1 overflow-hidden"},qn={class:"space-y-0 overflow-y-auto flex-1 [&::-webkit-scrollbar]:h-1.5 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-gray-300 [&::-webkit-scrollbar-track]:bg-transparent"},Gn=["onClick"],Jn={class:"text-base font-medium"},Qn={class:"mt-2 flex flex-wrap gap-2"},Yn={key:1,class:"px-2 py-1 text-sm bg-gray-100 rounded-full"},Kn={key:0,class:"my-5 pr-2"},Xn={class:"paginationWrapper relative flex justify-center"},er={key:1,class:"text-center text-slate-400"};function tr(t,o,n,l,r,a){var u;const c=e.resolveComponent("VsPagination");return e.openBlock(),e.createElementBlock("div",Wn,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-xl font-semibold mb-4"},"Список",-1)),((u=r.items)==null?void 0:u.length)>0?(e.openBlock(),e.createElementBlock("div",Zn,[e.createElementVNode("div",qn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:"py-4 border-b last:border-b-0 hover:bg-gray-50",onClick:s=>t.$emit("cardValuesId",h.id)},[e.createElementVNode("h3",Jn,e.toDisplayString(h.name),1),e.createElementVNode("div",Qn,[h.status_data?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["px-2 py-1 text-sm rounded-full",{"bg-green-100 text-green-800":h.status_data.color==="green","bg-red-100 text-red-800":h.status_data.color==="red"}])},e.toDisplayString(h.status_data.text),3)):e.createCommentVNode("",!0),h.class_mbd_id_data?(e.openBlock(),e.createElementBlock("span",Yn,e.toDisplayString(h.class_mbd_id_data.text),1)):e.createCommentVNode("",!0)])],8,Gn))),128))]),r.total>r.limit?(e.openBlock(),e.createElementBlock("div",Kn,[e.createElementVNode("div",Xn,[e.createVNode(c,{total:r.total,maxPages:4,defaultPage:r.currentPage,pageSize:r.limit,goTo:!1,size:"medium",onPageChange:a.handlePageChange,backgroundColor:"#e5e7eb",borderedCellSelected:!0,pageSizes:[16,32,48,64],onPageSizeChange:a.changeLimit},null,8,["total","defaultPage","pageSize","onPageChange","onPageSizeChange"])])])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",er,"Немає даних"))],512)}const or=D(Hn,[["render",tr]]),nr={class:"map-skeleton-loader"},rr=D({__name:"vs-skeleton-loader",setup(t){return(o,n)=>(e.openBlock(),e.createElementBlock("div",nr,[...n[0]||(n[0]=[e.createElementVNode("div",{class:"dot-pulse"},null,-1)])]))}},[["__scopeId","data-v-954c1e03"]]),lr={},ar={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function ir(t,o){return e.openBlock(),e.createElementBlock("svg",ar,[...o[0]||(o[0]=[e.createElementVNode("title",null,"Globe Icon",-1),e.createElementVNode("desc",null," A circular representation of a globe with horizontal and vertical lines ",-1),e.createElementVNode("path",{d:"M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z",stroke:"#1E40AF","stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M2 12H22",stroke:"#1E40AF","stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M12 2C14.5013 4.73835 15.9228 8.29203 16 12C15.9228 15.708 14.5013 19.2616 12 22C9.49872 19.2616 8.07725 15.708 8 12C8.07725 8.29203 9.49872 4.73835 12 2Z",stroke:"#1E40AF","stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const sr={components:{homeIcon:D(lr,[["render",ir]])},name:"vs-homezoom",props:{map:{type:Object},initialView:{type:Object,default:()=>({})}},methods:{homeZoom(){!this.map||!this.initialView||(this.initialView.bbox?this.map.fitBounds(this.initialView.bbox,{duration:0,padding:10}):this.initialView.center&&this.initialView.zoom!==void 0&&(this.map.setCenter(this.initialView.center),this.map.setZoom(this.initialView.zoom)),this.initialView.pitch!==void 0&&this.map.setPitch(this.initialView.pitch),this.initialView.bearing!==void 0&&this.map.setBearing(this.initialView.bearing))}},computed:{}};function cr(t,o,n,l,r,a){const c=e.resolveComponent("homeIcon"),u=e.resolveComponent("VsPopover");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(u,{trigger:"hover",placement:"left",teleport:"body",class:"flex"},{reference:e.withCtx(()=>[e.createVNode(c,{onClick:a.homeZoom,class:"w-full h-auto p-[9px] [transition:.3s] hover:[transition:.3s] text-[24px] hover:bg-[#DBEAFE] flex font-normal cursor-pointer text-[#1E40AF] bg-[#fff] rounded-[4px] border-[1px] border-solid border-[#E5E7EB]"},null,8,["onClick"])]),default:e.withCtx(()=>[o[0]||(o[0]=e.createElementVNode("div",null,"Повернутися до початкових налаштувань",-1))]),_:1})])}const dr=D(sr,[["render",cr]]),pr={},mr={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function hr(t,o){return e.openBlock(),e.createElementBlock("svg",mr,[...o[0]||(o[0]=[e.createElementVNode("title",null,"Document with Two Sections Icon",-1),e.createElementVNode("desc",null,"A document icon with a split design indicating two sections",-1),e.createElementVNode("path",{d:"M6 9V2H18V9",stroke:"#1E40AF","stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M6 18H4C3.46957 18 2.96086 17.7893 2.58579 17.4142C2.21071 17.0391 2 16.5304 2 16V11C2 10.4696 2.21071 9.96086 2.58579 9.58579C2.96086 9.21071 3.46957 9 4 9H20C20.5304 9 21.0391 9.21071 21.4142 9.58579C21.7893 9.96086 22 10.4696 22 11V16C22 16.5304 21.7893 17.0391 21.4142 17.4142C21.0391 17.7893 20.5304 18 20 18H18",stroke:"#1E40AF","stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M18 14H6V22H18V14Z",stroke:"#1E40AF","stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const ur={components:{printIcon:D(pr,[["render",hr]]),VsPopover:ie},props:{map:{type:Object},activeTool:String,setActiveTool:Function},data(){return{printVisible:!1,scriptElements:[],styleElements:[],resourcesLoaded:!1}},watch:{activeTool(t){t!=="print"?this.printVisible=!1:this.init()},async printVisible(t){!this.resourcesLoaded&&t?(await this.loadResources(),this.init(),this.simulateClick()):this.removeResources()},activeTool(t,o){t!=="print"&&o==="print"&&(this.closePrint&&this.closePrint(),this.printVisible=!1),t==="print"&&!this.printVisible&&(this.printVisible=!0,this.init())}},computed:{modalButtonClasses(){return{"!bg-[#DBEAFE]":this.printVisible,"bg-white":!this.printVisible}}},mounted(){document.addEventListener("click",t=>{const o=document.querySelector(".mapboxgl-export-list");if(o&&o.contains(t.target)){t.stopPropagation();return}!t.target.classList.contains("mapboxgl-export-list")&&!t.target.classList.contains("print-button")&&!t.target.classList.contains("mapboxgl-export-control")&&!t.target.id.includes("mapbox-gl-export")&&(this.printVisible=!1)})},methods:{addScript(t){return new Promise((o,n)=>{const l=document.createElement("script");l.src=t,l.async=!0,l.onload=o,l.onerror=n,document.head.appendChild(l),this.scriptElements.push(l)})},addStyle(t){return new Promise((o,n)=>{const l=document.createElement("link");l.href=t,l.rel="stylesheet",l.type="text/css",l.onload=o,l.onerror=n,document.head.appendChild(l),this.styleElements.push(l)})},async loadResources(){try{await this.addStyle("https://cdn.jsdelivr.net/npm/@watergis/mapbox-gl-export@3.5.4/dist/mapbox-gl-export.min.css"),await this.addScript("https://cdn.jsdelivr.net/npm/@watergis/mapbox-gl-export@3.5.4/dist/mapbox-gl-export.umd.min.js"),this.resourcesLoaded=!0}catch(t){console.error("Failed to load resources:",t)}},removeResources(){this.scriptElements.forEach(t=>{t.parentNode&&t.parentNode.removeChild(t)}),this.scriptElements=[],this.styleElements.forEach(t=>{t.parentNode&&t.parentNode.removeChild(t)}),this.styleElements=[],this.resourcesLoaded=!1},async toggleResources(){this.printVisible=!this.printVisible},init(){if(!window.MapboxExportControl){console.error("MapboxExportControl is not loaded.");return}window.mapboxgl.accessToken="pk.eyJ1Ijoia3Jpemhhbm92c2t5IiwiYSI6ImNsemkxNWtkODA5dDcycnNhMWZzYWM0MTAifQ.6fEpgfd_2mA4UYuflDewpQ";const{MapboxExportControl:t,Size:o,PageOrientation:n,Format:l,DPI:r}=window.MapboxExportControl;this.map.addControl(new t({PageSize:o.A3,PageOrientation:n.Portrait,Format:l.PNG,DPI:r[96],Crosshair:!0,PrintableArea:!0,Local:"uk"}))},simulateClick(){new Promise(o=>{const n=setTimeout(()=>{const l=document.querySelector(".mapboxgl-export-control");l&&(clearInterval(n),o(l))},100)}).then(o=>{o.click()}).catch(()=>{console.error("Print button not found.")})},togglePrint(){!this.activeTool||this.activeTool!=="print"?this.setActiveTool&&this.setActiveTool("print"):this.setActiveTool&&this.setActiveTool(null),this.printVisible=!this.printVisible,this.printVisible?this.init():this.removeResources()}}};function gr(t,o,n,l,r,a){const c=e.resolveComponent("printIcon"),u=e.resolveComponent("VsPopover");return e.openBlock(),e.createBlock(u,{trigger:"hover",placement:"left",teleport:"body"},{reference:e.withCtx(()=>[e.createVNode(c,{onClick:a.togglePrint,class:e.normalizeClass([a.modalButtonClasses,"print-button w-full h-auto p-[9px] [transition:.3s] hover:[transition:.3s] text-[24px] hover:bg-[#DBEAFE] flex font-normal cursor-pointer text-[#1E40AF] bg-[#fff] rounded-[4px] border-[1px] border-solid border-[#E5E7EB]"])},null,8,["onClick","class"])]),default:e.withCtx(()=>[o[0]||(o[0]=e.createElementVNode("div",null,"Надрукувати",-1))]),_:1})}const fr=D(ur,[["render",gr]]),yr={props:{map:{type:Object,required:!0}},data(){return{is3D:!1}},components:{VsPopover:ie},mounted(){this.map.on("move",this.updateViewStatus),this.updateViewStatus()},beforeUnmount(){this.map.off("move",this.updateViewStatus)},methods:{toggleView(){this.is3D?this.map.easeTo({pitch:0,bearing:0,duration:1e3}):this.map.easeTo({pitch:60,bearing:-29.6,duration:1e3})},updateViewStatus(){this.is3D=this.map.getPitch()!==0}}};function br(t,o,n,l,r,a){const c=e.resolveComponent("VsPopover");return e.openBlock(),e.createBlock(c,{trigger:"hover",placement:"left",teleport:"body",class:"flex"},{reference:e.withCtx(()=>[e.createElementVNode("div",{class:"font-light w-full h-[44px] p-[9px] [transition:.3s] hover:[transition:.3s] text-[19px] hover:bg-[#DBEAFE] flex cursor-pointer text-[#1E40AF] bg-[#fff] rounded-[4px] border-[1px] border-solid border-[#E5E7EB]",onClick:o[0]||(o[0]=(...u)=>a.toggleView&&a.toggleView(...u))},e.toDisplayString(r.is3D?"2D":"3D"),1)]),default:e.withCtx(()=>[o[1]||(o[1]=e.createElementVNode("div",null,"Перемикач виду",-1))]),_:1})}const wr=D(yr,[["render",br]]),xr={},kr={class:"shrink-0 size-4",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 _r(t,o){return e.openBlock(),e.createElementBlock("svg",kr,[...o[0]||(o[0]=[e.createElementVNode("path",{d:"M18 6 6 18"},null,-1),e.createElementVNode("path",{d:"m6 6 12 12"},null,-1)])])}const Er=D(xr,[["render",_r]]),Vr={props:{bgColor:{type:String,default:"#1E40AF"}}},Cr={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Br=["stroke"],Lr=["stroke"],Nr=["stroke"],vr=["stroke"],Sr=["stroke"],$r=["stroke"];function Ir(t,o,n,l,r,a){return e.openBlock(),e.createElementBlock("svg",Cr,[o[0]||(o[0]=e.createElementVNode("title",null,"Target Icon",-1)),o[1]||(o[1]=e.createElementVNode("desc",null,"A target icon with a circular pattern inside a rounded square",-1)),e.createElementVNode("path",{d:"M2 12H5",stroke:n.bgColor,"stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,8,Br),e.createElementVNode("path",{d:"M19 12H22",stroke:n.bgColor,"stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,8,Lr),e.createElementVNode("path",{d:"M12 2V5",stroke:n.bgColor,"stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,8,Nr),e.createElementVNode("path",{d:"M12 19V22",stroke:n.bgColor,"stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,8,vr),e.createElementVNode("path",{d:"M12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19Z",stroke:n.bgColor,"stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,8,Sr),e.createElementVNode("path",{d:"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z",stroke:n.bgColor,"stroke-width":"1","stroke-linecap":"round","stroke-linejoin":"round"},null,8,$r)])}const Fr={components:{geoIcon:D(Vr,[["render",Ir]]),VsPopover:ie,closeIcon:Er},data(){return{location:null,data:null,marker:null,showLocation:!1}},computed:{modalButtonClasses(){return{"!bg-[#DBEAFE]":this.showLocation,"bg-white":!this.showLocation}}},props:{map:{type:Object}},beforeUnmount(){var t;(t=this.marker)==null||t.remove()},watch:{activeControl(t,o){t!=="geolocation"&&o==="geolocation"&&(this.showLocation=!1,this.closeGeolocation())}},methods:{togleGeolocation(){this.showLocation=!this.showLocation,this.showLocation?this.getUserLocation():(this.closeGeolocation(),this.activeControl="no")},getUserLocation(){navigator.geolocation?navigator.geolocation.getCurrentPosition(this.onGeolocationSuccess,this.onGeolocationError):(this.showLocation=!1,this.activeControl="no",this.$notify({type:"error",title:"Помилка",message:"Цей браузер не підтримує геолокацію"}),this.$emit("close"))},async onGeolocationSuccess(t){this.location={latitude:t.coords.latitude,longitude:t.coords.longitude};const n=await(await fetch(`https://nominatim.openstreetmap.org/reverse?format=json&lat=${this.location.latitude}&lon=${this.location.longitude}`)).json();this.data=n.address;const l=[this.location.longitude,this.location.latitude],r=[[parseFloat(n.boundingbox[2]),parseFloat(n.boundingbox[0])],[parseFloat(n.boundingbox[3]),parseFloat(n.boundingbox[1])]];this.map.fitBounds(r,{padding:200,maxZoom:16}),this.marker||(this.marker=new Marker({color:"var(--primary)"})),this.marker.setLngLat(l).addTo(this.map),this.activeControl="geolocation"},closeGeolocation(){this.showLocation=!1,this.marker&&(this.marker.remove(),this.marker=null),this.location=null,this.data=null},onGeolocationError(){this.showLocation=!1,this.activeControl="no",this.$notify({type:"error",title:"Помилка",message:"Для визначення геолокації потрібен HTTPS протокол"}),this.$emit("close")}}},jr={key:0,class:"max-w-[412px] absolute w-full top-[20px] right-[70px] bg-white border rounded-[15px] p-4 z-10"},Pr={class:"flex justify-between items-center border-b pb-[16px]"},Dr={class:"d-flex"},Mr={class:"pt-[16px]"};function Tr(t,o,n,l,r,a){var s,d,i,g,p,m;const c=e.resolveComponent("closeIcon"),u=e.resolveComponent("geoIcon"),h=e.resolveComponent("VsPopover");return e.openBlock(),e.createElementBlock("div",null,[(e.openBlock(),e.createBlock(e.Teleport,{to:"#maplibre-demo-map"},[r.location?(e.openBlock(),e.createElementBlock("div",jr,[e.createElementVNode("div",Pr,[o[0]||(o[0]=e.createElementVNode("div",{class:"text-lg font-semibold"},"Ваша геолокація",-1)),e.createElementVNode("div",Dr,[e.createVNode(c,{onClick:a.closeGeolocation},null,8,["onClick"])])]),e.createElementVNode("div",Mr,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("strong",null,"Широта:",-1)),e.createTextVNode(" "+e.toDisplayString((s=r.location)==null?void 0:s.latitude),1)]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("strong",null,"Довгота:",-1)),e.createTextVNode(" "+e.toDisplayString((d=r.location)==null?void 0:d.longitude),1)]),e.createElementVNode("div",null,[o[3]||(o[3]=e.createElementVNode("strong",null,"КраЇна:",-1)),e.createTextVNode(" "+e.toDisplayString((i=r.data)==null?void 0:i.country),1)]),e.createElementVNode("div",null,[o[4]||(o[4]=e.createElementVNode("strong",null,"Код країни:",-1)),e.createTextVNode(" "+e.toDisplayString((g=r.data)==null?void 0:g.country_code),1)]),e.createElementVNode("div",null,[o[5]||(o[5]=e.createElementVNode("strong",null,"Місто:",-1)),e.createTextVNode(" "+e.toDisplayString((p=r.data)==null?void 0:p.city),1)]),e.createElementVNode("div",null,[o[6]||(o[6]=e.createElementVNode("strong",null,"Поштовий індекс:",-1)),e.createTextVNode(" "+e.toDisplayString((m=r.data)==null?void 0:m.postcode),1)])])])):e.createCommentVNode("",!0)])),e.createVNode(h,{trigger:"hover",placement:"left",teleport:"body",class:"flex"},{reference:e.withCtx(()=>[e.createVNode(u,{onClick:a.togleGeolocation,class:e.normalizeClass([a.modalButtonClasses,"w-full h-auto p-[9px] [transition:.3s] hover:[transition:.3s] text-[24px] hover:bg-[#DBEAFE] flex font-normal cursor-pointer text-[#1E40AF] bg-[#fff] rounded-[4px] border-[1px] border-solid border-[#E5E7EB]"])},null,8,["onClick","class"])]),default:e.withCtx(()=>[o[7]||(o[7]=e.createElementVNode("div",null,"Дізнатися геолокацію",-1))]),_:1})])}const zr=D(Fr,[["render",Tr]]),ge={__name:"vs-map-widget-column",props:{position:String,widgets:Array,map:Object,mapLoaded:Boolean,cardValues:Object,hasFilters:Boolean,currentFilterLayer:Object,enabledLayerIds:Array,getWidgetComponent:Function,getColumnWidth:Function,rightColumnOffset:[String,Number],maxHeight:Number,history:Boolean},emits:["set-filter-layer","update:enabledLayerIds","cardValuesId","closeCard","content-resize"],setup(t,{expose:o,emit:n}){const l=n,r=t,a=e.ref(r.widgets.map(s=>{var d;return{...s,config:{...s.config,visible:((d=s.config)==null?void 0:d.visible)!==!1}}}));e.watch(()=>r.widgets.map(s=>s.id||s.type).join(","),()=>{a.value=r.widgets.map(s=>{var d;return{...s,config:{...s.config,visible:((d=s.config)==null?void 0:d.visible)!==!1}}})});function c(s){const d=a.value.find(i=>i.id===s);d&&d.config&&(d.config.visible=!d.config.visible,setTimeout(()=>{l("content-resize")},30))}const u=e.ref(null);o({columnRef:u});let h=null;return e.onMounted(()=>{h=new MutationObserver(()=>{var s;clearTimeout((s=u.value)==null?void 0:s._resizeTimeout),u.value._resizeTimeout=setTimeout(()=>{l("content-resize")},30)}),u.value&&h.observe(u.value,{childList:!0,subtree:!0,characterData:!0})}),e.onUnmounted(()=>{h&&h.disconnect()}),(s,d)=>t.mapLoaded?(e.openBlock(),e.createElementBlock("div",{key:0,class:"widget-column",ref_key:"columnRef",ref:u,style:e.normalizeStyle({width:t.getColumnWidth(t.position),paddingRight:t.rightColumnOffset})},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,i=>{var g;return e.openBlock(),e.createElementBlock(e.Fragment,{key:i.id||i.type},[i.type!=="card"?e.withDirectives((e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.getWidgetComponent(i.type)),{key:0,map:t.map,config:i.config,hasFilters:t.hasFilters,currentLayer:t.currentFilterLayer,enabledLayerIds:t.enabledLayerIds,history:t.history,onSetFilterLayer:d[0]||(d[0]=p=>s.$emit("set-filter-layer",p)),"onUpdate:enabledLayerIds":d[1]||(d[1]=p=>s.$emit("update:enabledLayerIds",p)),onCardValuesId:d[2]||(d[2]=p=>s.$emit("cardValuesId",p)),onShowWidget:c,onCatalogLayers:d[3]||(d[3]=p=>s.$emit("catalog-layers",p)),class:"widget"},null,40,["map","config","hasFilters","currentLayer","enabledLayerIds","history"])),[[e.vShow,((g=i.config)==null?void 0:g.visible)!==!1]]):e.createCommentVNode("",!0),t.cardValues&&i.type==="card"?(e.openBlock(),e.createBlock(Le,{key:1,config:i.config,cardValues:t.cardValues,class:"widget",onClose:d[4]||(d[4]=p=>s.$emit("closeCard"))},null,8,["config","cardValues"])):e.createCommentVNode("",!0)],64)}),128))],4)):e.createCommentVNode("",!0)}},Ar={class:"map-widgets-flex"},Or={class:"widgets-left"},Ur={class:"widgets-top"},Rr={class:"widgets-bottom"},Hr={class:"widgets-right"},Wr={class:"widgets-top"},Zr={class:"widgets-bottom"},qr={class:"absolute top-[180px] right-2 z-10 flex flex-col gap-[5px]"},xe=D({__name:"vs-map",props:{table:{type:String,required:!0},height:{type:String,required:!0}},setup(t){const o=t,n=e.ref(null),l=e.ref(!1);let r=null;const a=e.ref(null),c=e.ref(null),u=e.ref([]),h=e.ref([]),s=e.ref(null),d=e.ref(null),i=e.ref(null),g=e.ref([]);let p=null;function m(y){return!i.value||!i.value.widgets?[]:y==="center"?[...i.value.widgets.filter(w=>(w.position||{})==="center")||[],...h.value.filter(w=>w.position==="center")]:i.value.widgets.filter(f=>(f.position||{})===y)||[]}const _=(y,f,w)=>{try{if(y)if(w==="markdown"){const V=y.replace(/\{\{([^}]+)\}\}/g,(b,E)=>{try{return new Function("data",`with(data) { return ${E} }`)(f)}catch{return""}});return marked(V)}else return f[y]||y}catch(V){return console.error("Error processing template:",V),y}},L=(y,f,w,V,b)=>{const E=_(y,V,b),N=f?_(f,V,b):"";let B="";return w!=null&&w.length&&(B=w.map(v=>{const T=_(v.value,V,b);return`
|
|
2
|
+
<tr class="flex justify-between items-center">
|
|
3
|
+
<td class="font-medium mr-1.5 flex items-center">${v.label}</td>
|
|
4
|
+
<td class="text-right">${T}</td>
|
|
5
|
+
</tr>
|
|
6
|
+
`}).join("")),`
|
|
7
|
+
<div class="absolute min-w-[250px] max-w-[350px] bg-white/90 border border-gray-200 rounded-lg shadow-md text-gray-800 pointer-events-none">
|
|
8
|
+
${E?`
|
|
9
|
+
<div class="font-semibold text-sm border-b border-solid border-gray-200 text-gray-800 rounded-t-lg px-2 py-1">
|
|
10
|
+
<h3>${E}</h3>
|
|
11
|
+
</div>
|
|
12
|
+
`:""}
|
|
13
|
+
${f?`<div class="text-sm px-2 py-1 break-words">${N}</div>`:""}
|
|
14
|
+
${w!=null&&w.length&&!f?`
|
|
15
|
+
<div class="text-xs px-2 py-0.5 text-gray-500">
|
|
16
|
+
<table class="w-full">
|
|
17
|
+
<tbody>${B}</tbody>
|
|
18
|
+
</table>
|
|
19
|
+
</div>
|
|
20
|
+
`:""}
|
|
21
|
+
</div>
|
|
22
|
+
`},S=y=>({legend:Me,basemaps:Oe,layers:ft,info:Ct,attribute:lo,catalog:Fn,filters:Tn,"inline-filters":Rn,list:or,card:Le})[y],k=e.computed(()=>!!i.value&&Array.isArray(i.value.widgets)&&i.value.widgets.some(y=>y.type==="filters")),x=y=>{a.value=y};function F(){const y=new URLSearchParams(window.location.search),f=parseFloat(y.get("x")),w=parseFloat(y.get("y")),V=parseFloat(y.get("z")),b=parseFloat(y.get("bearing")),E=parseFloat(y.get("pitch"));return{center:isFinite(f)&&isFinite(w)?[f,w]:null,zoom:isFinite(V)?V:null,bearing:isFinite(b)?b:null,pitch:isFinite(E)?E:null}}function G({center:y,zoom:f,bearing:w,pitch:V}){const b=new URLSearchParams(window.location.search);b.set("x",y[0].toFixed(5)),b.set("y",y[1].toFixed(5)),b.set("z",f.toFixed(2)),b.set("bearing",w.toFixed(2)),b.set("pitch",V.toFixed(2));const E=`${window.location.pathname}?${b.toString()}`;window.history.replaceState({},"",E)}const Q=()=>{var E,N,B;if(!i.value||!i.value.map)return;const y={version:8,glyphs:"https://cdn.softpro.ua/data/fonts/{fontstack}/{range}.pbf",sources:{},layers:[]};let f=i.value.map.center,w=i.value.map.zoom,V=i.value.map.bearing||0,b=i.value.map.pitch||0;if(i.value.history){const v=F();v.center&&(f=v.center),v.zoom!==null&&(w=v.zoom),v.bearing!==null&&(V=v.bearing),v.pitch!==null&&(b=v.pitch)}n.value=new maplibregl.Map({container:"maplibre-demo-map",style:y,center:f,zoom:w,bearing:V,pitch:b,maxBounds:[18.0856083513,40.3614785833,58.0807890155,56.3350745713]}),(B=(N=(E=i==null?void 0:i.value)==null?void 0:E.interactions)==null?void 0:N.navigation)!=null&&B.enabled&&!p&&(p=new maplibregl.NavigationControl({showCompass:!0,showZoom:!0,visualizePitch:!0}),n.value.addControl(p,"top-right")),n.value.on("load",async()=>{var A,ce,j,de,he;l.value=!0;const v=F(),T=v.center&&v.zoom!==null;if((A=i.value.map)!=null&&A.bbox&&!T){const[M,P,C,R]=i.value.map.bbox;n.value.fitBounds([[M,P],[C,R]],{padding:50,duration:0})}if(await(async()=>{var P,C,R,H,O;const M=((O=(H=(R=(C=(P=i.value)==null?void 0:P.widgets)==null?void 0:C.find($=>$.type==="layers"))==null?void 0:R.config)==null?void 0:H.layers)==null?void 0:O.filter($=>{var Y;return((Y=$.style)==null?void 0:Y.attrType)==="icon-by-attribute"}))||[];for(const $ of M){const{rules:Y,default_icon:te,icon_base_url:oe}=$.style,ne=[...Y.map(W=>W.icon),te].filter(Boolean);for(const W of ne)try{const K=`${oe}${W}`,re=await n.value.loadImage(K);n.value.hasImage(W)||n.value.addImage(W,re.data)}catch(K){console.error(`Failed to load icon: ${W}`,K)}}})(),(de=(j=(ce=i.value)==null?void 0:ce.interactions)==null?void 0:j.hover)!=null&&de.enabled&&(n.value.on("mousemove",M=>{var Y,te,oe,ne,W,K,re,ue,z,we;const P=n.value.queryRenderedFeatures(M.point);if(n.value&&n.value.getCanvas&&(n.value.getCanvas().style.cursor=P.length?"pointer":""),!P.length){if(c.value){const I=(Y=n.value.getSource(c.value.source))==null?void 0:Y.type;c.value.source,c.value.id,I==="vector"&&c.value.source,ee(n.value,c.value.source,c.value.id,{hovered:!1}),c.value=null}r&&(r.remove(),r=null);return}const C=P[0];if(!c.value||c.value.id!==C.id||c.value.source!==C.layer.source){if(c.value){const _e=(te=n.value.getSource(c.value.source))==null?void 0:te.type;c.value.source,c.value.id,_e==="vector"&&c.value.source,ee(n.value,c.value.source,c.value.id,{hovered:!1})}const I=(oe=n.value.getSource(C.layer.source))==null?void 0:oe.type;C.layer.source,C.id,I==="vector"&&C.layer.source,ee(n.value,C.layer.source,C.id,{hovered:!0}),c.value={source:C.layer.source,id:C.id}}const R=(W=(ne=i.value)==null?void 0:ne.widgets)==null?void 0:W.find(I=>I.type==="layers"),H=(re=(K=i.value)==null?void 0:K.widgets)==null?void 0:re.find(I=>I.type==="attribute");let O=null;if(R&&(O=R.config.layers.find(I=>I.id===C.layer.source)),(z=(ue=i.value)==null?void 0:ue.widgets)==null?void 0:z.find(I=>I.type==="catalog")){if(!P.length){r&&(r.style.display="none");return}const I=P[0];r=ol(I,M,r);return}if(!O&&H&&H.config.layer.id===C.layer.source&&(O=H.config.layer),(we=O==null?void 0:O.style)!=null&&we.popup){const I=O.style.popup;let _e=I.title,Ee="";I.mode==="markdown"?Ee=Array.isArray(I.content)?I.content.join(`
|
|
23
|
+
|
|
24
|
+
`):"":Ee=Array.isArray(I.content)?I.content.join(""):"",r||(r=document.createElement("div"),n.value.getContainer().appendChild(r)),r.innerHTML=L(_e,Ee,I.fields,C.properties,I.mode),Se(r,M)}}),n.value.on("mouseleave",()=>{var M;if(r&&(r.remove(),r=null),c.value){const P=(M=n.value.getSource(c.value.source))==null?void 0:M.type;c.value.source,c.value.id,P==="vector"&&c.value.source,ee(n.value,c.value.source,c.value.id,{hovered:!1}),c.value=null}n.value&&n.value.getCanvas&&(n.value.getCanvas().style.cursor="")})),n.value.on("click",async M=>{var te,oe,ne,W,K,re,ue;if(U(),["length","area","print"].includes(d.value))return;const P=n.value.queryRenderedFeatures(M.point);if(!P.length)return;const C=P[0],R=(oe=(te=i.value)==null?void 0:te.widgets)==null?void 0:oe.find(z=>z.type==="layers"),H=(W=(ne=i.value)==null?void 0:ne.widgets)==null?void 0:W.find(z=>z.type==="attribute"),O=(re=(K=i.value)==null?void 0:K.widgets)==null?void 0:re.find(z=>z.type==="catalog");let $;if(O?$=C.layer.source:$=(H==null?void 0:H.config.layer)||(R==null?void 0:R.config.layers.find(z=>z.id===C.layer.source)),$!=null&&$.noCard)return;u.value.forEach(z=>{var I;const we=(I=n.value.getSource(z.source))==null?void 0:I.type;z.source,z.id,we==="vector"&&z.source,ee(n.value,z.source,z.id,{selected:!1})}),u.value=[];const Y=(ue=n.value.getSource(C.layer.source))==null?void 0:ue.type;C.layer.source,C.id,Y==="vector"&&C.layer.source,ee(n.value,C.layer.source,C.id,{selected:!0}),u.value.push({source:C.layer.source,id:C.id}),s.value={layer:($==null?void 0:$.service_key)||$||"",map:($==null?void 0:$.map_key)||"",id:C.properties.id,title:($==null?void 0:$.title)||""}}),n.value.on("dblclick",M=>{var R,H,O;if(U(),["length","area","print"].includes(d.value))return;Kr([M.lngLat.lng,M.lngLat.lat]);const P=(H=(R=i.value)==null?void 0:R.widgets)==null?void 0:H.find($=>$.type==="layers");let C=null;(O=P==null?void 0:P.config)!=null&&O.layers&&(C=P.config.layers.find($=>$.visible!==!1&&["tms","wms","raster"].includes(($.service_type||$.service||"").toLowerCase()))),!(C!=null&&C.noCard)&&(s.value={layer:(C==null?void 0:C.map_key)||"",map:(C==null?void 0:C.service_key)||"",id:"",title:(C==null?void 0:C.title)||""})}),n.value.resize(),(he=i==null?void 0:i.value)!=null&&he.history){const M=()=>{const P=n.value.getCenter();G({center:[P.lng,P.lat],zoom:n.value.getZoom(),bearing:n.value.getBearing(),pitch:n.value.getPitch()})};n.value.on("moveend",M),n.value.on("rotate",M),n.value.on("pitch",M)}})},U=()=>{Ne(),u.value.forEach(y=>{n.value&&ee(n.value,y.source,y.id,{selected:!1})}),u.value=[],s.value=null};e.onMounted(async()=>{await fe(),await e.nextTick(),Q();const y=document.getElementById("maplibre-demo-map");y&&y.addEventListener("mouseleave",()=>{r&&(r.remove(),r=null)}),e.watch(()=>o.table,async f=>{if(f){if(U(),d.value=null,r&&(r.remove(),r=null),n.value){try{n.value.remove()}catch{}n.value=null,l.value=!1}await fe(),await e.nextTick(),Q()}})});const ke=e.computed(()=>({height:(o==null?void 0:o.height)||"100vh",width:"100%"})),fe=async()=>{const y=await fetch(`/api/map/${o.table}`).then(f=>f.json());i.value=y},ye=y=>{if(!i.value||!i.value.widgets)return"400px";const f=i.value.widgets.find(w=>w.position===y);return(f==null?void 0:f.width)||"400px"},Z=e.ref([]);e.watch(()=>i.value,y=>{y&&y.map&&(Z.value=Jr(),Q())});const Jr=()=>{var f;if(!i.value||!i.value.widgets)return[];const y=i.value.widgets.find(w=>w.type==="layers");return(f=y==null?void 0:y.config)!=null&&f.layers?y.config.layers.map(w=>({...w,visible:w.visible??!1})).filter(w=>w.visible).map(w=>w.id):[]};function ee(y,f,w,V){y.getStyle().layers.filter(E=>E.source===f).forEach(E=>{var B;const N={source:f,id:w};((B=y.getSource(f))==null?void 0:B.type)==="vector"&&E["source-layer"]&&(N.sourceLayer=E["source-layer"]),y.setFeatureState(N,V)})}const Qr=e.computed(()=>!!i.value&&!!i.value.interactions&&!!i.value.interactions.navigation&&i.value.interactions.navigation.enabled),Yr=e.computed(()=>!!i.value&&Array.isArray(i.value.tools)&&i.value.tools.length>0),be=e.computed(()=>Qr.value||Yr.value?"40px":"20px");function Ne(){n.value&&(n.value.getLayer("layer-with-pulsing-dot")&&n.value.removeLayer("layer-with-pulsing-dot"),n.value.getSource("dot-point")&&n.value.removeSource("dot-point"),n.value.hasImage&&n.value.hasImage("pulsing-dot")&&n.value.removeImage("pulsing-dot"))}function Kr(y){var V,b,E,N;Ne();const f=80,w={width:f,height:f,data:new Uint8Array(f*f*4),onAdd(){const B=document.createElement("canvas");B.width=this.width,B.height=this.height,this.context=B.getContext("2d",{willReadFrequently:!0})},render(){var j;const v=performance.now()%2e3/2e3,T=f/2*.3,me=f/2*.7*v+T,{context:A}=this;A.clearRect(0,0,this.width,this.height),A.beginPath(),A.arc(this.width/2,this.height/2,me,0,Math.PI*2),A.fillStyle=`rgba(255, 100, 100, ${1-v})`,A.fill();const ce=f/2*.7*(v-.5<0?v-.5+1:v-.5)+T;return A.beginPath(),A.arc(this.width/2,this.height/2,ce,0,Math.PI*2),A.fillStyle=`rgba(255, 100, 100, ${1-(v-.5<0?v-.5+1:v-.5)})`,A.fill(),this.data=A.getImageData(0,0,this.width,this.height).data,(j=n.value)==null||j.triggerRepaint(),!0}};(V=n.value)!=null&&V.hasImage("pulsing-dot")||(b=n.value)==null||b.addImage("pulsing-dot",w,{pixelRatio:2}),(E=n.value)==null||E.addSource("dot-point",{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:y}}}),(N=n.value)==null||N.addLayer({id:"layer-with-pulsing-dot",type:"symbol",source:"dot-point",layout:{"icon-image":"pulsing-dot"},paint:{"icon-opacity":.6}})}const Xr=e.computed(()=>{var y,f,w,V,b,E,N,B,v,T;return{center:(f=(y=i==null?void 0:i.value)==null?void 0:y.map)==null?void 0:f.center,zoom:(V=(w=i==null?void 0:i.value)==null?void 0:w.map)==null?void 0:V.zoom,pitch:((E=(b=i==null?void 0:i.value)==null?void 0:b.map)==null?void 0:E.pitch)||0,bearing:((B=(N=i==null?void 0:i.value)==null?void 0:N.map)==null?void 0:B.bearing)||0,bbox:((T=(v=i==null?void 0:i.value)==null?void 0:v.map)==null?void 0:T.bbox)||null}}),ve={home:dr,print:fr,geolocation:zr,pitch:wr},el=y=>{d.value=y};function se(y){if(!i.value||!i.value.widgets)return;const f=i.value.widgets.find(b=>b.type==="list");if(!f||!f.config)return;const{map_key:w,service_key:V}=f.config;w&&V&&(s.value={id:y,map:w,layer:V})}const tl=e.computed(()=>i.value&&i.value.widgets?i.value.widgets.filter(y=>y.position==="absolute"):[]);function ol(y,f,w){const V=y.properties,b=g.value.find(j=>String(j.id)===String(y.source)),E=Array.isArray(b==null?void 0:b.popup)?b.popup:[],B=E.filter(j=>j.meta==="image").map(j=>V==null?void 0:V[j.name]).filter(Boolean),v=B.length>0?`
|
|
25
|
+
<div class="popup-image-single overflow-hidden rounded-t-xl" style="width:260px;height:160px;margin:0 auto 0 auto;">
|
|
26
|
+
<img src="${B[0]}" style="width:100%;height:100%;object-fit:cover;border-radius:12px 12px 0 0;display:block;" />
|
|
27
|
+
</div>
|
|
28
|
+
`:"",T=E.find(j=>j.meta==="title"),me=T?V==null?void 0:V[T.name]:"";let A=E.filter(j=>j.meta!=="title"&&j.meta!=="image").map(j=>{const de=V==null?void 0:V[j.name];let he=de??"-";switch(j.meta){case"badge":he=de?`<span class="inline-block rounded px-2 py-0.5 text-xs bg-yellow-100 text-yellow-800 ">${de}</span>`:"-";break}return`
|
|
29
|
+
<tr style="display: table-row;">
|
|
30
|
+
<td style="display: table-cell; padding: 2px 8px 2px 0; vertical-align: middle; font-weight: 500; width: 50%; text-align: left;">${j.ua||j.name}</td>
|
|
31
|
+
<td style="display: table-cell; padding: 2px 0 2px 8px; vertical-align: middle; width: 50%; text-align: right;">${he}</td>
|
|
32
|
+
</tr>
|
|
33
|
+
`}).join("");E.length||(A=Object.keys(V).map(j=>`
|
|
34
|
+
<tr style="display: table-row;">
|
|
35
|
+
<td style="display: table-cell; padding: 2px 8px 2px 0; vertical-align: middle; font-weight: 500; width: 50%; text-align: left;">${j}</td>
|
|
36
|
+
<td style="display: table-cell; padding: 2px 0 2px 8px; vertical-align: middle; width: 50%; text-align: right;">${V[j]||"-"}</td>
|
|
37
|
+
</tr>
|
|
38
|
+
`).join(""));const ce=`
|
|
39
|
+
<div class="absolute min-w-[250px] max-w-[300px] bg-white/90 border border-gray-200 rounded-lg shadow-md text-gray-800 pointer-events-none" style="display: flex; flex-direction: column; justify-content: center;">
|
|
40
|
+
${v}
|
|
41
|
+
${me?`<div class="font-semibold text-sm border-b border-solid border-gray-200 text-gray-800 px-2 py-1">${me}</div>`:""}
|
|
42
|
+
<div class="text-xs px-2 py-0.5 text-gray-500" style="display: flex; justify-content: center; align-items: center; flex: 1;">
|
|
43
|
+
<table class="w-full" style="border-collapse: collapse; border: none; margin: 0 auto;">
|
|
44
|
+
<tbody>${A}</tbody>
|
|
45
|
+
</table>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
`;return w||(w=document.createElement("div"),w.className="custom-popup absolute z-50",document.body.appendChild(w)),w.innerHTML=ce,Se(w,f),w}function Se(y,f){const w=y.offsetWidth,V=y.offsetHeight,b=document.getElementById("maplibre-demo-map"),E=b.getBoundingClientRect(),N=f.originalEvent.clientX-E.left,B=f.originalEvent.clientY-E.top;let v=N-w/2;v=Math.max(10,Math.min(v,E.width-w-10));let T;B-V-10>0?T=B-V-5:B+V+10<E.height?T=B+10:T=Math.max(10,E.height-V-10),y.style.position="absolute",y.style.left=`${v+20}px`,y.style.top=`${T+10}px`,y.parentNode!==b&&b.appendChild(y)}return(y,f)=>{var w,V;return e.openBlock(),e.createElementBlock("div",{class:"maplibre-demo-map-container",style:e.normalizeStyle(ke.value)},[f[10]||(f[10]=e.createElementVNode("div",{id:"maplibre-demo-map"},null,-1)),l.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Ar,[e.createElementVNode("div",Or,[e.createElementVNode("div",Ur,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["top-left"],b=>{var E,N;return e.createVNode(ge,{key:b,position:b,widgets:m(b),map:n.value,mapLoaded:l.value,cardValues:s.value,hasFilters:k.value,history:(N=(E=i.value)==null?void 0:E.value)==null?void 0:N.history,currentFilterLayer:a.value,enabledLayerIds:Z.value,getWidgetComponent:S,getColumnWidth:ye,rightColumnOffset:b==="top-right"?be.value:void 0,onSetFilterLayer:x,"onUpdate:enabledLayerIds":f[0]||(f[0]=B=>Z.value=B),onCardValuesId:se,onCloseCard:U,onCatalogLayers:f[1]||(f[1]=B=>g.value=B)},null,8,["position","widgets","map","mapLoaded","cardValues","hasFilters","history","currentFilterLayer","enabledLayerIds","rightColumnOffset"])}),64))]),e.createElementVNode("div",Rr,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["bottom-left"],b=>{var E,N;return e.createVNode(ge,{key:b,position:b,widgets:m(b),map:n.value,mapLoaded:l.value,cardValues:s.value,hasFilters:k.value,history:(N=(E=i.value)==null?void 0:E.value)==null?void 0:N.history,currentFilterLayer:a.value,enabledLayerIds:Z.value,getWidgetComponent:S,getColumnWidth:ye,rightColumnOffset:b==="top-right"?be.value:void 0,onSetFilterLayer:x,"onUpdate:enabledLayerIds":f[2]||(f[2]=B=>Z.value=B),onCardValuesId:se,onCloseCard:U,onCatalogLayers:f[3]||(f[3]=B=>g.value=B)},null,8,["position","widgets","map","mapLoaded","cardValues","hasFilters","history","currentFilterLayer","enabledLayerIds","rightColumnOffset"])}),64))])]),e.createElementVNode("div",Hr,[e.createElementVNode("div",Wr,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["top-right"],b=>{var E,N;return e.createVNode(ge,{key:b,position:b,widgets:m(b),map:n.value,mapLoaded:l.value,cardValues:s.value,hasFilters:k.value,history:(N=(E=i.value)==null?void 0:E.value)==null?void 0:N.history,currentFilterLayer:a.value,enabledLayerIds:Z.value,getWidgetComponent:S,getColumnWidth:ye,rightColumnOffset:b==="top-right"?be.value:void 0,onSetFilterLayer:x,"onUpdate:enabledLayerIds":f[4]||(f[4]=B=>Z.value=B),onCardValuesId:se,onCloseCard:U,onCatalogLayers:f[5]||(f[5]=B=>g.value=B)},null,8,["position","widgets","map","mapLoaded","cardValues","hasFilters","history","currentFilterLayer","enabledLayerIds","rightColumnOffset"])}),64))]),e.createElementVNode("div",Zr,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(["bottom-right"],b=>{var E,N;return e.createVNode(ge,{key:b,position:b,widgets:m(b),map:n.value,mapLoaded:l.value,cardValues:s.value,hasFilters:k.value,history:(N=(E=i.value)==null?void 0:E.value)==null?void 0:N.history,currentFilterLayer:a.value,enabledLayerIds:Z.value,getWidgetComponent:S,getColumnWidth:ye,rightColumnOffset:b==="top-right"?be.value:void 0,onSetFilterLayer:x,"onUpdate:enabledLayerIds":f[6]||(f[6]=B=>Z.value=B),onCardValuesId:se,onCloseCard:U,onCatalogLayers:f[7]||(f[7]=B=>g.value=B)},null,8,["position","widgets","map","mapLoaded","cardValues","hasFilters","history","currentFilterLayer","enabledLayerIds","rightColumnOffset"])}),64))])])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(tl.value,(b,E)=>(e.openBlock(),e.createElementBlock("div",{key:"abs-"+(b.id||b.type||E),class:"absolute z-20",style:e.normalizeStyle(b.style)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(S(b.type)),{map:n.value,config:b.config,hasFilters:k.value,currentFilterLayer:a.value,enabledLayerIds:Z.value,cardValues:s.value,onSetFilterLayer:x,"onUpdate:enabledLayerIds":f[8]||(f[8]=N=>Z.value=N),onCardValuesId:se,onCloseCard:U,onCatalogLayers:f[9]||(f[9]=N=>g.value=N)},null,40,["map","config","hasFilters","currentFilterLayer","enabledLayerIds","cardValues"]))],4))),128)),e.createElementVNode("div",qr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList((V=(w=i.value)==null?void 0:w.value)==null?void 0:V.tools,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b},[l.value&&ve[b]?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ve[b]),e.mergeProps({key:0,map:n.value,activeTool:d.value,setActiveTool:el},{ref_for:!0},b==="home"?{initialView:Xr.value}:{},{onCardValuesId:se}),null,16,["map","activeTool"])):e.createCommentVNode("",!0)],64))),128))])],64)):(e.openBlock(),e.createBlock(rr,{key:0}))],4)}}},[["__scopeId","data-v-126309b6"]]);function Gr(t){t.component("MapCustom",xe)}q.MapCustom=xe,q.default=xe,q.install=Gr,Object.defineProperties(q,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
@@ -7,20 +7,6 @@
|
|
|
7
7
|
"title": "name",
|
|
8
8
|
"search": "name,description,source_path"
|
|
9
9
|
},
|
|
10
|
-
"sql": [
|
|
11
|
-
{
|
|
12
|
-
"sql": "select source, date_updated, size, region from gis.metadata where layer_id=t.service_id limit 1",
|
|
13
|
-
"name": "metadata_sql"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"sql": "select json_agg(q) as metadata_all from (select scale, katottg,srid, region, name, purpose, source,keywords,update_frequency,year,date_created,size,access_constraints,license from gis.metadata where layer_id=t.service_id limit 1)q ",
|
|
17
|
-
"name": "metadata_list_sql"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"name": "is_export_sql",
|
|
21
|
-
"sql": "select jsonb_path_exists(attributes, '$[*] ? (@.is_export == true)') as is_export"
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
10
|
"title": "Сервіси",
|
|
25
11
|
"form": "gis.services.form",
|
|
26
12
|
"sqlColumns": "*",
|
|
@@ -85,10 +71,17 @@
|
|
|
85
71
|
}
|
|
86
72
|
],
|
|
87
73
|
"filterList": [
|
|
74
|
+
{
|
|
75
|
+
"label": "Назва, Опис",
|
|
76
|
+
"id": "search",
|
|
77
|
+
"type": "Text",
|
|
78
|
+
"columns": "name,description",
|
|
79
|
+
"inline": true
|
|
80
|
+
},
|
|
88
81
|
{
|
|
89
82
|
"label": "Ключові слова",
|
|
90
83
|
"id": "keywords",
|
|
91
|
-
"type": "
|
|
84
|
+
"type": "Check",
|
|
92
85
|
"inline": true
|
|
93
86
|
},
|
|
94
87
|
{
|
|
@@ -108,7 +101,7 @@
|
|
|
108
101
|
{
|
|
109
102
|
"label": "Утримувач",
|
|
110
103
|
"id": "holder",
|
|
111
|
-
"type": "
|
|
104
|
+
"type": "Check"
|
|
112
105
|
}
|
|
113
106
|
]
|
|
114
107
|
}
|
package/package.json
CHANGED
|
@@ -1,55 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@opengis/gis",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"author": "Softpro",
|
|
6
|
-
"main": "dist/import-file.js",
|
|
7
|
-
"files": [
|
|
8
|
-
"dist/*",
|
|
9
|
-
"module/*",
|
|
10
|
-
"server/*",
|
|
11
|
-
"plugin.js",
|
|
12
|
-
"utils.js",
|
|
13
|
-
"config.js",
|
|
14
|
-
"README.md",
|
|
15
|
-
"LICENSE"
|
|
16
|
-
],
|
|
17
|
-
"scripts": {
|
|
18
|
-
"dev": "node server",
|
|
19
|
-
"
|
|
20
|
-
"build": "vite build
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"docs:
|
|
26
|
-
"docs:
|
|
27
|
-
"docs:
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"@
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"@
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"vue": "
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
"eslint": "
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@opengis/gis",
|
|
3
|
+
"version": "0.1.67",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"author": "Softpro",
|
|
6
|
+
"main": "dist/import-file.js",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/*",
|
|
9
|
+
"module/*",
|
|
10
|
+
"server/*",
|
|
11
|
+
"plugin.js",
|
|
12
|
+
"utils.js",
|
|
13
|
+
"config.js",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"dev": "node server",
|
|
19
|
+
"front": "vite dev",
|
|
20
|
+
"build-lib": "vite build",
|
|
21
|
+
"build:admin": "vite build admin",
|
|
22
|
+
"build": "vite build",
|
|
23
|
+
"preview": "vite preview",
|
|
24
|
+
"prod": "NODE_ENV=production node server",
|
|
25
|
+
"docs:install": "npm install --prefix ./docs",
|
|
26
|
+
"docs:dev": "npm run --prefix ./docs docs:dev",
|
|
27
|
+
"docs:build": "npm run --prefix ./docs docs:build",
|
|
28
|
+
"docs:preview": "npm run --prefix ./docs docs:preview",
|
|
29
|
+
"prepublishOnly": "npm run build"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"@mapbox/sphericalmercator": "1.2.0",
|
|
33
|
+
"carto": "0.16.3"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@opengis/fastify-table": "^1.4.24",
|
|
37
|
+
"@opengis/filter": "^0.1.7",
|
|
38
|
+
"@opengis/core": "^0.0.18"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"lucide-vue-next": "^0.514.0",
|
|
42
|
+
"vue": "^3.5.13",
|
|
43
|
+
"vue-router": "4.5.1",
|
|
44
|
+
"vuedraggable": "^4.1.0",
|
|
45
|
+
"@opengis/core": "^0.0.18",
|
|
46
|
+
"@opengis/filter": "^0.1.7",
|
|
47
|
+
"@opengis/fastify-table": "^1.4.77",
|
|
48
|
+
"@vitejs/plugin-vue": "^5.2.3",
|
|
49
|
+
"eslint": "8.49.0",
|
|
50
|
+
"eslint-config-airbnb": "19.0.4",
|
|
51
|
+
"sass-embedded": "1.86.3",
|
|
52
|
+
"vite": "^6.3.5"
|
|
53
|
+
}
|
|
55
54
|
}
|