@opengis/gis 0.2.113 → 0.2.115
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 -1
- package/dist/index.js +5823 -5802
- package/dist/index.umd.cjs +71 -71
- package/module/gis/table/gis.maps.table.json +0 -1
- package/module/gis/table/gis.registers.table.json +0 -1
- package/module/gis/table/gis.services.table.json +0 -1
- package/module/permissions/table/gis.permissions.table.json +0 -1
- package/package.json +1 -1
- package/server/routes/gis/registers/gis.export.js +15 -11
- package/server/routes/map/vtile1.js +2 -2
package/dist/index.umd.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(je,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("vue-router"),require("@opengis/core"),require("@opengis/form")):typeof define=="function"&&define.amd?define(["exports","vue","vue-router","@opengis/core","@opengis/form"],e):(je=typeof globalThis<"u"?globalThis:je||self,e(je.MapCustom={},je.Vue,je.vueRouter,je.openGIScore,je.openGISform))})(this,(function(je,e,Fe,he,Vo){"use strict";const Ll={key:0,class:"flex items-center text-sm text-gray-500 pb-[8px]"},Al={key:0,class:"flex items-center gap-2 flex-shrink-0"},Ml={key:1,class:"text-xs text-gray-500 m-0 p-0 mt-[-0.3em]"},Bo=e.defineComponent({__name:"TableFormHeader",props:{variant:{default:"table"},title:{default:""}},setup(t){const n=t,o=e.computed(()=>n.variant==="table"?"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[24px]":"px-6 pb-4 pt-0 mt-0 flex flex-col gap-0 px-[25px] pt-[16px]"),r=e.computed(()=>n.variant==="form"?"font-medium":"");return(l,s)=>(e.openBlock(),e.createElementBlock("header",{class:e.normalizeClass([o.value,"flex-shrink-0 pt"])},[l.$slots.breadcrumbs?(e.openBlock(),e.createElementBlock("div",Ll,[e.renderSlot(l.$slots,"breadcrumbs")])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["flex items-center justify-between",{"gap-2":t.variant==="table"}])},[e.createElementVNode("h2",{class:e.normalizeClass(["text-xl font-semibold text-gray-900 p-0 m-0 flex-shrink-0",r.value])},[e.renderSlot(l.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(t.title),1)])],2),l.$slots.actions?(e.openBlock(),e.createElementBlock("div",Al,[e.renderSlot(l.$slots,"actions")])):e.createCommentVNode("",!0)],2),l.$slots.description?(e.openBlock(),e.createElementBlock("p",Ml,[e.renderSlot(l.$slots,"description")])):e.createCommentVNode("",!0)],2))}});/**
|
|
2
2
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const
|
|
6
|
+
*/const $o=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Tl=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(n,o,r)=>r?r.toUpperCase():o.toLowerCase()),Fl=t=>{const n=Tl(t);return n.charAt(0).toUpperCase()+n.slice(1)},Dl=(...t)=>t.filter((n,o,r)=>!!n&&n.trim()!==""&&r.indexOf(n)===o).join(" ").trim();/**
|
|
7
7
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
8
8
|
*
|
|
9
9
|
* This source code is licensed under the ISC license.
|
|
@@ -13,235 +13,235 @@
|
|
|
13
13
|
*
|
|
14
14
|
* This source code is licensed under the ISC license.
|
|
15
15
|
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const
|
|
16
|
+
*/const zl=({size:t,strokeWidth:n=2,absoluteStrokeWidth:o,color:r,iconNode:l,name:s,class:a,...i},{slots:f})=>e.h("svg",{...hn,width:t||hn.width,height:t||hn.height,stroke:r||hn.stroke,"stroke-width":o?Number(n)*24/Number(t):n,class:Dl("lucide",...s?[`lucide-${$o(Fl(s))}-icon`,`lucide-${$o(s)}`]:["lucide-icon"]),...i},[...l.map(m=>e.h(...m)),...f.default?[f.default()]:[]]);/**
|
|
17
17
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
18
18
|
*
|
|
19
19
|
* This source code is licensed under the ISC license.
|
|
20
20
|
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const
|
|
21
|
+
*/const Ne=(t,n)=>(o,{slots:r})=>e.h(zl,{...o,iconNode:n,name:t},r);/**
|
|
22
22
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
23
23
|
*
|
|
24
24
|
* This source code is licensed under the ISC license.
|
|
25
25
|
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const
|
|
26
|
+
*/const vo=Ne("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);/**
|
|
27
27
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
28
28
|
*
|
|
29
29
|
* This source code is licensed under the ISC license.
|
|
30
30
|
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const
|
|
31
|
+
*/const So=Ne("arrow-right",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/**
|
|
32
32
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
33
33
|
*
|
|
34
34
|
* This source code is licensed under the ISC license.
|
|
35
35
|
* See the LICENSE file in the root directory of this source tree.
|
|
36
|
-
*/const
|
|
36
|
+
*/const Il=Ne("arrow-up-left",[["path",{d:"M7 17V7h10",key:"11bw93"}],["path",{d:"M17 17 7 7",key:"2786uv"}]]);/**
|
|
37
37
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
38
38
|
*
|
|
39
39
|
* This source code is licensed under the ISC license.
|
|
40
40
|
* See the LICENSE file in the root directory of this source tree.
|
|
41
|
-
*/const
|
|
41
|
+
*/const Lo=Ne("brush-cleaning",[["path",{d:"m16 22-1-4",key:"1ow2iv"}],["path",{d:"M19 13.99a1 1 0 0 0 1-1V12a2 2 0 0 0-2-2h-3a1 1 0 0 1-1-1V4a2 2 0 0 0-4 0v5a1 1 0 0 1-1 1H6a2 2 0 0 0-2 2v.99a1 1 0 0 0 1 1",key:"iw8jdu"}],["path",{d:"M5 14h14l1.973 6.767A1 1 0 0 1 20 22H4a1 1 0 0 1-.973-1.233z",key:"1soew8"}],["path",{d:"m8 22 1-4",key:"s3unb"}]]);/**
|
|
42
42
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
43
43
|
*
|
|
44
44
|
* This source code is licensed under the ISC license.
|
|
45
45
|
* See the LICENSE file in the root directory of this source tree.
|
|
46
|
-
*/const jl=
|
|
46
|
+
*/const jl=Ne("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
|
|
47
47
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
48
48
|
*
|
|
49
49
|
* This source code is licensed under the ISC license.
|
|
50
50
|
* See the LICENSE file in the root directory of this source tree.
|
|
51
|
-
*/const
|
|
51
|
+
*/const Ao=Ne("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
|
|
52
52
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
53
53
|
*
|
|
54
54
|
* This source code is licensed under the ISC license.
|
|
55
55
|
* See the LICENSE file in the root directory of this source tree.
|
|
56
|
-
*/const Rn=
|
|
56
|
+
*/const Rn=Ne("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/**
|
|
57
57
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
58
58
|
*
|
|
59
59
|
* This source code is licensed under the ISC license.
|
|
60
60
|
* See the LICENSE file in the root directory of this source tree.
|
|
61
|
-
*/const Pl=
|
|
61
|
+
*/const Pl=Ne("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
|
|
62
62
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
63
63
|
*
|
|
64
64
|
* This source code is licensed under the ISC license.
|
|
65
65
|
* See the LICENSE file in the root directory of this source tree.
|
|
66
|
-
*/const
|
|
66
|
+
*/const Mo=Ne("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/**
|
|
67
67
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
68
68
|
*
|
|
69
69
|
* This source code is licensed under the ISC license.
|
|
70
70
|
* See the LICENSE file in the root directory of this source tree.
|
|
71
|
-
*/const Rl=
|
|
71
|
+
*/const Rl=Ne("clipboard-copy",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",key:"4jdomd"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4",key:"3hqy98"}],["path",{d:"M21 14H11",key:"1bme5i"}],["path",{d:"m15 10-4 4 4 4",key:"5dvupr"}]]);/**
|
|
72
72
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
73
73
|
*
|
|
74
74
|
* This source code is licensed under the ISC license.
|
|
75
75
|
* See the LICENSE file in the root directory of this source tree.
|
|
76
|
-
*/const Ol=
|
|
76
|
+
*/const Ol=Ne("clipboard-paste",[["path",{d:"M11 14h10",key:"1w8e9d"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v1.344",key:"1e62lh"}],["path",{d:"m17 18 4-4-4-4",key:"z2g111"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113",key:"bjbb7m"}],["rect",{x:"8",y:"2",width:"8",height:"4",rx:"1",key:"ublpy"}]]);/**
|
|
77
77
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
78
78
|
*
|
|
79
79
|
* This source code is licensed under the ISC license.
|
|
80
80
|
* See the LICENSE file in the root directory of this source tree.
|
|
81
|
-
*/const Ul=
|
|
81
|
+
*/const Ul=Ne("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);/**
|
|
82
82
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
83
83
|
*
|
|
84
84
|
* This source code is licensed under the ISC license.
|
|
85
85
|
* See the LICENSE file in the root directory of this source tree.
|
|
86
|
-
*/const ql=
|
|
86
|
+
*/const ql=Ne("contrast",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 18a6 6 0 0 0 0-12v12z",key:"j4l70d"}]]);/**
|
|
87
87
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
88
88
|
*
|
|
89
89
|
* This source code is licensed under the ISC license.
|
|
90
90
|
* See the LICENSE file in the root directory of this source tree.
|
|
91
|
-
*/const Hl=
|
|
91
|
+
*/const Hl=Ne("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);/**
|
|
92
92
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
93
93
|
*
|
|
94
94
|
* This source code is licensed under the ISC license.
|
|
95
95
|
* See the LICENSE file in the root directory of this source tree.
|
|
96
|
-
*/const Wl=
|
|
96
|
+
*/const Wl=Ne("eraser",[["path",{d:"M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",key:"g5wo59"}],["path",{d:"m5.082 11.09 8.828 8.828",key:"1wx5vj"}]]);/**
|
|
97
97
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
98
98
|
*
|
|
99
99
|
* This source code is licensed under the ISC license.
|
|
100
100
|
* See the LICENSE file in the root directory of this source tree.
|
|
101
|
-
*/const Yl=
|
|
101
|
+
*/const Yl=Ne("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/**
|
|
102
102
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
103
103
|
*
|
|
104
104
|
* This source code is licensed under the ISC license.
|
|
105
105
|
* See the LICENSE file in the root directory of this source tree.
|
|
106
|
-
*/const Zl=
|
|
106
|
+
*/const Zl=Ne("house",[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"1d0kgt"}]]);/**
|
|
107
107
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
108
108
|
*
|
|
109
109
|
* This source code is licensed under the ISC license.
|
|
110
110
|
* See the LICENSE file in the root directory of this source tree.
|
|
111
|
-
*/const xn=
|
|
111
|
+
*/const xn=Ne("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);/**
|
|
112
112
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
113
113
|
*
|
|
114
114
|
* This source code is licensed under the ISC license.
|
|
115
115
|
* See the LICENSE file in the root directory of this source tree.
|
|
116
|
-
*/const Gl=
|
|
116
|
+
*/const Gl=Ne("layers",[["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",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);/**
|
|
117
117
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
118
118
|
*
|
|
119
119
|
* This source code is licensed under the ISC license.
|
|
120
120
|
* See the LICENSE file in the root directory of this source tree.
|
|
121
|
-
*/const
|
|
121
|
+
*/const To=Ne("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/**
|
|
122
122
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
123
123
|
*
|
|
124
124
|
* This source code is licensed under the ISC license.
|
|
125
125
|
* See the LICENSE file in the root directory of this source tree.
|
|
126
|
-
*/const bn=
|
|
126
|
+
*/const bn=Ne("map-pin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);/**
|
|
127
127
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
128
128
|
*
|
|
129
129
|
* This source code is licensed under the ISC license.
|
|
130
130
|
* See the LICENSE file in the root directory of this source tree.
|
|
131
|
-
*/const Kl=
|
|
131
|
+
*/const Kl=Ne("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/**
|
|
132
132
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
133
133
|
*
|
|
134
134
|
* This source code is licensed under the ISC license.
|
|
135
135
|
* See the LICENSE file in the root directory of this source tree.
|
|
136
|
-
*/const Xl=
|
|
136
|
+
*/const Xl=Ne("paint-bucket",[["path",{d:"m19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z",key:"irua1i"}],["path",{d:"m5 2 5 5",key:"1lls2c"}],["path",{d:"M2 13h15",key:"1hkzvu"}],["path",{d:"M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z",key:"xk76lq"}]]);/**
|
|
137
137
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
138
138
|
*
|
|
139
139
|
* This source code is licensed under the ISC license.
|
|
140
140
|
* See the LICENSE file in the root directory of this source tree.
|
|
141
|
-
*/const kn=
|
|
141
|
+
*/const kn=Ne("pen",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]]);/**
|
|
142
142
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
143
143
|
*
|
|
144
144
|
* This source code is licensed under the ISC license.
|
|
145
145
|
* See the LICENSE file in the root directory of this source tree.
|
|
146
|
-
*/const Ql=
|
|
146
|
+
*/const Ql=Ne("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/**
|
|
147
147
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
148
148
|
*
|
|
149
149
|
* This source code is licensed under the ISC license.
|
|
150
150
|
* See the LICENSE file in the root directory of this source tree.
|
|
151
|
-
*/const
|
|
151
|
+
*/const Fo=Ne("pentagon",[["path",{d:"M10.83 2.38a2 2 0 0 1 2.34 0l8 5.74a2 2 0 0 1 .73 2.25l-3.04 9.26a2 2 0 0 1-1.9 1.37H7.04a2 2 0 0 1-1.9-1.37L2.1 10.37a2 2 0 0 1 .73-2.25z",key:"2hea0t"}]]);/**
|
|
152
152
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
153
153
|
*
|
|
154
154
|
* This source code is licensed under the ISC license.
|
|
155
155
|
* See the LICENSE file in the root directory of this source tree.
|
|
156
|
-
*/const wn=
|
|
156
|
+
*/const wn=Ne("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/**
|
|
157
157
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
158
158
|
*
|
|
159
159
|
* This source code is licensed under the ISC license.
|
|
160
160
|
* See the LICENSE file in the root directory of this source tree.
|
|
161
|
-
*/const
|
|
161
|
+
*/const Do=Ne("ruler",[["path",{d:"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z",key:"icamh8"}],["path",{d:"m14.5 12.5 2-2",key:"inckbg"}],["path",{d:"m11.5 9.5 2-2",key:"fmmyf7"}],["path",{d:"m8.5 6.5 2-2",key:"vc6u1g"}],["path",{d:"m17.5 15.5 2-2",key:"wo5hmg"}]]);/**
|
|
162
162
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
163
163
|
*
|
|
164
164
|
* This source code is licensed under the ISC license.
|
|
165
165
|
* See the LICENSE file in the root directory of this source tree.
|
|
166
|
-
*/const
|
|
166
|
+
*/const zo=Ne("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);/**
|
|
167
167
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
168
168
|
*
|
|
169
169
|
* This source code is licensed under the ISC license.
|
|
170
170
|
* See the LICENSE file in the root directory of this source tree.
|
|
171
|
-
*/const Jl=
|
|
171
|
+
*/const Jl=Ne("settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
|
|
172
172
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
173
173
|
*
|
|
174
174
|
* This source code is licensed under the ISC license.
|
|
175
175
|
* See the LICENSE file in the root directory of this source tree.
|
|
176
|
-
*/const ea=
|
|
176
|
+
*/const ea=Ne("square-code",[["path",{d:"m10 9-3 3 3 3",key:"1oro0q"}],["path",{d:"m14 15 3-3-3-3",key:"bz13h7"}],["rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",key:"h1oib"}]]);/**
|
|
177
177
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
178
178
|
*
|
|
179
179
|
* This source code is licensed under the ISC license.
|
|
180
180
|
* See the LICENSE file in the root directory of this source tree.
|
|
181
|
-
*/const
|
|
181
|
+
*/const Io=Ne("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);/**
|
|
182
182
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
183
183
|
*
|
|
184
184
|
* This source code is licensed under the ISC license.
|
|
185
185
|
* See the LICENSE file in the root directory of this source tree.
|
|
186
|
-
*/const ta=
|
|
186
|
+
*/const ta=Ne("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);/**
|
|
187
187
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
188
188
|
*
|
|
189
189
|
* This source code is licensed under the ISC license.
|
|
190
190
|
* See the LICENSE file in the root directory of this source tree.
|
|
191
|
-
*/const On=
|
|
191
|
+
*/const On=Ne("trash-2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/**
|
|
192
192
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
193
193
|
*
|
|
194
194
|
* This source code is licensed under the ISC license.
|
|
195
195
|
* See the LICENSE file in the root directory of this source tree.
|
|
196
|
-
*/const na=
|
|
196
|
+
*/const na=Ne("trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]]);/**
|
|
197
197
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
198
198
|
*
|
|
199
199
|
* This source code is licensed under the ISC license.
|
|
200
200
|
* See the LICENSE file in the root directory of this source tree.
|
|
201
|
-
*/const oa=
|
|
201
|
+
*/const oa=Ne("undo-2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);/**
|
|
202
202
|
* @license lucide-vue-next v0.514.0 - ISC
|
|
203
203
|
*
|
|
204
204
|
* This source code is licensed under the ISC license.
|
|
205
205
|
* See the LICENSE file in the root directory of this source tree.
|
|
206
|
-
*/const
|
|
207
|
-
`)});return}l.value[r.index]=i.value,s.value=!1};return(x,u)=>(e.openBlock(),e.createElementBlock("div",ra,[e.createElementVNode("button",{onClick:u[0]||(u[0]=h=>{s.value=!0}),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:text-accent-foreground h-8 w-8 rounded-full hover:bg-gray-100"},[e.createVNode(e.unref(Do),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-8 w-8 rounded-full hover:bg-red-100 text-red-600 hover:text-red-700"},[e.createVNode(e.unref(na),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:s.value,"onUpdate:visible":u[4]||(u[4]=h=>s.value=h),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",la,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:u[3]||(u[3]=h=>s.value=!1)}," Скасувати "),e.createElementVNode("button",{class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300",onClick:m}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:i.value,"onUpdate:values":u[1]||(u[1]=h=>i.value=h),schema:t.scheme,form:a.value,"onUpdate:form":u[2]||(u[2]=h=>a.value=h)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),sa={mounted(t){setTimeout(()=>{t.scrollWidth>t.clientWidth?t.setAttribute("title",t.textContent):t.removeAttribute("title")})},updated(t){setTimeout(()=>{t.scrollWidth>t.clientWidth?t.setAttribute("title",t.textContent):t.removeAttribute("title")})}},ia={array:"purple",boolean:"red",date:"red",datetime:"purple",number:"green",text:"blue",file:"yellow",select:"yellow",slug:"green",image:"blue",badge:"orange",title:"blue",features:"green",status:"red",tags:"yellow",category:"purple",check:"green",range:"orange",autocomplete:"yellow",other:"gray","yes/no":"green"},zo=t=>ia[t==null?void 0:t.toLowerCase()]||"gray",ca=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],Io=t=>{var n;return ca.includes((n=t||"")==null?void 0:n.toLowerCase())},he=(t,n)=>{const o=t.__vccOpts||t;for(const[r,l]of n)o[r]=l;return o},da={},ua={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-type",__v0_r:"0,5361,5384"};function pa(t,n){return e.openBlock(),e.createElementBlock("svg",ua,[...n[0]||(n[0]=[e.createElementVNode("polyline",{points:"4 7 4 4 20 4 20 7"},null,-1),e.createElementVNode("line",{x1:"9",x2:"15",y1:"20",y2:"20"},null,-1),e.createElementVNode("line",{x1:"12",x2:"12",y1:"4",y2:"20"},null,-1)])])}const ma=he(da,[["render",pa]]),fa={},ga={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-hash",__v0_r:"0,5361,5384"};function ya(t,n){return e.openBlock(),e.createElementBlock("svg",ga,[...n[0]||(n[0]=[e.createElementVNode("line",{x1:"4",x2:"20",y1:"9",y2:"9"},null,-1),e.createElementVNode("line",{x1:"4",x2:"20",y1:"15",y2:"15"},null,-1),e.createElementVNode("line",{x1:"10",x2:"8",y1:"3",y2:"21"},null,-1),e.createElementVNode("line",{x1:"16",x2:"14",y1:"3",y2:"21"},null,-1)])])}const ha=he(fa,[["render",ya]]),xa={},ba={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function ka(t,n){return e.openBlock(),e.createElementBlock("svg",ba,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const wa=he(xa,[["render",ka]]),_a={},Ea={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function Na(t,n){return e.openBlock(),e.createElementBlock("svg",Ea,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const Ca=he(_a,[["render",Na]]),Va={},Ba={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-code",__v0_r:"0,5361,5384"};function $a(t,n){return e.openBlock(),e.createElementBlock("svg",Ba,[...n[0]||(n[0]=[e.createElementVNode("polyline",{points:"16 18 22 12 16 6"},null,-1),e.createElementVNode("polyline",{points:"8 6 2 12 8 18"},null,-1)])])}const va=he(Va,[["render",$a]]),Sa={},La={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-toggle-left",__v0_r:"0,5361,5384"};function Aa(t,n){return e.openBlock(),e.createElementBlock("svg",La,[...n[0]||(n[0]=[e.createElementVNode("rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6"},null,-1),e.createElementVNode("circle",{cx:"8",cy:"12",r:"2"},null,-1)])])}const Ma=he(Sa,[["render",Aa]]),Ta={},Fa={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-file-text",__v0_r:"0,5361,5384"};function Da(t,n){return e.openBlock(),e.createElementBlock("svg",Fa,[...n[0]||(n[0]=[e.createStaticVNode('<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path>',5)])])}const za=he(Ta,[["render",Da]]),Ia={},ja={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-image",__v0_r:"0,5361,5384"};function Pa(t,n){return e.openBlock(),e.createElementBlock("svg",ja,[...n[0]||(n[0]=[e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"},null,-1),e.createElementVNode("circle",{cx:"9",cy:"9",r:"2"},null,-1),e.createElementVNode("path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"},null,-1)])])}const Ra=he(Ia,[["render",Pa]]),Oa={},Ua={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function qa(t,n){return e.openBlock(),e.createElementBlock("svg",Ua,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Ha=he(Oa,[["render",qa]]),Wa={},Ya={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Za(t,n){return e.openBlock(),e.createElementBlock("svg",Ya,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Ga=he(Wa,[["render",Za]]),Ka={},Xa={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function Qa(t,n){return e.openBlock(),e.createElementBlock("svg",Xa,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const Ja=he(Ka,[["render",Qa]]),es={},ts={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function ns(t,n){return e.openBlock(),e.createElementBlock("svg",ts,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const os=he(es,[["render",ns]]),rs={},ls={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function as(t,n){return e.openBlock(),e.createElementBlock("svg",ls,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const ss=he(rs,[["render",as]]),is={},cs={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function ds(t,n){return e.openBlock(),e.createElementBlock("svg",cs,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const us=he(is,[["render",ds]]),ps={},ms={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",height:"800px",width:"800px",version:"1.1",id:"_x32_",viewBox:"0 0 512 512","xml:space":"preserve"};function fs(t,n){return e.openBlock(),e.createElementBlock("svg",ms,[...n[0]||(n[0]=[e.createElementVNode("g",null,[e.createElementVNode("path",{class:"st0",d:"M511.989,292.396c0.021-16.486-6.344-33.136-18.945-45.703L273.605,27.242 C262.3,15.936,247.175,9.22,231.184,8.407L66.821,0.032l1.184,0.066C66.974,0.044,65.866,0,64.67,0 C47.58,0,31.105,6.783,18.944,18.955C6.783,31.106-0.001,47.58,0.011,64.67c0,1.076,0.034,2.172,0.078,3.27l8.297,163.254 c0.835,15.981,7.54,31.106,18.857,42.421l219.451,219.451c12.578,12.589,29.217,18.955,45.703,18.934 c16.496,0.021,33.124-6.356,45.703-18.934l154.956-154.945l-11.92-11.92l11.932,11.909 C505.645,325.521,512.011,308.881,511.989,292.396z M314.26,469.216c-6.08,6.08-13.895,9.044-21.864,9.067 c-7.969-0.023-15.783-2.986-21.864-9.067L51.082,249.765c-5.4-5.4-8.616-12.633-9.023-20.305L33.762,66.238l-0.034-1.569 c0-8.188,3.238-16.048,9.055-21.875c5.839-5.839,13.697-9.077,21.886-9.077l1.502,0.044l163.288,8.319 c7.683,0.396,14.904,3.6,20.305,9.012l219.45,219.45c6.059,6.069,9.033,13.884,9.056,21.853 c-0.023,7.968-2.986,15.794-9.067,21.886h0.011L314.26,469.216z"}),e.createElementVNode("path",{class:"st0",d:"M105.632,105.642c-15.366,15.378-15.366,40.27,0,55.636c15.366,15.366,40.259,15.366,55.625,0 c15.366-15.366,15.366-40.259,0-55.636C145.891,90.276,120.998,90.276,105.632,105.642z"})],-1)])])}const gs=he(ps,[["render",fs]]),ys={},hs={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function xs(t,n){return e.openBlock(),e.createElementBlock("svg",hs,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M3 12C3 4.5885 4.5885 3 12 3C19.4115 3 21 4.5885 21 12C21 19.4115 19.4115 21 12 21C4.5885 21 3 19.4115 3 12Z",stroke:"#323232","stroke-width":"2"},null,-1),e.createElementVNode("path",{d:"M9 12L10.6828 13.6828V13.6828C10.858 13.858 11.142 13.858 11.3172 13.6828V13.6828L15 10",stroke:"#323232","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const jo={IconText:ma,IconNumber:ha,IconDate:wa,IconDatetime:Ca,IconRichtext:va,IconBoolean:Ma,IconFile:za,IconImage:Ra,IconArray:Ha,IconSelect:Ga,IconSlug:Ja,IconDatalist:os,IconReference:ss,IconReferenceList:us,IconBadge:gs,IconCheck:he(ys,[["render",xs]])},bs={key:0,class:"flex items-center justify-between mb-6"},ks={class:"flex justify-end w-full"},ws={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},_s={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},Es={class:"table-fixed w-full text-[13px]"},Ns={class:"bg-gray-50 border-b border-gray-200"},Cs={key:0},Vs=["onDragstart","onDragover","onDrop"],Bs={key:0,class:"flex w-fit items-center gap-2 text-left"},$s={class:"flex-1 min-w-0"},vs={class:"font-medium text-gray-900 truncate"},Ss={class:"text-xs text-gray-500"},Ls={key:1,class:"flex items-center justify-center"},As={key:0,class:"inline-flex items-center px-2 py-1 h-fit text-[13px] font-medium rounded-md ring-1 ring-inset ring-gray-500/10 bg-gray-100"},Ms={key:1,class:"text-gray-500 text-sm"},Ts={key:3},Fs={class:"px-6 py-4"},Ds={key:1},zs=["colspan"],Et=he(e.defineComponent({__name:"vs-datatable",props:e.mergeModels({columnsScheme:{},formScheme:{},addButton:{type:Boolean,default:!0},mainColWidth:{default:""}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t,{expose:n}){function o(N){return N.charAt(0).toUpperCase()+N.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(N=>N.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),a=t,i=e.ref({}),g=e.ref(!1),m=e.ref({}),x=e.ref(null),u=e.useSlots(),h=N=>!!(N&&u[N]);n({openCreateDialog:()=>{g.value=!0}});const c=e.computed({get(){return Array.isArray(s.value)?s.value:s.value&&Array.isArray(s.value.columns)?s.value.columns:[]},set(N){Array.isArray(s.value)?s.value=N:s.value&&Array.isArray(s.value.columns)&&(s.value.columns=N)}}),d=e.computed(()=>{const N=a.columnsScheme.map(E=>E.key);return N.includes("name")&&N.includes("label")||N.includes("id")&&N.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...a.columnsScheme.filter(E=>!["name","id","label"].includes(E.key))]:a.columnsScheme});function y(){g.value=!1,m.value={},x.value=null}async function p(){const N=i.value.validate();if(N){ye.notify({type:"warning",title:"Validation",message:Object.entries(N).map(([E,B])=>`${E}: ${B}`).join(`
|
|
208
|
-
`)});return}if(x.value===null)c.value=[...c.value,{...m.value}];else{const E=[...c.value];E[x.value]={...m.value},c.value=E}y()}const f=e.ref(null),k=e.ref(null),C=N=>{f.value=N},$=N=>{k.value=N},w=N=>{if(f.value===null||f.value===N){f.value=null,k.value=null;return}const E=[...c.value],[B]=E.splice(f.value,1);E.splice(N,0,B),c.value=E,f.value=null,k.value=null};return(N,E)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",bs,[e.createElementVNode("div",ks,[e.createElementVNode("button",{onClick:E[0]||(E[0]=B=>g.value=!0),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...E[4]||(E[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Додати поле ",-1)])])])])):e.createCommentVNode("",!0),e.createElementVNode("div",ws,[e.createElementVNode("div",_s,[e.createElementVNode("table",Es,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,B=>(e.openBlock(),e.createElementBlock("col",{key:B.key,style:e.normalizeStyle(B.type==="main"?`width: ${t.mainColWidth}`:B.width?`width: ${B.width}`:"auto")},null,4))),128)),E[5]||(E[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",Ns,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,B=>(e.openBlock(),e.createElementBlock("th",{key:B.key,class:"px-6 py-4"},e.toDisplayString(B.label),1))),128)),E[6]||(E[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),c.value.length?(e.openBlock(),e.createElementBlock("tbody",Cs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(B,M)=>(e.openBlock(),e.createElementBlock("tr",{key:B.id||B.name||M,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":f.value===M,"border-t-2 border-b-2 border-blue-500 bg-blue-50":k.value===M}]),draggable:"true",onDragstart:D=>C(M),onDragover:e.withModifiers(D=>$(M),["prevent"]),onDrop:D=>w(M)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,D=>(e.openBlock(),e.createElementBlock("td",{key:D.key,class:"px-6 py-4 align-middle text-center"},[D.type==="main"?(e.openBlock(),e.createElementBlock("div",Bs,[E[7]||(E[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(Io)(B.format==="yes/no"?"check":B.format||B.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(zo)(B.format==="yes/no"?"check":B.format||B.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.format==="yes/no"?"icon-check":e.unref(jo)["Icon"+o(B.format||B.type)]||e.unref(jo).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",$s,[e.withDirectives((e.openBlock(),e.createElementBlock("p",vs,[e.createTextVNode(e.toDisplayString(B.name||B.id),1)])),[[e.unref(sa)]]),e.createElementVNode("p",Ss,e.toDisplayString(B.ua||B.label||B.name||B.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[D.slot&&h(D.slot)?e.renderSlot(N.$slots,D.slot,{key:0,row:B,column:D,value:B[D.key],rowIndex:M},void 0,!0):D.type==="color"?(e.openBlock(),e.createElementBlock("div",Ls,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${B[D.key]}]`])},null,2)])):["format","type","meta"].includes(D.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[B[D.key]?(e.openBlock(),e.createElementBlock("span",As,e.toDisplayString(B[D.key]),1)):(e.openBlock(),e.createElementBlock("span",Ms,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",Ts,e.toDisplayString(B[D.key]),1))],64))]))),128)),e.createElementVNode("td",Fs,[e.createVNode(aa,{columns:c.value,"onUpdate:columns":E[1]||(E[1]=D=>c.value=D),data:B,index:M,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,Vs))),128))])):(e.openBlock(),e.createElementBlock("tr",Ds,[e.createElementVNode("td",{colspan:d.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,zs)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:g.value,"onUpdate:visible":E[3]||(E[3]=B=>g.value=B)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:y,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"}," Скасувати "),e.createElementVNode("button",{type:"button",onClick:p,class:"px-4 py-2 rounded bg-blue-600 text-white"}," Зберегти1 ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{ref_key:"form",ref:i,modelValue:m.value,"onUpdate:modelValue":E[2]||(E[2]=B=>m.value=B),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),Is={class:"p-4 text-[13px]"},js={class:"grid grid-cols-2 gap-x-6 gap-y-2"},Ps=["id","checked","onChange"],Rs={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},Os={class:"font-medium text-gray-900 truncate"},Us={class:"text-xs text-gray-500"},qs={key:0,class:"text-xs text-[#B2C9D6]"},Hs={class:"flex justify-end gap-2 p-4 border-t w-full"},Dt=e.defineComponent({__name:"import-fields-dialog",props:e.mergeModels({fields:{default:()=>[]},title:{},idPrefix:{default:"import"},confirmText:{default:"Імпортувати"},cancelText:{default:"Скасувати"}},{visible:{type:Boolean,default:!1},visibleModifiers:{},selection:{default:[]},selectionModifiers:{}}),emits:e.mergeModels(["confirm","cancel"],["update:visible","update:selection"]),setup(t,{emit:n}){const o=e.useModel(t,"visible"),r=e.useModel(t,"selection"),l=t,s=n,a=e.defineAsyncComponent(()=>import("@opengis/core").then(C=>C.VsModal)),i=e.computed(()=>Array.isArray(l.fields)?l.fields.filter(Boolean):[]),g=C=>(C==null?void 0:C.name)??(C==null?void 0:C.id)??(C==null?void 0:C.key)??(C==null?void 0:C.code)??(C==null?void 0:C.field)??(C==null?void 0:C.value)??"",m=C=>String(g(C)??"").trim(),x=C=>(C==null?void 0:C.title)??(C==null?void 0:C.label)??m(C),u=C=>String((C==null?void 0:C.type)??"").trim(),h=e.computed(()=>new Set(r.value.map(C=>String(C??"").trim()))),c=C=>h.value.has(m(C)),d=C=>{const $=m(C);if(!$)return;const w=new Set(h.value);w.has($)?w.delete($):w.add($),r.value=Array.from(w)},y=e.computed(()=>l.confirmText||"Імпортувати"),p=e.computed(()=>l.cancelText||"Скасувати"),f=()=>{o.value=!1,s("cancel")},k=()=>{s("confirm"),o.value=!1};return(C,$)=>(e.openBlock(),e.createBlock(e.unref(a),{visible:o.value,"onUpdate:visible":$[0]||($[0]=w=>o.value=w),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Hs,[e.createElementVNode("button",{onClick:f,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(p.value),1),e.createElementVNode("button",{onClick:k,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(y.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Is,[e.createElementVNode("div",js,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,w=>(e.openBlock(),e.createElementBlock("label",{key:m(w),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${m(w)}`,checked:c(w),onChange:N=>d(w)},null,40,Ps),e.createElementVNode("div",Rs,[e.unref(Io)(w.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(zo)(w.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${w.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",Os,e.toDisplayString(m(w)),1),e.createElementVNode("p",Us,e.toDisplayString(x(w)),1),u(w)?(e.openBlock(),e.createElementBlock("p",qs,e.toDisplayString(u(w)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function zt(t){return t==null?"":String(t).trim()}function Nt(t){return zt((t==null?void 0:t.name)??(t==null?void 0:t.id)??(t==null?void 0:t.key)??(t==null?void 0:t.code)??(t==null?void 0:t.field)??(t==null?void 0:t.value)??"")}function It(t,n,o){const r=Array.isArray(t)?[...t]:[],l=Array.isArray(n)?n:[],{selectedKeys:s,resolveKey:a}=o,i=new Set;for(const u of s){const h=zt(u);h&&i.add(h)}if(i.size===0)return[];const g=u=>zt(a(u)),m=[],x=new Set;for(const u of r){const h=g(u);!h||!i.has(h)||(m.push(u),x.add(h))}for(const u of l){const h=g(u);!h||x.has(h)||!i.has(h)||(m.push(u),x.add(h))}return m}const Ws={class:"vs-form"},Ys={class:"vs-form__body auto-rows-max container"},Zs={class:"flex flex-wrap"},Gs={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},Ks={class:"h-fit w-full flex flex-wrap"},Xs={class:"w-full"},Qs=e.defineComponent({__name:"list-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),s=k=>Nt(k||{}),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.ref(),g=e.ref(!1),m=e.ref([]),x=()=>{const k=h.value.map(C=>s(C)).filter(C=>C.length>0);m.value=[...k],g.value=!0},u=e.computed(()=>{var k,C;return((k=n.value)==null?void 0:k.token)||((C=n.value)==null?void 0:C.id)||"register-form"}),h=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.columns)||(n.value.columns=[]),n.value.columns),set:k=>{n.value||(n.value={}),n.value.columns=Array.isArray(k)?k:[]}}),c=e.computed({get:()=>n.value||{},set:k=>{var $;const C=Array.isArray(($=n.value)==null?void 0:$.columns)?n.value.columns:[];n.value={...n.value,...k,columns:C}}});e.watch(()=>i.value,k=>{o.value=k||null},{immediate:!0}),e.watch(g,k=>{k||(m.value=[])});const d=()=>{const k=new Set(m.value.map(w=>zt(w)).filter(w=>w.length>0)),C=Array.isArray(h.value)?[...h.value]:[],$=l.value.filter(w=>k.has(s(w))).map(w=>{const N=s(w),E=w.title??w.label??N;return{...w,name:N,label:E,type:w.type||"text",meta:w.meta??"features"}});h.value=It(C,$,{selectedKeys:m.value,resolveKey:s}),g.value=!1,m.value=[]},y={table_name:{type:"select",label:"Таблиця",required:!0,data:"pg.table_name",placeholder:"Таблиця в БД",validators:["required"],col:6},name:{type:"text",label:"Назва",required:!0,placeholder:"Назва",validators:["required"],col:6},query:{type:"text",label:"Умова",placeholder:"Умова",col:6},order:{type:"text",label:"Сортування",placeholder:"Сортування",col:6},description:{type:"textarea",label:"Опис",placeholder:"Опис",col:12}},p=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],f={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},is_export:{type:"switcher",label:"Експорт",info:"Чи експортувати дані колонки?",view:"switcher"},meta:{type:"combobox",label:"Мета",mode:"combo",options:[{text:"Title",id:"title"},{text:"Features",id:"features"},{text:"Status",id:"status"},{text:"Tags",id:"tags"},{text:"Category",id:"category"},{text:"Image",id:"image"}]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(k,C)=>(e.openBlock(),e.createElementBlock("div",Ws,[e.createElementVNode("div",Ys,[e.createElementVNode("div",Zs,[e.createElementVNode("div",Gs,[(e.openBlock(),e.createBlock(e.unref(a),{ref_key:"formEl",ref:i,key:u.value,schema:y,modelValue:c.value,"onUpdate:modelValue":C[0]||(C[0]=$=>c.value=$)},null,8,["modelValue"]))]),e.createElementVNode("div",Ks,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...C[4]||(C[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",Xs,[e.createVNode(Et,{modelValue:h.value,"onUpdate:modelValue":C[1]||(C[1]=$=>h.value=$),"columns-scheme":p,"form-scheme":f,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Dt,{visible:g.value,"onUpdate:visible":C[2]||(C[2]=$=>g.value=$),selection:m.value,"onUpdate:selection":C[3]||(C[3]=$=>m.value=$),fields:l.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:d},null,8,["visible","selection","fields"])]))}}),Js={class:"vs-form"},ei={class:"vs-form__body auto-rows-max container"},ti={class:"flex flex-wrap"},ni={class:"h-fit w-full flex flex-wrap"},oi={class:"w-full"},ri=e.defineComponent({__name:"filter-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),s=c=>Nt(c||{}),a=e.ref(!1),i=e.ref([]),g=()=>{const c=m.value.map(d=>s(d)).filter(d=>d.length>0);i.value=[...c],a.value=!0},m=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:c=>{n.value||(n.value={}),n.value.filters=Array.isArray(c)?c:[]}});e.watch(a,c=>{c||(i.value=[])});const x=()=>{const c=new Set(i.value.map(p=>zt(p)).filter(p=>p.length>0)),d=Array.isArray(m.value)?[...m.value]:[],y=l.value.filter(p=>c.has(s(p))).map(p=>({name:s(p),label:p.title??p.label??s(p),type:p.type||"text"}));m.value=It(d,y,{selectedKeys:i.value,resolveKey:s}),a.value=!1,i.value=[]},u=[{key:"id",label:"Name"},{key:"label",label:"Назва"},{key:"type",label:"Тип"}],h={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},type:{type:"radio",label:"Тип",validators:["required"],position:"horizontal",options:[{text:"Check",id:"Check"},{text:"Range",id:"Range"},{text:"Date",id:"Date"},{text:"Text",id:"Text"},{text:"Select",id:"Select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["select","autocomplete","check"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(c,d)=>(e.openBlock(),e.createElementBlock("div",Js,[e.createElementVNode("div",ei,[e.createElementVNode("div",ti,[d[4]||(d[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте фільтри реєстру. Оберіть поля для імпорту або відредагуйте властивості вручну. ")],-1)),e.createElementVNode("div",ni,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...d[3]||(d[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",oi,[e.createVNode(Et,{modelValue:m.value,"onUpdate:modelValue":d[0]||(d[0]=y=>m.value=y),"columns-scheme":u,"form-scheme":h,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":d[1]||(d[1]=y=>a.value=y),selection:i.value,"onUpdate:selection":d[2]||(d[2]=y=>i.value=y),fields:l.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:x},null,8,["visible","selection","fields"])]))}}),li={class:"vs-form"},ai={class:"vs-form__body auto-rows-max container"},si={class:"flex flex-wrap"},ii={class:"h-fit w-full flex flex-wrap"},ci={class:"w-full"},di=e.defineComponent({__name:"card-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),s=c=>Nt(c||{}),a=e.ref(!1),i=e.ref([]),g=()=>{const c=m.value.map(d=>s(d)).filter(d=>d.length>0);i.value=[...c],a.value=!0},m=e.computed({get:()=>n.value.card,set:c=>{n.value||(n.value={}),n.value.card=Array.isArray(c)?c:[]}});e.watch(a,c=>{var d;if(c){const y=((d=m.value)==null?void 0:d.map(p=>p.name))||[];i.value=[...y]}});const x=()=>{const c=new Set(i.value.map(p=>zt(p)).filter(p=>p.length>0)),d=Array.isArray(m.value)?[...m.value]:[],y=l.value.filter(p=>c.has(s(p))).map(p=>{const f=s(p),k=p.title??p.label??f;return{...p,name:f,label:k,format:p.format||p.type||"text",meta:p.meta||"title"}});m.value=It(d,y,{selectedKeys:i.value,resolveKey:s}),a.value=!1,i.value=[]},u=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"format",label:"Формат",type:"text"}],h={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},data:{type:"text",label:"Класифікатор",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(c,d)=>(e.openBlock(),e.createElementBlock("div",li,[e.createElementVNode("div",ai,[e.createElementVNode("div",si,[d[4]||(d[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте відображення картки. Оберіть потрібні поля та відредагуйте їхні властивості. ")],-1)),e.createElementVNode("div",ii,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...d[3]||(d[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",ci,[e.createVNode(Et,{modelValue:m.value,"onUpdate:modelValue":d[0]||(d[0]=y=>m.value=y),"columns-scheme":u,"form-scheme":h,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":d[1]||(d[1]=y=>a.value=y),selection:i.value,"onUpdate:selection":d[2]||(d[2]=y=>i.value=y),fields:l.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:x},null,8,["visible","selection","fields"])]))}}),ui=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function Kt(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,s]=n.split("-");if(!r||!l||!s)return t;const a=parseInt(l,10),i=ui[a]||l;let g=`${parseInt(s,10)} ${i} ${r}`;if(o){const m=o.split(".")[0],[x,u,h]=m.split(":");x&&u&&h?g+=`, ${x}:${u}:${h}`:x&&u?g+=`, ${x}:${u}`:x&&(g+=`, ${x}`)}return g}function Xt(t,n={dateStyle:"short"}){if(t==null||t==="")return"";const o=new Date(t);return Number.isNaN(o.getTime())?"":new Intl.DateTimeFormat(void 0,n).format(o)}const pi={class:"flex flex-col md:flex-row md:justify-between lg:flex-row lg:justify-between p-3 md:p-3.5 lg:p-4 pb-2 bg-slate-50 gap-3 md:gap-3.5 lg:gap-4"},mi={class:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-3 lg:flex-row lg:items-center lg:justify-between lg:gap-0"},fi={class:"flex flex-col gap-2 md:flex-row md:items-center"},gi={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},yi={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},hi={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap","data-v0-t":"badge"},xi={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},bi={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap"},ki={class:"p-3 md:p-3.5 lg:p-4 pt-2"},wi={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},_i={class:"text-gray-500 shrink-0 md:max-w-[50%]"},Ei={class:"font-medium flex flex-wrap gap-1"},Ni={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},Ci=["href"],Vi=["href"],Po=e.defineComponent({__name:"template-1",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),l=e.computed(()=>n.columns.find(u=>u.meta==="title")),s=e.computed(()=>n.columns.filter(u=>u.meta==="category")),a=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),i=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),g=(u,h)=>{if(h)return u[h]},m=u=>{const h=g(u,n.id_key);return`${n.path}?id=${h}`},x=(u,h)=>{const c=g(u,n.id_key);return`/map?layers=${h}&info=${h},${c}`};return(u,h)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>{var d,y,p;return e.openBlock(),e.createElementBlock("div",{key:c.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",pi,[e.createElementVNode("div",mi,[e.createElementVNode("div",fi,[e.createElementVNode("h2",gi,e.toDisplayString(c[`${(d=l.value)==null?void 0:d.name}_text`]||c[(y=l.value)==null?void 0:y.name]||c[(p=l.value)==null?void 0:p.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",yi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[c[f.name]?(e.openBlock(),e.createElementBlock("div",hi,e.toDisplayString(c[`${f.name}_text`]||c[f.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",xi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[c[f.name]?(e.openBlock(),e.createElementBlock("span",bi,e.toDisplayString(c[`${f.name}_text`]||c[f.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ki,[e.createElementVNode("div",wi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>{var k;return e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-col md:flex-row md:items-center lg:flex-row lg:items-center gap-1 md:gap-1.5 lg:gap-1.5"},[e.createElementVNode("span",_i,e.toDisplayString((f==null?void 0:f.ua)||f.label||f.name)+": ",1),e.createElementVNode("span",Ei,[Array.isArray(c[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(c[(f==null?void 0:f.name)+"_text"]||c[f==null?void 0:f.name],(C,$)=>(e.openBlock(),e.createElementBlock("span",{key:$,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(C),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(c[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(c[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((k=c[(f==null?void 0:f.name)+"_data"])==null?void 0:k.text)||c[(f==null?void 0:f.name)+"_text"]||c[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Ni,[!t.hideDetailsButton&&r(c)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(c,c==null?void 0:c.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[0]||(h[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,Ci)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:m(c),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[1]||(h[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-arrow-right ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"m12 5 7 7-7 7"})],-1)])],8,Vi))])])}),128))}}),Bi={class:"p-0"},$i={class:"border-l-4 border-l-slate-400"},vi={class:"p-4"},Si={class:"flex flex-wrap items-center gap-2 mb-3"},Li={class:"text-lg font-bold"},Ai={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-green-100 text-green-800 hover:bg-green-100","data-v0-t":"badge"},Mi={key:1,class:"flex"},Ti={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},Fi={class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 text-sm border-t pt-3"},Di={class:"text-xs text-gray-500 mb-1"},zi={class:"font-medium"},Ii={class:"flex justify-end gap-2 mt-3 border-t pt-3"},ji=["href"],Pi=["href"],Ro=e.defineComponent({__name:"template-2",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),l=e.computed(()=>n.columns.find(u=>u.meta==="title")),s=e.computed(()=>n.columns.filter(u=>u.meta==="category")),a=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),i=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),g=(u,h)=>{if(h)return u[h]},m=u=>{const h=g(u,n.id_key);return`${n.path}?id=${h}`},x=(u,h)=>{const c=g(u,n.id_key);return`/map?layers=${h}&info=${h},${c}`};return(u,h)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>{var d,y,p;return e.openBlock(),e.createElementBlock("div",{key:c.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Bi,[e.createElementVNode("div",$i,[e.createElementVNode("div",vi,[e.createElementVNode("div",Si,[e.createElementVNode("h2",Li,e.toDisplayString(c[`${(d=l.value)==null?void 0:d.name}_text`]||c[(y=l.value)==null?void 0:y.name]||c[(p=l.value)==null?void 0:p.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[c[f.name]?(e.openBlock(),e.createElementBlock("div",Ai,e.toDisplayString(c[`${f.name}_text`]||c[f.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",Mi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-wrap gap-1 ml-2"},[c[f.name]?(e.openBlock(),e.createElementBlock("span",Ti,e.toDisplayString(c[`${f.name}_text`]||c[f.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Fi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>{var k;return e.openBlock(),e.createElementBlock("div",{key:f.name},[e.createElementVNode("p",Di,e.toDisplayString(f.ua),1),e.createElementVNode("p",zi,[Array.isArray(c[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(c[f==null?void 0:f.name],(C,$)=>(e.openBlock(),e.createElementBlock("span",{key:$,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(C),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(c[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(c[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((k=c[(f==null?void 0:f.name)+"_data"])==null?void 0:k.text)||c[(f==null?void 0:f.name)+"_text"]||c[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",Ii,[!t.hideDetailsButton&&r(c)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(c,c==null?void 0:c.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[0]||(h[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,ji)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:m(c),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[1]||(h[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-external-link ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15 3h6v6"}),e.createElementVNode("path",{d:"M10 14 21 3"}),e.createElementVNode("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"})],-1)])],8,Pi))])])])])])}),128))}}),Ri={class:"space-y-4"},Oi={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},Ui={class:"flex-1"},qi={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},Hi={class:"col-span-1 lg:col-span-4"},Wi={class:"flex items-start"},Yi={class:"flex flex-col"},Zi={class:"font-bold text-xs lg:text-sm"},Gi={key:0,class:"flex flex-wrap gap-1 mt-1"},Ki={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},Xi={key:1,class:"flex flex-wrap gap-1 mt-1"},Qi={key:0,class:"inline-flex items-center rounded-full bg-gray-100 text-gray-800 text-[10px] lg:text-xs px-2 py-0.5 font-semibold"},Ji={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},ec={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},tc={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},nc={class:"truncate font-medium text-xs lg:text-sm"},oc={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},rc=["href"],lc=["href"],Oo=e.defineComponent({__name:"template-3",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=h=>(h==null?void 0:h.service_id)&&(h==null?void 0:h.is_map)&&h[n.id_key]&&(h==null?void 0:h.geom),l=e.computed(()=>n.columns.find(h=>h.meta==="title")),s=e.computed(()=>n.columns.filter(h=>h.meta==="category")),a=e.computed(()=>n.columns.filter(h=>h.meta==="tags")),i=e.computed(()=>n.columns.filter(h=>h.meta!=="title")),g=e.computed(()=>"bg-blue-500"),m=(h,c)=>{if(c)return h[c]},x=h=>{const c=m(h,n.id_key);return`${n.path}?id=${c}`},u=(h,c)=>{const d=m(h,n.id_key);return`/map?layers=${c}&info=${c},${d}`};return(h,c)=>(e.openBlock(),e.createElementBlock("div",Ri,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var y,p,f;return e.openBlock(),e.createElementBlock("div",{key:d.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",Oi,[e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("div",Hi,[e.createElementVNode("div",Wi,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",g.value])},null,2),e.createElementVNode("div",Yi,[e.createElementVNode("p",Zi,e.toDisplayString(d[`${(y=l.value)==null?void 0:y.name}_text`]||d[(p=l.value)==null?void 0:p.name]||d[(f=l.value)==null?void 0:f.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Gi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,k=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:k.name},[d[k.name]?(e.openBlock(),e.createElementBlock("span",Ki,e.toDisplayString(d[`${k.name}_text`]||d[k.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",Xi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,k=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:k.name},[d[k.name]?(e.openBlock(),e.createElementBlock("span",Qi,e.toDisplayString(d[`${k.name}_text`]||d[k.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Ji,[e.createElementVNode("div",ec,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,k=>{var C;return e.openBlock(),e.createElementBlock("div",{key:k.name},[e.createElementVNode("p",tc,e.toDisplayString(k.ua),1),e.createElementVNode("p",nc,[Array.isArray(d[k.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[k.name],($,w)=>(e.openBlock(),e.createElementBlock("span",{key:w,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString($),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[k.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(d[k.name])||"Немає даних"),1)],64)):k.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(d[k.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((C=d[k.name+"_data"])==null?void 0:C.text)||d[k.name+"_text"]||d[k.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",oc,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:u(d,d.service_id),class:"inline-flex items-center justify-center gap-2 text-xs lg:text-sm font-medium hover:bg-accent hover:text-accent-foreground h-8 lg:h-9 rounded-md px-2 lg:px-3"},[...c[0]||(c[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3 w-3 lg:h-3.5 lg:w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,rc)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:x(d),class:"flex items-center justify-center hover:bg-accent hover:text-accent-foreground rounded-md h-8 w-8 lg:h-7 lg:w-7"},[...c[1]||(c[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5 lg:h-4 lg:w-4"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)])],8,lc))])])])}),128))]))}}),ac={class:"flex flex-col space-y-1.5 p-6 pb-2"},sc={class:"flex items-center gap-2 flex-wrap"},ic={class:"tracking-tight text-lg font-medium"},cc={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-blue-100 text-blue-800 ml-2","data-v0-t":"badge"},dc={key:1,class:"flex"},uc={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},pc={class:"p-6 pt-0 pb-4"},mc={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},fc={class:"text-sm text-gray-500"},gc={class:"font-medium"},yc={class:"flex items-center p-6 pt-0 gap-2"},hc=["href"],xc=["href"],Uo=e.defineComponent({__name:"template-4",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),l=e.computed(()=>n.columns.find(u=>u.meta==="title")),s=e.computed(()=>n.columns.filter(u=>u.meta==="category")),a=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),i=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),g=(u,h)=>{if(h)return u[h]},m=u=>{const h=g(u,n.id_key);return`${n.path}?id=${h}`},x=(u,h)=>{const c=g(u,n.id_key);return`/map?layers=${h}&info=${h},${c}`};return(u,h)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>{var d,y,p;return e.openBlock(),e.createElementBlock("div",{key:c.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm border-l-4 border-l-blue-600","data-v0-t":"card"},[e.createElementVNode("div",ac,[e.createElementVNode("div",sc,[e.createElementVNode("h3",ic,e.toDisplayString(c[`${(d=l.value)==null?void 0:d.name}_text`]||c[(y=l.value)==null?void 0:y.name]||c[(p=l.value)==null?void 0:p.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,f=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.name},[c[f.name]?(e.openBlock(),e.createElementBlock("div",cc,e.toDisplayString(c[`${f.name}_text`]||c[f.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",dc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.name,class:"flex flex-wrap gap-1 ml-2"},[c[f.name]?(e.openBlock(),e.createElementBlock("span",uc,e.toDisplayString(c[`${f.name}_text`]||c[f.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",pc,[e.createElementVNode("div",mc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,f=>{var k;return e.openBlock(),e.createElementBlock("div",{key:f.name},[e.createElementVNode("p",fc,e.toDisplayString(f.ua),1),e.createElementVNode("p",gc,[Array.isArray(c[f==null?void 0:f.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(c[f==null?void 0:f.name],(C,$)=>(e.openBlock(),e.createElementBlock("span",{key:$,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(C),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[f.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(c[f==null?void 0:f.name])||"Немає даних"),1)],64)):f.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(c[f==null?void 0:f.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((k=c[(f==null?void 0:f.name)+"_data"])==null?void 0:k.text)||c[(f==null?void 0:f.name)+"_text"]||c[f==null?void 0:f.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",yc,[!t.hideDetailsButton&&r(c)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(c,c==null?void 0:c.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," На карті ",8,hc)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:m(c),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," Детальніше ",8,xc))])])}),128))}}),bc={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},kc={key:0,class:"w-full lg:w-auto lg:col-span-1"},wc=["src"],_c={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},Ec={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},Nc={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},Cc={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},Vc={class:"flex flex-wrap gap-2 lg:gap-0"},Bc={key:0,class:"inline-flex items-center rounded-full px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-primary/80 bg-blue-100 text-blue-800 border-0 text-xs lg:ml-2"},$c={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},vc={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},Sc={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},Lc=["innerHTML"],Ac={class:"text-gray-500 font-medium md:font-normal"},Mc={class:"text-gray-600 break-words line-clamp-2"},Tc={class:"col-span-1 lg:col-span-2 p-4 lg:p-3 bg-gray-50 flex flex-col justify-center border-t lg:border-t-0 lg:border-l border-gray-100"},Fc={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},Dc={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},zc={key:0,class:"inline-flex items-center rounded-full font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:bg-secondary/80 bg-white border border-gray-200 text-gray-700 text-xs px-2 py-0.5 lg:px-1.5 lg:py-0"},Ic={class:"col-span-1 lg:col-span-2 flex flex-col justify-center items-stretch lg:items-center bg-gray-50 border-t lg:border-t-0 lg:border-l border-gray-100 p-4 lg:p-2"},jc={class:"w-full space-y-2"},Pc=["href"],Rc=["href"],qo=e.defineComponent({__name:"template-5",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=c=>(c==null?void 0:c.service_id)&&(c==null?void 0:c.is_map)&&c[n.id_key]&&(c==null?void 0:c.geom),l=e.computed(()=>n.columns.find(c=>c.meta==="title")),s=e.computed(()=>n.columns.filter(c=>c.meta==="category")),a=e.computed(()=>n.columns.filter(c=>c.meta==="tags")),i=e.computed(()=>n.columns.filter(c=>c.meta!=="title")),g=e.computed(()=>n.columns.find(c=>c.meta==="image")),m=e.computed(()=>n.columns.find(c=>c.meta==="desc")||n.columns.find(c=>c.name==="description")),x=(c,d)=>{if(d)return c[d]},u=c=>{const d=x(c,n.id_key);return`${n.path}?id=${d}`},h=(c,d)=>{const y=x(c,n.id_key);return`/map?layers=${d}&info=${d},${y}`};return(c,d)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,y=>{var p,f,k,C,$,w,N,E,B;return e.openBlock(),e.createElementBlock("div",{key:y.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",bc,[g.value?(e.openBlock(),e.createElementBlock("div",kc,[y[(p=g.value)==null?void 0:p.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:y[(f=g.value)==null?void 0:f.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,wc)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",_c,[...d[0]||(d[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",Ec,[e.createElementVNode("div",Nc,[e.createElementVNode("h3",Cc,e.toDisplayString(y[`${(k=l.value)==null?void 0:k.name}_text`]||y[(C=l.value)==null?void 0:C.name]||y[($=l.value)==null?void 0:$.label]||"Не вказано"),1),e.createElementVNode("div",Vc,[Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,M=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:M.name},[y[M.name]?(e.openBlock(),e.createElementBlock("div",Bc,e.toDisplayString(y[`${M.name}_text`]||y[M.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",$c,e.toDisplayString(((N=y[((w=m.value)==null?void 0:w.name)+"_data"])==null?void 0:N.text)||y[((E=m.value)==null?void 0:E.name)+"_text"]||y[(B=m.value)==null?void 0:B.name]),1),e.createElementVNode("div",vc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,M=>{var D;return e.openBlock(),e.createElementBlock("div",{key:M.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",Sc,[M.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:M.icon},null,8,Lc)):e.createCommentVNode("",!0),e.createElementVNode("span",Ac,e.toDisplayString((M==null?void 0:M.ua)||M.label||M.name)+":",1)]),e.createElementVNode("span",Mc,[Array.isArray(y[M==null?void 0:M.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(y[M==null?void 0:M.name],(W,K)=>(e.openBlock(),e.createElementBlock("span",{key:K,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(W),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[M.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(y[M==null?void 0:M.name])||"Немає даних"),1)],64)):M.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(y[M==null?void 0:M.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((D=y[(M==null?void 0:M.name)+"_data"])==null?void 0:D.text)||y[(M==null?void 0:M.name)+"_text"]||y[M==null?void 0:M.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Tc,[e.createElementVNode("p",Fc," Теги: "+e.toDisplayString(a.value.length&&y[a.value[0].name]?"":"відсутні"),1),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",Dc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,M=>(e.openBlock(),e.createElementBlock("div",{key:M.name,class:"flex flex-wrap gap-1"},[y[M.name]?(e.openBlock(),e.createElementBlock("span",zc,e.toDisplayString(y[`${M.name}_text`]||y[M.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ic,[e.createElementVNode("div",jc,[!t.hideDetailsButton&&r(y)?(e.openBlock(),e.createElementBlock("a",{key:0,href:h(y,y==null?void 0:y.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," На карті ",8,Pc)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:u(y),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," Детальніше ",8,Rc))])])])])}),128))}}),Ho={template1:Po,template2:Ro,template3:Oo,template4:Uo,template5:qo},Oc={class:"space-y-4"},Uc={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},qc={class:"text-lg font-semibold mb-4"},Hc={class:"bg-white"},Wc={key:1,class:"text-gray-400 text-center py-12"},Yc={key:2,class:"text-gray-400 text-center py-12"},Zc=e.defineComponent({__name:"preview-tab",props:e.mergeModels({hideDetailsButton:{type:Boolean,default:!1}},{data:{default:{}},dataModifiers:{}}),emits:["update:data"],setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.useModel(t,"data"),r=[{text:"template1",id:"template1"},{text:"template2",id:"template2"},{text:"template3",id:"template3"},{text:"template4",id:"template4"},{text:"template5",id:"template5"}],l={view:{type:"radio",label:"Вигляд",position:"horizontal",required:!0,options:r,col:12}},s=e.computed(()=>{var x;return Array.isArray((x=o.value)==null?void 0:x.columns)?o.value.columns:[]}),a=e.computed(()=>{var x;return((x=o.value)==null?void 0:x.view)||"template1"}),i=e.computed(()=>Ho[a.value]||Ho.template1),g=e.computed(()=>{var h;const x=(h=o.value)==null?void 0:h.view;if(!x)return"template1";const u=r.find(c=>c.id===x);return(u==null?void 0:u.text)||x}),m=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(u=>{var h,c;return{...u,service_id:(h=o.value)==null?void 0:h.service_id,is_map:(c=o.value)==null?void 0:c.is_map}}));return(x,u)=>(e.openBlock(),e.createElementBlock("div",Oc,[e.createElementVNode("div",Uc,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:l,modelValue:o.value,"onUpdate:modelValue":u[0]||(u[0]=h=>o.value=h)},null,8,["modelValue"]))]),e.createElementVNode("h2",qc," Превʼю таблиці ("+e.toDisplayString(g.value)+") ",1),e.createElementVNode("div",Hc,[i.value&&m.value.length&&s.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value),{items:m.value,columns:s.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:a.value},null,8,["items","columns","hide-details-button"])):m.value.length?(e.openBlock(),e.createElementBlock("div",Yc," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",Wc," Немає даних для превʼю "))])]))}}),Gc={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},Kc={class:"mx-1"},Xc={class:"text-gray-900 font-semibold"},Qc={class:"w-full flex-shrink-0 mb-6 px-[24px]"},Jc={class:"flex items-center w-full h-10 max-w-md grid-cols-3 p-1 bg-white border border-gray-200 rounded-md text-muted-foreground"},ed=["onClick"],td={class:"flex-1 min-h-0 overflow-y-auto px-[24px]"},nd=e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=Fe.useRoute(),o=Fe.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),l=e.computed(()=>{var y;return((y=o.resolve(r.value).meta)==null?void 0:y.title)??""}),s=e.ref("list"),a=e.ref(""),i=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],g={list:Qs,filters:ri,card:di,preview:Zc},m=i.map(y=>y.id),x=e.ref({columns:[],filters:[],card:[],tableData:[]}),u=e.ref([]),h=async()=>{var p;if(!((p=x.value)==null?void 0:p.token)){ye.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const f=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(x.value)});if(!f.ok)throw new Error(`Failed to save content: ${f.status}`);ye.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(f){ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(f)}},c=async y=>{try{const f=await(await fetch(`/api/gis-registry/${y}`)).json(),k=Array.isArray(f==null?void 0:f.rows)?f.rows:[];x.value.tableData=k.slice(0,3)}catch(p){console.error("Помилка завантаження превʼю:",p)}},d=async()=>{var y,p;try{const k=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),C=((y=k==null?void 0:k.rows)==null?void 0:y[0])||{};a.value=C.register_key||"",x.value={...C,columns:Array.isArray(C.columns)?C.columns:[],filters:Array.isArray(C.filters)?C.filters:[],card:Array.isArray(C.card)?C.card:[],tableData:Array.isArray(C.tableData)?C.tableData:[]},(p=k==null?void 0:k.tokens)!=null&&p.edit&&(x.value.token=k.tokens.edit),u.value=Array.isArray(k==null?void 0:k.fields)?k.fields:[]}catch(f){console.error("Помилка завантаження даних:",f)}};return e.onMounted(async()=>{const y=n.query.tab;typeof y=="string"&&m.includes(y)&&(s.value=y),await d(),a.value&&await c(a.value)}),e.watch(s,y=>{n.query.tab!==y&&o.replace({query:{...n.query,tab:y}})}),e.watch(()=>n.query.tab,y=>{typeof y=="string"&&m.includes(y)&&s.value!==y&&(s.value=y)}),(y,p)=>{const f=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Gc,[e.createVNode(Vo,{variant:"form",title:x.value.name},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(f,{to:r.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Kc,[e.createVNode(e.unref(Rn),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",Xc,e.toDisplayString(x.value.name),1)]),description:e.withCtx(()=>[...p[2]||(p[2]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:p[0]||(p[0]=k=>e.unref(o).back()),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium border h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:h,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700"}," Зберегти ")]),_:1},8,["title"]),e.createElementVNode("div",Qc,[e.createElementVNode("div",Jc,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,k=>e.createElementVNode("button",{key:k.id,onClick:C=>s.value=k.id,class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm data-[state=active]:bg-blue-50 data-[state=active]:text-blue-700 data-[state=active]:border-blue-200",k.id===s.value?"bg-blue-50 text-blue-700 border-blue-200":""])},e.toDisplayString(k.name),11,ed)),64))])]),e.createElementVNode("div",td,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(g[s.value]),{data:x.value,"onUpdate:data":p[1]||(p[1]=k=>x.value=k),fields:u.value,"hide-details-button":t.hideDetailsButton,key:s.value},null,40,["data","fields","hide-details-button"]))])])}}});/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function Wo(t){return typeof t>"u"||t===null}function od(t){return typeof t=="object"&&t!==null}function rd(t){return Array.isArray(t)?t:Wo(t)?[]:[t]}function ld(t,n){var o,r,l,s;if(n)for(s=Object.keys(n),o=0,r=s.length;o<r;o+=1)l=s[o],t[l]=n[l];return t}function ad(t,n){var o="",r;for(r=0;r<n;r+=1)o+=t;return o}function sd(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var id=Wo,cd=od,dd=rd,ud=ad,pd=sd,md=ld,Ye={isNothing:id,isObject:cd,toArray:dd,repeat:ud,isNegativeZero:pd,extend:md};function Yo(t,n){var o="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(o+='in "'+t.mark.name+'" '),o+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!n&&t.mark.snippet&&(o+=`
|
|
206
|
+
*/const Nt=Ne("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),ra={class:"flex items-center justify-center col-span-3 gap-2"},la={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},aa=e.defineComponent({__name:"vs-datatable-controls",props:e.mergeModels({index:{},data:{},scheme:{}},{columns:{type:Array,default:()=>[]},columnsModifiers:{}}),emits:["update:columns"],setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.defineAsyncComponent(()=>import("@opengis/core").then(x=>x.VsModal)),r=t,l=e.useModel(t,"columns"),s=e.ref(!1),a=e.ref({}),i=e.ref({...r.data||{}});e.watch(()=>r.data,x=>{i.value={...x||{}}},{deep:!0});const f=()=>l.value=l.value.filter((x,u)=>u!==r.index),m=async()=>{const x=a.value.validate();if(x){he.notify({type:"warning",title:"Validation",message:Object.entries(x).map(([u,h])=>`${u}: ${h}`).join(`
|
|
207
|
+
`)});return}l.value[r.index]=i.value,s.value=!1};return(x,u)=>(e.openBlock(),e.createElementBlock("div",ra,[e.createElementVNode("button",{onClick:u[0]||(u[0]=h=>{s.value=!0}),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:text-accent-foreground h-8 w-8 rounded-full hover:bg-gray-100"},[e.createVNode(e.unref(Io),{class:"w-4 h-4"})]),e.createElementVNode("button",{onClick:f,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 h-8 w-8 rounded-full hover:bg-red-100 text-red-600 hover:text-red-700"},[e.createVNode(e.unref(na),{class:"w-4 h-4"})]),e.createVNode(e.unref(o),{teleport:"#modal",size:"lg",visible:s.value,"onUpdate:visible":u[4]||(u[4]=h=>s.value=h),title:"Редагувати поле"},{footer:e.withCtx(()=>[e.createElementVNode("div",la,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:u[3]||(u[3]=h=>s.value=!1)}," Скасувати "),e.createElementVNode("button",{class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300",onClick:m}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(n),{values:i.value,"onUpdate:values":u[1]||(u[1]=h=>i.value=h),schema:t.scheme,form:a.value,"onUpdate:form":u[2]||(u[2]=h=>a.value=h)},null,8,["values","schema","form"])]),_:1},8,["visible"])]))}}),sa={mounted(t){setTimeout(()=>{t.scrollWidth>t.clientWidth?t.setAttribute("title",t.textContent):t.removeAttribute("title")})},updated(t){setTimeout(()=>{t.scrollWidth>t.clientWidth?t.setAttribute("title",t.textContent):t.removeAttribute("title")})}},ia={array:"purple",boolean:"red",date:"red",datetime:"purple",number:"green",text:"blue",file:"yellow",select:"yellow",slug:"green",image:"blue",badge:"orange",title:"blue",features:"green",status:"red",tags:"yellow",category:"purple",check:"green",range:"orange",autocomplete:"yellow",other:"gray","yes/no":"green"},jo=t=>ia[t==null?void 0:t.toLowerCase()]||"gray",ca=["array","boolean","date","datetime","number","text","file","select","slug","image","badge","title","features","status","tags","category","check","range","autocomplete"],Po=t=>{var n;return ca.includes((n=t||"")==null?void 0:n.toLowerCase())},xe=(t,n)=>{const o=t.__vccOpts||t;for(const[r,l]of n)o[r]=l;return o},da={},ua={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-type",__v0_r:"0,5361,5384"};function pa(t,n){return e.openBlock(),e.createElementBlock("svg",ua,[...n[0]||(n[0]=[e.createElementVNode("polyline",{points:"4 7 4 4 20 4 20 7"},null,-1),e.createElementVNode("line",{x1:"9",x2:"15",y1:"20",y2:"20"},null,-1),e.createElementVNode("line",{x1:"12",x2:"12",y1:"4",y2:"20"},null,-1)])])}const ma=xe(da,[["render",pa]]),fa={},ga={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-hash",__v0_r:"0,5361,5384"};function ya(t,n){return e.openBlock(),e.createElementBlock("svg",ga,[...n[0]||(n[0]=[e.createElementVNode("line",{x1:"4",x2:"20",y1:"9",y2:"9"},null,-1),e.createElementVNode("line",{x1:"4",x2:"20",y1:"15",y2:"15"},null,-1),e.createElementVNode("line",{x1:"10",x2:"8",y1:"3",y2:"21"},null,-1),e.createElementVNode("line",{x1:"16",x2:"14",y1:"3",y2:"21"},null,-1)])])}const ha=xe(fa,[["render",ya]]),xa={},ba={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function ka(t,n){return e.openBlock(),e.createElementBlock("svg",ba,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const wa=xe(xa,[["render",ka]]),_a={},Ea={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-calendar",__v0_r:"0,5361,5384"};function Na(t,n){return e.openBlock(),e.createElementBlock("svg",Ea,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 2v4"},null,-1),e.createElementVNode("path",{d:"M16 2v4"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"4",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 10h18"},null,-1)])])}const Ca=xe(_a,[["render",Na]]),Va={},Ba={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-code",__v0_r:"0,5361,5384"};function $a(t,n){return e.openBlock(),e.createElementBlock("svg",Ba,[...n[0]||(n[0]=[e.createElementVNode("polyline",{points:"16 18 22 12 16 6"},null,-1),e.createElementVNode("polyline",{points:"8 6 2 12 8 18"},null,-1)])])}const va=xe(Va,[["render",$a]]),Sa={},La={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-toggle-left",__v0_r:"0,5361,5384"};function Aa(t,n){return e.openBlock(),e.createElementBlock("svg",La,[...n[0]||(n[0]=[e.createElementVNode("rect",{width:"20",height:"12",x:"2",y:"6",rx:"6",ry:"6"},null,-1),e.createElementVNode("circle",{cx:"8",cy:"12",r:"2"},null,-1)])])}const Ma=xe(Sa,[["render",Aa]]),Ta={},Fa={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-file-text",__v0_r:"0,5361,5384"};function Da(t,n){return e.openBlock(),e.createElementBlock("svg",Fa,[...n[0]||(n[0]=[e.createStaticVNode('<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path>',5)])])}const za=xe(Ta,[["render",Da]]),Ia={},ja={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-image",__v0_r:"0,5361,5384"};function Pa(t,n){return e.openBlock(),e.createElementBlock("svg",ja,[...n[0]||(n[0]=[e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"},null,-1),e.createElementVNode("circle",{cx:"9",cy:"9",r:"2"},null,-1),e.createElementVNode("path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"},null,-1)])])}const Ra=xe(Ia,[["render",Pa]]),Oa={},Ua={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function qa(t,n){return e.openBlock(),e.createElementBlock("svg",Ua,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Ha=xe(Oa,[["render",qa]]),Wa={},Ya={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function Za(t,n){return e.openBlock(),e.createElementBlock("svg",Ya,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const Ga=xe(Wa,[["render",Za]]),Ka={},Xa={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function Qa(t,n){return e.openBlock(),e.createElementBlock("svg",Xa,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const Ja=xe(Ka,[["render",Qa]]),es={},ts={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function ns(t,n){return e.openBlock(),e.createElementBlock("svg",ts,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const os=xe(es,[["render",ns]]),rs={},ls={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-link2",__v0_r:"0,5361,5384"};function as(t,n){return e.openBlock(),e.createElementBlock("svg",ls,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M9 17H7A5 5 0 0 1 7 7h2"},null,-1),e.createElementVNode("path",{d:"M15 7h2a5 5 0 1 1 0 10h-2"},null,-1),e.createElementVNode("line",{x1:"8",x2:"16",y1:"12",y2:"12"},null,-1)])])}const ss=xe(rs,[["render",as]]),is={},cs={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"w-4 h-4 text-gray-700 lucide lucide-list",__v0_r:"0,5361,5384"};function ds(t,n){return e.openBlock(),e.createElementBlock("svg",cs,[...n[0]||(n[0]=[e.createStaticVNode('<line x1="8" x2="21" y1="6" y2="6"></line><line x1="8" x2="21" y1="12" y2="12"></line><line x1="8" x2="21" y1="18" y2="18"></line><line x1="3" x2="3.01" y1="6" y2="6"></line><line x1="3" x2="3.01" y1="12" y2="12"></line><line x1="3" x2="3.01" y1="18" y2="18"></line>',6)])])}const us=xe(is,[["render",ds]]),ps={},ms={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",height:"800px",width:"800px",version:"1.1",id:"_x32_",viewBox:"0 0 512 512","xml:space":"preserve"};function fs(t,n){return e.openBlock(),e.createElementBlock("svg",ms,[...n[0]||(n[0]=[e.createElementVNode("g",null,[e.createElementVNode("path",{class:"st0",d:"M511.989,292.396c0.021-16.486-6.344-33.136-18.945-45.703L273.605,27.242 C262.3,15.936,247.175,9.22,231.184,8.407L66.821,0.032l1.184,0.066C66.974,0.044,65.866,0,64.67,0 C47.58,0,31.105,6.783,18.944,18.955C6.783,31.106-0.001,47.58,0.011,64.67c0,1.076,0.034,2.172,0.078,3.27l8.297,163.254 c0.835,15.981,7.54,31.106,18.857,42.421l219.451,219.451c12.578,12.589,29.217,18.955,45.703,18.934 c16.496,0.021,33.124-6.356,45.703-18.934l154.956-154.945l-11.92-11.92l11.932,11.909 C505.645,325.521,512.011,308.881,511.989,292.396z M314.26,469.216c-6.08,6.08-13.895,9.044-21.864,9.067 c-7.969-0.023-15.783-2.986-21.864-9.067L51.082,249.765c-5.4-5.4-8.616-12.633-9.023-20.305L33.762,66.238l-0.034-1.569 c0-8.188,3.238-16.048,9.055-21.875c5.839-5.839,13.697-9.077,21.886-9.077l1.502,0.044l163.288,8.319 c7.683,0.396,14.904,3.6,20.305,9.012l219.45,219.45c6.059,6.069,9.033,13.884,9.056,21.853 c-0.023,7.968-2.986,15.794-9.067,21.886h0.011L314.26,469.216z"}),e.createElementVNode("path",{class:"st0",d:"M105.632,105.642c-15.366,15.378-15.366,40.27,0,55.636c15.366,15.366,40.259,15.366,55.625,0 c15.366-15.366,15.366-40.259,0-55.636C145.891,90.276,120.998,90.276,105.632,105.642z"})],-1)])])}const gs=xe(ps,[["render",fs]]),ys={},hs={xmlns:"http://www.w3.org/2000/svg",width:"800px",height:"800px",viewBox:"0 0 24 24",fill:"none"};function xs(t,n){return e.openBlock(),e.createElementBlock("svg",hs,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M3 12C3 4.5885 4.5885 3 12 3C19.4115 3 21 4.5885 21 12C21 19.4115 19.4115 21 12 21C4.5885 21 3 19.4115 3 12Z",stroke:"#323232","stroke-width":"2"},null,-1),e.createElementVNode("path",{d:"M9 12L10.6828 13.6828V13.6828C10.858 13.858 11.142 13.858 11.3172 13.6828V13.6828L15 10",stroke:"#323232","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Ro={IconText:ma,IconNumber:ha,IconDate:wa,IconDatetime:Ca,IconRichtext:va,IconBoolean:Ma,IconFile:za,IconImage:Ra,IconArray:Ha,IconSelect:Ga,IconSlug:Ja,IconDatalist:os,IconReference:ss,IconReferenceList:us,IconBadge:gs,IconCheck:xe(ys,[["render",xs]])},bs={key:0,class:"flex items-center justify-between mb-6"},ks={class:"flex justify-end w-full"},ws={class:"overflow-hidden bg-white border border-gray-200 shadow-sm rounded-xl flex flex-col flex-1 min-h-0"},_s={class:"table-scroll-wrapper flex-1 overflow-y-auto min-h-0"},Es={class:"table-fixed w-full text-[13px]"},Ns={class:"bg-gray-50 border-b border-gray-200"},Cs={key:0},Vs=["onDragstart","onDragover","onDrop"],Bs={key:0,class:"flex w-fit items-center gap-2 text-left"},$s={class:"flex-1 min-w-0"},vs={class:"font-medium text-gray-900 truncate"},Ss={class:"text-xs text-gray-500"},Ls={key:1,class:"flex items-center justify-center"},As={key:0,class:"inline-flex items-center px-2 py-1 h-fit text-[13px] font-medium rounded-md ring-1 ring-inset ring-gray-500/10 bg-gray-100"},Ms={key:1,class:"text-gray-500 text-sm"},Ts={key:3},Fs={class:"px-6 py-4"},Ds={key:1},zs=["colspan"],Ct=xe(e.defineComponent({__name:"vs-datatable",props:e.mergeModels({columnsScheme:{},formScheme:{},addButton:{type:Boolean,default:!0},mainColWidth:{default:""}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t,{expose:n}){function o(E){return E.charAt(0).toUpperCase()+E.slice(1)}const r=e.defineAsyncComponent(()=>import("@opengis/core").then(E=>E.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),a=t,i=e.ref({}),f=e.ref(!1),m=e.ref({}),x=e.ref(null),u=e.useSlots(),h=E=>!!(E&&u[E]);n({openCreateDialog:()=>{f.value=!0}});const c=e.computed({get(){return Array.isArray(s.value)?s.value:s.value&&Array.isArray(s.value.columns)?s.value.columns:[]},set(E){Array.isArray(s.value)?s.value=E:s.value&&Array.isArray(s.value.columns)&&(s.value.columns=E)}}),d=e.computed(()=>{const E=a.columnsScheme.map(_=>_.key);return E.includes("name")&&E.includes("label")||E.includes("id")&&E.includes("label")?[{key:"main",label:"Назва",type:"main",width:"100%"},...a.columnsScheme.filter(_=>!["name","id","label"].includes(_.key))]:a.columnsScheme});function y(){f.value=!1,m.value={},x.value=null}async function p(){const E=i.value.validate();if(E){he.notify({type:"warning",title:"Validation",message:Object.entries(E).map(([_,B])=>`${_}: ${B}`).join(`
|
|
208
|
+
`)});return}if(x.value===null)c.value=[...c.value,{...m.value}];else{const _=[...c.value];_[x.value]={...m.value},c.value=_}y()}const g=e.ref(null),b=e.ref(null),N=E=>{g.value=E},V=E=>{b.value=E},k=E=>{if(g.value===null||g.value===E){g.value=null,b.value=null;return}const _=[...c.value],[B]=_.splice(g.value,1);_.splice(E,0,B),c.value=_,g.value=null,b.value=null};return(E,_)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[t.addButton?(e.openBlock(),e.createElementBlock("div",bs,[e.createElementVNode("div",ks,[e.createElementVNode("button",{onClick:_[0]||(_[0]=B=>f.value=!0),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[..._[4]||(_[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Додати поле ",-1)])])])])):e.createCommentVNode("",!0),e.createElementVNode("div",ws,[e.createElementVNode("div",_s,[e.createElementVNode("table",Es,[e.createElementVNode("colgroup",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,B=>(e.openBlock(),e.createElementBlock("col",{key:B.key,style:e.normalizeStyle(B.type==="main"?`width: ${t.mainColWidth}`:B.width?`width: ${B.width}`:"auto")},null,4))),128)),_[5]||(_[5]=e.createElementVNode("col",null,null,-1))]),e.createElementVNode("thead",null,[e.createElementVNode("tr",Ns,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,B=>(e.openBlock(),e.createElementBlock("th",{key:B.key,class:"px-6 py-4"},e.toDisplayString(B.label),1))),128)),_[6]||(_[6]=e.createElementVNode("th",{class:"px-6 py-4"},"Дії",-1))])]),c.value.length?(e.openBlock(),e.createElementBlock("tbody",Cs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(B,M)=>(e.openBlock(),e.createElementBlock("tr",{key:B.id||B.name||M,class:e.normalizeClass(["transition-colors hover:bg-gray-50/50 cursor-move",{"opacity-50":g.value===M,"border-t-2 border-b-2 border-blue-500 bg-blue-50":b.value===M}]),draggable:"true",onDragstart:z=>N(M),onDragover:e.withModifiers(z=>V(M),["prevent"]),onDrop:z=>k(M)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,z=>(e.openBlock(),e.createElementBlock("td",{key:z.key,class:"px-6 py-4 align-middle text-center"},[z.type==="main"?(e.openBlock(),e.createElementBlock("div",Bs,[_[7]||(_[7]=e.createElementVNode("span",{class:"drag-handle cursor-move mr-2 text-gray-400"},"☰",-1)),e.unref(Po)(B.format==="yes/no"?"check":B.format||B.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["flex items-center justify-center p-1 rounded",`bg-${e.unref(jo)(B.format==="yes/no"?"check":B.format||B.type)}-100`])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(B.format==="yes/no"?"icon-check":e.unref(Ro)["Icon"+o(B.format||B.type)]||e.unref(Ro).IconText),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",$s,[e.withDirectives((e.openBlock(),e.createElementBlock("p",vs,[e.createTextVNode(e.toDisplayString(B.name||B.id),1)])),[[e.unref(sa)]]),e.createElementVNode("p",Ss,e.toDisplayString(B.ua||B.label||B.name||B.id),1)])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[z.slot&&h(z.slot)?e.renderSlot(E.$slots,z.slot,{key:0,row:B,column:z,value:B[z.key],rowIndex:M},void 0,!0):z.type==="color"?(e.openBlock(),e.createElementBlock("div",Ls,[e.createElementVNode("div",{class:e.normalizeClass(["w-4 h-4 rounded-full align-middle",`bg-[${B[z.key]}]`])},null,2)])):["format","type","meta"].includes(z.key)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[B[z.key]?(e.openBlock(),e.createElementBlock("span",As,e.toDisplayString(B[z.key]),1)):(e.openBlock(),e.createElementBlock("span",Ms,"Не вказано"))],64)):(e.openBlock(),e.createElementBlock("span",Ts,e.toDisplayString(B[z.key]),1))],64))]))),128)),e.createElementVNode("td",Fs,[e.createVNode(aa,{columns:c.value,"onUpdate:columns":_[1]||(_[1]=z=>c.value=z),data:B,index:M,scheme:t.formScheme},null,8,["columns","data","index","scheme"])])],42,Vs))),128))])):(e.openBlock(),e.createElementBlock("tr",Ds,[e.createElementVNode("td",{colspan:d.value.length+1,class:"text-gray-500 text-center py-4"}," Поля не знайдені ",8,zs)]))])])]),e.createVNode(e.unref(r),{teleport:"#modal",title:"Створити поле",size:"lg",visible:f.value,"onUpdate:visible":_[3]||(_[3]=B=>f.value=B)},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},[e.createElementVNode("button",{type:"button",onClick:y,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"}," Скасувати "),e.createElementVNode("button",{type:"button",onClick:p,class:"px-4 py-2 rounded bg-blue-600 text-white"}," Зберегти1 ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{ref_key:"form",ref:i,modelValue:m.value,"onUpdate:modelValue":_[2]||(_[2]=B=>m.value=B),schema:t.formScheme},null,8,["modelValue","schema"])]),_:1},8,["visible"])],64))}}),[["__scopeId","data-v-25566600"]]),Is={class:"p-4 text-[13px]"},js={class:"grid grid-cols-2 gap-x-6 gap-y-2"},Ps=["id","checked","onChange"],Rs={class:"ml-2 flex-1 min-w-0 flex items-center gap-2"},Os={class:"font-medium text-gray-900 truncate"},Us={class:"text-xs text-gray-500"},qs={key:0,class:"text-xs text-[#B2C9D6]"},Hs={class:"flex justify-end gap-2 p-4 border-t w-full"},Dt=e.defineComponent({__name:"import-fields-dialog",props:e.mergeModels({fields:{default:()=>[]},title:{},idPrefix:{default:"import"},confirmText:{default:"Імпортувати"},cancelText:{default:"Скасувати"}},{visible:{type:Boolean,default:!1},visibleModifiers:{},selection:{default:[]},selectionModifiers:{}}),emits:e.mergeModels(["confirm","cancel"],["update:visible","update:selection"]),setup(t,{emit:n}){const o=e.useModel(t,"visible"),r=e.useModel(t,"selection"),l=t,s=n,a=e.defineAsyncComponent(()=>import("@opengis/core").then(N=>N.VsModal)),i=e.computed(()=>Array.isArray(l.fields)?l.fields.filter(Boolean):[]),f=N=>(N==null?void 0:N.name)??(N==null?void 0:N.id)??(N==null?void 0:N.key)??(N==null?void 0:N.code)??(N==null?void 0:N.field)??(N==null?void 0:N.value)??"",m=N=>String(f(N)??"").trim(),x=N=>(N==null?void 0:N.title)??(N==null?void 0:N.label)??m(N),u=N=>String((N==null?void 0:N.type)??"").trim(),h=e.computed(()=>new Set(r.value.map(N=>String(N??"").trim()))),c=N=>h.value.has(m(N)),d=N=>{const V=m(N);if(!V)return;const k=new Set(h.value);k.has(V)?k.delete(V):k.add(V),r.value=Array.from(k)},y=e.computed(()=>l.confirmText||"Імпортувати"),p=e.computed(()=>l.cancelText||"Скасувати"),g=()=>{o.value=!1,s("cancel")},b=()=>{s("confirm"),o.value=!1};return(N,V)=>(e.openBlock(),e.createBlock(e.unref(a),{visible:o.value,"onUpdate:visible":V[0]||(V[0]=k=>o.value=k),teleport:"#modal",title:t.title,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",Hs,[e.createElementVNode("button",{onClick:g,class:"px-4 py-2 rounded bg-gray-100 text-gray-700"},e.toDisplayString(p.value),1),e.createElementVNode("button",{onClick:b,class:"px-4 py-2 rounded bg-blue-600 text-white"},e.toDisplayString(y.value),1)])]),default:e.withCtx(()=>[e.createElementVNode("div",Is,[e.createElementVNode("div",js,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,k=>(e.openBlock(),e.createElementBlock("label",{key:m(k),class:"flex items-center hover:bg-gray-100 rounded p-2 cursor-pointer"},[e.createElementVNode("input",{type:"checkbox",id:`${t.idPrefix}-${m(k)}`,checked:c(k),onChange:E=>d(k)},null,40,Ps),e.createElementVNode("div",Rs,[e.unref(Po)(k.type)?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(`bg-${e.unref(jo)(k.type)}-100 p-1 rounded`)},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(`icon-${k.type}`),{class:"w-4 h-4"}))],2)):e.createCommentVNode("",!0),e.createElementVNode("div",null,[e.createElementVNode("p",Os,e.toDisplayString(m(k)),1),e.createElementVNode("p",Us,e.toDisplayString(x(k)),1),u(k)?(e.openBlock(),e.createElementBlock("p",qs,e.toDisplayString(u(k)),1)):e.createCommentVNode("",!0)])])]))),128))])])]),_:1},8,["visible","title"]))}});function zt(t){return t==null?"":String(t).trim()}function Vt(t){return zt((t==null?void 0:t.name)??(t==null?void 0:t.id)??(t==null?void 0:t.key)??(t==null?void 0:t.code)??(t==null?void 0:t.field)??(t==null?void 0:t.value)??"")}function It(t,n,o){const r=Array.isArray(t)?[...t]:[],l=Array.isArray(n)?n:[],{selectedKeys:s,resolveKey:a}=o,i=new Set;for(const u of s){const h=zt(u);h&&i.add(h)}if(i.size===0)return[];const f=u=>zt(a(u)),m=[],x=new Set;for(const u of r){const h=f(u);!h||!i.has(h)||(m.push(u),x.add(h))}for(const u of l){const h=f(u);!h||x.has(h)||!i.has(h)||(m.push(u),x.add(h))}return m}const Ws={class:"vs-form"},Ys={class:"vs-form__body auto-rows-max container"},Zs={class:"flex flex-wrap"},Gs={class:"h-fit w-full mb-6 bg-white border border-gray-200 rounded-lg p-6"},Ks={class:"h-fit w-full flex flex-wrap"},Xs={class:"w-full"},Qs=e.defineComponent({__name:"list-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),s=b=>Vt(b||{}),a=e.defineAsyncComponent(()=>import("@opengis/form")),i=e.ref(),f=e.ref(!1),m=e.ref([]),x=()=>{const b=h.value.map(N=>s(N)).filter(N=>N.length>0);m.value=[...b],f.value=!0},u=e.computed(()=>{var b,N;return((b=n.value)==null?void 0:b.token)||((N=n.value)==null?void 0:N.id)||"register-form"}),h=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.columns)||(n.value.columns=[]),n.value.columns),set:b=>{n.value||(n.value={}),n.value.columns=Array.isArray(b)?b:[]}}),c=e.computed({get:()=>n.value||{},set:b=>{var V;const N=Array.isArray((V=n.value)==null?void 0:V.columns)?n.value.columns:[];n.value={...n.value,...b,columns:N}}});e.watch(()=>i.value,b=>{o.value=b||null},{immediate:!0}),e.watch(f,b=>{b||(m.value=[])});const d=()=>{const b=new Set(m.value.map(k=>zt(k)).filter(k=>k.length>0)),N=Array.isArray(h.value)?[...h.value]:[],V=l.value.filter(k=>b.has(s(k))).map(k=>{const E=s(k),_=k.title??k.label??E;return{...k,name:E,label:_,type:k.type||"text",meta:k.meta??"features"}});h.value=It(N,V,{selectedKeys:m.value,resolveKey:s}),f.value=!1,m.value=[]},y={table_name:{type:"select",label:"Таблиця",required:!0,data:"pg.table_name",placeholder:"Таблиця в БД",validators:["required"],col:6},name:{type:"text",label:"Назва",required:!0,placeholder:"Назва",validators:["required"],col:6},query:{type:"text",label:"Умова",placeholder:"Умова",col:6},order:{type:"text",label:"Сортування",placeholder:"Сортування",col:6},description:{type:"textarea",label:"Опис",placeholder:"Опис",col:12}},p=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"meta",label:"Мета",type:"text"}],g={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},is_export:{type:"switcher",label:"Експорт",info:"Чи експортувати дані колонки?",view:"switcher"},meta:{type:"combobox",label:"Мета",mode:"combo",options:[{text:"Title",id:"title"},{text:"Features",id:"features"},{text:"Status",id:"status"},{text:"Tags",id:"tags"},{text:"Category",id:"category"},{text:"Image",id:"image"}]},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(b,N)=>(e.openBlock(),e.createElementBlock("div",Ws,[e.createElementVNode("div",Ys,[e.createElementVNode("div",Zs,[e.createElementVNode("div",Gs,[(e.openBlock(),e.createBlock(e.unref(a),{ref_key:"formEl",ref:i,key:u.value,schema:y,modelValue:c.value,"onUpdate:modelValue":N[0]||(N[0]=V=>c.value=V)},null,8,["modelValue"]))]),e.createElementVNode("div",Ks,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...N[4]||(N[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",Xs,[e.createVNode(Ct,{modelValue:h.value,"onUpdate:modelValue":N[1]||(N[1]=V=>h.value=V),"columns-scheme":p,"form-scheme":g,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Dt,{visible:f.value,"onUpdate:visible":N[2]||(N[2]=V=>f.value=V),selection:m.value,"onUpdate:selection":N[3]||(N[3]=V=>m.value=V),fields:l.value,title:"Імпорт колонок","id-prefix":"import-column",onConfirm:d},null,8,["visible","selection","fields"])]))}}),Js={class:"vs-form"},ei={class:"vs-form__body auto-rows-max container"},ti={class:"flex flex-wrap"},ni={class:"h-fit w-full flex flex-wrap"},oi={class:"w-full"},ri=e.defineComponent({__name:"filter-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),s=c=>Vt(c||{}),a=e.ref(!1),i=e.ref([]),f=()=>{const c=m.value.map(d=>s(d)).filter(d=>d.length>0);i.value=[...c],a.value=!0},m=e.computed({get:()=>(n.value||(n.value={}),Array.isArray(n.value.filters)||(n.value.filters=[]),n.value.filters),set:c=>{n.value||(n.value={}),n.value.filters=Array.isArray(c)?c:[]}});e.watch(a,c=>{c||(i.value=[])});const x=()=>{const c=new Set(i.value.map(p=>zt(p)).filter(p=>p.length>0)),d=Array.isArray(m.value)?[...m.value]:[],y=l.value.filter(p=>c.has(s(p))).map(p=>({name:s(p),label:p.title??p.label??s(p),type:p.type||"text"}));m.value=It(d,y,{selectedKeys:i.value,resolveKey:s}),a.value=!1,i.value=[]},u=[{key:"id",label:"Name"},{key:"label",label:"Назва"},{key:"type",label:"Тип"}],h={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},type:{type:"radio",label:"Тип",validators:["required"],position:"horizontal",options:[{text:"Check",id:"Check"},{text:"Range",id:"Range"},{text:"Date",id:"Date"},{text:"Text",id:"Text"},{text:"Select",id:"Select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"select",label:"Класифікатор",data:"admin.cls.name",conditions:["type","in",["select","autocomplete","check"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(c,d)=>(e.openBlock(),e.createElementBlock("div",Js,[e.createElementVNode("div",ei,[e.createElementVNode("div",ti,[d[4]||(d[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте фільтри реєстру. Оберіть поля для імпорту або відредагуйте властивості вручну. ")],-1)),e.createElementVNode("div",ni,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:f,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...d[3]||(d[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",oi,[e.createVNode(Ct,{modelValue:m.value,"onUpdate:modelValue":d[0]||(d[0]=y=>m.value=y),"columns-scheme":u,"form-scheme":h,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":d[1]||(d[1]=y=>a.value=y),selection:i.value,"onUpdate:selection":d[2]||(d[2]=y=>i.value=y),fields:l.value,title:"Імпорт фільтрів","id-prefix":"import-filter",onConfirm:x},null,8,["visible","selection","fields"])]))}}),li={class:"vs-form"},ai={class:"vs-form__body auto-rows-max container"},si={class:"flex flex-wrap"},ii={class:"h-fit w-full flex flex-wrap"},ci={class:"w-full"},di=e.defineComponent({__name:"card-tab",props:e.mergeModels({fields:{}},{data:{default:{}},dataModifiers:{},form:{},formModifiers:{}}),emits:["update:data","update:form"],setup(t){const n=e.useModel(t,"data"),o=e.useModel(t,"form"),r=t,l=e.computed(()=>Array.isArray(r.fields)?r.fields:[]),s=c=>Vt(c||{}),a=e.ref(!1),i=e.ref([]),f=()=>{const c=m.value.map(d=>s(d)).filter(d=>d.length>0);i.value=[...c],a.value=!0},m=e.computed({get:()=>n.value.card,set:c=>{n.value||(n.value={}),n.value.card=Array.isArray(c)?c:[]}});e.watch(a,c=>{var d;if(c){const y=((d=m.value)==null?void 0:d.map(p=>p.name))||[];i.value=[...y]}});const x=()=>{const c=new Set(i.value.map(p=>zt(p)).filter(p=>p.length>0)),d=Array.isArray(m.value)?[...m.value]:[],y=l.value.filter(p=>c.has(s(p))).map(p=>{const g=s(p),b=p.title??p.label??g;return{...p,name:g,label:b,format:p.format||p.type||"text",meta:p.meta||"title"}});m.value=It(d,y,{selectedKeys:i.value,resolveKey:s}),a.value=!1,i.value=[]},u=[{key:"name",label:"Name",type:"text"},{key:"label",label:"Назва",type:"text"},{key:"format",label:"Формат",type:"text"}],h={name:{type:"text",label:"Назва колонки",validators:["required"],disabled:!0},ua:{type:"text",label:"Назва",validators:["required"]},format:{type:"radio",label:"Формат",position:"horizontal",options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Badge",id:"badge"},{text:"Tags",id:"tags"}],validators:["required"]},data:{type:"text",label:"Класифікатор",conditions:["format","in",["select","badge","tags"]]}};return e.onBeforeUnmount(()=>{o.value=null}),(c,d)=>(e.openBlock(),e.createElementBlock("div",li,[e.createElementVNode("div",ai,[e.createElementVNode("div",si,[d[4]||(d[4]=e.createElementVNode("div",{class:"h-fit w-full flex flex-wrap mb-6 px-2"},[e.createElementVNode("p",{class:"text-sm text-gray-600"}," Налаштуйте відображення картки. Оберіть потрібні поля та відредагуйте їхні властивості. ")],-1)),e.createElementVNode("div",ii,[e.createElementVNode("div",{class:"flex justify-end mb-3 gap-2 w-full"},[e.createElementVNode("button",{onClick:f,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary hover:bg-primary/90 h-10 px-4 py-2 bg-gradient-to-r from-blue-600 to-blue-500 hover:from-blue-700 hover:to-blue-600 text-white"},[...d[3]||(d[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2",class:"mr-1"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Імпорт ",-1)])])]),e.createElementVNode("div",ci,[e.createVNode(Ct,{modelValue:m.value,"onUpdate:modelValue":d[0]||(d[0]=y=>m.value=y),"columns-scheme":u,"form-scheme":h,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])])])])]),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":d[1]||(d[1]=y=>a.value=y),selection:i.value,"onUpdate:selection":d[2]||(d[2]=y=>i.value=y),fields:l.value,title:"Імпорт полів картки","id-prefix":"import-card",onConfirm:x},null,8,["visible","selection","fields"])]))}}),ui=["","січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"];function Kt(t){if(!t)return"";const[n,o]=t.split(" ");if(!n)return t;const[r,l,s]=n.split("-");if(!r||!l||!s)return t;const a=parseInt(l,10),i=ui[a]||l;let f=`${parseInt(s,10)} ${i} ${r}`;if(o){const m=o.split(".")[0],[x,u,h]=m.split(":");x&&u&&h?f+=`, ${x}:${u}:${h}`:x&&u?f+=`, ${x}:${u}`:x&&(f+=`, ${x}`)}return f}function Xt(t,n={dateStyle:"short"}){if(t==null||t==="")return"";const o=new Date(t);return Number.isNaN(o.getTime())?"":new Intl.DateTimeFormat(void 0,n).format(o)}const pi={class:"flex flex-col md:flex-row md:justify-between lg:flex-row lg:justify-between p-3 md:p-3.5 lg:p-4 pb-2 bg-slate-50 gap-3 md:gap-3.5 lg:gap-4"},mi={class:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-3 lg:flex-row lg:items-center lg:justify-between lg:gap-0"},fi={class:"flex flex-col gap-2 md:flex-row md:items-center"},gi={class:"text-base md:text-base lg:text-lg font-bold line-clamp-2"},yi={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2 md:ml-2 lg:ml-2"},hi={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap","data-v0-t":"badge"},xi={key:0,class:"flex flex-wrap items-center gap-1 md:gap-1.5 lg:gap-2"},bi={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground whitespace-nowrap"},ki={class:"p-3 md:p-3.5 lg:p-4 pt-2"},wi={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-2 gap-2 md:gap-2.5 lg:gap-3 text-sm"},_i={class:"text-gray-500 shrink-0 md:max-w-[50%]"},Ei={class:"font-medium flex flex-wrap gap-1"},Ni={class:"items-center p-3 bg-slate-50 flex flex-col md:flex-row justify-end gap-2"},Ci=["href"],Vi=["href"],Oo=e.defineComponent({__name:"template-1",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),l=e.computed(()=>n.columns.find(u=>u.meta==="title")),s=e.computed(()=>n.columns.filter(u=>u.meta==="category")),a=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),i=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),f=(u,h)=>{if(h)return u[h]},m=u=>{const h=f(u,n.id_key);return`${n.path}?id=${h}`},x=(u,h)=>{const c=f(u,n.id_key);return`/map?layers=${h}&info=${h},${c}`};return(u,h)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>{var d,y,p;return e.openBlock(),e.createElementBlock("div",{key:c.id,class:"rounded-lg border bg-card text-card-foreground overflow-hidden border-none shadow-md relative","data-v0-t":"card"},[e.createElementVNode("div",pi,[e.createElementVNode("div",mi,[e.createElementVNode("div",fi,[e.createElementVNode("h2",gi,e.toDisplayString(c[`${(d=l.value)==null?void 0:d.name}_text`]||c[(y=l.value)==null?void 0:y.name]||c[(p=l.value)==null?void 0:p.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",yi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[c[g.name]?(e.openBlock(),e.createElementBlock("div",hi,e.toDisplayString(c[`${g.name}_text`]||c[g.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])]),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",xi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[c[g.name]?(e.openBlock(),e.createElementBlock("span",bi,e.toDisplayString(c[`${g.name}_text`]||c[g.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",ki,[e.createElementVNode("div",wi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-col md:flex-row md:items-center lg:flex-row lg:items-center gap-1 md:gap-1.5 lg:gap-1.5"},[e.createElementVNode("span",_i,e.toDisplayString((g==null?void 0:g.ua)||g.label||g.name)+": ",1),e.createElementVNode("span",Ei,[Array.isArray(c[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(c[(g==null?void 0:g.name)+"_text"]||c[g==null?void 0:g.name],(N,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-100 px-2 py-0 border-[0.01rem] border-gray-300 rounded-lg whitespace-nowrap"},e.toDisplayString(N),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(c[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(c[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=c[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||c[(g==null?void 0:g.name)+"_text"]||c[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Ni,[!t.hideDetailsButton&&r(c)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(c,c==null?void 0:c.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[0]||(h[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,Ci)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:m(c),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[1]||(h[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-arrow-right ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"m12 5 7 7-7 7"})],-1)])],8,Vi))])])}),128))}}),Bi={class:"p-0"},$i={class:"border-l-4 border-l-slate-400"},vi={class:"p-4"},Si={class:"flex flex-wrap items-center gap-2 mb-3"},Li={class:"text-lg font-bold"},Ai={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-green-100 text-green-800 hover:bg-green-100","data-v0-t":"badge"},Mi={key:1,class:"flex"},Ti={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},Fi={class:"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3 text-sm border-t pt-3"},Di={class:"text-xs text-gray-500 mb-1"},zi={class:"font-medium"},Ii={class:"flex justify-end gap-2 mt-3 border-t pt-3"},ji=["href"],Pi=["href"],Uo=e.defineComponent({__name:"template-2",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),l=e.computed(()=>n.columns.find(u=>u.meta==="title")),s=e.computed(()=>n.columns.filter(u=>u.meta==="category")),a=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),i=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),f=(u,h)=>{if(h)return u[h]},m=u=>{const h=f(u,n.id_key);return`${n.path}?id=${h}`},x=(u,h)=>{const c=f(u,n.id_key);return`/map?layers=${h}&info=${h},${c}`};return(u,h)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>{var d,y,p;return e.openBlock(),e.createElementBlock("div",{key:c.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden","data-v0-t":"card"},[e.createElementVNode("div",Bi,[e.createElementVNode("div",$i,[e.createElementVNode("div",vi,[e.createElementVNode("div",Si,[e.createElementVNode("h2",Li,e.toDisplayString(c[`${(d=l.value)==null?void 0:d.name}_text`]||c[(y=l.value)==null?void 0:y.name]||c[(p=l.value)==null?void 0:p.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[c[g.name]?(e.openBlock(),e.createElementBlock("div",Ai,e.toDisplayString(c[`${g.name}_text`]||c[g.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",Mi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-wrap gap-1 ml-2"},[c[g.name]?(e.openBlock(),e.createElementBlock("span",Ti,e.toDisplayString(c[`${g.name}_text`]||c[g.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Fi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name},[e.createElementVNode("p",Di,e.toDisplayString(g.ua),1),e.createElementVNode("p",zi,[Array.isArray(c[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(c[g==null?void 0:g.name],(N,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(N),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(c[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(c[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=c[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||c[(g==null?void 0:g.name)+"_text"]||c[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))]),e.createElementVNode("div",Ii,[!t.hideDetailsButton&&r(c)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(c,c==null?void 0:c.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[0]||(h[0]=[e.createTextVNode(" На карті ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map-pin-check-inside ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,ji)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:m(c),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3"},[...h[1]||(h[1]=[e.createTextVNode(" Детальніше ",-1),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-external-link ml-1 h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15 3h6v6"}),e.createElementVNode("path",{d:"M10 14 21 3"}),e.createElementVNode("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"})],-1)])],8,Pi))])])])])])}),128))}}),Ri={class:"space-y-4"},Oi={class:"flex flex-col lg:flex-row lg:items-center py-2 px-2 lg:px-3"},Ui={class:"flex-1"},qi={class:"grid grid-cols-1 lg:grid-cols-12 gap-2 w-full text-xs"},Hi={class:"col-span-1 lg:col-span-4"},Wi={class:"flex items-start"},Yi={class:"flex flex-col"},Zi={class:"font-bold text-xs lg:text-sm"},Gi={key:0,class:"flex flex-wrap gap-1 mt-1"},Ki={key:0,class:"inline-flex items-center rounded-full bg-secondary text-secondary-foreground text-[9px] lg:text-[10px] px-1.5 py-0"},Xi={key:1,class:"flex flex-wrap gap-1 mt-1"},Qi={key:0,class:"inline-flex items-center rounded-full bg-gray-100 text-gray-800 text-[10px] lg:text-xs px-2 py-0.5 font-semibold"},Ji={class:"col-span-1 lg:col-span-7 mt-2 lg:mt-0"},ec={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2 lg:gap-3"},tc={class:"text-[9px] lg:text-[10px] text-gray-500 mb-1"},nc={class:"truncate font-medium text-xs lg:text-sm"},oc={class:"flex items-center justify-center gap-2 mt-3 lg:mt-0"},rc=["href"],lc=["href"],qo=e.defineComponent({__name:"template-3",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=h=>(h==null?void 0:h.service_id)&&(h==null?void 0:h.is_map)&&h[n.id_key]&&(h==null?void 0:h.geom),l=e.computed(()=>n.columns.find(h=>h.meta==="title")),s=e.computed(()=>n.columns.filter(h=>h.meta==="category")),a=e.computed(()=>n.columns.filter(h=>h.meta==="tags")),i=e.computed(()=>n.columns.filter(h=>h.meta!=="title")),f=e.computed(()=>"bg-blue-500"),m=(h,c)=>{if(c)return h[c]},x=h=>{const c=m(h,n.id_key);return`${n.path}?id=${c}`},u=(h,c)=>{const d=m(h,n.id_key);return`/map?layers=${c}&info=${c},${d}`};return(h,c)=>(e.openBlock(),e.createElementBlock("div",Ri,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,d=>{var y,p,g;return e.openBlock(),e.createElementBlock("div",{key:d.id,class:"border-b border-slate-200 hover:bg-slate-50 transition-colors"},[e.createElementVNode("div",Oi,[e.createElementVNode("div",Ui,[e.createElementVNode("div",qi,[e.createElementVNode("div",Hi,[e.createElementVNode("div",Wi,[e.createElementVNode("div",{class:e.normalizeClass(["w-1 h-6 lg:h-8 rounded-full mr-2 lg:mr-3 mt-1",f.value])},null,2),e.createElementVNode("div",Yi,[e.createElementVNode("p",Zi,e.toDisplayString(d[`${(y=l.value)==null?void 0:y.name}_text`]||d[(p=l.value)==null?void 0:p.name]||d[(g=l.value)==null?void 0:g.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(),e.createElementBlock("div",Gi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[d[b.name]?(e.openBlock(),e.createElementBlock("span",Ki,e.toDisplayString(d[`${b.name}_text`]||d[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",Xi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,b=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:b.name},[d[b.name]?(e.openBlock(),e.createElementBlock("span",Qi,e.toDisplayString(d[`${b.name}_text`]||d[b.name]),1)):e.createCommentVNode("",!0)],64))),128))])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Ji,[e.createElementVNode("div",ec,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,b=>{var N;return e.openBlock(),e.createElementBlock("div",{key:b.name},[e.createElementVNode("p",tc,e.toDisplayString(b.ua),1),e.createElementVNode("p",nc,[Array.isArray(d[b.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(d[b.name],(V,k)=>(e.openBlock(),e.createElementBlock("span",{key:k,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 text-[10px] lg:text-xs"},e.toDisplayString(V),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[b.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(d[b.name])||"Немає даних"),1)],64)):b.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(d[b.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((N=d[b.name+"_data"])==null?void 0:N.text)||d[b.name+"_text"]||d[b.name]||"Немає даних"),1)],64))],64))])])}),128))])])])]),e.createElementVNode("div",oc,[!t.hideDetailsButton&&r(d)?(e.openBlock(),e.createElementBlock("a",{key:0,href:u(d,d.service_id),class:"inline-flex items-center justify-center gap-2 text-xs lg:text-sm font-medium hover:bg-accent hover:text-accent-foreground h-8 lg:h-9 rounded-md px-2 lg:px-3"},[...c[0]||(c[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3 w-3 lg:h-3.5 lg:w-3.5"},[e.createElementVNode("path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"}),e.createElementVNode("path",{d:"m9 10 2 2 4-4"})],-1)])],8,rc)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:x(d),class:"flex items-center justify-center hover:bg-accent hover:text-accent-foreground rounded-md h-8 w-8 lg:h-7 lg:w-7"},[...c[1]||(c[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5 lg:h-4 lg:w-4"},[e.createElementVNode("path",{d:"m9 18 6-6-6-6"})],-1)])],8,lc))])])])}),128))]))}}),ac={class:"flex flex-col space-y-1.5 p-6 pb-2"},sc={class:"flex items-center gap-2 flex-wrap"},ic={class:"tracking-tight text-lg font-medium"},cc={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent bg-blue-100 text-blue-800 ml-2","data-v0-t":"badge"},dc={key:1,class:"flex"},uc={key:0,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold border-transparent bg-gray-100 text-gray-800"},pc={class:"p-6 pt-0 pb-4"},mc={class:"grid grid-cols-1 md:grid-cols-2 gap-4"},fc={class:"text-sm text-gray-500"},gc={class:"font-medium"},yc={class:"flex items-center p-6 pt-0 gap-2"},hc=["href"],xc=["href"],Ho=e.defineComponent({__name:"template-4",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=u=>(u==null?void 0:u.service_id)&&(u==null?void 0:u.is_map)&&u[n.id_key]&&(u==null?void 0:u.geom),l=e.computed(()=>n.columns.find(u=>u.meta==="title")),s=e.computed(()=>n.columns.filter(u=>u.meta==="category")),a=e.computed(()=>n.columns.filter(u=>u.meta==="tags")),i=e.computed(()=>n.columns.filter(u=>u.meta!=="title")),f=(u,h)=>{if(h)return u[h]},m=u=>{const h=f(u,n.id_key);return`${n.path}?id=${h}`},x=(u,h)=>{const c=f(u,n.id_key);return`/map?layers=${h}&info=${h},${c}`};return(u,h)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>{var d,y,p;return e.openBlock(),e.createElementBlock("div",{key:c.id,class:"rounded-lg border bg-card text-card-foreground shadow-sm border-l-4 border-l-blue-600","data-v0-t":"card"},[e.createElementVNode("div",ac,[e.createElementVNode("div",sc,[e.createElementVNode("h3",ic,e.toDisplayString(c[`${(d=l.value)==null?void 0:d.name}_text`]||c[(y=l.value)==null?void 0:y.name]||c[(p=l.value)==null?void 0:p.label]||"Не вказано"),1),Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:g.name},[c[g.name]?(e.openBlock(),e.createElementBlock("div",cc,e.toDisplayString(c[`${g.name}_text`]||c[g.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",dc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.name,class:"flex flex-wrap gap-1 ml-2"},[c[g.name]?(e.openBlock(),e.createElementBlock("span",uc,e.toDisplayString(c[`${g.name}_text`]||c[g.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",pc,[e.createElementVNode("div",mc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,g=>{var b;return e.openBlock(),e.createElementBlock("div",{key:g.name},[e.createElementVNode("p",fc,e.toDisplayString(g.ua),1),e.createElementVNode("p",gc,[Array.isArray(c[g==null?void 0:g.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(c[g==null?void 0:g.name],(N,V)=>(e.openBlock(),e.createElementBlock("span",{key:V,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1"},e.toDisplayString(N),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[g.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(c[g==null?void 0:g.name])||"Немає даних"),1)],64)):g.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(c[g==null?void 0:g.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((b=c[(g==null?void 0:g.name)+"_data"])==null?void 0:b.text)||c[(g==null?void 0:g.name)+"_text"]||c[g==null?void 0:g.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",yc,[!t.hideDetailsButton&&r(c)?(e.openBlock(),e.createElementBlock("a",{key:0,href:x(c,c==null?void 0:c.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," На карті ",8,hc)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:m(c),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 border bg-background h-10 px-4 py-2 rounded-md text-black border-black hover:bg-gray-100 hover:text-black"}," Детальніше ",8,xc))])])}),128))}}),bc={class:"grid grid-cols-1 lg:grid-cols-12 lg:divide-x divide-y lg:divide-y-0 divide-gray-100"},kc={key:0,class:"w-full lg:w-auto lg:col-span-1"},wc=["src"],_c={key:1,class:"hidden lg:flex lg:col-span-1 items-center justify-center py-4 lg:py-0"},Ec={class:"col-span-1 lg:col-span-7 p-4 lg:p-4"},Nc={class:"flex flex-col mb-3 lg:flex-row lg:items-center lg:mb-1"},Cc={class:"text-base lg:text-base font-bold text-gray-900 mb-2 lg:mr-2 lg:mb-0"},Vc={class:"flex flex-wrap gap-2 lg:gap-0"},Bc={key:0,class:"inline-flex items-center rounded-full px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-primary/80 bg-blue-100 text-blue-800 border-0 text-xs lg:ml-2"},$c={class:"text-sm text-gray-600 line-clamp-2 lg:line-clamp-1 mb-3 lg:mb-2"},vc={class:"grid grid-cols-1 md:grid-cols-2 gap-y-3 md:gap-x-4 md:gap-y-1 text-sm"},Sc={class:"flex items-center mb-1 md:mb-0 md:mr-1 max-w-[50%]"},Lc=["innerHTML"],Ac={class:"text-gray-500 font-medium md:font-normal"},Mc={class:"text-gray-600 break-words line-clamp-2"},Tc={class:"col-span-1 lg:col-span-2 p-4 lg:p-3 bg-gray-50 flex flex-col justify-center border-t lg:border-t-0 lg:border-l border-gray-100"},Fc={class:"text-xs text-gray-500 mb-2 lg:mb-1.5"},Dc={key:0,class:"flex flex-wrap gap-1.5 lg:gap-1"},zc={key:0,class:"inline-flex items-center rounded-full font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 hover:bg-secondary/80 bg-white border border-gray-200 text-gray-700 text-xs px-2 py-0.5 lg:px-1.5 lg:py-0"},Ic={class:"col-span-1 lg:col-span-2 flex flex-col justify-center items-stretch lg:items-center bg-gray-50 border-t lg:border-t-0 lg:border-l border-gray-100 p-4 lg:p-2"},jc={class:"w-full space-y-2"},Pc=["href"],Rc=["href"],Wo=e.defineComponent({__name:"template-5",props:{items:{},item:{},columns:{},path:{},id_key:{default:"id"},query_params:{default:()=>[]},hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=t,o=e.computed(()=>n.items&&n.items.length||n.items?n.items:n.item!=null?[n.item]:[]),r=c=>(c==null?void 0:c.service_id)&&(c==null?void 0:c.is_map)&&c[n.id_key]&&(c==null?void 0:c.geom),l=e.computed(()=>n.columns.find(c=>c.meta==="title")),s=e.computed(()=>n.columns.filter(c=>c.meta==="category")),a=e.computed(()=>n.columns.filter(c=>c.meta==="tags")),i=e.computed(()=>n.columns.filter(c=>c.meta!=="title")),f=e.computed(()=>n.columns.find(c=>c.meta==="image")),m=e.computed(()=>n.columns.find(c=>c.meta==="desc")||n.columns.find(c=>c.name==="description")),x=(c,d)=>{if(d)return c[d]},u=c=>{const d=x(c,n.id_key);return`${n.path}?id=${d}`},h=(c,d)=>{const y=x(c,n.id_key);return`/map?layers=${d}&info=${d},${y}`};return(c,d)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,y=>{var p,g,b,N,V,k,E,_,B;return e.openBlock(),e.createElementBlock("div",{key:y.id,class:"bg-white border border-gray-200 rounded-lg overflow-hidden transition-all duration-200 hover:shadow-md"},[e.createElementVNode("div",bc,[f.value?(e.openBlock(),e.createElementBlock("div",kc,[y[(p=f.value)==null?void 0:p.name]?(e.openBlock(),e.createElementBlock("img",{key:0,src:y[(g=f.value)==null?void 0:g.name],alt:"image",class:"object-cover w-full h-48 lg:h-full lg:w-auto"},null,8,wc)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",_c,[...d[0]||(d[0]=[e.createElementVNode("div",{class:"w-3 h-12 rounded-sm bg-blue-500",title:"Пріоритет: Високий","aria-hidden":"true"},null,-1)])])),e.createElementVNode("div",Ec,[e.createElementVNode("div",Nc,[e.createElementVNode("h3",Cc,e.toDisplayString(y[`${(b=l.value)==null?void 0:b.name}_text`]||y[(N=l.value)==null?void 0:N.name]||y[(V=l.value)==null?void 0:V.label]||"Не вказано"),1),e.createElementVNode("div",Vc,[Array.isArray(s.value)&&s.value.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(s.value,M=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:M.name},[y[M.name]?(e.openBlock(),e.createElementBlock("div",Bc,e.toDisplayString(y[`${M.name}_text`]||y[M.name]),1)):e.createCommentVNode("",!0)],64))),128)):e.createCommentVNode("",!0)])]),e.createElementVNode("p",$c,e.toDisplayString(((E=y[((k=m.value)==null?void 0:k.name)+"_data"])==null?void 0:E.text)||y[((_=m.value)==null?void 0:_.name)+"_text"]||y[(B=m.value)==null?void 0:B.name]),1),e.createElementVNode("div",vc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,M=>{var z;return e.openBlock(),e.createElementBlock("div",{key:M.name,class:"flex flex-col md:flex-row md:items-center"},[e.createElementVNode("div",Sc,[M.icon?(e.openBlock(),e.createElementBlock("span",{key:0,class:"mr-1 flex-shrink-0",innerHTML:M.icon},null,8,Lc)):e.createCommentVNode("",!0),e.createElementVNode("span",Ac,e.toDisplayString((M==null?void 0:M.ua)||M.label||M.name)+":",1)]),e.createElementVNode("span",Mc,[Array.isArray(y[M==null?void 0:M.name])?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(y[M==null?void 0:M.name],(W,K)=>(e.openBlock(),e.createElementBlock("span",{key:K,class:"bg-gray-200 px-1 py-0.5 rounded-lg mr-1 inline-block"},e.toDisplayString(W),1))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[M.format==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(e.toDisplayString(e.unref(Xt)(y[M==null?void 0:M.name])||"Немає даних"),1)],64)):M.type==="date"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(e.unref(Kt)(y[M==null?void 0:M.name])||"Немає даних"),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(((z=y[(M==null?void 0:M.name)+"_data"])==null?void 0:z.text)||y[(M==null?void 0:M.name)+"_text"]||y[M==null?void 0:M.name]||"Немає даних"),1)],64))],64))])])}),128))])]),e.createElementVNode("div",Tc,[e.createElementVNode("p",Fc," Теги: "+e.toDisplayString(a.value.length&&y[a.value[0].name]?"":"відсутні"),1),Array.isArray(a.value)&&a.value.length?(e.openBlock(),e.createElementBlock("div",Dc,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,M=>(e.openBlock(),e.createElementBlock("div",{key:M.name,class:"flex flex-wrap gap-1"},[y[M.name]?(e.openBlock(),e.createElementBlock("span",zc,e.toDisplayString(y[`${M.name}_text`]||y[M.name]),1)):e.createCommentVNode("",!0)]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ic,[e.createElementVNode("div",jc,[!t.hideDetailsButton&&r(y)?(e.openBlock(),e.createElementBlock("a",{key:0,href:h(y,y==null?void 0:y.service_id),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," На карті ",8,Pc)):e.createCommentVNode("",!0),t.hideDetailsButton?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("a",{key:1,href:u(y),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-md px-3 w-full bg-blue-600 hover:bg-blue-700 text-white text-xs h-8"}," Детальніше ",8,Rc))])])])])}),128))}}),Yo={template1:Oo,template2:Uo,template3:qo,template4:Ho,template5:Wo},Oc={class:"space-y-4"},Uc={class:"flex items-center gap-4 bg-white border border-gray-200 rounded-lg px-6 py-4"},qc={class:"text-lg font-semibold mb-4"},Hc={class:"bg-white"},Wc={key:1,class:"text-gray-400 text-center py-12"},Yc={key:2,class:"text-gray-400 text-center py-12"},Zc=e.defineComponent({__name:"preview-tab",props:e.mergeModels({hideDetailsButton:{type:Boolean,default:!1}},{data:{default:{}},dataModifiers:{}}),emits:["update:data"],setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/form")),o=e.useModel(t,"data"),r=[{text:"template1",id:"template1"},{text:"template2",id:"template2"},{text:"template3",id:"template3"},{text:"template4",id:"template4"},{text:"template5",id:"template5"}],l={view:{type:"radio",label:"Вигляд",position:"horizontal",required:!0,options:r,col:12}},s=e.computed(()=>{var x;return Array.isArray((x=o.value)==null?void 0:x.columns)?o.value.columns:[]}),a=e.computed(()=>{var x;return((x=o.value)==null?void 0:x.view)||"template1"}),i=e.computed(()=>Yo[a.value]||Yo.template1),f=e.computed(()=>{var h;const x=(h=o.value)==null?void 0:h.view;if(!x)return"template1";const u=r.find(c=>c.id===x);return(u==null?void 0:u.text)||x}),m=e.computed(()=>(Array.isArray(o.value.tableData)?o.value.tableData:[]).slice(0,5).map(u=>{var h,c;return{...u,service_id:(h=o.value)==null?void 0:h.service_id,is_map:(c=o.value)==null?void 0:c.is_map}}));return(x,u)=>(e.openBlock(),e.createElementBlock("div",Oc,[e.createElementVNode("div",Uc,[(e.openBlock(),e.createBlock(e.unref(n),{key:o.value.id,schema:l,modelValue:o.value,"onUpdate:modelValue":u[0]||(u[0]=h=>o.value=h)},null,8,["modelValue"]))]),e.createElementVNode("h2",qc," Превʼю таблиці ("+e.toDisplayString(f.value)+") ",1),e.createElementVNode("div",Hc,[i.value&&m.value.length&&s.value.length?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value),{items:m.value,columns:s.value,path:"#",id_key:"id","hide-details-button":t.hideDetailsButton,key:a.value},null,8,["items","columns","hide-details-button"])):m.value.length?(e.openBlock(),e.createElementBlock("div",Yc," Додайте колонки та виберіть вигляд для перегляду ")):(e.openBlock(),e.createElementBlock("div",Wc," Немає даних для превʼю "))])]))}}),Gc={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},Kc={class:"mx-1"},Xc={class:"text-gray-900 font-semibold"},Qc={class:"w-full flex-shrink-0 mb-6 px-[24px]"},Jc={class:"flex items-center w-full h-10 max-w-md grid-cols-3 p-1 bg-white border border-gray-200 rounded-md text-muted-foreground"},ed=["onClick"],td={class:"flex-1 min-h-0 overflow-y-auto px-[24px]"},nd=e.defineComponent({__name:"register",props:{hideDetailsButton:{type:Boolean,default:!1}},setup(t){const n=Fe.useRoute(),o=Fe.useRouter(),r=e.computed(()=>n.path.replace(/\/[^/]+$/,"")),l=e.computed(()=>{var y;return((y=o.resolve(r.value).meta)==null?void 0:y.title)??""}),s=e.ref("list"),a=e.ref(""),i=[{name:"Список",id:"list"},{name:"Фільтри",id:"filters"},{name:"Картка",id:"card"},{name:"Перегляд",id:"preview"}],f={list:Qs,filters:ri,card:di,preview:Zc},m=i.map(y=>y.id),x=e.ref({columns:[],filters:[],card:[],tableData:[]}),u=e.ref([]),h=async()=>{var p;if(!((p=x.value)==null?void 0:p.token)){he.notify({type:"error",title:"Помилка",message:"Відсутній токен для збереження"});return}try{const g=await fetch(`/api/gis-registry/${n.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(x.value)});if(!g.ok)throw new Error(`Failed to save content: ${g.status}`);he.notify({type:"success",title:"Успіх",message:"Контент збережено"})}catch(g){he.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти контент"}),console.error(g)}},c=async y=>{try{const g=await(await fetch(`/api/gis-registry/${y}`)).json(),b=Array.isArray(g==null?void 0:g.rows)?g.rows:[];x.value.tableData=b.slice(0,3)}catch(p){console.error("Помилка завантаження превʼю:",p)}},d=async()=>{var y,p;try{const b=await(await fetch(`/api/data/gis.registers.table/${n.params.id}`)).json(),N=((y=b==null?void 0:b.rows)==null?void 0:y[0])||{};a.value=N.register_key||"",x.value={...N,columns:Array.isArray(N.columns)?N.columns:[],filters:Array.isArray(N.filters)?N.filters:[],card:Array.isArray(N.card)?N.card:[],tableData:Array.isArray(N.tableData)?N.tableData:[]},(p=b==null?void 0:b.tokens)!=null&&p.edit&&(x.value.token=b.tokens.edit),u.value=Array.isArray(b==null?void 0:b.fields)?b.fields:[]}catch(g){console.error("Помилка завантаження даних:",g)}};return e.onMounted(async()=>{const y=n.query.tab;typeof y=="string"&&m.includes(y)&&(s.value=y),await d(),a.value&&await c(a.value)}),e.watch(s,y=>{n.query.tab!==y&&o.replace({query:{...n.query,tab:y}})}),e.watch(()=>n.query.tab,y=>{typeof y=="string"&&m.includes(y)&&s.value!==y&&(s.value=y)}),(y,p)=>{const g=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",Gc,[e.createVNode(Bo,{variant:"form",title:x.value.name},{breadcrumbs:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(g,{to:r.value,class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.value),1)]),_:1},8,["to"]),e.createElementVNode("span",Kc,[e.createVNode(e.unref(Rn),{size:16,class:"shrink-0"})])],64)):e.createCommentVNode("",!0),e.createElementVNode("span",Xc,e.toDisplayString(x.value.name),1)]),description:e.withCtx(()=>[...p[2]||(p[2]=[e.createTextVNode("Налаштування реєстру",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:p[0]||(p[0]=b=>e.unref(o).back()),class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium border h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:h,class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700"}," Зберегти ")]),_:1},8,["title"]),e.createElementVNode("div",Qc,[e.createElementVNode("div",Jc,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(i,b=>e.createElementVNode("button",{key:b.id,onClick:N=>s.value=b.id,class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm data-[state=active]:bg-blue-50 data-[state=active]:text-blue-700 data-[state=active]:border-blue-200",b.id===s.value?"bg-blue-50 text-blue-700 border-blue-200":""])},e.toDisplayString(b.name),11,ed)),64))])]),e.createElementVNode("div",td,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f[s.value]),{data:x.value,"onUpdate:data":p[1]||(p[1]=b=>x.value=b),fields:u.value,"hide-details-button":t.hideDetailsButton,key:s.value},null,40,["data","fields","hide-details-button"]))])])}}});/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */function Zo(t){return typeof t>"u"||t===null}function od(t){return typeof t=="object"&&t!==null}function rd(t){return Array.isArray(t)?t:Zo(t)?[]:[t]}function ld(t,n){var o,r,l,s;if(n)for(s=Object.keys(n),o=0,r=s.length;o<r;o+=1)l=s[o],t[l]=n[l];return t}function ad(t,n){var o="",r;for(r=0;r<n;r+=1)o+=t;return o}function sd(t){return t===0&&Number.NEGATIVE_INFINITY===1/t}var id=Zo,cd=od,dd=rd,ud=ad,pd=sd,md=ld,Ye={isNothing:id,isObject:cd,toArray:dd,repeat:ud,isNegativeZero:pd,extend:md};function Go(t,n){var o="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(o+='in "'+t.mark.name+'" '),o+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!n&&t.mark.snippet&&(o+=`
|
|
209
209
|
|
|
210
|
-
`+t.mark.snippet),r+" "+o):r}function Qt(t,n){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=n,this.message=
|
|
210
|
+
`+t.mark.snippet),r+" "+o):r}function Qt(t,n){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=n,this.message=Go(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Qt.prototype=Object.create(Error.prototype),Qt.prototype.constructor=Qt,Qt.prototype.toString=function(n){return this.name+": "+Go(this,n)};var tt=Qt;function Un(t,n,o,r,l){var s="",a="",i=Math.floor(l/2)-1;return r-n>i&&(s=" ... ",n=r-i+s.length),o-r>i&&(a=" ...",o=r+i-a.length),{str:s+t.slice(n,o).replace(/\t/g,"→")+a,pos:r-n+s.length}}function qn(t,n){return Ye.repeat(" ",n-t.length)+t}function fd(t,n){if(n=Object.create(n||null),!t.buffer)return null;n.maxLength||(n.maxLength=79),typeof n.indent!="number"&&(n.indent=1),typeof n.linesBefore!="number"&&(n.linesBefore=3),typeof n.linesAfter!="number"&&(n.linesAfter=2);for(var o=/\r?\n|\r|\0/g,r=[0],l=[],s,a=-1;s=o.exec(t.buffer);)l.push(s.index),r.push(s.index+s[0].length),t.position<=s.index&&a<0&&(a=r.length-2);a<0&&(a=r.length-1);var i="",f,m,x=Math.min(t.line+n.linesAfter,l.length).toString().length,u=n.maxLength-(n.indent+x+3);for(f=1;f<=n.linesBefore&&!(a-f<0);f++)m=Un(t.buffer,r[a-f],l[a-f],t.position-(r[a]-r[a-f]),u),i=Ye.repeat(" ",n.indent)+qn((t.line-f+1).toString(),x)+" | "+m.str+`
|
|
211
211
|
`+i;for(m=Un(t.buffer,r[a],l[a],t.position,u),i+=Ye.repeat(" ",n.indent)+qn((t.line+1).toString(),x)+" | "+m.str+`
|
|
212
212
|
`,i+=Ye.repeat("-",n.indent+x+3+m.pos)+`^
|
|
213
|
-
`,
|
|
214
|
-
`;return i.replace(/\n$/,"")}var gd=fd,yd=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],hd=["scalar","sequence","mapping"];function xd(t){var n={};return t!==null&&Object.keys(t).forEach(function(o){t[o].forEach(function(r){n[String(r)]=o})}),n}function bd(t,n){if(n=n||{},Object.keys(n).forEach(function(o){if(yd.indexOf(o)===-1)throw new
|
|
215
|
-
\r`;function Ud(t){if(t===null)return!1;var n,o,r=0,l=t.length,s=Wn;for(o=0;o<l;o++)if(n=s.indexOf(t.charAt(o)),!(n>64)){if(n<0)return!1;r+=6}return r%8===0}function qd(t){var n,o,r=t.replace(/[\r\n=]/g,""),l=r.length,s=Wn,a=0,i=[];for(n=0;n<l;n++)n%4===0&&n&&(i.push(a>>16&255),i.push(a>>8&255),i.push(a&255)),a=a<<6|s.indexOf(r.charAt(n));return o=l%4*6,o===0?(i.push(a>>16&255),i.push(a>>8&255),i.push(a&255)):o===18?(i.push(a>>10&255),i.push(a>>2&255)):o===12&&i.push(a>>4&255),new Uint8Array(i)}function Hd(t){var n="",o=0,r,l,s=t.length,a=Wn;for(r=0;r<s;r++)r%3===0&&r&&(n+=a[o>>18&63],n+=a[o>>12&63],n+=a[o>>6&63],n+=a[o&63]),o=(o<<8)+t[r];return l=s%3,l===0?(n+=a[o>>18&63],n+=a[o>>12&63],n+=a[o>>6&63],n+=a[o&63]):l===2?(n+=a[o>>10&63],n+=a[o>>4&63],n+=a[o<<2&63],n+=a[64]):l===1&&(n+=a[o>>2&63],n+=a[o<<4&63],n+=a[64],n+=a[64]),n}function Wd(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var
|
|
216
|
-
`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"
":t===95?" ":t===76?"\u2028":t===80?"\u2029":""}function du(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}for(var
|
|
217
|
-
`,n-1))}function pu(t,n,o){var r,l,s,a,i,
|
|
218
|
-
`,s?1+
|
|
219
|
-
`);break}for(r?
|
|
220
|
-
`,s?1+
|
|
221
|
-
`,
|
|
222
|
-
`,
|
|
223
|
-
`,s?1+
|
|
224
|
-
`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var o=new uu(t,n),r=t.indexOf("\0");for(r!==-1&&(o.position=r,
|
|
213
|
+
`,f=1;f<=n.linesAfter&&!(a+f>=l.length);f++)m=Un(t.buffer,r[a+f],l[a+f],t.position-(r[a]-r[a+f]),u),i+=Ye.repeat(" ",n.indent)+qn((t.line+f+1).toString(),x)+" | "+m.str+`
|
|
214
|
+
`;return i.replace(/\n$/,"")}var gd=fd,yd=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],hd=["scalar","sequence","mapping"];function xd(t){var n={};return t!==null&&Object.keys(t).forEach(function(o){t[o].forEach(function(r){n[String(r)]=o})}),n}function bd(t,n){if(n=n||{},Object.keys(n).forEach(function(o){if(yd.indexOf(o)===-1)throw new tt('Unknown option "'+o+'" is met in definition of "'+t+'" YAML type.')}),this.options=n,this.tag=t,this.kind=n.kind||null,this.resolve=n.resolve||function(){return!0},this.construct=n.construct||function(o){return o},this.instanceOf=n.instanceOf||null,this.predicate=n.predicate||null,this.represent=n.represent||null,this.representName=n.representName||null,this.defaultStyle=n.defaultStyle||null,this.multi=n.multi||!1,this.styleAliases=xd(n.styleAliases||null),hd.indexOf(this.kind)===-1)throw new tt('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var Ke=bd;function Ko(t,n){var o=[];return t[n].forEach(function(r){var l=o.length;o.forEach(function(s,a){s.tag===r.tag&&s.kind===r.kind&&s.multi===r.multi&&(l=a)}),o[l]=r}),o}function kd(){var t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,o;function r(l){l.multi?(t.multi[l.kind].push(l),t.multi.fallback.push(l)):t[l.kind][l.tag]=t.fallback[l.tag]=l}for(n=0,o=arguments.length;n<o;n+=1)arguments[n].forEach(r);return t}function Hn(t){return this.extend(t)}Hn.prototype.extend=function(n){var o=[],r=[];if(n instanceof Ke)r.push(n);else if(Array.isArray(n))r=r.concat(n);else if(n&&(Array.isArray(n.implicit)||Array.isArray(n.explicit)))n.implicit&&(o=o.concat(n.implicit)),n.explicit&&(r=r.concat(n.explicit));else throw new tt("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");o.forEach(function(s){if(!(s instanceof Ke))throw new tt("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(s.loadKind&&s.loadKind!=="scalar")throw new tt("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(s.multi)throw new tt("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),r.forEach(function(s){if(!(s instanceof Ke))throw new tt("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create(Hn.prototype);return l.implicit=(this.implicit||[]).concat(o),l.explicit=(this.explicit||[]).concat(r),l.compiledImplicit=Ko(l,"implicit"),l.compiledExplicit=Ko(l,"explicit"),l.compiledTypeMap=kd(l.compiledImplicit,l.compiledExplicit),l};var Xo=Hn,Qo=new Ke("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return t!==null?t:""}}),Jo=new Ke("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return t!==null?t:[]}}),er=new Ke("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return t!==null?t:{}}}),tr=new Xo({explicit:[Qo,Jo,er]});function wd(t){if(t===null)return!0;var n=t.length;return n===1&&t==="~"||n===4&&(t==="null"||t==="Null"||t==="NULL")}function _d(){return null}function Ed(t){return t===null}var nr=new Ke("tag:yaml.org,2002:null",{kind:"scalar",resolve:wd,construct:_d,predicate:Ed,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function Nd(t){if(t===null)return!1;var n=t.length;return n===4&&(t==="true"||t==="True"||t==="TRUE")||n===5&&(t==="false"||t==="False"||t==="FALSE")}function Cd(t){return t==="true"||t==="True"||t==="TRUE"}function Vd(t){return Object.prototype.toString.call(t)==="[object Boolean]"}var or=new Ke("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Nd,construct:Cd,predicate:Vd,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function Bd(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function $d(t){return 48<=t&&t<=55}function vd(t){return 48<=t&&t<=57}function Sd(t){if(t===null)return!1;var n=t.length,o=0,r=!1,l;if(!n)return!1;if(l=t[o],(l==="-"||l==="+")&&(l=t[++o]),l==="0"){if(o+1===n)return!0;if(l=t[++o],l==="b"){for(o++;o<n;o++)if(l=t[o],l!=="_"){if(l!=="0"&&l!=="1")return!1;r=!0}return r&&l!=="_"}if(l==="x"){for(o++;o<n;o++)if(l=t[o],l!=="_"){if(!Bd(t.charCodeAt(o)))return!1;r=!0}return r&&l!=="_"}if(l==="o"){for(o++;o<n;o++)if(l=t[o],l!=="_"){if(!$d(t.charCodeAt(o)))return!1;r=!0}return r&&l!=="_"}}if(l==="_")return!1;for(;o<n;o++)if(l=t[o],l!=="_"){if(!vd(t.charCodeAt(o)))return!1;r=!0}return!(!r||l==="_")}function Ld(t){var n=t,o=1,r;if(n.indexOf("_")!==-1&&(n=n.replace(/_/g,"")),r=n[0],(r==="-"||r==="+")&&(r==="-"&&(o=-1),n=n.slice(1),r=n[0]),n==="0")return 0;if(r==="0"){if(n[1]==="b")return o*parseInt(n.slice(2),2);if(n[1]==="x")return o*parseInt(n.slice(2),16);if(n[1]==="o")return o*parseInt(n.slice(2),8)}return o*parseInt(n,10)}function Ad(t){return Object.prototype.toString.call(t)==="[object Number]"&&t%1===0&&!Ye.isNegativeZero(t)}var rr=new Ke("tag:yaml.org,2002:int",{kind:"scalar",resolve:Sd,construct:Ld,predicate:Ad,represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Md=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Td(t){return!(t===null||!Md.test(t)||t[t.length-1]==="_")}function Fd(t){var n,o;return n=t.replace(/_/g,"").toLowerCase(),o=n[0]==="-"?-1:1,"+-".indexOf(n[0])>=0&&(n=n.slice(1)),n===".inf"?o===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:n===".nan"?NaN:o*parseFloat(n,10)}var Dd=/^[-+]?[0-9]+e/;function zd(t,n){var o;if(isNaN(t))switch(n){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(n){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(n){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Ye.isNegativeZero(t))return"-0.0";return o=t.toString(10),Dd.test(o)?o.replace("e",".e"):o}function Id(t){return Object.prototype.toString.call(t)==="[object Number]"&&(t%1!==0||Ye.isNegativeZero(t))}var lr=new Ke("tag:yaml.org,2002:float",{kind:"scalar",resolve:Td,construct:Fd,predicate:Id,represent:zd,defaultStyle:"lowercase"}),ar=tr.extend({implicit:[nr,or,rr,lr]}),sr=ar,ir=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),cr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function jd(t){return t===null?!1:ir.exec(t)!==null||cr.exec(t)!==null}function Pd(t){var n,o,r,l,s,a,i,f=0,m=null,x,u,h;if(n=ir.exec(t),n===null&&(n=cr.exec(t)),n===null)throw new Error("Date resolve error");if(o=+n[1],r=+n[2]-1,l=+n[3],!n[4])return new Date(Date.UTC(o,r,l));if(s=+n[4],a=+n[5],i=+n[6],n[7]){for(f=n[7].slice(0,3);f.length<3;)f+="0";f=+f}return n[9]&&(x=+n[10],u=+(n[11]||0),m=(x*60+u)*6e4,n[9]==="-"&&(m=-m)),h=new Date(Date.UTC(o,r,l,s,a,i,f)),m&&h.setTime(h.getTime()-m),h}function Rd(t){return t.toISOString()}var dr=new Ke("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:jd,construct:Pd,instanceOf:Date,represent:Rd});function Od(t){return t==="<<"||t===null}var ur=new Ke("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Od}),Wn=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
|
|
215
|
+
\r`;function Ud(t){if(t===null)return!1;var n,o,r=0,l=t.length,s=Wn;for(o=0;o<l;o++)if(n=s.indexOf(t.charAt(o)),!(n>64)){if(n<0)return!1;r+=6}return r%8===0}function qd(t){var n,o,r=t.replace(/[\r\n=]/g,""),l=r.length,s=Wn,a=0,i=[];for(n=0;n<l;n++)n%4===0&&n&&(i.push(a>>16&255),i.push(a>>8&255),i.push(a&255)),a=a<<6|s.indexOf(r.charAt(n));return o=l%4*6,o===0?(i.push(a>>16&255),i.push(a>>8&255),i.push(a&255)):o===18?(i.push(a>>10&255),i.push(a>>2&255)):o===12&&i.push(a>>4&255),new Uint8Array(i)}function Hd(t){var n="",o=0,r,l,s=t.length,a=Wn;for(r=0;r<s;r++)r%3===0&&r&&(n+=a[o>>18&63],n+=a[o>>12&63],n+=a[o>>6&63],n+=a[o&63]),o=(o<<8)+t[r];return l=s%3,l===0?(n+=a[o>>18&63],n+=a[o>>12&63],n+=a[o>>6&63],n+=a[o&63]):l===2?(n+=a[o>>10&63],n+=a[o>>4&63],n+=a[o<<2&63],n+=a[64]):l===1&&(n+=a[o>>2&63],n+=a[o<<4&63],n+=a[64],n+=a[64]),n}function Wd(t){return Object.prototype.toString.call(t)==="[object Uint8Array]"}var pr=new Ke("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Ud,construct:qd,predicate:Wd,represent:Hd}),Yd=Object.prototype.hasOwnProperty,Zd=Object.prototype.toString;function Gd(t){if(t===null)return!0;var n=[],o,r,l,s,a,i=t;for(o=0,r=i.length;o<r;o+=1){if(l=i[o],a=!1,Zd.call(l)!=="[object Object]")return!1;for(s in l)if(Yd.call(l,s))if(!a)a=!0;else return!1;if(!a)return!1;if(n.indexOf(s)===-1)n.push(s);else return!1}return!0}function Kd(t){return t!==null?t:[]}var mr=new Ke("tag:yaml.org,2002:omap",{kind:"sequence",resolve:Gd,construct:Kd}),Xd=Object.prototype.toString;function Qd(t){if(t===null)return!0;var n,o,r,l,s,a=t;for(s=new Array(a.length),n=0,o=a.length;n<o;n+=1){if(r=a[n],Xd.call(r)!=="[object Object]"||(l=Object.keys(r),l.length!==1))return!1;s[n]=[l[0],r[l[0]]]}return!0}function Jd(t){if(t===null)return[];var n,o,r,l,s,a=t;for(s=new Array(a.length),n=0,o=a.length;n<o;n+=1)r=a[n],l=Object.keys(r),s[n]=[l[0],r[l[0]]];return s}var fr=new Ke("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:Qd,construct:Jd}),eu=Object.prototype.hasOwnProperty;function tu(t){if(t===null)return!0;var n,o=t;for(n in o)if(eu.call(o,n)&&o[n]!==null)return!1;return!0}function nu(t){return t!==null?t:{}}var gr=new Ke("tag:yaml.org,2002:set",{kind:"mapping",resolve:tu,construct:nu}),Yn=sr.extend({implicit:[dr,ur],explicit:[pr,mr,fr,gr]}),Bt=Object.prototype.hasOwnProperty,_n=1,yr=2,hr=3,En=4,Zn=1,ou=2,xr=3,ru=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,lu=/[\x85\u2028\u2029]/,au=/[,\[\]\{\}]/,br=/^(?:!|!!|![a-z\-]+!)$/i,kr=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function wr(t){return Object.prototype.toString.call(t)}function mt(t){return t===10||t===13}function Lt(t){return t===9||t===32}function nt(t){return t===9||t===32||t===10||t===13}function jt(t){return t===44||t===91||t===93||t===123||t===125}function su(t){var n;return 48<=t&&t<=57?t-48:(n=t|32,97<=n&&n<=102?n-97+10:-1)}function iu(t){return t===120?2:t===117?4:t===85?8:0}function cu(t){return 48<=t&&t<=57?t-48:-1}function _r(t){return t===48?"\0":t===97?"\x07":t===98?"\b":t===116||t===9?" ":t===110?`
|
|
216
|
+
`:t===118?"\v":t===102?"\f":t===114?"\r":t===101?"\x1B":t===32?" ":t===34?'"':t===47?"/":t===92?"\\":t===78?"
":t===95?" ":t===76?"\u2028":t===80?"\u2029":""}function du(t){return t<=65535?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}for(var Er=new Array(256),Nr=new Array(256),Pt=0;Pt<256;Pt++)Er[Pt]=_r(Pt)?1:0,Nr[Pt]=_r(Pt);function uu(t,n){this.input=t,this.filename=n.filename||null,this.schema=n.schema||Yn,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Cr(t,n){var o={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return o.snippet=gd(o),new tt(n,o)}function fe(t,n){throw Cr(t,n)}function Nn(t,n){t.onWarning&&t.onWarning.call(null,Cr(t,n))}var Vr={YAML:function(n,o,r){var l,s,a;n.version!==null&&fe(n,"duplication of %YAML directive"),r.length!==1&&fe(n,"YAML directive accepts exactly one argument"),l=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),l===null&&fe(n,"ill-formed argument of the YAML directive"),s=parseInt(l[1],10),a=parseInt(l[2],10),s!==1&&fe(n,"unacceptable YAML version of the document"),n.version=r[0],n.checkLineBreaks=a<2,a!==1&&a!==2&&Nn(n,"unsupported YAML version of the document")},TAG:function(n,o,r){var l,s;r.length!==2&&fe(n,"TAG directive accepts exactly two arguments"),l=r[0],s=r[1],br.test(l)||fe(n,"ill-formed tag handle (first argument) of the TAG directive"),Bt.call(n.tagMap,l)&&fe(n,'there is a previously declared suffix for "'+l+'" tag handle'),kr.test(s)||fe(n,"ill-formed tag prefix (second argument) of the TAG directive");try{s=decodeURIComponent(s)}catch{fe(n,"tag prefix is malformed: "+s)}n.tagMap[l]=s}};function $t(t,n,o,r){var l,s,a,i;if(n<o){if(i=t.input.slice(n,o),r)for(l=0,s=i.length;l<s;l+=1)a=i.charCodeAt(l),a===9||32<=a&&a<=1114111||fe(t,"expected valid JSON character");else ru.test(i)&&fe(t,"the stream contains non-printable characters");t.result+=i}}function Br(t,n,o,r){var l,s,a,i;for(Ye.isObject(o)||fe(t,"cannot merge mappings; the provided source object is unacceptable"),l=Object.keys(o),a=0,i=l.length;a<i;a+=1)s=l[a],Bt.call(n,s)||(n[s]=o[s],r[s]=!0)}function Rt(t,n,o,r,l,s,a,i,f){var m,x;if(Array.isArray(l))for(l=Array.prototype.slice.call(l),m=0,x=l.length;m<x;m+=1)Array.isArray(l[m])&&fe(t,"nested arrays are not supported inside keys"),typeof l=="object"&&wr(l[m])==="[object Object]"&&(l[m]="[object Object]");if(typeof l=="object"&&wr(l)==="[object Object]"&&(l="[object Object]"),l=String(l),n===null&&(n={}),r==="tag:yaml.org,2002:merge")if(Array.isArray(s))for(m=0,x=s.length;m<x;m+=1)Br(t,n,s[m],o);else Br(t,n,s,o);else!t.json&&!Bt.call(o,l)&&Bt.call(n,l)&&(t.line=a||t.line,t.lineStart=i||t.lineStart,t.position=f||t.position,fe(t,"duplicated mapping key")),l==="__proto__"?Object.defineProperty(n,l,{configurable:!0,enumerable:!0,writable:!0,value:s}):n[l]=s,delete o[l];return n}function Gn(t){var n;n=t.input.charCodeAt(t.position),n===10?t.position++:n===13?(t.position++,t.input.charCodeAt(t.position)===10&&t.position++):fe(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function qe(t,n,o){for(var r=0,l=t.input.charCodeAt(t.position);l!==0;){for(;Lt(l);)l===9&&t.firstTabInLine===-1&&(t.firstTabInLine=t.position),l=t.input.charCodeAt(++t.position);if(n&&l===35)do l=t.input.charCodeAt(++t.position);while(l!==10&&l!==13&&l!==0);if(mt(l))for(Gn(t),l=t.input.charCodeAt(t.position),r++,t.lineIndent=0;l===32;)t.lineIndent++,l=t.input.charCodeAt(++t.position);else break}return o!==-1&&r!==0&&t.lineIndent<o&&Nn(t,"deficient indentation"),r}function Cn(t){var n=t.position,o;return o=t.input.charCodeAt(n),!!((o===45||o===46)&&o===t.input.charCodeAt(n+1)&&o===t.input.charCodeAt(n+2)&&(n+=3,o=t.input.charCodeAt(n),o===0||nt(o)))}function Kn(t,n){n===1?t.result+=" ":n>1&&(t.result+=Ye.repeat(`
|
|
217
|
+
`,n-1))}function pu(t,n,o){var r,l,s,a,i,f,m,x,u=t.kind,h=t.result,c;if(c=t.input.charCodeAt(t.position),nt(c)||jt(c)||c===35||c===38||c===42||c===33||c===124||c===62||c===39||c===34||c===37||c===64||c===96||(c===63||c===45)&&(l=t.input.charCodeAt(t.position+1),nt(l)||o&&jt(l)))return!1;for(t.kind="scalar",t.result="",s=a=t.position,i=!1;c!==0;){if(c===58){if(l=t.input.charCodeAt(t.position+1),nt(l)||o&&jt(l))break}else if(c===35){if(r=t.input.charCodeAt(t.position-1),nt(r))break}else{if(t.position===t.lineStart&&Cn(t)||o&&jt(c))break;if(mt(c))if(f=t.line,m=t.lineStart,x=t.lineIndent,qe(t,!1,-1),t.lineIndent>=n){i=!0,c=t.input.charCodeAt(t.position);continue}else{t.position=a,t.line=f,t.lineStart=m,t.lineIndent=x;break}}i&&($t(t,s,a,!1),Kn(t,t.line-f),s=a=t.position,i=!1),Lt(c)||(a=t.position+1),c=t.input.charCodeAt(++t.position)}return $t(t,s,a,!1),t.result?!0:(t.kind=u,t.result=h,!1)}function mu(t,n){var o,r,l;if(o=t.input.charCodeAt(t.position),o!==39)return!1;for(t.kind="scalar",t.result="",t.position++,r=l=t.position;(o=t.input.charCodeAt(t.position))!==0;)if(o===39)if($t(t,r,t.position,!0),o=t.input.charCodeAt(++t.position),o===39)r=t.position,t.position++,l=t.position;else return!0;else mt(o)?($t(t,r,l,!0),Kn(t,qe(t,!1,n)),r=l=t.position):t.position===t.lineStart&&Cn(t)?fe(t,"unexpected end of the document within a single quoted scalar"):(t.position++,l=t.position);fe(t,"unexpected end of the stream within a single quoted scalar")}function fu(t,n){var o,r,l,s,a,i;if(i=t.input.charCodeAt(t.position),i!==34)return!1;for(t.kind="scalar",t.result="",t.position++,o=r=t.position;(i=t.input.charCodeAt(t.position))!==0;){if(i===34)return $t(t,o,t.position,!0),t.position++,!0;if(i===92){if($t(t,o,t.position,!0),i=t.input.charCodeAt(++t.position),mt(i))qe(t,!1,n);else if(i<256&&Er[i])t.result+=Nr[i],t.position++;else if((a=iu(i))>0){for(l=a,s=0;l>0;l--)i=t.input.charCodeAt(++t.position),(a=su(i))>=0?s=(s<<4)+a:fe(t,"expected hexadecimal character");t.result+=du(s),t.position++}else fe(t,"unknown escape sequence");o=r=t.position}else mt(i)?($t(t,o,r,!0),Kn(t,qe(t,!1,n)),o=r=t.position):t.position===t.lineStart&&Cn(t)?fe(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}fe(t,"unexpected end of the stream within a double quoted scalar")}function gu(t,n){var o=!0,r,l,s,a=t.tag,i,f=t.anchor,m,x,u,h,c,d=Object.create(null),y,p,g,b;if(b=t.input.charCodeAt(t.position),b===91)x=93,c=!1,i=[];else if(b===123)x=125,c=!0,i={};else return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=i),b=t.input.charCodeAt(++t.position);b!==0;){if(qe(t,!0,n),b=t.input.charCodeAt(t.position),b===x)return t.position++,t.tag=a,t.anchor=f,t.kind=c?"mapping":"sequence",t.result=i,!0;o?b===44&&fe(t,"expected the node content, but found ','"):fe(t,"missed comma between flow collection entries"),p=y=g=null,u=h=!1,b===63&&(m=t.input.charCodeAt(t.position+1),nt(m)&&(u=h=!0,t.position++,qe(t,!0,n))),r=t.line,l=t.lineStart,s=t.position,Ot(t,n,_n,!1,!0),p=t.tag,y=t.result,qe(t,!0,n),b=t.input.charCodeAt(t.position),(h||t.line===r)&&b===58&&(u=!0,b=t.input.charCodeAt(++t.position),qe(t,!0,n),Ot(t,n,_n,!1,!0),g=t.result),c?Rt(t,i,d,p,y,g,r,l,s):u?i.push(Rt(t,null,d,p,y,g,r,l,s)):i.push(y),qe(t,!0,n),b=t.input.charCodeAt(t.position),b===44?(o=!0,b=t.input.charCodeAt(++t.position)):o=!1}fe(t,"unexpected end of the stream within a flow collection")}function yu(t,n){var o,r,l=Zn,s=!1,a=!1,i=n,f=0,m=!1,x,u;if(u=t.input.charCodeAt(t.position),u===124)r=!1;else if(u===62)r=!0;else return!1;for(t.kind="scalar",t.result="";u!==0;)if(u=t.input.charCodeAt(++t.position),u===43||u===45)Zn===l?l=u===43?xr:ou:fe(t,"repeat of a chomping mode identifier");else if((x=cu(u))>=0)x===0?fe(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):a?fe(t,"repeat of an indentation width identifier"):(i=n+x-1,a=!0);else break;if(Lt(u)){do u=t.input.charCodeAt(++t.position);while(Lt(u));if(u===35)do u=t.input.charCodeAt(++t.position);while(!mt(u)&&u!==0)}for(;u!==0;){for(Gn(t),t.lineIndent=0,u=t.input.charCodeAt(t.position);(!a||t.lineIndent<i)&&u===32;)t.lineIndent++,u=t.input.charCodeAt(++t.position);if(!a&&t.lineIndent>i&&(i=t.lineIndent),mt(u)){f++;continue}if(t.lineIndent<i){l===xr?t.result+=Ye.repeat(`
|
|
218
|
+
`,s?1+f:f):l===Zn&&s&&(t.result+=`
|
|
219
|
+
`);break}for(r?Lt(u)?(m=!0,t.result+=Ye.repeat(`
|
|
220
|
+
`,s?1+f:f)):m?(m=!1,t.result+=Ye.repeat(`
|
|
221
|
+
`,f+1)):f===0?s&&(t.result+=" "):t.result+=Ye.repeat(`
|
|
222
|
+
`,f):t.result+=Ye.repeat(`
|
|
223
|
+
`,s?1+f:f),s=!0,a=!0,f=0,o=t.position;!mt(u)&&u!==0;)u=t.input.charCodeAt(++t.position);$t(t,o,t.position,!1)}return!0}function $r(t,n){var o,r=t.tag,l=t.anchor,s=[],a,i=!1,f;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=s),f=t.input.charCodeAt(t.position);f!==0&&(t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,fe(t,"tab characters must not be used in indentation")),!(f!==45||(a=t.input.charCodeAt(t.position+1),!nt(a))));){if(i=!0,t.position++,qe(t,!0,-1)&&t.lineIndent<=n){s.push(null),f=t.input.charCodeAt(t.position);continue}if(o=t.line,Ot(t,n,hr,!1,!0),s.push(t.result),qe(t,!0,-1),f=t.input.charCodeAt(t.position),(t.line===o||t.lineIndent>n)&&f!==0)fe(t,"bad indentation of a sequence entry");else if(t.lineIndent<n)break}return i?(t.tag=r,t.anchor=l,t.kind="sequence",t.result=s,!0):!1}function hu(t,n,o){var r,l,s,a,i,f,m=t.tag,x=t.anchor,u={},h=Object.create(null),c=null,d=null,y=null,p=!1,g=!1,b;if(t.firstTabInLine!==-1)return!1;for(t.anchor!==null&&(t.anchorMap[t.anchor]=u),b=t.input.charCodeAt(t.position);b!==0;){if(!p&&t.firstTabInLine!==-1&&(t.position=t.firstTabInLine,fe(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),s=t.line,(b===63||b===58)&&nt(r))b===63?(p&&(Rt(t,u,h,c,d,null,a,i,f),c=d=y=null),g=!0,p=!0,l=!0):p?(p=!1,l=!0):fe(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,b=r;else{if(a=t.line,i=t.lineStart,f=t.position,!Ot(t,o,yr,!1,!0))break;if(t.line===s){for(b=t.input.charCodeAt(t.position);Lt(b);)b=t.input.charCodeAt(++t.position);if(b===58)b=t.input.charCodeAt(++t.position),nt(b)||fe(t,"a whitespace character is expected after the key-value separator within a block mapping"),p&&(Rt(t,u,h,c,d,null,a,i,f),c=d=y=null),g=!0,p=!1,l=!1,c=t.tag,d=t.result;else if(g)fe(t,"can not read an implicit mapping pair; a colon is missed");else return t.tag=m,t.anchor=x,!0}else if(g)fe(t,"can not read a block mapping entry; a multiline key may not be an implicit key");else return t.tag=m,t.anchor=x,!0}if((t.line===s||t.lineIndent>n)&&(p&&(a=t.line,i=t.lineStart,f=t.position),Ot(t,n,En,!0,l)&&(p?d=t.result:y=t.result),p||(Rt(t,u,h,c,d,y,a,i,f),c=d=y=null),qe(t,!0,-1),b=t.input.charCodeAt(t.position)),(t.line===s||t.lineIndent>n)&&b!==0)fe(t,"bad indentation of a mapping entry");else if(t.lineIndent<n)break}return p&&Rt(t,u,h,c,d,null,a,i,f),g&&(t.tag=m,t.anchor=x,t.kind="mapping",t.result=u),g}function xu(t){var n,o=!1,r=!1,l,s,a;if(a=t.input.charCodeAt(t.position),a!==33)return!1;if(t.tag!==null&&fe(t,"duplication of a tag property"),a=t.input.charCodeAt(++t.position),a===60?(o=!0,a=t.input.charCodeAt(++t.position)):a===33?(r=!0,l="!!",a=t.input.charCodeAt(++t.position)):l="!",n=t.position,o){do a=t.input.charCodeAt(++t.position);while(a!==0&&a!==62);t.position<t.length?(s=t.input.slice(n,t.position),a=t.input.charCodeAt(++t.position)):fe(t,"unexpected end of the stream within a verbatim tag")}else{for(;a!==0&&!nt(a);)a===33&&(r?fe(t,"tag suffix cannot contain exclamation marks"):(l=t.input.slice(n-1,t.position+1),br.test(l)||fe(t,"named tag handle cannot contain such characters"),r=!0,n=t.position+1)),a=t.input.charCodeAt(++t.position);s=t.input.slice(n,t.position),au.test(s)&&fe(t,"tag suffix cannot contain flow indicator characters")}s&&!kr.test(s)&&fe(t,"tag name cannot contain such characters: "+s);try{s=decodeURIComponent(s)}catch{fe(t,"tag name is malformed: "+s)}return o?t.tag=s:Bt.call(t.tagMap,l)?t.tag=t.tagMap[l]+s:l==="!"?t.tag="!"+s:l==="!!"?t.tag="tag:yaml.org,2002:"+s:fe(t,'undeclared tag handle "'+l+'"'),!0}function bu(t){var n,o;if(o=t.input.charCodeAt(t.position),o!==38)return!1;for(t.anchor!==null&&fe(t,"duplication of an anchor property"),o=t.input.charCodeAt(++t.position),n=t.position;o!==0&&!nt(o)&&!jt(o);)o=t.input.charCodeAt(++t.position);return t.position===n&&fe(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(n,t.position),!0}function ku(t){var n,o,r;if(r=t.input.charCodeAt(t.position),r!==42)return!1;for(r=t.input.charCodeAt(++t.position),n=t.position;r!==0&&!nt(r)&&!jt(r);)r=t.input.charCodeAt(++t.position);return t.position===n&&fe(t,"name of an alias node must contain at least one character"),o=t.input.slice(n,t.position),Bt.call(t.anchorMap,o)||fe(t,'unidentified alias "'+o+'"'),t.result=t.anchorMap[o],qe(t,!0,-1),!0}function Ot(t,n,o,r,l){var s,a,i,f=1,m=!1,x=!1,u,h,c,d,y,p;if(t.listener!==null&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,s=a=i=En===o||hr===o,r&&qe(t,!0,-1)&&(m=!0,t.lineIndent>n?f=1:t.lineIndent===n?f=0:t.lineIndent<n&&(f=-1)),f===1)for(;xu(t)||bu(t);)qe(t,!0,-1)?(m=!0,i=s,t.lineIndent>n?f=1:t.lineIndent===n?f=0:t.lineIndent<n&&(f=-1)):i=!1;if(i&&(i=m||l),(f===1||En===o)&&(_n===o||yr===o?y=n:y=n+1,p=t.position-t.lineStart,f===1?i&&($r(t,p)||hu(t,p,y))||gu(t,y)?x=!0:(a&&yu(t,y)||mu(t,y)||fu(t,y)?x=!0:ku(t)?(x=!0,(t.tag!==null||t.anchor!==null)&&fe(t,"alias node should not have any properties")):pu(t,y,_n===o)&&(x=!0,t.tag===null&&(t.tag="?")),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):f===0&&(x=i&&$r(t,p))),t.tag===null)t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);else if(t.tag==="?"){for(t.result!==null&&t.kind!=="scalar"&&fe(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),u=0,h=t.implicitTypes.length;u<h;u+=1)if(d=t.implicitTypes[u],d.resolve(t.result)){t.result=d.construct(t.result),t.tag=d.tag,t.anchor!==null&&(t.anchorMap[t.anchor]=t.result);break}}else if(t.tag!=="!"){if(Bt.call(t.typeMap[t.kind||"fallback"],t.tag))d=t.typeMap[t.kind||"fallback"][t.tag];else for(d=null,c=t.typeMap.multi[t.kind||"fallback"],u=0,h=c.length;u<h;u+=1)if(t.tag.slice(0,c[u].tag.length)===c[u].tag){d=c[u];break}d||fe(t,"unknown tag !<"+t.tag+">"),t.result!==null&&d.kind!==t.kind&&fe(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+d.kind+'", not "'+t.kind+'"'),d.resolve(t.result,t.tag)?(t.result=d.construct(t.result,t.tag),t.anchor!==null&&(t.anchorMap[t.anchor]=t.result)):fe(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return t.listener!==null&&t.listener("close",t),t.tag!==null||t.anchor!==null||x}function wu(t){var n=t.position,o,r,l,s=!1,a;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);(a=t.input.charCodeAt(t.position))!==0&&(qe(t,!0,-1),a=t.input.charCodeAt(t.position),!(t.lineIndent>0||a!==37));){for(s=!0,a=t.input.charCodeAt(++t.position),o=t.position;a!==0&&!nt(a);)a=t.input.charCodeAt(++t.position);for(r=t.input.slice(o,t.position),l=[],r.length<1&&fe(t,"directive name must not be less than one character in length");a!==0;){for(;Lt(a);)a=t.input.charCodeAt(++t.position);if(a===35){do a=t.input.charCodeAt(++t.position);while(a!==0&&!mt(a));break}if(mt(a))break;for(o=t.position;a!==0&&!nt(a);)a=t.input.charCodeAt(++t.position);l.push(t.input.slice(o,t.position))}a!==0&&Gn(t),Bt.call(Vr,r)?Vr[r](t,r,l):Nn(t,'unknown document directive "'+r+'"')}if(qe(t,!0,-1),t.lineIndent===0&&t.input.charCodeAt(t.position)===45&&t.input.charCodeAt(t.position+1)===45&&t.input.charCodeAt(t.position+2)===45?(t.position+=3,qe(t,!0,-1)):s&&fe(t,"directives end mark is expected"),Ot(t,t.lineIndent-1,En,!1,!0),qe(t,!0,-1),t.checkLineBreaks&&lu.test(t.input.slice(n,t.position))&&Nn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&Cn(t)){t.input.charCodeAt(t.position)===46&&(t.position+=3,qe(t,!0,-1));return}if(t.position<t.length-1)fe(t,"end of the stream or a document separator is expected");else return}function vr(t,n){t=String(t),n=n||{},t.length!==0&&(t.charCodeAt(t.length-1)!==10&&t.charCodeAt(t.length-1)!==13&&(t+=`
|
|
224
|
+
`),t.charCodeAt(0)===65279&&(t=t.slice(1)));var o=new uu(t,n),r=t.indexOf("\0");for(r!==-1&&(o.position=r,fe(o,"null byte is not allowed in input")),o.input+="\0";o.input.charCodeAt(o.position)===32;)o.lineIndent+=1,o.position+=1;for(;o.position<o.length-1;)wu(o);return o.documents}function _u(t,n,o){n!==null&&typeof n=="object"&&typeof o>"u"&&(o=n,n=null);var r=vr(t,o);if(typeof n!="function")return r;for(var l=0,s=r.length;l<s;l+=1)n(r[l])}function Eu(t,n){var o=vr(t,n);if(o.length!==0){if(o.length===1)return o[0];throw new tt("expected a single document in the stream, but found more")}}var Nu=_u,Cu=Eu,Sr={loadAll:Nu,load:Cu},Lr=Object.prototype.toString,Ar=Object.prototype.hasOwnProperty,Xn=65279,Vu=9,Jt=10,Bu=13,$u=32,vu=33,Su=34,Qn=35,Lu=37,Au=38,Mu=39,Tu=42,Mr=44,Fu=45,Vn=58,Du=61,zu=62,Iu=63,ju=64,Tr=91,Fr=93,Pu=96,Dr=123,Ru=124,zr=125,Xe={};Xe[0]="\\0",Xe[7]="\\a",Xe[8]="\\b",Xe[9]="\\t",Xe[10]="\\n",Xe[11]="\\v",Xe[12]="\\f",Xe[13]="\\r",Xe[27]="\\e",Xe[34]='\\"',Xe[92]="\\\\",Xe[133]="\\N",Xe[160]="\\_",Xe[8232]="\\L",Xe[8233]="\\P";var Ou=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],Uu=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function qu(t,n){var o,r,l,s,a,i,f;if(n===null)return{};for(o={},r=Object.keys(n),l=0,s=r.length;l<s;l+=1)a=r[l],i=String(n[a]),a.slice(0,2)==="!!"&&(a="tag:yaml.org,2002:"+a.slice(2)),f=t.compiledTypeMap.fallback[a],f&&Ar.call(f.styleAliases,i)&&(i=f.styleAliases[i]),o[a]=i;return o}function Hu(t){var n,o,r;if(n=t.toString(16).toUpperCase(),t<=255)o="x",r=2;else if(t<=65535)o="u",r=4;else if(t<=4294967295)o="U",r=8;else throw new tt("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+o+Ye.repeat("0",r-n.length)+n}var Wu=1,en=2;function Yu(t){this.schema=t.schema||Yn,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=Ye.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=qu(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType=t.quotingType==='"'?en:Wu,this.forceQuotes=t.forceQuotes||!1,this.replacer=typeof t.replacer=="function"?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function Ir(t,n){for(var o=Ye.repeat(" ",n),r=0,l=-1,s="",a,i=t.length;r<i;)l=t.indexOf(`
|
|
225
225
|
`,r),l===-1?(a=t.slice(r),r=i):(a=t.slice(r,l+1),r=l+1),a.length&&a!==`
|
|
226
226
|
`&&(s+=o),s+=a;return s}function Jn(t,n){return`
|
|
227
|
-
`+Ye.repeat(" ",t.indent*n)}function Zu(t,n){var o,r,l;for(o=0,r=t.implicitTypes.length;o<r;o+=1)if(l=t.implicitTypes[o],l.resolve(n))return!0;return!1}function Bn(t){return t===$u||t===Vu}function tn(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==Xn||65536<=t&&t<=1114111}function
|
|
227
|
+
`+Ye.repeat(" ",t.indent*n)}function Zu(t,n){var o,r,l;for(o=0,r=t.implicitTypes.length;o<r;o+=1)if(l=t.implicitTypes[o],l.resolve(n))return!0;return!1}function Bn(t){return t===$u||t===Vu}function tn(t){return 32<=t&&t<=126||161<=t&&t<=55295&&t!==8232&&t!==8233||57344<=t&&t<=65533&&t!==Xn||65536<=t&&t<=1114111}function jr(t){return tn(t)&&t!==Xn&&t!==Bu&&t!==Jt}function Pr(t,n,o){var r=jr(t),l=r&&!Bn(t);return(o?r:r&&t!==Mr&&t!==Tr&&t!==Fr&&t!==Dr&&t!==zr)&&t!==Qn&&!(n===Vn&&!l)||jr(n)&&!Bn(n)&&t===Qn||n===Vn&&l}function Gu(t){return tn(t)&&t!==Xn&&!Bn(t)&&t!==Fu&&t!==Iu&&t!==Vn&&t!==Mr&&t!==Tr&&t!==Fr&&t!==Dr&&t!==zr&&t!==Qn&&t!==Au&&t!==Tu&&t!==vu&&t!==Ru&&t!==Du&&t!==zu&&t!==Mu&&t!==Su&&t!==Lu&&t!==ju&&t!==Pu}function Ku(t){return!Bn(t)&&t!==Vn}function nn(t,n){var o=t.charCodeAt(n),r;return o>=55296&&o<=56319&&n+1<t.length&&(r=t.charCodeAt(n+1),r>=56320&&r<=57343)?(o-55296)*1024+r-56320+65536:o}function Rr(t){var n=/^\n* /;return n.test(t)}var Or=1,eo=2,Ur=3,qr=4,Ut=5;function Xu(t,n,o,r,l,s,a,i){var f,m=0,x=null,u=!1,h=!1,c=r!==-1,d=-1,y=Gu(nn(t,0))&&Ku(nn(t,t.length-1));if(n||a)for(f=0;f<t.length;m>=65536?f+=2:f++){if(m=nn(t,f),!tn(m))return Ut;y=y&&Pr(m,x,i),x=m}else{for(f=0;f<t.length;m>=65536?f+=2:f++){if(m=nn(t,f),m===Jt)u=!0,c&&(h=h||f-d-1>r&&t[d+1]!==" ",d=f);else if(!tn(m))return Ut;y=y&&Pr(m,x,i),x=m}h=h||c&&f-d-1>r&&t[d+1]!==" "}return!u&&!h?y&&!a&&!l(t)?Or:s===en?Ut:eo:o>9&&Rr(t)?Ut:a?s===en?Ut:eo:h?qr:Ur}function Qu(t,n,o,r,l){t.dump=(function(){if(n.length===0)return t.quotingType===en?'""':"''";if(!t.noCompatMode&&(Ou.indexOf(n)!==-1||Uu.test(n)))return t.quotingType===en?'"'+n+'"':"'"+n+"'";var s=t.indent*Math.max(1,o),a=t.lineWidth===-1?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-s),i=r||t.flowLevel>-1&&o>=t.flowLevel;function f(m){return Zu(t,m)}switch(Xu(n,i,t.indent,a,f,t.quotingType,t.forceQuotes&&!r,l)){case Or:return n;case eo:return"'"+n.replace(/'/g,"''")+"'";case Ur:return"|"+Hr(n,t.indent)+Wr(Ir(n,s));case qr:return">"+Hr(n,t.indent)+Wr(Ir(Ju(n,a),s));case Ut:return'"'+ep(n)+'"';default:throw new tt("impossible error: invalid scalar style")}})()}function Hr(t,n){var o=Rr(t)?String(n):"",r=t[t.length-1]===`
|
|
228
228
|
`,l=r&&(t[t.length-2]===`
|
|
229
229
|
`||t===`
|
|
230
230
|
`),s=l?"+":r?"":"-";return o+s+`
|
|
231
|
-
`}function
|
|
231
|
+
`}function Wr(t){return t[t.length-1]===`
|
|
232
232
|
`?t.slice(0,-1):t}function Ju(t,n){for(var o=/(\n+)([^\n]*)/g,r=(function(){var m=t.indexOf(`
|
|
233
|
-
`);return m=m!==-1?m:t.length,o.lastIndex=m,
|
|
234
|
-
`||t[0]===" ",s,a;a=o.exec(t);){var i=a[1],
|
|
235
|
-
`:"")+
|
|
236
|
-
`+t.slice(l,s),l=s+1),a=i;return
|
|
237
|
-
`,t.length-l>n&&a>l?
|
|
238
|
-
`+t.slice(a+1):
|
|
239
|
-
`:""}var ap=lp,sp={dump:ap};function no(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var ip=
|
|
240
|
-
`)});return}}f.value=!0;try{const E={...y.value},B=`/api/gis-metadata/${encodeURIComponent(l.entityType)}/${encodeURIComponent(l.entityId)}`,M=await fetch(B,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)});if(!M.ok)throw new Error(`Failed to save metadata: ${M.status}`);ye.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),d.value=!1,s("saved")}catch(E){console.error("Failed to save metadata",E),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{f.value=!1}}}return(w,N)=>(e.openBlock(),e.createElementBlock("div",Up,[e.createElementVNode("div",qp,[e.createElementVNode("div",Hp,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[N[5]||(N[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:C,class:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium transition-colors bg-sky-50 text-sky-600 hover:bg-sky-100"},[...N[4]||(N[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})],-1),e.createTextVNode(" Редагувати ",-1)])])]),e.createElementVNode("div",Wp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,E=>(e.openBlock(),e.createElementBlock("div",{key:E.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",Yp,e.toDisplayString(E.label),1),e.createElementVNode("p",Zp,e.toDisplayString(E.value),1)]))),128))])]),e.createElementVNode("div",Gp,[N[6]||(N[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",Kp,e.toDisplayString(h.value),1)]),e.createElementVNode("div",Xp,[N[7]||(N[7]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Метадані ",-1)),e.createElementVNode("div",Qp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,E=>(e.openBlock(),e.createElementBlock("div",{key:E.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",Jp,e.toDisplayString(E.label),1),e.createElementVNode("p",em,e.toDisplayString(E.value),1)]))),128))])])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:d.value,"onUpdate:visible":N[3]||(N[3]=E=>d.value=E),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",tm,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:f.value,onClick:N[2]||(N[2]=E=>d.value=!1)}," Скасувати ",8,nm),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:f.value,onClick:$},e.toDisplayString(f.value?"Збереження…":"Зберегти"),9,om)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:y.value,"onUpdate:values":N[0]||(N[0]=E=>y.value=E),form:p.value,"onUpdate:form":N[1]||(N[1]=E=>p.value=E),schema:k},null,8,["values","form"])]),_:1},8,["visible"])]))}}),on="cartocss",rm={defaultToken:"",tokenPostfix:".cartocss",ignoreCase:!0,tokenizer:{root:[[/\s*\/\*/,"comment","@comment"],[/\s*"(?:[^"\\]|\\.)*"/,"string"],[/\s*'(?:[^'\\]|\\.)*'/,"string"],[/#[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\.[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\[[^\]]*\]/,"keyword"],[/::[a-zA-Z_][a-zA-Z0-9_-]*/,"tag"],[/[a-zA-Z_][a-zA-Z0-9_-]*(?=\s*:)/,"attribute.name"],[/[-]?\d+\.?\d*(px|em|%|pt)?/,"number"],[/#[0-9a-fA-F]{3,8}\b/,"string"],[/[,{};:()[\]]/,"delimiter"],[/\s+/,""]],comment:[[/\*\//,"comment","@pop"],[/[^*]+/,"comment"],[/./,"comment"]]}},lm={comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},Jr=["image-filters","image-filters-inflate","direct-image-filters","comp-op","opacity","polygon","polygon-fill","polygon-opacity","polygon-gamma","polygon-gamma-method","polygon-clip","polygon-simplify","polygon-simplify-algorithm","polygon-smooth","polygon-geometry-transform","polygon-comp-op","polygon-pattern-file","polygon-pattern-opacity","polygon-pattern-clip","polygon-pattern-alignment","polygon-pattern-gamma","polygon-pattern-simplify","polygon-pattern-simplify-algorithm","polygon-pattern-smooth","polygon-pattern-geometry-transform","polygon-pattern-transform","polygon-pattern-comp-op","line","line-color","line-width","line-opacity","line-join","line-cap","line-gamma","line-gamma-method","line-dasharray","line-dash-offset","line-miterlimit","line-clip","line-simplify","line-simplify-algorithm","line-smooth","line-offset","line-rasterizer","line-geometry-transform","line-comp-op","line-pattern-file","line-pattern-opacity","line-pattern-clip","line-pattern-simplify","line-pattern-simplify-algorithm","line-pattern-smooth","line-pattern-offset","line-pattern-geometry-transform","line-pattern-transform","line-pattern-comp-op","marker","marker-file","marker-opacity","marker-fill-opacity","marker-line-color","marker-line-width","marker-line-opacity","marker-placement","marker-multi-policy","marker-type","marker-width","marker-height","marker-fill","marker-allow-overlap","marker-avoid-edges","marker-ignore-placement","marker-spacing","marker-max-error","marker-transform","marker-clip","marker-simplify","marker-simplify-algorithm","marker-smooth","marker-geometry-transform","marker-offset","marker-comp-op","marker-direction","shield","shield-name","shield-file","shield-face-name","shield-unlock-image","shield-size","shield-fill","shield-placement","shield-avoid-edges","shield-allow-overlap","shield-margin","shield-repeat-distance","shield-min-distance","shield-spacing","shield-min-padding","shield-label-position-tolerance","shield-wrap-width","shield-wrap-before","shield-wrap-character","shield-halo-fill","shield-halo-radius","shield-halo-rasterizer","shield-halo-transform","shield-halo-comp-op","shield-halo-opacity","shield-character-spacing","shield-line-spacing","shield-text-dx","shield-text-dy","shield-dx","shield-dy","shield-opacity","shield-text-opacity","shield-horizontal-alignment","shield-vertical-alignment","shield-placement-type","shield-placements","shield-text-transform","shield-justify-alignment","shield-transform","shield-clip","shield-simplify","shield-simplify-algorithm","shield-smooth","shield-comp-op","shield-grid-cell-width","shield-grid-cell-height","raster","raster-opacity","raster-filter-factor","raster-scaling","raster-mesh-size","raster-comp-op","raster-colorizer-default-mode","raster-colorizer-default-color","raster-colorizer-epsilon","raster-colorizer-stops","point","point-file","point-allow-overlap","point-ignore-placement","point-opacity","point-placement","point-transform","point-comp-op","text","text-name","text-face-name","text-size","text-ratio","text-wrap-width","text-wrap-before","text-wrap-character","text-repeat-wrap-character","text-spacing","text-character-spacing","text-line-spacing","text-label-position-tolerance","text-max-char-angle-delta","text-fill","text-opacity","text-halo-opacity","text-halo-fill","text-halo-radius","text-halo-rasterizer","text-halo-transform","text-dx","text-dy","text-vertical-alignment","text-avoid-edges","text-margin","text-repeat-distance","text-min-distance","text-min-padding","text-min-path-length","text-allow-overlap","text-orientation","text-rotate-displacement","text-upright","text-placement","text-placement-type","text-placements","text-transform","text-horizontal-alignment","text-align","text-clip","text-simplify","text-simplify-algorithm","text-smooth","text-comp-op","text-halo-comp-op","text-font-feature-settings","text-largest-bbox-only","text-grid-cell-width","text-grid-cell-height","building","building-fill","building-fill-opacity","building-height","debug-mode","dot","dot-fill","dot-opacity","dot-width","dot-height","dot-comp-op"],am={"polygon-fill":"Fill color to assign to a polygon. Type: color.","polygon-opacity":"The opacity of the polygon (0-1). Type: float.","line-color":"The color of a drawn line. Type: color.","line-width":"The width of a line in pixels. Type: float.","line-opacity":"The opacity of a line (0-1). Type: float.","line-dasharray":"Dash pattern: pair of length values [a,b] or more. Type: numbers.","marker-fill":"The color of the area of the marker. Type: color.","marker-width":"The width of the marker in pixels. Type: float.","marker-height":"The height of the marker in pixels. Type: float.","marker-file":"A file that this marker shows at each placement. Type: uri (e.g. url('marker.png')).","text-name":"Value to use for a text label. Data columns: [column_name]. Type: string.","text-face-name":"Font name and style to render a label in. Type: string.","text-size":"Text size in pixels. Type: float.","text-fill":"Specifies the color for the text. Type: color.","text-halo-fill":"Specifies the color of the halo around the text. Type: color.","text-halo-radius":"Specify the radius of the halo in pixels. Type: float.","comp-op":"Composite operation. Defines how this layer behaves relative to layers atop or below it. Type: keyword.",opacity:"An alpha value for the style (0-1). Type: float."};let el=!1;function sm(t,n){if(n<1)return null;const r=t.substring(0,n-1).match(/[a-zA-Z_-]+$/);if(!r)return null;const l=r[0],s=n-l.length;return{prefix:l,startColumn:s,endColumn:n}}function im(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const l=r[0].replace(/\s*:$/,"").trim(),s=r.index+1,a=r.index+r[0].length,g=t.substring(a).indexOf(";"),m=g>=0?a+g+1:t.length+1;if(n>=s&&n<=m)return Jr.includes(l)?l:null}return null}function cm(t){el||(el=!0,t.languages.register({id:on}),t.languages.setMonarchTokensProvider(on,rm),t.languages.setLanguageConfiguration(on,lm),t.languages.registerCompletionItemProvider(on,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),l=sm(r,o.column),s=((l==null?void 0:l.prefix)??"").toLowerCase(),a=l&&l.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:l.startColumn,endLineNumber:o.lineNumber,endColumn:l.endColumn}:void 0;return{suggestions:Jr.filter(g=>!s||g.toLowerCase().includes(s)||g.toLowerCase().startsWith(s)).map(g=>({label:g,kind:t.languages.CompletionItemKind.Property,insertText:g+": ",...a&&{range:a}}))}}}),t.languages.registerHoverProvider(on,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),l=im(r,o.column);if(!l)return;const s=am[l];return{contents:[{value:`**${l}**
|
|
233
|
+
`);return m=m!==-1?m:t.length,o.lastIndex=m,Yr(t.slice(0,m),n)})(),l=t[0]===`
|
|
234
|
+
`||t[0]===" ",s,a;a=o.exec(t);){var i=a[1],f=a[2];s=f[0]===" ",r+=i+(!l&&!s&&f!==""?`
|
|
235
|
+
`:"")+Yr(f,n),l=s}return r}function Yr(t,n){if(t===""||t[0]===" ")return t;for(var o=/ [^ ]/g,r,l=0,s,a=0,i=0,f="";r=o.exec(t);)i=r.index,i-l>n&&(s=a>l?a:i,f+=`
|
|
236
|
+
`+t.slice(l,s),l=s+1),a=i;return f+=`
|
|
237
|
+
`,t.length-l>n&&a>l?f+=t.slice(l,a)+`
|
|
238
|
+
`+t.slice(a+1):f+=t.slice(l),f.slice(1)}function ep(t){for(var n="",o=0,r,l=0;l<t.length;o>=65536?l+=2:l++)o=nn(t,l),r=Xe[o],!r&&tn(o)?(n+=t[l],o>=65536&&(n+=t[l+1])):n+=r||Hu(o);return n}function tp(t,n,o){var r="",l=t.tag,s,a,i;for(s=0,a=o.length;s<a;s+=1)i=o[s],t.replacer&&(i=t.replacer.call(o,String(s),i)),(ht(t,n,i,!1,!1)||typeof i>"u"&&ht(t,n,null,!1,!1))&&(r!==""&&(r+=","+(t.condenseFlow?"":" ")),r+=t.dump);t.tag=l,t.dump="["+r+"]"}function Zr(t,n,o,r){var l="",s=t.tag,a,i,f;for(a=0,i=o.length;a<i;a+=1)f=o[a],t.replacer&&(f=t.replacer.call(o,String(a),f)),(ht(t,n+1,f,!0,!0,!1,!0)||typeof f>"u"&&ht(t,n+1,null,!0,!0,!1,!0))&&((!r||l!=="")&&(l+=Jn(t,n)),t.dump&&Jt===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=s,t.dump=l||"[]"}function np(t,n,o){var r="",l=t.tag,s=Object.keys(o),a,i,f,m,x;for(a=0,i=s.length;a<i;a+=1)x="",r!==""&&(x+=", "),t.condenseFlow&&(x+='"'),f=s[a],m=o[f],t.replacer&&(m=t.replacer.call(o,f,m)),ht(t,n,f,!1,!1)&&(t.dump.length>1024&&(x+="? "),x+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),ht(t,n,m,!1,!1)&&(x+=t.dump,r+=x));t.tag=l,t.dump="{"+r+"}"}function op(t,n,o,r){var l="",s=t.tag,a=Object.keys(o),i,f,m,x,u,h;if(t.sortKeys===!0)a.sort();else if(typeof t.sortKeys=="function")a.sort(t.sortKeys);else if(t.sortKeys)throw new tt("sortKeys must be a boolean or a function");for(i=0,f=a.length;i<f;i+=1)h="",(!r||l!=="")&&(h+=Jn(t,n)),m=a[i],x=o[m],t.replacer&&(x=t.replacer.call(o,m,x)),ht(t,n+1,m,!0,!0,!0)&&(u=t.tag!==null&&t.tag!=="?"||t.dump&&t.dump.length>1024,u&&(t.dump&&Jt===t.dump.charCodeAt(0)?h+="?":h+="? "),h+=t.dump,u&&(h+=Jn(t,n)),ht(t,n+1,x,!0,u)&&(t.dump&&Jt===t.dump.charCodeAt(0)?h+=":":h+=": ",h+=t.dump,l+=h));t.tag=s,t.dump=l||"{}"}function Gr(t,n,o){var r,l,s,a,i,f;for(l=o?t.explicitTypes:t.implicitTypes,s=0,a=l.length;s<a;s+=1)if(i=l[s],(i.instanceOf||i.predicate)&&(!i.instanceOf||typeof n=="object"&&n instanceof i.instanceOf)&&(!i.predicate||i.predicate(n))){if(o?i.multi&&i.representName?t.tag=i.representName(n):t.tag=i.tag:t.tag="?",i.represent){if(f=t.styleMap[i.tag]||i.defaultStyle,Lr.call(i.represent)==="[object Function]")r=i.represent(n,f);else if(Ar.call(i.represent,f))r=i.represent[f](n,f);else throw new tt("!<"+i.tag+'> tag resolver accepts not "'+f+'" style');t.dump=r}return!0}return!1}function ht(t,n,o,r,l,s,a){t.tag=null,t.dump=o,Gr(t,o,!1)||Gr(t,o,!0);var i=Lr.call(t.dump),f=r,m;r&&(r=t.flowLevel<0||t.flowLevel>n);var x=i==="[object Object]"||i==="[object Array]",u,h;if(x&&(u=t.duplicates.indexOf(o),h=u!==-1),(t.tag!==null&&t.tag!=="?"||h||t.indent!==2&&n>0)&&(l=!1),h&&t.usedDuplicates[u])t.dump="*ref_"+u;else{if(x&&h&&!t.usedDuplicates[u]&&(t.usedDuplicates[u]=!0),i==="[object Object]")r&&Object.keys(t.dump).length!==0?(op(t,n,t.dump,l),h&&(t.dump="&ref_"+u+t.dump)):(np(t,n,t.dump),h&&(t.dump="&ref_"+u+" "+t.dump));else if(i==="[object Array]")r&&t.dump.length!==0?(t.noArrayIndent&&!a&&n>0?Zr(t,n-1,t.dump,l):Zr(t,n,t.dump,l),h&&(t.dump="&ref_"+u+t.dump)):(tp(t,n,t.dump),h&&(t.dump="&ref_"+u+" "+t.dump));else if(i==="[object String]")t.tag!=="?"&&Qu(t,t.dump,n,s,f);else{if(i==="[object Undefined]")return!1;if(t.skipInvalid)return!1;throw new tt("unacceptable kind of an object to dump "+i)}t.tag!==null&&t.tag!=="?"&&(m=encodeURI(t.tag[0]==="!"?t.tag.slice(1):t.tag).replace(/!/g,"%21"),t.tag[0]==="!"?m="!"+m:m.slice(0,18)==="tag:yaml.org,2002:"?m="!!"+m.slice(18):m="!<"+m+">",t.dump=m+" "+t.dump)}return!0}function rp(t,n){var o=[],r=[],l,s;for(to(t,o,r),l=0,s=r.length;l<s;l+=1)n.duplicates.push(o[r[l]]);n.usedDuplicates=new Array(s)}function to(t,n,o){var r,l,s;if(t!==null&&typeof t=="object")if(l=n.indexOf(t),l!==-1)o.indexOf(l)===-1&&o.push(l);else if(n.push(t),Array.isArray(t))for(l=0,s=t.length;l<s;l+=1)to(t[l],n,o);else for(r=Object.keys(t),l=0,s=r.length;l<s;l+=1)to(t[r[l]],n,o)}function lp(t,n){n=n||{};var o=new Yu(n);o.noRefs||rp(t,o);var r=t;return o.replacer&&(r=o.replacer.call({"":r},"",r)),ht(o,0,r,!0,!0)?o.dump+`
|
|
239
|
+
`:""}var ap=lp,sp={dump:ap};function no(t,n){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var ip=Ke,cp=Xo,dp=tr,up=ar,pp=sr,mp=Yn,Kr=Sr.load,fp=Sr.loadAll,Xr=sp.dump,gp=tt,yp={binary:pr,float:lr,map:er,null:nr,pairs:fr,set:gr,timestamp:dr,bool:or,int:rr,merge:ur,omap:mr,seq:Jo,str:Qo},hp=no("safeLoad","load"),xp=no("safeLoadAll","loadAll"),bp=no("safeDump","dump"),Qr={Type:ip,Schema:cp,FAILSAFE_SCHEMA:dp,JSON_SCHEMA:up,CORE_SCHEMA:pp,DEFAULT_SCHEMA:mp,load:Kr,loadAll:fp,dump:Xr,YAMLException:gp,types:yp,safeLoad:hp,safeLoadAll:xp,safeDump:bp};const qt="#9ca3af";function oo(t){return!t||typeof t!="object"||Array.isArray(t)?null:{...t}}const kp={},wp={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"inline-block shrink-0"};function _p(t,n){return e.openBlock(),e.createElementBlock("svg",wp,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M8 3 4 7l4 4"},null,-1),e.createElementVNode("path",{d:"M4 7h16"},null,-1),e.createElementVNode("path",{d:"m16 21 4-4-4-4"},null,-1),e.createElementVNode("path",{d:"M20 17H4"},null,-1)])])}const Ep=xe(kp,[["render",_p]]),Np=["aria-label"],ro=e.defineComponent({__name:"PanelToggleButton",props:{open:{type:Boolean},topClass:{default:"top-5"}},emits:["toggle"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{type:"button",onClick:o[0]||(o[0]=r=>n.$emit("toggle")),class:e.normalizeClass(["absolute right-0 w-5 h-9 shrink-0 rounded-l-lg inline-flex items-center justify-center","text-gray-600 hover:bg-gray-100 hover:text-gray-800 transition border border-gray-100 shadow-md bg-white z-[21]",t.topClass]),"aria-label":t.open?"Закрити панель":"Відкрити панель"},[e.createVNode(Ep,{class:"h-3 w-3"})],10,Np))}}),Cp={},Vp={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-settings"};function Bp(t,n){return e.openBlock(),e.createElementBlock("svg",Vp,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const Jr=xe(Cp,[["render",Bp]]),$p={},vp={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers"};function Sp(t,n){return e.openBlock(),e.createElementBlock("svg",vp,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"},null,-1),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"},null,-1),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"},null,-1)])])}const Lp=xe($p,[["render",Sp]]),Ap={},Mp={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-eye"};function Tp(t,n){return e.openBlock(),e.createElementBlock("svg",Mp,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"},null,-1),e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)])])}const el=xe(Ap,[["render",Tp]]),Fp={},Dp={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-map"};function zp(t,n){return e.openBlock(),e.createElementBlock("svg",Dp,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z"},null,-1),e.createElementVNode("path",{d:"M15 5.764v15"},null,-1),e.createElementVNode("path",{d:"M9 3.236v15"},null,-1)])])}const Ip=xe(Fp,[["render",zp]]),jp={},Pp={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-filter"};function Rp(t,n){return e.openBlock(),e.createElementBlock("svg",Pp,[...n[0]||(n[0]=[e.createElementVNode("polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"},null,-1)])])}const Op=xe(jp,[["render",Rp]]),lo=e.defineComponent({__name:"SettingsIcon",setup(t){return(n,o)=>(e.openBlock(),e.createBlock(e.unref(Jl),{size:16,class:"lucide lucide-settings"}))}}),Up={class:"flex-1 overflow-y-auto p-4"},qp={class:"space-y-4"},Hp={class:"border border-gray-200 rounded-lg p-4"},Wp={class:"grid grid-cols-2 gap-2"},Yp={class:"text-xs text-gray-500 mb-1"},Zp={class:"text-sm font-semibold text-gray-900"},Gp={class:"border border-gray-200 rounded-lg p-4"},Kp={class:"text-sm text-gray-700 leading-relaxed"},Xp={class:"border border-gray-200 rounded-lg p-4"},Qp={class:"grid grid-cols-2 gap-2"},Jp={class:"text-xs text-gray-500 mb-1"},em={class:"text-sm font-semibold text-gray-900"},tm={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},nm=["disabled"],om=["disabled"],dt="-",ao=e.defineComponent({__name:"MetaDataTab",props:{data:{},entityId:{},entityType:{}},emits:["saved"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/core").then(k=>k.VsModal)),r=e.defineAsyncComponent(()=>import("@opengis/form")),l=t,s=n,a=e.ref(null);async function i(k){var E;try{const _=await fetch("/api/suggest/gis.group_list");if(!_.ok)return null;const M=(E=(await _.json()).data)==null?void 0:E.find(z=>String(z.id)===String(k));return(M==null?void 0:M.text)??null}catch{return null}}e.watch(()=>l.data,async k=>{if(a.value=null,(k==null?void 0:k.group_id)!=null){const E=await i(String(k.group_id));a.value=E}},{immediate:!0});function f(k){if(!k||typeof k!="string")return dt;try{const E=new Date(k);return Number.isNaN(E.getTime())?dt:E.toLocaleDateString("uk-UA",{day:"numeric",month:"long",year:"numeric"})}catch{return dt}}function m(k){return typeof(k==null?void 0:k.is_active)=="boolean"?k.is_active?"Активний":"Неактивний":typeof(k==null?void 0:k.enabled)=="boolean"?k.enabled?"Активний":"Неактивний":dt}function x(k){return typeof(k==null?void 0:k.is_public)!="boolean"?dt:k.is_public?"Публічний":"Приватний"}const u=e.computed(()=>{const k=l.data,E=(k==null?void 0:k.group_name)??a.value??((k==null?void 0:k.group_id)!=null?String(k.group_id):dt),_=m(k),B=x(k),M=k!=null&&k.created_at?f(k.created_at):dt;return[{label:"Група",value:E},{label:"Статус",value:_},{label:"Видимість",value:B},{label:"Створено",value:M}]}),h=e.computed(()=>{var E;const k=(E=l.data)==null?void 0:E.description;return k!=null&&k!==""?k:dt}),c=e.computed(()=>{const k=l.data,E=(k==null?void 0:k.holder)??(k==null?void 0:k.producer)??dt,_=(k==null?void 0:k.license)??dt,B=(k==null?void 0:k.year)!=null?String(k.year):dt,M=Array.isArray(k==null?void 0:k.keywords)&&k.keywords.length>0?k.keywords.join(", "):dt;return[{label:"Виробник",value:E},{label:"Ліцензія",value:_},{label:"Рік",value:B},{label:"Ключові слова",value:M}]}),d=e.ref(!1),y=e.ref({}),p=e.ref(null),g=e.ref(!1),b=[{name:"description",type:"textarea",label:"Опис",col:12},{name:"group_id",type:"Autocomplete",label:"Група",data:"gis.group_list",col:6},{name:"producer",type:"text",label:"Виробник",col:6},{name:"license",type:"text",label:"Ліцензія",col:6},{name:"year",type:"number",label:"Рік",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:12},{name:"is_public",type:"switcher",label:"Публічність",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Активність",col:6,data:"yes_no"}];function N(){const k=l.data;y.value={description:(k==null?void 0:k.description)??"",group_id:(k==null?void 0:k.group_id)!=null?String(k.group_id):"",producer:(k==null?void 0:k.holder)??(k==null?void 0:k.producer)??"",license:(k==null?void 0:k.license)??"",year:(k==null?void 0:k.year)??null,keywords:Array.isArray(k==null?void 0:k.keywords)?[...k.keywords]:[],is_public:(k==null?void 0:k.is_public)??!1,is_active:typeof(k==null?void 0:k.is_active)=="boolean"?k.is_active:(k==null?void 0:k.enabled)??!1},p.value=null,d.value=!0}async function V(){var k,E;if(!(!l.entityId||!l.entityType)){if(p.value){const _=(E=(k=p.value).validate)==null?void 0:E.call(k);if(_){he.notify({type:"warning",title:"Валідація",message:Object.entries(_).map(([B,M])=>`${B}: ${M}`).join(`
|
|
240
|
+
`)});return}}g.value=!0;try{const _={...y.value},B=`/api/gis-metadata/${encodeURIComponent(l.entityType)}/${encodeURIComponent(l.entityId)}`,M=await fetch(B,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(_)});if(!M.ok)throw new Error(`Failed to save metadata: ${M.status}`);he.notify({type:"success",title:"Збережено",message:"Метадані оновлено"}),d.value=!1,s("saved")}catch(_){console.error("Failed to save metadata",_),he.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти метадані"})}finally{g.value=!1}}}return(k,E)=>(e.openBlock(),e.createElementBlock("div",Up,[e.createElementVNode("div",qp,[e.createElementVNode("div",Hp,[e.createElementVNode("div",{class:"flex items-center justify-between mb-3"},[E[5]||(E[5]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider"}," Загальна інформація ",-1)),e.createElementVNode("button",{type:"button",onClick:N,class:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium transition-colors bg-sky-50 text-sky-600 hover:bg-sky-100"},[...E[4]||(E[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-3.5 w-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})],-1),e.createTextVNode(" Редагувати ",-1)])])]),e.createElementVNode("div",Wp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,_=>(e.openBlock(),e.createElementBlock("div",{key:_.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",Yp,e.toDisplayString(_.label),1),e.createElementVNode("p",Zp,e.toDisplayString(_.value),1)]))),128))])]),e.createElementVNode("div",Gp,[E[6]||(E[6]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Повний опис ",-1)),e.createElementVNode("p",Kp,e.toDisplayString(h.value),1)]),e.createElementVNode("div",Xp,[E[7]||(E[7]=e.createElementVNode("h2",{class:"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-3"}," Метадані ",-1)),e.createElementVNode("div",Qp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,_=>(e.openBlock(),e.createElementBlock("div",{key:_.label,class:"bg-gray-50 rounded-md p-2 border border-gray-100"},[e.createElementVNode("p",Jp,e.toDisplayString(_.label),1),e.createElementVNode("p",em,e.toDisplayString(_.value),1)]))),128))])])]),e.createVNode(e.unref(o),{teleport:"#modal",visible:d.value,"onUpdate:visible":E[3]||(E[3]=_=>d.value=_),title:"Редагування метаданих",size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",tm,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700 text-sm",disabled:g.value,onClick:E[2]||(E[2]=_=>d.value=!1)}," Скасувати ",8,nm),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white text-sm",disabled:g.value,onClick:V},e.toDisplayString(g.value?"Збереження…":"Зберегти"),9,om)])]),default:e.withCtx(()=>[e.createVNode(e.unref(r),{values:y.value,"onUpdate:values":E[0]||(E[0]=_=>y.value=_),form:p.value,"onUpdate:form":E[1]||(E[1]=_=>p.value=_),schema:b},null,8,["values","form"])]),_:1},8,["visible"])]))}}),rm=["href"],lm=["href"],am={key:0,class:"py-6 px-4 text-sm text-gray-500"},sm={key:1,class:"py-6 px-4 text-sm text-red-600"},im={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},cm=["disabled"],dm=["disabled"],um=192,tl=8,on=8,so=e.defineComponent({__name:"HeaderActions",props:{entityId:{},entityInfo:{},table:{},formEndpoint:{},saveEndpoint:{},entityLabel:{},editButtonText:{},saveMethod:{},showXmlItem:{type:Boolean,default:!0},clearTilesHandler:{}},emits:["saved"],setup(t,{emit:n}){const o=t,r=n,l=e.defineAsyncComponent(()=>import("@opengis/core").then(Z=>Z.VsModal)),s=e.defineAsyncComponent(()=>import("@opengis/form")),a=e.ref(!1),i=e.ref(null),f=e.ref(null),m=e.ref(null),x=e.ref(null),u=e.computed(()=>x.value?{position:"fixed",top:`${x.value.top}px`,left:`${x.value.left}px`}:{});e.watch(a,Z=>{Z&&e.nextTick(X)});const h=e.ref(!1),c=e.ref(null),d=e.ref({}),y=e.ref(null),p=e.ref(""),g=e.ref(!1),b=e.ref(!1),N=e.ref(null),V=e.computed(()=>o.entityId||""),k=(Z,ee)=>Z?typeof Z=="function"?Z(ee):typeof Z!="string"?"":Z.includes(":id")?ee?Z.replace(":id",encodeURIComponent(ee)):"":Z:"",E=e.computed(()=>{var Z;return(Z=o.table)==null?void 0:Z.trim()}),_=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(E.value)return Z=>`/api/form/${E.value}/${Z}`}),B=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(E.value)return Z=>`/api/table/${Z}`}),M=e.computed(()=>k(_.value,V.value)),z=e.computed(()=>o.saveEndpoint?k(o.saveEndpoint,V.value):N.value?`/api/table/${encodeURIComponent(N.value)}`:k(B.value,V.value)),W=e.computed(()=>k("/api/gis-clear-rtile/:id",V.value)),K=e.computed(()=>k("/api/gis-xml/:id",V.value)),Q=e.computed(()=>{var re,ie,se;const Z=(ie=(re=o.entityInfo)==null?void 0:re.name)==null?void 0:ie.trim();if(Z)return`Редагування ${Z}`;const ee=(se=o.entityLabel)==null?void 0:se.trim();return ee?`Редагування ${ee}`:"Редагування"}),H=e.computed(()=>o.editButtonText||"Редагувати"),J=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function O(){a.value||X(),a.value=!a.value}function T(){a.value=!1}async function D(){const Z=o.clearTilesHandler;!Z||!V.value||(T(),await Z(V.value))}function X(){var L;if(typeof window>"u"||!f.value)return;const Z=f.value.getBoundingClientRect(),ee=window.innerWidth,re=window.innerHeight,ie=Z.left,se=Math.max(ee-um-on,on),we=Math.min(Math.max(ie,on),se),P=((L=m.value)==null?void 0:L.offsetHeight)??0,te=Z.bottom+tl;let v=te;if(P&&te+P>re-on){const F=Z.top-tl-P;v=Math.max(F,on)}x.value={top:v,left:we}}function $(Z){var re,ie;if(!i.value&&!m.value)return;const ee=Z.target;ee&&((re=i.value)!=null&&re.contains(ee)||(ie=m.value)!=null&&ie.contains(ee))||(a.value=!1)}function w(){a.value&&X()}e.onMounted(()=>{window.addEventListener("click",$),window.addEventListener("resize",w),window.addEventListener("scroll",w,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",$),window.removeEventListener("resize",w),window.removeEventListener("scroll",w,!0)});async function S(){var Z,ee,re;if(!(!V.value||!M.value)){T(),h.value=!0,g.value=!0,p.value="",c.value=null,d.value={},N.value=null;try{const ie=await fetch(M.value);if(!ie.ok)throw new Error(`Failed to load form: ${ie.status}`);const se=await ie.json();d.value=(se==null?void 0:se.data)||{},c.value=(se==null?void 0:se.schema)||null;const we=typeof(se==null?void 0:se.token)=="string"&&se.token||typeof((Z=se==null?void 0:se.tokens)==null?void 0:Z.edit)=="string"&&se.tokens.edit||typeof((ee=se==null?void 0:se.tokens)==null?void 0:ee.edit_token)=="string"&&se.tokens.edit_token||typeof((re=se==null?void 0:se.data)==null?void 0:re.token)=="string"&&se.data.token||null;N.value=we,y.value=null}catch(ie){console.error("Failed to load edit form",ie),p.value="Не вдалося завантажити форму редагування"}finally{g.value=!1}}}function I(){h.value=!1,c.value=null,p.value="",N.value=null}async function Y(){var Z,ee;if(!(!V.value||!z.value)){if(y.value){const re=(ee=(Z=y.value).validate)==null?void 0:ee.call(Z);if(re){he.notify({type:"warning",title:"Validation",message:Object.entries(re).map(([ie,se])=>`${ie}: ${se}`).join(`
|
|
241
|
+
`)});return}}b.value=!0;try{const re=await fetch(z.value,{method:J.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(d.value)});if(!re.ok)throw new Error(`Failed to save: ${re.status}`);he.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",d.value),I()}catch(re){console.error("Failed to save edit form",re),he.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{b.value=!1}}}return(Z,ee)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:f,type:"button",onClick:e.withModifiers(O,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...ee[3]||(ee[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:m,style:e.normalizeStyle(u.value),class:"absolute top-0 left-0 mt-2 w-48 rounded-xl border border-gray-200 bg-white shadow-lg text-sm z-[1000]"},[W.value||t.clearTilesHandler?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[t.clearTilesHandler?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:D},[e.createVNode(e.unref(Lo),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),ee[4]||(ee[4]=e.createElementVNode("span",null,"Очистити тайли",-1))])):(e.openBlock(),e.createElementBlock("a",{key:1,href:W.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:T},[e.createVNode(e.unref(Lo),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),ee[5]||(ee[5]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,rm))],64)):e.createCommentVNode("",!0),t.showXmlItem?(e.openBlock(),e.createElementBlock("a",{key:1,href:K.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:T},[e.createVNode(e.unref(ea),{size:16,class:"lucide lucide-square-code text-gray-500"}),ee[6]||(ee[6]=e.createElementVNode("span",null,"Створити XML",-1))],8,lm)):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-b-xl",onClick:S},[e.createVNode(e.unref(Ql),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(H.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(l),{teleport:"#modal",visible:h.value,"onUpdate:visible":ee[2]||(ee[2]=re=>h.value=re),title:Q.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",im,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:I,disabled:b.value}," Скасувати ",8,cm),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:Y,disabled:b.value},e.toDisplayString(b.value?"Зберігається…":"Зберегти"),9,dm)])]),default:e.withCtx(()=>[g.value?(e.openBlock(),e.createElementBlock("div",am," Завантаження форми редагування… ")):p.value?(e.openBlock(),e.createElementBlock("div",sm,e.toDisplayString(p.value),1)):(e.openBlock(),e.createBlock(e.unref(s),{key:2,values:d.value,"onUpdate:values":ee[0]||(ee[0]=re=>d.value=re),form:y.value,"onUpdate:form":ee[1]||(ee[1]=re=>y.value=re),schema:c.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),rn="cartocss",pm={defaultToken:"",tokenPostfix:".cartocss",ignoreCase:!0,tokenizer:{root:[[/\s*\/\*/,"comment","@comment"],[/\s*"(?:[^"\\]|\\.)*"/,"string"],[/\s*'(?:[^'\\]|\\.)*'/,"string"],[/#[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\.[a-zA-Z_][a-zA-Z0-9_-]*/,"type"],[/\[[^\]]*\]/,"keyword"],[/::[a-zA-Z_][a-zA-Z0-9_-]*/,"tag"],[/[a-zA-Z_][a-zA-Z0-9_-]*(?=\s*:)/,"attribute.name"],[/[-]?\d+\.?\d*(px|em|%|pt)?/,"number"],[/#[0-9a-fA-F]{3,8}\b/,"string"],[/[,{};:()[\]]/,"delimiter"],[/\s+/,""]],comment:[[/\*\//,"comment","@pop"],[/[^*]+/,"comment"],[/./,"comment"]]}},mm={comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}]},nl=["image-filters","image-filters-inflate","direct-image-filters","comp-op","opacity","polygon","polygon-fill","polygon-opacity","polygon-gamma","polygon-gamma-method","polygon-clip","polygon-simplify","polygon-simplify-algorithm","polygon-smooth","polygon-geometry-transform","polygon-comp-op","polygon-pattern-file","polygon-pattern-opacity","polygon-pattern-clip","polygon-pattern-alignment","polygon-pattern-gamma","polygon-pattern-simplify","polygon-pattern-simplify-algorithm","polygon-pattern-smooth","polygon-pattern-geometry-transform","polygon-pattern-transform","polygon-pattern-comp-op","line","line-color","line-width","line-opacity","line-join","line-cap","line-gamma","line-gamma-method","line-dasharray","line-dash-offset","line-miterlimit","line-clip","line-simplify","line-simplify-algorithm","line-smooth","line-offset","line-rasterizer","line-geometry-transform","line-comp-op","line-pattern-file","line-pattern-opacity","line-pattern-clip","line-pattern-simplify","line-pattern-simplify-algorithm","line-pattern-smooth","line-pattern-offset","line-pattern-geometry-transform","line-pattern-transform","line-pattern-comp-op","marker","marker-file","marker-opacity","marker-fill-opacity","marker-line-color","marker-line-width","marker-line-opacity","marker-placement","marker-multi-policy","marker-type","marker-width","marker-height","marker-fill","marker-allow-overlap","marker-avoid-edges","marker-ignore-placement","marker-spacing","marker-max-error","marker-transform","marker-clip","marker-simplify","marker-simplify-algorithm","marker-smooth","marker-geometry-transform","marker-offset","marker-comp-op","marker-direction","shield","shield-name","shield-file","shield-face-name","shield-unlock-image","shield-size","shield-fill","shield-placement","shield-avoid-edges","shield-allow-overlap","shield-margin","shield-repeat-distance","shield-min-distance","shield-spacing","shield-min-padding","shield-label-position-tolerance","shield-wrap-width","shield-wrap-before","shield-wrap-character","shield-halo-fill","shield-halo-radius","shield-halo-rasterizer","shield-halo-transform","shield-halo-comp-op","shield-halo-opacity","shield-character-spacing","shield-line-spacing","shield-text-dx","shield-text-dy","shield-dx","shield-dy","shield-opacity","shield-text-opacity","shield-horizontal-alignment","shield-vertical-alignment","shield-placement-type","shield-placements","shield-text-transform","shield-justify-alignment","shield-transform","shield-clip","shield-simplify","shield-simplify-algorithm","shield-smooth","shield-comp-op","shield-grid-cell-width","shield-grid-cell-height","raster","raster-opacity","raster-filter-factor","raster-scaling","raster-mesh-size","raster-comp-op","raster-colorizer-default-mode","raster-colorizer-default-color","raster-colorizer-epsilon","raster-colorizer-stops","point","point-file","point-allow-overlap","point-ignore-placement","point-opacity","point-placement","point-transform","point-comp-op","text","text-name","text-face-name","text-size","text-ratio","text-wrap-width","text-wrap-before","text-wrap-character","text-repeat-wrap-character","text-spacing","text-character-spacing","text-line-spacing","text-label-position-tolerance","text-max-char-angle-delta","text-fill","text-opacity","text-halo-opacity","text-halo-fill","text-halo-radius","text-halo-rasterizer","text-halo-transform","text-dx","text-dy","text-vertical-alignment","text-avoid-edges","text-margin","text-repeat-distance","text-min-distance","text-min-padding","text-min-path-length","text-allow-overlap","text-orientation","text-rotate-displacement","text-upright","text-placement","text-placement-type","text-placements","text-transform","text-horizontal-alignment","text-align","text-clip","text-simplify","text-simplify-algorithm","text-smooth","text-comp-op","text-halo-comp-op","text-font-feature-settings","text-largest-bbox-only","text-grid-cell-width","text-grid-cell-height","building","building-fill","building-fill-opacity","building-height","debug-mode","dot","dot-fill","dot-opacity","dot-width","dot-height","dot-comp-op"],fm={"polygon-fill":"Fill color to assign to a polygon. Type: color.","polygon-opacity":"The opacity of the polygon (0-1). Type: float.","line-color":"The color of a drawn line. Type: color.","line-width":"The width of a line in pixels. Type: float.","line-opacity":"The opacity of a line (0-1). Type: float.","line-dasharray":"Dash pattern: pair of length values [a,b] or more. Type: numbers.","marker-fill":"The color of the area of the marker. Type: color.","marker-width":"The width of the marker in pixels. Type: float.","marker-height":"The height of the marker in pixels. Type: float.","marker-file":"A file that this marker shows at each placement. Type: uri (e.g. url('marker.png')).","text-name":"Value to use for a text label. Data columns: [column_name]. Type: string.","text-face-name":"Font name and style to render a label in. Type: string.","text-size":"Text size in pixels. Type: float.","text-fill":"Specifies the color for the text. Type: color.","text-halo-fill":"Specifies the color of the halo around the text. Type: color.","text-halo-radius":"Specify the radius of the halo in pixels. Type: float.","comp-op":"Composite operation. Defines how this layer behaves relative to layers atop or below it. Type: keyword.",opacity:"An alpha value for the style (0-1). Type: float."};let ol=!1;function gm(t,n){if(n<1)return null;const r=t.substring(0,n-1).match(/[a-zA-Z_-]+$/);if(!r)return null;const l=r[0],s=n-l.length;return{prefix:l,startColumn:s,endColumn:n}}function ym(t,n){const o=/[a-zA-Z_-]+\s*:/g;let r;for(;(r=o.exec(t))!==null;){const l=r[0].replace(/\s*:$/,"").trim(),s=r.index+1,a=r.index+r[0].length,f=t.substring(a).indexOf(";"),m=f>=0?a+f+1:t.length+1;if(n>=s&&n<=m)return nl.includes(l)?l:null}return null}function hm(t){ol||(ol=!0,t.languages.register({id:rn}),t.languages.setMonarchTokensProvider(rn,pm),t.languages.setLanguageConfiguration(rn,mm),t.languages.registerCompletionItemProvider(rn,{provideCompletionItems(n,o){const r=n.getLineContent(o.lineNumber),l=gm(r,o.column),s=((l==null?void 0:l.prefix)??"").toLowerCase(),a=l&&l.startColumn>=1?{startLineNumber:o.lineNumber,startColumn:l.startColumn,endLineNumber:o.lineNumber,endColumn:l.endColumn}:void 0;return{suggestions:nl.filter(f=>!s||f.toLowerCase().includes(s)||f.toLowerCase().startsWith(s)).map(f=>({label:f,kind:t.languages.CompletionItemKind.Property,insertText:f+": ",...a&&{range:a}}))}}}),t.languages.registerHoverProvider(rn,{provideHover(n,o){const r=n.getLineContent(o.lineNumber),l=ym(r,o.column);if(!l)return;const s=fm[l];return{contents:[{value:`**${l}**
|
|
241
242
|
|
|
242
|
-
${s??"CartoCSS property (Mapnik)."}`}]}}}))}const rn=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(null);let s=null,a=null,i=!1;function g(){return new Promise((x,u)=>{if(a)return x(a);if(window.monaco)return a=window.monaco,x(a);const h=d=>{if([...document.styleSheets].some(p=>{var f;return(f=p==null?void 0:p.href)==null?void 0:f.includes(d)}))return;const y=document.createElement("link");y.rel="stylesheet",y.href=d,document.head.appendChild(y)},c=d=>new Promise((y,p)=>{const f=document.createElement("script");f.src=d,f.onload=()=>y(!0),f.onerror=p,document.body.appendChild(f)});h("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),c("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{a=window.monaco,x(a)})}).catch(u)})}function m(){var u,h;if(!l.value||!a)return;s&&s.dispose(),s=a.editor.create(l.value,{value:o.modelValue||"",language:o.language||"yaml",theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1}}),(o.language||"yaml")==="css"&&((h=(u=a.languages)==null?void 0:u.css)!=null&&h.cssDefaults)&&a.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),s.onDidChangeModelContent(()=>{i||r("update:modelValue",s.getValue())})}return e.watch(()=>o.modelValue,x=>{if(!s)return;const u=s.getValue();x!==u&&(i=!0,s.setValue(x||""),i=!1)}),e.watch(()=>o.language,x=>{s&&a&&a.editor.setModelLanguage(s.getModel(),x||"yaml")}),e.watch(()=>o.theme,x=>{s&&a&&a.editor.setTheme(x||"vs-light")}),e.onMounted(async()=>{await g(),cm(a),m()}),e.onBeforeUnmount(()=>{s&&s.dispose()}),(x,u)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),dm={class:"flex flex-col flex-1 overflow-hidden"},um={class:"flex justify-end gap-2"},pm=["href"],mm={class:"flex flex-col flex-1 overflow-hidden"},fm={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},gm={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},ym=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleText,m=>{const x=m??"";l.value!==x&&(l.value=x)},{immediate:!0}),e.watch(l,async m=>{var u,h;const x=m??"";o.styleText!==x&&r("update:style-text",x);try{const c=m?Zr(m):null;if((u=c==null?void 0:c.colorAttr)!=null&&u.length&&((h=o.styleYaml)==null?void 0:h.colorAttr)!==c.colorAttr){const d=await s(c.colorAttr);c.colors=d.reduce((p,f,k)=>({...p,[f.id.toString()]:a[k]}),{});const y=Gr(c);y!==l.value&&(l.value=y)}JSON.stringify(c)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",c&&typeof c=="object"?c:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function s(m){return(await fetch(`/api/gis-service/${o.token}/${m}`).then(u=>u.json())).rows}const a=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],i=async()=>{const m=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:m})}),r("update"),ye.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(x){ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(x)}},g=async()=>{try{const m=await fetch(`/api/gis-clear-vtile/${o.token}`),{message:x,error:u,code:h}=await m.json();if(h===200)return ye.notify({type:"success",title:"Успіх",message:x});ye.notify({type:"error",title:"Помилка",message:u})}catch(m){ye.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.log(m)}};return(m,x)=>{const u=e.resolveComponent("BrushCleaning");return e.openBlock(),e.createElementBlock("div",dm,[e.createElementVNode("div",um,[e.createElementVNode("button",{onClick:g,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[e.createVNode(u,{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),x[1]||(x[1]=e.createElementVNode("span",null,"Очистити тайли",-1))]),e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,pm),e.createElementVNode("button",{onClick:i,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...x[2]||(x[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",mm,[e.createElementVNode("div",fm,[x[3]||(x[3]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",gm,[e.createVNode(rn,{modelValue:l.value,"onUpdate:modelValue":x[0]||(x[0]=h=>l.value=h),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])])}}});function Ht(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function St(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Ht(t[0]),o=Ht(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return St(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=Ht(o),s=Ht(r);if(l!=null&&s!=null)return[l,s]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Ht(n),l=Ht(o);return r!=null&&l!=null?[r,l]:null}return null}const tl=Symbol("MapContext");function hm(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],s=()=>{r=!0,l.length&&l.forEach(c=>c())},a=()=>{const c=t.container;return typeof c=="string"?document.getElementById(c):(c==null?void 0:c.value)!==void 0?c.value:c},i=()=>r?Promise.resolve():new Promise(c=>l.push(c)),g=(c,d)=>{if(c==null)return d;const y=Number(typeof c=="string"?c.trim():c);return Number.isFinite(y)?y:d},m=c=>{if(!n.value||!c)return;const d=St(c.center);d&&n.value.setCenter(d);const y=n.value.getZoom(),p=g(c.zoom,y);if(p!==y&&n.value.setZoom(p),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const f=n.value.getMaxZoom(),k=g(c.maxZoom,f);k!==f&&n.value.setMaxZoom(k)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const f=n.value.getMinZoom(),k=g(c.minZoom,f);k!==f&&n.value.setMinZoom(k)}c.bounds&&n.value.fitBounds(c.bounds,{animate:!1})},x=async()=>{var $,w,N,E,B,M,D;if(typeof window>"u"||n.value)return;const c=a();if(!c)throw new Error("Map container not found");const d=e.unref(t.settings)||null,y=St(($=d==null?void 0:d.map)==null?void 0:$.center)||[30,50],p=g((w=d==null?void 0:d.map)==null?void 0:w.zoom,7),f=g((N=d==null?void 0:d.map)==null?void 0:N.maxZoom,20),C={...{attributionControl:!1,center:y,zoom:p,maxZoom:f,minZoom:4},...t.mapOptions||{},container:c};C.maxZoom==null&&(C.maxZoom=f),n.value=new maplibregl.Map(C),(E=t.controls)!=null&&E.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var Q;const W=n.value.getContainer(),K=(Q=W==null?void 0:W.querySelector)==null?void 0:Q.call(W,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");K&&typeof n.value.easeTo=="function"&&K.addEventListener("click",H=>{H.preventDefault(),H.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(B=t.controls)!=null&&B.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(M=t.controls)!=null&&M.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(D=t.controls)!=null&&D.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var W;m((W=e.unref(t.settings))==null?void 0:W.map),o.value=!0,s()})};e.watch(()=>{var c;return(c=e.unref(t.settings))==null?void 0:c.map},c=>{m(c)},{deep:!0});const u=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(x),e.onUnmounted(u);const h={map:n,ready:i,flyTo:c=>{var d;return(d=n.value)==null?void 0:d.flyTo(c)},fitBounds:(c,d)=>{var y;return(y=n.value)==null?void 0:y.fitBounds(c,d)},setCenter:c=>{var d;return(d=n.value)==null?void 0:d.setCenter(c)},setZoom:c=>{var d;return(d=n.value)==null?void 0:d.setZoom(c)},addControl:(c,d)=>{var y;return(y=n.value)==null?void 0:y.addControl(c,d)},removeControl:c=>{var d;return(d=n.value)==null?void 0:d.removeControl(c)},on:(c,d,y)=>{var p,f;return typeof d=="string"?((p=n.value)==null||p.on(c,d,y),()=>{var k;return(k=n.value)==null?void 0:k.off(c,d,y)}):((f=n.value)==null||f.on(c,d),()=>{var k;return(k=n.value)==null?void 0:k.off(c,d)})},off:(c,d,y)=>{var p,f;typeof d=="string"?(p=n.value)==null||p.off(c,d,y):(f=n.value)==null||f.off(c,d)},project:c=>{var d;return(d=n.value)==null?void 0:d.project(c)},unproject:c=>{var d;return(d=n.value)==null?void 0:d.unproject(c)}};return e.provide(tl,h),h}function Pe(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(tl);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const xm=["Noto Sans Regular"],bm=12,km="#0f172a",wm="#fff",_m=14;function He(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Em(t){return t?Array.isArray(t)?t:[t]:xm}function so(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Nm(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function Cm(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Vm(t,n={}){if(!t)return[];const o=He(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Nm(o);if(!r)return[];const l=r,s=(n.geometry||t.type||"point").toString().toLowerCase(),a=He(t,["text-font","textFont"]),i=so(He(t,["text-size","textSize"]),bm),g=He(t,["text-allow-overlap","textAllowOverlap"]),m=He(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),x=He(t,["text-maxzoom","textMaxZoom","maxzoom"]),u=He(t,["text-color","textColor"])||km,h=He(t,["text-halo-color","textHaloColor"])||wm,c=He(t,["text-halo-width","textHaloWidth"]),d=He(t,["text-halo-blur","textHaloBlur"]),y=He(t,["text-offset","textOffset"]),p=He(t,["text-anchor","textAnchor"]),f=He(t,["text-justify","textJustify"]),k=He(t,["text-letter-spacing","textLetterSpacing"]),C=He(t,["text-transform","textTransform"]),$=He(t,["symbol-placement","symbolPlacement"]),w=He(t,["symbol-spacing","symbolSpacing"]),N=He(t,["text-rotation-alignment","textRotationAlignment"]),E=He(t,["text-pitch-alignment","textPitchAlignment"]),B=He(t,["text-opacity","textOpacity"]),M={"text-field":l,"text-font":Em(a),"text-size":i,"text-allow-overlap":g??!1};y&&(M["text-offset"]=y),s!=="line"&&(M["text-anchor"]=p??"center"),f&&(M["text-justify"]=f),k!==void 0&&(M["text-letter-spacing"]=k),C&&(M["text-transform"]=C),w!==void 0&&(M["symbol-spacing"]=w),s==="line"?(M["symbol-placement"]=$||"line",M["text-rotation-alignment"]=N||"map",M["text-pitch-alignment"]=E||"map"):(N&&(M["text-rotation-alignment"]=N),E&&(M["text-pitch-alignment"]=E),$&&(M["symbol-placement"]=$)),p&&s==="line"&&(M["text-anchor"]=p);const D={"text-color":u,"text-opacity":B??1};D["text-halo-color"]=h,c!==void 0&&(D["text-halo-width"]=c),d!==void 0&&(D["text-halo-blur"]=d);const W={type:"symbol",layout:M,paint:D},K=so(m,_m);if(W.minzoom=K,x!==void 0){const H=so(x,void 0);H!==void 0&&(W.maxzoom=H)}const Q=Cm(n.filter,n.excludeClusters);return Q&&(W.filter=Q),[W]}const io=new Map,co={};function uo(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,qt]}return null}function Bm(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.split("+")[0];return Object.values(t.colors).forEach(r=>{n.push(`${o}+${r.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((r,[l,s],a)=>r.concat([l,n[a]]),[]),t.icon]}function Wt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function $m(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],s=["has","point_count"],a=["!",s],m={type:"circle",maxzoom:r,filter:s,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},x={type:"symbol",maxzoom:r,filter:s,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},u={...n,filter:["all",a,n.filter||!0]};return[m,x,u]}function nl(t,n){const o=uo(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const r={type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color||qt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=$m(t,r);return l||r}function vm(t){const n=uo(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||qt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||qt}}}function Sm(t){return{type:"line",paint:{"line-color":uo(t)||t.color||qt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function Lm(t){const n=Bm(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function ol(t,n={}){if(!t)return[];if(!Am(t))return[];const o=[];t.icon&&Wt(o,Lm(t)),t.pointZoom&&Wt(o,nl(t,t.pointZoom)),t.type==="polygon"?Wt(o,vm(t)):t.type==="line"?Wt(o,Sm(t)):Wt(o,nl(t));const l=n.sourceType!=="raster"?Vm(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Wt(o,l),o.filter(Boolean)}function Am(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width||t.colorAttr&&t.colors&&typeof t.colors=="object"&&Object.keys(t.colors).length>0):!1}function rl(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let l=oo(t);if(l&&o&&(l.filter=o),l)return ol(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const s={type:"point",color:qt};return o&&(s.filter=o),ol(s,{sourceType:n})}return[]}function Mm(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function ll(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(s=>{r.push(`${l}+${s.replace("#","")}.png`)});for(const s of r){if(t.getImage(s))continue;const a=await t.loadImage(`/api/gis-icon/${s}`);t.addImage(s,a.data)}}function Se(t,n,o){var K,Q;if(!t)return co;if(!n)return co[t];const{map:r,ready:l=()=>Promise.resolve()}=Pe(o),s=t||((K=n.layer)==null?void 0:K.id),a=n.sourceId??t,i={...n};i.point&&(i.source=Mm(i.point)),!i.layer&&((Q=i.source)==null?void 0:Q.type)==="raster"&&(i.layer={id:a,type:"raster",source:a}),i.layer&&!i.layer.source&&Object.assign(i.layer,{source:a});let g=!1,m=!1;const x=()=>{var H,J,O,T,F,X,v,_,S,z;if(!(m||!r.value)){if(i.source&&!r.value.getSource(a)&&r.value.addSource(a,i.source),!r.value.getLayer(s)){const I=i.beforeId===0?(J=(H=r.value.getStyle().layers)==null?void 0:H[0])==null?void 0:J.id:i.beforeId;(T=(O=i.layer)==null?void 0:O.style)!=null&&T.icon&&ll(r.value,i.layer.style.icon,i.layer.style.colors);const G=((F=i.source)==null?void 0:F.type)||((X=i.layer)==null?void 0:X.type),te=i.layer&&(i.layer.type||i.layer.ref)?i.layer:null,oe=(v=i.layer)==null?void 0:v.style,ae=((_=i.layer)==null?void 0:_["source-layer"])||((S=i.source)==null?void 0:S["source-layer"])||i.sourceLayer||a,xe=i.style||oe,we=rl(xe,{sourceType:G,filter:(z=i.layer)==null?void 0:z.filter,allowFallback:!te});if(!we.length){if(te){const P={...te,id:te.id||s,source:te.source||a};G==="vector"&&ae&&(P["source-layer"]=P["source-layer"]||ae),r.value.addLayer(P,I)}return}we.forEach((P,ee)=>{const b={...P,id:`${s}${ee||""}`,source:a};G==="vector"&&ae&&(b["source-layer"]=ae),r.value.addLayer(b,I)})}g=!0}};l().then(x);const u=(H,J)=>r.value?(r.value.on(H,s,J),()=>{var O;return(O=r.value)==null?void 0:O.off(H,s,J)}):()=>{},h=H=>{const J=r.value;if(!J)return;const O=J.getStyle(),T=O==null?void 0:O.layers;T!=null&&T.length&&T.filter(F=>F.source===s).forEach(F=>{J.setLayoutProperty(F.id,"visibility",H?"visible":"none")})},c=(H=!0)=>{var O,T,F;if(!r.value)return;(((F=(T=(O=r.value).getStyle)==null?void 0:T.call(O))==null?void 0:F.layers)??[]).filter(X=>X.source===s).forEach(X=>{r.value.removeLayer(X.id)}),m=!0,i.source&&H&&r.value.getSource(a)&&r.value.removeSource(a)},d=async H=>{var F,X,v,_,S;if(!r.value)return;H!=null&&H.icon&&ll(r.value,H.icon,H.colors);const J=((F=i.source)==null?void 0:F.type)||((X=i.layer)==null?void 0:X.type),O=((v=i.layer)==null?void 0:v["source-layer"])||((_=i.source)==null?void 0:_["source-layer"])||i.sourceLayer||a,T=rl(H,{sourceType:J,filter:(S=i.layer)==null?void 0:S.filter,allowFallback:!0});c(!1),T.forEach((z,I)=>{var te;const G={...z,id:`${s}${I}`,source:((te=i.layer)==null?void 0:te.source)||a};J==="vector"&&O&&(G["source-layer"]=G["source-layer"]||O),r.value.addLayer(G)})},y=H=>{r.value&&Object.entries(H).forEach(([J,O])=>{r.value.setPaintProperty(s,J,O)})},p=(H,J,O)=>{const T=r.value;if(T)switch(J){case"raster":T.setPaintProperty(H,"raster-opacity",O);break;case"fill":T.setPaintProperty(H,"fill-opacity",O);break;case"line":T.setPaintProperty(H,"line-opacity",O);break;case"circle":T.setPaintProperty(H,"circle-opacity",O);break;case"symbol":T.setPaintProperty(H,"icon-opacity",O),T.setPaintProperty(H,"text-opacity",O);break}},M={ids:{layerId:s,sourceId:a},isMounted:()=>{var H;return g&&!!((H=r.value)!=null&&H.getLayer(s))},setVisible:h,updatePaint:y,updateLayout:H=>{r.value&&Object.entries(H).forEach(([J,O])=>{r.value.setLayoutProperty(s,J,O)})},updateFilter:H=>{r.value&&r.value.setFilter(s,H)},setOpacity:H=>{var T;if(!r.value)return;const O=(((T=r.value.getStyle())==null?void 0:T.layers)||[]).filter(F=>F.source===a);if(!O.length){const F=r.value.getLayer(s);F&&p(s,F.type,H);return}O.forEach(F=>p(F.id,F.type,H))},setData:H=>{if(!r.value)return;const J=r.value.getSource(a);J&&"setData"in J&&J.setData(H)},setTiles:H=>{if(!r.value)return;const J=r.value.getSource(a);J&&"setTiles"in J&&J.setTiles(H)},setStyle:d,setFilter:H=>{var O,T;if(!r.value)return;const J=r.value.getSource(a);if(J&&"setTiles"in J&&((T=(O=i.source)==null?void 0:O.tiles)!=null&&T[0])){const F=i.source.tiles[0];J.setTiles([`${F}${F.includes("?")?"&":"?"}filter=${H}`])}},setFeatureState:(H,J)=>{r.value&&r.value.setFeatureState({source:a,...H},J)},removeFeatureState:(H,J)=>{r.value&&r.value.removeFeatureState({source:a,...H},J?{key:J}:void 0)},remove:c,card:i.card,popup:i.popup,opts:i,getSource:()=>{var H;return(H=r.value)==null?void 0:H.getSource(a)},getLayer:()=>{var H;return(H=r.value)==null?void 0:H.getLayer(s)},on:u};io.set(s,M);const D=()=>{io.get(s)===M&&io.delete(s)},W=M.remove;return M.remove=()=>{D(),W()},e.onBeforeUnmount(M.remove),co[t]=M,M}const Tm={class:"flex flex-col flex-1 min-h-0"},Fm={class:"flex flex-col flex-1 min-h-0"},Dm=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,d=>l.value=d||[],{immediate:!0}),e.watch(l,d=>{const y=Se(o.token);y&&(y.popup=d),r("update:columns",d)});const s=e.ref("list"),a=e.ref(!1),i=e.ref([]),g=[{key:"name",label:"Назва",type:"main"}],m={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"text",label:"Data"}};function x(){i.value=l.value.map(d=>d.name||d.id),a.value=!0}function u(){var f;const d=[...l.value],y=((f=o.fields)==null?void 0:f.filter(k=>i.value.includes(k.name)))||[],p=It(d,y,{selectedKeys:i.value,resolveKey:k=>Nt(k)});l.value=p,a.value=!1,i.value=[]}function h(){a.value=!1,i.value=[]}function c(){let d=[];s.value==="all"?d=o.fields||[]:s.value==="none"?d=[]:d=l.value,d.filter(y=>!y.label).forEach(y=>y.label=y.ua),r("save",d)}return(d,y)=>(e.openBlock(),e.createElementBlock("div",Tm,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Fm,[s.value==="list"?(e.openBlock(),e.createBlock(Et,{key:0,modelValue:l.value,"onUpdate:modelValue":y[0]||(y[0]=p=>l.value=p),"columns-scheme":g,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":y[1]||(y[1]=p=>a.value=p),selection:i.value,"onUpdate:selection":y[2]||(y[2]=p=>i.value=p),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:u,onCancel:h},null,8,["visible","selection","fields"])]))}}),zm={class:"flex flex-col flex-1 min-h-0"},Im={class:"flex justify-between mb-3 gap-2"},jm={class:"p-4 space-y-4 text-sm"},Pm={class:"space-y-1"},Rm={class:"space-y-1"},Om={class:"flex items-center gap-3"},Um={class:"flex justify-end gap-2 p-4 border-t"},qm=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,d=>{l.value=d||[]}),e.watch(l,d=>{r("update:columns",d)});const s=e.ref(!1),a=e.ref({name:"",color:"#2E86DE"}),i=e.defineAsyncComponent(()=>import("@opengis/core").then(d=>d.VsModal)),g=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],m={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function x(d){d&&u(),s.value=d}function u(){a.value={name:"",color:"#2E86DE"}}function h(){var f,k;const d=(f=a.value.name)==null?void 0:f.trim();if(!d){ye.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const y=((k=a.value.color)==null?void 0:k.trim())||"#2E86DE";if(l.value.some(C=>Nt(C)===Nt({name:d}))){ye.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:d,color:y}],u(),s.value=!1}function c(){r("save",l.value)}return(d,y)=>(e.openBlock(),e.createElementBlock("div",zm,[e.createElementVNode("div",Im,[e.createElementVNode("button",{onClick:y[0]||(y[0]=p=>s.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Et,{modelValue:l.value,"onUpdate:modelValue":y[1]||(y[1]=p=>l.value=p),"columns-scheme":g,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(i),{teleport:"#modal",visible:s.value,title:"Новий елемент легенди","onUpdate:visible":x},{footer:e.withCtx(()=>[e.createElementVNode("div",Um,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:y[5]||(y[5]=p=>x(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:h}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",jm,[e.createElementVNode("div",Pm,[y[6]||(y[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[2]||(y[2]=p=>a.value.name=p),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,a.value.name]])]),e.createElementVNode("div",Rm,[y[7]||(y[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Om,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[3]||(y[3]=p=>a.value.color=p),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,a.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[4]||(y[4]=p=>a.value.color=p),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,a.value.color]])])])])]),_:1},8,["visible"])]))}}),Hm={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},Wm=["onClick"],Ym=["aria-checked","value"],Zm={key:0},Gm=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=a=>r("update:modelValue",a),s=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(a,i)=>(e.openBlock(),e.createElementBlock("div",Hm,[i[1]||(i[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(s).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),g=>(e.openBlock(),e.createElementBlock("div",{key:g.value,onClick:m=>l(g.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===g.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===g.value,value:g.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===g.value?(e.openBlock(),e.createElementBlock("span",Zm,[...i[0]||(i[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,Ym),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===g.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(g.label),3)],10,Wm))),128))],2)]))}}),Km={class:"flex flex-col flex-1 min-h-0"},Xm={class:"flex flex-col flex-1 min-h-0"},Qm=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,p=>l.value=p||[],{immediate:!0}),e.watch(l,p=>r("update:columns",p));const s=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,p=>{p&&p!==s.value&&(s.value=p)});const a=e.ref(o.html??"");e.watch(()=>o.html,p=>{typeof p=="string"&&p!==a.value&&(a.value=p)},{immediate:!0});const i=e.ref(!1),g=e.ref([]),m=[{key:"name",label:"Name",type:"main"}],x={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"text",label:"Data"}};function u(){g.value=s.value==="html"?[]:l.value.map(p=>p.name||p.id),i.value=!0}function h(){var C;const p=[...l.value],f=((C=o.fields)==null?void 0:C.filter($=>g.value.includes($.name)).map($=>{const{type:w,format:N,...E}=$;return{...E,format:N??w??"text"}}))||[],k=It(p,f,{selectedKeys:g.value,resolveKey:$=>Nt($)});if(l.value=k,s.value==="html"&&f.length){const $=f.map(E=>{const B=E.label??"",M=E.name??E.id??"";return`<dd>${B}</dd>
|
|
243
|
+
${s??"CartoCSS property (Mapnik)."}`}]}}}))}const ln=e.defineComponent({__name:"MonacoEditor",props:{modelValue:{},language:{},theme:{}},emits:["update:modelValue","load"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(null);let s=null,a=null,i=!1;function f(){return new Promise((x,u)=>{if(a)return x(a);if(window.monaco)return a=window.monaco,x(a);const h=d=>{if([...document.styleSheets].some(p=>{var g;return(g=p==null?void 0:p.href)==null?void 0:g.includes(d)}))return;const y=document.createElement("link");y.rel="stylesheet",y.href=d,document.head.appendChild(y)},c=d=>new Promise((y,p)=>{const g=document.createElement("script");g.src=d,g.onload=()=>y(!0),g.onerror=p,document.body.appendChild(g)});h("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/editor/editor.main.min.css"),c("https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs/loader.min.js").then(()=>{window.require.config({paths:{vs:"https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.52.0/min/vs"}}),window.require(["vs/editor/editor.main"],()=>{a=window.monaco,x(a)})}).catch(u)})}function m(){var u,h;if(!l.value||!a)return;s&&s.dispose(),s=a.editor.create(l.value,{value:o.modelValue||"",language:o.language||"yaml",theme:o.theme||"vs-light",automaticLayout:!0,minimap:{enabled:!1}}),(o.language||"yaml")==="css"&&((h=(u=a.languages)==null?void 0:u.css)!=null&&h.cssDefaults)&&a.languages.css.cssDefaults.setDiagnosticsOptions({validate:!1,lint:{}}),s.onDidChangeModelContent(()=>{i||r("update:modelValue",s.getValue())})}return e.watch(()=>o.modelValue,x=>{if(!s)return;const u=s.getValue();x!==u&&(i=!0,s.setValue(x||""),i=!1)}),e.watch(()=>o.language,x=>{s&&a&&a.editor.setModelLanguage(s.getModel(),x||"yaml")}),e.watch(()=>o.theme,x=>{s&&a&&a.editor.setTheme(x||"vs-light")}),e.onMounted(async()=>{await f(),hm(a),m()}),e.onBeforeUnmount(()=>{s&&s.dispose()}),(x,u)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"editorContainer",ref:l,class:"w-full h-full"},null,512))}}),xm={class:"flex flex-col flex-1 overflow-hidden"},bm={class:"flex justify-end gap-2"},km=["href"],wm={class:"flex flex-col flex-1 overflow-hidden"},_m={class:"bg-white rounded-xl border border-gray-200 shadow-sm overflow-hidden mt-3 flex flex-col flex-1"},Em={class:"relative bg-gradient-to-br from-slate-50 to-white flex-1"},Nm=e.defineComponent({__name:"vs-tab-style",props:{token:{},styleYaml:{},styleText:{}},emits:["update:style-yaml","update:style-text","update"],setup(t,{emit:n}){const o=t,r=n,l=e.ref("");e.watch(()=>o.styleText,f=>{const m=f??"";l.value!==m&&(l.value=m)},{immediate:!0}),e.watch(l,async f=>{var x,u;const m=f??"";o.styleText!==m&&r("update:style-text",m);try{const h=f?Kr(f):null;if((x=h==null?void 0:h.colorAttr)!=null&&x.length&&((u=o.styleYaml)==null?void 0:u.colorAttr)!==h.colorAttr){const c=await s(h.colorAttr);h.colors=c.reduce((y,p,g)=>({...y,[p.id.toString()]:a[g]}),{});const d=Xr(h);d!==l.value&&(l.value=d)}JSON.stringify(h)!==JSON.stringify(o.styleYaml)&&r("update:style-yaml",h&&typeof h=="object"?h:null)}catch{o.styleYaml!==null&&r("update:style-yaml",null)}});async function s(f){return(await fetch(`/api/gis-service/${o.token}/${f}`).then(x=>x.json())).rows}const a=["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd"],i=async()=>{const f=o.styleYaml?JSON.stringify(o.styleYaml):o.styleText?o.styleText:"null";try{await fetch(`/api/gis-service/${o.token}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({style:f})}),r("update"),he.notify({type:"success",title:"Успіх",message:"Стилі збережено"})}catch(m){he.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти стилі"}),console.log(m)}};return(f,m)=>(e.openBlock(),e.createElementBlock("div",xm,[e.createElementVNode("div",bm,[e.createElementVNode("a",{target:"_blank",href:"/api/gis-service/"+o.token+"/col",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Атрибути ",8,km),e.createElementVNode("button",{onClick:i,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"},[...m[1]||(m[1]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-save h-3 w-3 mr-1"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти стилі ",-1)])])]),e.createElementVNode("div",wm,[e.createElementVNode("div",_m,[m[2]||(m[2]=e.createElementVNode("div",{class:"bg-gradient-to-r from-gray-50 to-gray-100 px-4 py-2 border-b border-gray-200 flex items-center justify-between"},[e.createElementVNode("div",{class:"text-xs text-gray-400"},"YAML")],-1)),e.createElementVNode("div",Em,[e.createVNode(ln,{modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=x=>l.value=x),language:"yaml",theme:"vs-light"},null,8,["modelValue"])])])])]))}});function Ht(t){if(t==null)return null;const n=Number(typeof t=="string"?t.trim():t);return Number.isFinite(n)?n:null}function At(t){if(!t)return null;if(Array.isArray(t)&&t.length>=2){const n=Ht(t[0]),o=Ht(t[1]);return n!=null&&o!=null?[n,o]:null}if(typeof t=="object"){const n=t;if(Array.isArray(n.coordinates))return At(n.coordinates);const o=n.lng??n.lon??n.long??n.longitude??n.x,r=n.lat??n.latitude??n.y;if(o!=null&&r!=null){const l=Ht(o),s=Ht(r);if(l!=null&&s!=null)return[l,s]}}if(typeof t=="string"&&t.includes(",")){const[n,o]=t.split(","),r=Ht(n),l=Ht(o);return r!=null&&l!=null?[r,l]:null}return null}const rl=Symbol("MapContext");function Cm(t){const n=e.shallowRef(null),o=e.ref(!1);let r=!1;const l=[],s=()=>{r=!0,l.length&&l.forEach(c=>c())},a=()=>{const c=t.container;return typeof c=="string"?document.getElementById(c):(c==null?void 0:c.value)!==void 0?c.value:c},i=()=>r?Promise.resolve():new Promise(c=>l.push(c)),f=(c,d)=>{if(c==null)return d;const y=Number(typeof c=="string"?c.trim():c);return Number.isFinite(y)?y:d},m=c=>{if(!n.value||!c)return;const d=At(c.center);d&&n.value.setCenter(d);const y=n.value.getZoom(),p=f(c.zoom,y);if(p!==y&&n.value.setZoom(p),typeof n.value.getMaxZoom=="function"&&typeof n.value.setMaxZoom=="function"){const g=n.value.getMaxZoom(),b=f(c.maxZoom,g);b!==g&&n.value.setMaxZoom(b)}if(typeof n.value.getMinZoom=="function"&&typeof n.value.setMinZoom=="function"){const g=n.value.getMinZoom(),b=f(c.minZoom,g);b!==g&&n.value.setMinZoom(b)}c.bounds&&n.value.fitBounds(c.bounds,{animate:!1})},x=async()=>{var V,k,E,_,B,M,z;if(typeof window>"u"||n.value)return;const c=a();if(!c)throw new Error("Map container not found");const d=e.unref(t.settings)||null,y=At((V=d==null?void 0:d.map)==null?void 0:V.center)||[30,50],p=f((k=d==null?void 0:d.map)==null?void 0:k.zoom,7),g=f((E=d==null?void 0:d.map)==null?void 0:E.maxZoom,20),N={...{attributionControl:!1,center:y,zoom:p,maxZoom:g,minZoom:4},...t.mapOptions||{},container:c};N.maxZoom==null&&(N.maxZoom=g),n.value=new maplibregl.Map(N),(_=t.controls)!=null&&_.navigation&&(n.value.addControl(new maplibregl.NavigationControl(typeof t.controls.navigation=="object"?t.controls.navigation:{}),"top-right"),n.value.once("load",()=>{var Q;const W=n.value.getContainer(),K=(Q=W==null?void 0:W.querySelector)==null?void 0:Q.call(W,".maplibregl-ctrl-compass, .mapboxgl-ctrl-compass");K&&typeof n.value.easeTo=="function"&&K.addEventListener("click",H=>{H.preventDefault(),H.stopPropagation(),n.value.easeTo({bearing:0,pitch:0})},!0)})),(B=t.controls)!=null&&B.scale&&n.value.addControl(new maplibregl.ScaleControl(typeof t.controls.scale=="object"?t.controls.scale:{}),"bottom-left"),(M=t.controls)!=null&&M.fullscreen&&n.value.addControl(new maplibregl.FullscreenControl,"top-right"),(z=t.controls)!=null&&z.geolocate&&n.value.addControl(new maplibregl.GeolocateControl(typeof t.controls.geolocate=="object"?t.controls.geolocate:{}),"top-right"),n.value.once("load",()=>{var W;m((W=e.unref(t.settings))==null?void 0:W.map),o.value=!0,s()})};e.watch(()=>{var c;return(c=e.unref(t.settings))==null?void 0:c.map},c=>{m(c)},{deep:!0});const u=()=>{n.value&&(n.value.remove(),n.value=null,o.value=!1)};e.onMounted(x),e.onUnmounted(u);const h={map:n,ready:i,flyTo:c=>{var d;return(d=n.value)==null?void 0:d.flyTo(c)},fitBounds:(c,d)=>{var y;return(y=n.value)==null?void 0:y.fitBounds(c,d)},setCenter:c=>{var d;return(d=n.value)==null?void 0:d.setCenter(c)},setZoom:c=>{var d;return(d=n.value)==null?void 0:d.setZoom(c)},addControl:(c,d)=>{var y;return(y=n.value)==null?void 0:y.addControl(c,d)},removeControl:c=>{var d;return(d=n.value)==null?void 0:d.removeControl(c)},on:(c,d,y)=>{var p,g;return typeof d=="string"?((p=n.value)==null||p.on(c,d,y),()=>{var b;return(b=n.value)==null?void 0:b.off(c,d,y)}):((g=n.value)==null||g.on(c,d),()=>{var b;return(b=n.value)==null?void 0:b.off(c,d)})},off:(c,d,y)=>{var p,g;typeof d=="string"?(p=n.value)==null||p.off(c,d,y):(g=n.value)==null||g.off(c,d)},project:c=>{var d;return(d=n.value)==null?void 0:d.project(c)},unproject:c=>{var d;return(d=n.value)==null?void 0:d.unproject(c)}};return e.provide(rl,h),h}function Re(t){if(t)return{map:t,flyTo:t.value.flyTo,fitBounds:t.value.fitBounds};const n=e.inject(rl);if(!n)throw new Error("useMap() called outside of a Map provider");return n}const Vm=["Noto Sans Regular"],Bm=12,$m="#0f172a",vm="#fff",Sm=14;function He(t,n){if(!t)return;for(const r of n)if(Object.prototype.hasOwnProperty.call(t,r)&&t[r]!==void 0)return t[r];const o=t.text;if(o&&typeof o=="object"){for(const r of n)if(Object.prototype.hasOwnProperty.call(o,r)&&o[r]!==void 0)return o[r]}}function Lm(t){return t?Array.isArray(t)?t:[t]:Vm}function io(t,n){if(typeof t=="number")return Number.isFinite(t)?t:n;if(t==null||t==="")return n;const o=Number(t);return Number.isFinite(o)?o:n}function Am(t){if(t==null)return null;if(Array.isArray(t))return t;const n=String(t).trim(),o=n.match(/^\{([^{}]+)\}$/);return o?["get",o[1]]:n}function Mm(t,n){const o=[];if(t!=null&&o.push(t),n&&o.push(["!",["has","point_count"]]),!!o.length)return o.length===1?o[0]:["all",...o]}function Tm(t,n={}){if(!t)return[];const o=He(t,["text-field","textField","textFieldValue","labelText","label"]);if(!o)return[];const r=Am(o);if(!r)return[];const l=r,s=(n.geometry||t.type||"point").toString().toLowerCase(),a=He(t,["text-font","textFont"]),i=io(He(t,["text-size","textSize"]),Bm),f=He(t,["text-allow-overlap","textAllowOverlap"]),m=He(t,["text-minzoom","textMinZoom","textZoom","text-zoom"]),x=He(t,["text-maxzoom","textMaxZoom","maxzoom"]),u=He(t,["text-color","textColor"])||$m,h=He(t,["text-halo-color","textHaloColor"])||vm,c=He(t,["text-halo-width","textHaloWidth"]),d=He(t,["text-halo-blur","textHaloBlur"]),y=He(t,["text-offset","textOffset"]),p=He(t,["text-anchor","textAnchor"]),g=He(t,["text-justify","textJustify"]),b=He(t,["text-letter-spacing","textLetterSpacing"]),N=He(t,["text-transform","textTransform"]),V=He(t,["symbol-placement","symbolPlacement"]),k=He(t,["symbol-spacing","symbolSpacing"]),E=He(t,["text-rotation-alignment","textRotationAlignment"]),_=He(t,["text-pitch-alignment","textPitchAlignment"]),B=He(t,["text-opacity","textOpacity"]),M={"text-field":l,"text-font":Lm(a),"text-size":i,"text-allow-overlap":f??!1};y&&(M["text-offset"]=y),s!=="line"&&(M["text-anchor"]=p??"center"),g&&(M["text-justify"]=g),b!==void 0&&(M["text-letter-spacing"]=b),N&&(M["text-transform"]=N),k!==void 0&&(M["symbol-spacing"]=k),s==="line"?(M["symbol-placement"]=V||"line",M["text-rotation-alignment"]=E||"map",M["text-pitch-alignment"]=_||"map"):(E&&(M["text-rotation-alignment"]=E),_&&(M["text-pitch-alignment"]=_),V&&(M["symbol-placement"]=V)),p&&s==="line"&&(M["text-anchor"]=p);const z={"text-color":u,"text-opacity":B??1};z["text-halo-color"]=h,c!==void 0&&(z["text-halo-width"]=c),d!==void 0&&(z["text-halo-blur"]=d);const W={type:"symbol",layout:M,paint:z},K=io(m,Sm);if(W.minzoom=K,x!==void 0){const H=io(x,void 0);H!==void 0&&(W.maxzoom=H)}const Q=Mm(n.filter,n.excludeClusters);return Q&&(W.filter=Q),[W]}const co=new Map,uo={};function po(t){if(t.colorAttr&&t.colors){const n=Object.entries(t.colors).flat();return["match",["get",t.colorAttr],...n,qt]}return null}function Fm(t){if(!t.icon||!t.colors)return null;const n=[],o=t.icon.split("+")[0];return Object.values(t.colors).forEach(r=>{n.push(`${o}+${r.replace("#","")}.png`)}),["match",["get",t.colorAttr],...Object.entries(t.colors).reduce((r,[l,s],a)=>r.concat([l,n[a]]),[]),t.icon]}function Wt(t,n){n&&(Array.isArray(n)?t.push(...n):t.push(n))}function Dm(t,n){const o=(t==null?void 0:t.clusterZoom)??(t==null?void 0:t.pointZoom)??(t==null?void 0:t.iconZoom)??12,r=Number(o);if(!Number.isFinite(r))return null;const l=["get","point_count"],s=["has","point_count"],a=["!",s],m={type:"circle",maxzoom:r,filter:s,paint:{"circle-color":["step",l,"#3b82f6",10,"#fde047",100,"#fbbf24",1e3,"#fda4af",1e4,"#fb7185",1e6,"#a21caf"],"circle-radius":["step",l,16,10,22,100,28,1e3,34,1e4,40,1e6,48],"circle-stroke-color":"#fff","circle-stroke-width":1}},x={type:"symbol",maxzoom:r,filter:s,layout:{"text-field":["to-string",["coalesce",["get","point_count_abbreviated"],l]],"text-font":["Noto Sans Regular"],"text-size":12,"text-allow-overlap":!0},paint:{"text-color":"#fff","text-halo-color":"#172554","text-halo-width":1.25}},u={...n,filter:["all",a,n.filter||!0]};return[m,x,u]}function ll(t,n){const o=po(t);if(t.icon&&!t.iconZoom&&!t.clusterZoom)return;const r={type:"circle",maxzoom:n||t.iconZoom||22,paint:{"circle-stroke-color":(t==null?void 0:t.stroke)||"#fff","circle-opacity":t.opacity||1,"circle-color":o||t.color||qt,"circle-stroke-width":t.width||1,"circle-radius":t.radius||5}},l=Dm(t,r);return l||r}function zm(t){const n=po(t);return{type:"fill",minzoom:t.pointZoom||0,paint:{"fill-color":n||t.color||qt,"fill-opacity":t.opacity||.3,"fill-outline-color":t.stroke||qt}}}function Im(t){return{type:"line",paint:{"line-color":po(t)||t.color||qt,"line-opacity":t.opacity||1,"line-width":t.width||1.5}}}function jm(t){const n=Fm(t);return{type:"symbol",minzoom:t.iconZoom||0,layout:{"icon-image":n||t.icon,"icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}}function al(t,n={}){if(!t)return[];if(!Pm(t))return[];const o=[];t.icon&&Wt(o,jm(t)),t.pointZoom&&Wt(o,ll(t,t.pointZoom)),t.type==="polygon"?Wt(o,zm(t)):t.type==="line"?Wt(o,Im(t)):Wt(o,ll(t));const l=n.sourceType!=="raster"?Tm(t,{geometry:t.type||"point",filter:t.filter,excludeClusters:!!t.clusterZoom}):[];return Wt(o,l),o.filter(Boolean)}function Pm(t){return t?!!(new Set(["point","line","polygon"]).has(t.type)||t.icon||t.attrType||t.color||t.stroke||t.radius||t.width||t.colorAttr&&t.colors&&typeof t.colors=="object"&&Object.keys(t.colors).length>0):!1}function sl(t,{sourceType:n,filter:o,allowFallback:r=!1}={}){let l=oo(t);if(l&&o&&(l.filter=o),l)return al(l,{sourceType:n});if(r&&["vector","geojson"].includes(n||"")){const s={type:"point",color:qt};return o&&(s.filter=o),al(s,{sourceType:n})}return[]}function Rm(t){return{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:t}}]}}}async function il(t,n,o){const r=[n],l=n.split("+")[0];Object.values(o||{}).forEach(s=>{r.push(`${l}+${s.replace("#","")}.png`)});for(const s of r){if(t.getImage(s))continue;const a=await t.loadImage(`/api/gis-icon/${s}`);t.addImage(s,a.data)}}function Se(t,n,o){var K,Q;if(!t)return uo;if(!n)return uo[t];const{map:r,ready:l=()=>Promise.resolve()}=Re(o),s=t||((K=n.layer)==null?void 0:K.id),a=n.sourceId??t,i={...n};i.point&&(i.source=Rm(i.point)),!i.layer&&((Q=i.source)==null?void 0:Q.type)==="raster"&&(i.layer={id:a,type:"raster",source:a}),i.layer&&!i.layer.source&&Object.assign(i.layer,{source:a});let f=!1,m=!1;const x=()=>{var H,J,O,T,D,X,$,w,S,I;if(!(m||!r.value)){if(i.source&&!r.value.getSource(a)&&r.value.addSource(a,i.source),!r.value.getLayer(s)){const Y=i.beforeId===0?(J=(H=r.value.getStyle().layers)==null?void 0:H[0])==null?void 0:J.id:i.beforeId;(T=(O=i.layer)==null?void 0:O.style)!=null&&T.icon&&il(r.value,i.layer.style.icon,i.layer.style.colors);const Z=((D=i.source)==null?void 0:D.type)||((X=i.layer)==null?void 0:X.type),ee=i.layer&&(i.layer.type||i.layer.ref)?i.layer:null,re=($=i.layer)==null?void 0:$.style,ie=((w=i.layer)==null?void 0:w["source-layer"])||((S=i.source)==null?void 0:S["source-layer"])||i.sourceLayer||a,se=i.style||re,we=sl(se,{sourceType:Z,filter:(I=i.layer)==null?void 0:I.filter,allowFallback:!ee});if(!we.length){if(ee){const P={...ee,id:ee.id||s,source:ee.source||a};Z==="vector"&&ie&&(P["source-layer"]=P["source-layer"]||ie),r.value.addLayer(P,Y)}return}we.forEach((P,te)=>{const v={...P,id:`${s}${te||""}`,source:a};Z==="vector"&&ie&&(v["source-layer"]=ie),r.value.addLayer(v,Y)})}f=!0}};l().then(x);const u=(H,J)=>r.value?(r.value.on(H,s,J),()=>{var O;return(O=r.value)==null?void 0:O.off(H,s,J)}):()=>{},h=H=>{const J=r.value;if(!J)return;const O=J.getStyle(),T=O==null?void 0:O.layers;T!=null&&T.length&&T.filter(D=>D.source===s).forEach(D=>{J.setLayoutProperty(D.id,"visibility",H?"visible":"none")})},c=(H=!0)=>{var O,T,D;if(!r.value)return;(((D=(T=(O=r.value).getStyle)==null?void 0:T.call(O))==null?void 0:D.layers)??[]).filter(X=>X.source===s).forEach(X=>{r.value.removeLayer(X.id)}),m=!0,i.source&&H&&r.value.getSource(a)&&r.value.removeSource(a)},d=async H=>{var D,X,$,w,S;if(!r.value)return;H!=null&&H.icon&&il(r.value,H.icon,H.colors);const J=((D=i.source)==null?void 0:D.type)||((X=i.layer)==null?void 0:X.type),O=(($=i.layer)==null?void 0:$["source-layer"])||((w=i.source)==null?void 0:w["source-layer"])||i.sourceLayer||a,T=sl(H,{sourceType:J,filter:(S=i.layer)==null?void 0:S.filter,allowFallback:!0});c(!1),T.forEach((I,Y)=>{var ee;const Z={...I,id:`${s}${Y}`,source:((ee=i.layer)==null?void 0:ee.source)||a};J==="vector"&&O&&(Z["source-layer"]=Z["source-layer"]||O),r.value.addLayer(Z)})},y=H=>{r.value&&Object.entries(H).forEach(([J,O])=>{r.value.setPaintProperty(s,J,O)})},p=(H,J,O)=>{const T=r.value;if(T)switch(J){case"raster":T.setPaintProperty(H,"raster-opacity",O);break;case"fill":T.setPaintProperty(H,"fill-opacity",O);break;case"line":T.setPaintProperty(H,"line-opacity",O);break;case"circle":T.setPaintProperty(H,"circle-opacity",O);break;case"symbol":T.setPaintProperty(H,"icon-opacity",O),T.setPaintProperty(H,"text-opacity",O);break}},M={ids:{layerId:s,sourceId:a},isMounted:()=>{var H;return f&&!!((H=r.value)!=null&&H.getLayer(s))},setVisible:h,updatePaint:y,updateLayout:H=>{r.value&&Object.entries(H).forEach(([J,O])=>{r.value.setLayoutProperty(s,J,O)})},updateFilter:H=>{r.value&&r.value.setFilter(s,H)},setOpacity:H=>{var T;if(!r.value)return;const O=(((T=r.value.getStyle())==null?void 0:T.layers)||[]).filter(D=>D.source===a);if(!O.length){const D=r.value.getLayer(s);D&&p(s,D.type,H);return}O.forEach(D=>p(D.id,D.type,H))},setData:H=>{if(!r.value)return;const J=r.value.getSource(a);J&&"setData"in J&&J.setData(H)},setTiles:H=>{if(!r.value)return;const J=r.value.getSource(a);J&&"setTiles"in J&&J.setTiles(H)},setStyle:d,setFilter:H=>{var O,T;if(!r.value)return;const J=r.value.getSource(a);if(J&&"setTiles"in J&&((T=(O=i.source)==null?void 0:O.tiles)!=null&&T[0])){const D=i.source.tiles[0];J.setTiles([`${D}${D.includes("?")?"&":"?"}filter=${H}`])}},setFeatureState:(H,J)=>{r.value&&r.value.setFeatureState({source:a,...H},J)},removeFeatureState:(H,J)=>{r.value&&r.value.removeFeatureState({source:a,...H},J?{key:J}:void 0)},remove:c,card:i.card,popup:i.popup,opts:i,getSource:()=>{var H;return(H=r.value)==null?void 0:H.getSource(a)},getLayer:()=>{var H;return(H=r.value)==null?void 0:H.getLayer(s)},on:u};co.set(s,M);const z=()=>{co.get(s)===M&&co.delete(s)},W=M.remove;return M.remove=()=>{z(),W()},e.onBeforeUnmount(M.remove),uo[t]=M,M}const Om={class:"flex flex-col flex-1 min-h-0"},Um={class:"flex flex-col flex-1 min-h-0"},qm=e.defineComponent({__name:"vs-tab-popup",props:{token:{},fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,d=>l.value=d||[],{immediate:!0}),e.watch(l,d=>{const y=Se(o.token);y&&(y.popup=d),r("update:columns",d)});const s=e.ref("list"),a=e.ref(!1),i=e.ref([]),f=[{key:"name",label:"Назва",type:"main"}],m={name:{type:"text",label:"Назва",disabled:!0,validators:["required"]},label:{type:"text",label:"Найменування",validators:["required"]},meta:{type:"radio",label:"Meta",mode:"combo",options:[{text:"Заголовок",id:"title"},{text:"Властивість",id:"feature"},{text:"Бейдж",id:"badge"}]},data:{type:"text",label:"Data"}};function x(){i.value=l.value.map(d=>d.name||d.id),a.value=!0}function u(){var g;const d=[...l.value],y=((g=o.fields)==null?void 0:g.filter(b=>i.value.includes(b.name)))||[],p=It(d,y,{selectedKeys:i.value,resolveKey:b=>Vt(b)});l.value=p,a.value=!1,i.value=[]}function h(){a.value=!1,i.value=[]}function c(){let d=[];s.value==="all"?d=o.fields||[]:s.value==="none"?d=[]:d=l.value,d.filter(y=>!y.label).forEach(y=>y.label=y.ua),r("save",d)}return(d,y)=>(e.openBlock(),e.createElementBlock("div",Om,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти попап ")]),e.createElementVNode("div",Um,[s.value==="list"?(e.openBlock(),e.createBlock(Ct,{key:0,modelValue:l.value,"onUpdate:modelValue":y[0]||(y[0]=p=>l.value=p),"columns-scheme":f,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":y[1]||(y[1]=p=>a.value=p),selection:i.value,"onUpdate:selection":y[2]||(y[2]=p=>i.value=p),fields:t.fields,title:"Імпорт полів","id-prefix":"import-popup",onConfirm:u,onCancel:h},null,8,["visible","selection","fields"])]))}}),Hm={class:"flex flex-col flex-1 min-h-0"},Wm={class:"flex justify-between mb-3 gap-2"},Ym={class:"p-4 space-y-4 text-sm"},Zm={class:"space-y-1"},Gm={class:"space-y-1"},Km={class:"flex items-center gap-3"},Xm={class:"flex justify-end gap-2 p-4 border-t"},Qm=e.defineComponent({__name:"vs-tab-legend",props:{mapInfo:{},token:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,d=>{l.value=d||[]}),e.watch(l,d=>{r("update:columns",d)});const s=e.ref(!1),a=e.ref({name:"",color:"#2E86DE"}),i=e.defineAsyncComponent(()=>import("@opengis/core").then(d=>d.VsModal)),f=[{key:"name",label:"Назва"},{key:"color",label:"Колір",type:"color"}],m={name:{type:"text",label:"Назва",validators:["required"]},color:{type:"color",label:"Колір",validators:["required"]}};function x(d){d&&u(),s.value=d}function u(){a.value={name:"",color:"#2E86DE"}}function h(){var g,b;const d=(g=a.value.name)==null?void 0:g.trim();if(!d){he.notify({type:"warning",title:"Перевірка",message:"Вкажіть назву елементу легенди"});return}const y=((b=a.value.color)==null?void 0:b.trim())||"#2E86DE";if(l.value.some(N=>Vt(N)===Vt({name:d}))){he.notify({type:"warning",title:"Дубль",message:"Такий елемент легенди вже існує"});return}l.value=[...l.value,{name:d,color:y}],u(),s.value=!1}function c(){r("save",l.value)}return(d,y)=>(e.openBlock(),e.createElementBlock("div",Hm,[e.createElementVNode("div",Wm,[e.createElementVNode("button",{onClick:y[0]||(y[0]=p=>s.value=!0),class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Додати "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти легенду ")]),e.createVNode(Ct,{modelValue:l.value,"onUpdate:modelValue":y[1]||(y[1]=p=>l.value=p),"columns-scheme":f,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"]),e.createVNode(e.unref(i),{teleport:"#modal",visible:s.value,title:"Новий елемент легенди","onUpdate:visible":x},{footer:e.withCtx(()=>[e.createElementVNode("div",Xm,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:y[5]||(y[5]=p=>x(!1))}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed",onClick:h}," Додати ")])]),default:e.withCtx(()=>[e.createElementVNode("div",Ym,[e.createElementVNode("div",Zm,[y[6]||(y[6]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Назва ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[2]||(y[2]=p=>a.value.name=p),type:"text",class:"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"Наприклад, Житлова зона"},null,512),[[e.vModelText,a.value.name]])]),e.createElementVNode("div",Gm,[y[7]||(y[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 uppercase tracking-wide"}," Колір ",-1)),e.createElementVNode("div",Km,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[3]||(y[3]=p=>a.value.color=p),type:"color",class:"h-10 w-16 rounded border border-gray-300"},null,512),[[e.vModelText,a.value.color]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[4]||(y[4]=p=>a.value.color=p),type:"text",class:"flex-1 rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200",placeholder:"#FFFFFF"},null,512),[[e.vModelText,a.value.color]])])])])]),_:1},8,["visible"])]))}}),Jm={class:"space-y-3 bg-gradient-to-br from-sky-50 to-blue-50 p-4 rounded-xl border border-sky-100 shadow-sm"},ef=["onClick"],tf=["aria-checked","value"],nf={key:0},of=e.defineComponent({__name:"view-mode-toggle",props:{modelValue:{},options:{},showHtml:{type:Boolean}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=a=>r("update:modelValue",a),s=o.options||[{value:"all",label:"All"},{value:"list",label:"List"},{value:"none",label:"None"}];return(a,i)=>(e.openBlock(),e.createElementBlock("div",Jm,[i[1]||(i[1]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-600"},"Режим відображення",-1)),e.createElementVNode("div",{role:"radiogroup",class:e.normalizeClass(["grid gap-2",`grid-cols-${e.unref(s).length}`])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),f=>(e.openBlock(),e.createElementBlock("div",{key:f.value,onClick:m=>l(f.value),class:e.normalizeClass(["flex items-center justify-center space-x-2 rounded-lg p-2 border transition-all duration-300 cursor-pointer",[t.modelValue===f.value?"bg-gradient-to-r from-sky-200 to-blue-200 border-transparent shadow-sm":"bg-white border-gray-100 hover:border-sky-200 hover:shadow-sm"]])},[e.createElementVNode("button",{type:"button",role:"radio","aria-checked":t.modelValue===f.value,value:f.value,class:"aspect-square rounded-full border border-primary h-4 w-4 flex items-center justify-center text-sky-500"},[t.modelValue===f.value?(e.openBlock(),e.createElementBlock("span",nf,[...i[0]||(i[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-circle h-2.5 w-2.5 fill-current text-current"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"})],-1)])])):e.createCommentVNode("",!0)],8,tf),e.createElementVNode("label",{class:e.normalizeClass(["text-xs font-medium cursor-pointer",t.modelValue===f.value?"text-gray-700":"text-gray-600"])},e.toDisplayString(f.label),3)],10,ef))),128))],2)]))}}),rf={class:"flex flex-col flex-1 min-h-0"},lf={class:"flex flex-col flex-1 min-h-0"},af=e.defineComponent({__name:"vs-tab-card",props:{fields:{},columns:{},viewMode:{},html:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.columns||[]);e.watch(()=>o.columns,p=>l.value=p||[],{immediate:!0}),e.watch(l,p=>r("update:columns",p));const s=e.ref(o.viewMode??"list");e.watch(()=>o.viewMode,p=>{p&&p!==s.value&&(s.value=p)});const a=e.ref(o.html??"");e.watch(()=>o.html,p=>{typeof p=="string"&&p!==a.value&&(a.value=p)},{immediate:!0});const i=e.ref(!1),f=e.ref([]),m=[{key:"name",label:"Name",type:"main"}],x={name:{type:"text",label:"Name",validators:["required"],disabled:!0},label:{type:"text",label:"Label",validators:["required"]},format:{type:"radio",label:"Format",mode:"inline",validators:["required"],options:[{text:"Text",id:"text"},{text:"Number",id:"number"},{text:"Date",id:"date"},{text:"File",id:"file"},{text:"Select",id:"select"},{text:"Tags",id:"tags"}]},is_admin:{type:"Switcher",label:"Тільки для адміністративної частини"},data:{type:"text",label:"Data"}};function u(){f.value=s.value==="html"?[]:l.value.map(p=>p.name||p.id),i.value=!0}function h(){var N;const p=[...l.value],g=((N=o.fields)==null?void 0:N.filter(V=>f.value.includes(V.name)).map(V=>{const{type:k,format:E,..._}=V;return{..._,format:E??k??"text"}}))||[],b=It(p,g,{selectedKeys:f.value,resolveKey:V=>Vt(V)});if(l.value=b,s.value==="html"&&g.length){const V=g.map(_=>{const B=_.label??"",M=_.name??_.id??"";return`<dd>${B}</dd>
|
|
243
244
|
<dt>{{ ${M} }}</dt>`}).join(`
|
|
244
|
-
`),
|
|
245
|
-
${$}`:$}i.value=!1,g.value=[]}function c(){i.value=!1,g.value=[]}function d(){const p=s.value==="html"?"html":"list",f={card_mode:p};p==="html"?f.html=a.value:p==="list"&&(f.list=l.value),r("save","card",f)}const y=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(p,f)=>(e.openBlock(),e.createElementBlock("div",Km,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(Gm,{modelValue:s.value,"onUpdate:modelValue":f[0]||(f[0]=k=>s.value=k),options:y},null,8,["modelValue"]),e.createElementVNode("div",Xm,[s.value==="list"?(e.openBlock(),e.createBlock(Et,{key:0,modelValue:l.value,"onUpdate:modelValue":f[1]||(f[1]=k=>l.value=k),"columns-scheme":m,"form-scheme":x,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):s.value==="html"?(e.openBlock(),e.createBlock(rn,{key:1,modelValue:a.value,"onUpdate:modelValue":f[2]||(f[2]=k=>a.value=k),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Dt,{visible:i.value,"onUpdate:visible":f[3]||(f[3]=k=>i.value=k),selection:g.value,"onUpdate:selection":f[4]||(f[4]=k=>g.value=k),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:h,onCancel:c},null,8,["visible","selection","fields"])]))}}),Jm={class:"flex flex-col flex-1 min-h-0"},ef=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const l=e.ref(o.columns||[]);e.watch(()=>o.columns,d=>l.value=d||[],{immediate:!0}),e.watch(l,d=>r("update:columns",d),{deep:!0,immediate:!0});const s=e.ref("list"),a=e.ref(!1),i=e.ref([]),g=[{key:"id",label:"Name"},{key:"label",label:"UA"}],m={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function x(){i.value=l.value.map(d=>d.name||d.id),a.value=!0}function u(){var f;const d=[...l.value],y=((f=o.fields)==null?void 0:f.filter(k=>i.value.includes(k.name)))||[],p=It(d,y,{selectedKeys:i.value,resolveKey:k=>Nt(k)});l.value=p,a.value=!1,i.value=[]}function h(){a.value=!1,i.value=[]}function c(){let d=[];s.value==="all"?d=o.fields||[]:s.value==="none"?d=[]:d=l.value,r("save",d)}return(d,y)=>(e.openBlock(),e.createElementBlock("div",Jm,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),s.value==="list"?(e.openBlock(),e.createBlock(Et,{key:0,modelValue:l.value,"onUpdate:modelValue":y[0]||(y[0]=p=>l.value=p),"columns-scheme":g,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":y[1]||(y[1]=p=>a.value=p),selection:i.value,"onUpdate:selection":y[2]||(y[2]=p=>i.value=p),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:u,onCancel:h},null,8,["visible","selection","fields"])]))}}),al=Symbol.for("gis.settingsRef");function po(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[al];return o||(o=e.ref(n.$settings??null),Object.defineProperty(n,"$settings",{configurable:!0,enumerable:!0,get:()=>o.value,set:r=>{o.value=r}}),n[al]=o),o}const $n=he(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=po(),s=hm({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!0,scale:!0},settings:l});async function a(){var x;await e.nextTick();const m=(x=s.map)==null?void 0:x.value;m!=null&&m.resize&&m.resize()}function i(){typeof ResizeObserver>"u"||r.value||!o.value||(r.value=new ResizeObserver(()=>{a()}),r.value.observe(o.value))}function g(){var m;(m=r.value)==null||m.disconnect(),r.value=null}return e.onMounted(()=>{a(),i(),window.addEventListener("resize",a)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",a),g()}),n({ctx:s}),(m,x)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(m.$slots,"default",{},void 0,!0)],512))}}),[["__scopeId","data-v-d6e61166"]]),tf=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var d,y,p,f;const{map:o,flyTo:r,setZoom:l}=Pe(),s=((y=(d=e.getCurrentInstance())==null?void 0:d.appContext.config.globalProperties)==null?void 0:y.$settings)||null,a=t,i=a.id;String(a.id);const g=`${location.origin}/api/vtile/${a.id}/ua/{z}/{x}/{y}.vmt?all=1`,m=Se(i,{source:{type:"vector",tiles:[g],minzoom:0,maxzoom:14},popup:a.layer.popup,layer:{style:(p=a.layer)==null?void 0:p.style}});n({layerHandle:m}),(a.autoCenter??!0)&&r({center:a.layer.center||((f=s==null?void 0:s.map)==null?void 0:f.center)||[30,50],animate:!1});let x=null;function u(){if(!(m!=null&&m.setTiles))return;const k=g.includes("?")?"&":"?",C=`${g}${k}_=${Date.now()}`;m.setTiles([C])}function h(){x&&clearTimeout(x),x=setTimeout(()=>{x=null,c().catch(k=>console.error("Failed to update map layer",k))},300)}async function c(){o.value&&(u(),m.setStyle(a.styleSpec??null))}return e.watch(()=>a.styleSpec,h,{deep:!0}),e.onBeforeUnmount(()=>{m.remove()}),(k,C)=>null}}),ln=e.ref(null);function nf(){ln.value=null}function of(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(ln,a=>{a!==o()&&n.value&&(n.value=!1)});function r(){ln.value=o(),n.value=!0}function l(){ln.value===o()&&(ln.value=null),n.value=!1}function s(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:s}}const rf={class:"map-filter"},lf={class:"map-filter__header"},af={class:"map-filter__title"},sf={"aria-hidden":"true"},mo="#map-filter-popover-host",vn=he(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var v;return((v=o.layer)==null?void 0:v.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:s,close:a,toggle:i}=of(l),g=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),m=e.ref(null),x=e.ref(null);let u=null;const h=e.ref({}),c=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),d=e.computed(()=>s.value),y=e.computed(()=>{var v;return Array.isArray((v=o.layer)==null?void 0:v.filters)?o.layer.filters:[]}),p=e.computed(()=>y.value.length>0),f=e.computed(()=>{var v;return((v=o.layer)==null?void 0:v.name)??""}),k=e.computed(()=>y.value),C=e.ref(null),$=e.computed(()=>y.value.length),w=e.computed(()=>$.value<=2),N=e.computed(()=>w.value?"body":typeof window>"u"||C.value?mo:"body"),E=e.computed(()=>{if(!d.value||!w.value)return{};const v=typeof window<"u"?window.innerWidth:280,S=Math.max(280,v-16*2);return{position:"absolute",top:`${g.top}px`,left:`${g.left}px`,transform:g.transform,zIndex:1e3,width:"280px",maxWidth:`${S}px`}});function B(){a()}function M(v,_,S=8){const z=window.scrollY+S,I=window.scrollY+window.innerHeight-S;let G=v;return G+_>I&&(G=I-_),G<z&&(G=z),G}function D(){var oe,ae,xe;if(!m.value||!w.value)return;const v=m.value.getBoundingClientRect(),_=window.scrollX+8,S=window.scrollX+window.innerWidth-8,z=((oe=x.value)==null?void 0:oe.offsetWidth)||280,I=((ae=x.value)==null?void 0:ae.offsetHeight)||0;let G=0,te=0;if((xe=o.catalogAnchor)!=null&&xe.value){const we=o.catalogAnchor.value.getBoundingClientRect(),P=we.top+window.scrollY;G=M(P,I,8);const ee=we.right+window.scrollX+12,b=S-z,A=_;te=Math.min(Math.max(ee,A),Math.max(A,b))}else{const we=v.bottom+window.scrollY+8;G=M(we,I,8);let P=v.left+window.scrollX;P<_&&(P=_),P+z>S&&(P=Math.max(_,S-z)),te=P}g.left=te,g.top=G,g.transform="none"}function W(){w.value||X(),i(),s.value&&w.value&&e.nextTick(()=>{D(),T(),requestAnimationFrame(()=>D())})}function K(){o.disabled||W()}e.watch(d,v=>{v&&w.value?e.nextTick(()=>{D(),T(),requestAnimationFrame(()=>D())}):(F(),w.value||X())}),e.watch(k,()=>{!d.value||!w.value||e.nextTick(()=>D())},{deep:!0}),e.watch(w,v=>{d.value&&(v?e.nextTick(()=>{D(),T()}):(F(),X()))}),e.watch(()=>o.disabled,v=>{v&&(a(),h.value={})});function Q(){!d.value||!w.value||D()}function H(v){const _=r.value;if(!_)return;const S=Se(_);if(!(S!=null&&S.setFilter))return;h.value=v;const z=Object.entries(v).map(([I,G])=>`${I}=${G}`).join("|");S.setFilter(z)}function J(v){if(!o.disabled)return;const _=v.currentTarget;if(!_)return;const S=_.getBoundingClientRect();c.left=S.left+S.width/2+window.scrollX,c.top=S.bottom+8+window.scrollY,c.visible=!0}function O(){c.visible=!1}e.onMounted(()=>{X(),window.addEventListener("resize",Q),window.addEventListener("scroll",Q,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",Q),window.removeEventListener("scroll",Q,!0),F()});function T(){F(),!(!x.value||!w.value)&&(u=new ResizeObserver(()=>{!d.value||!w.value||D()}),u.observe(x.value))}function F(){u&&(u.disconnect(),u=null)}function X(){typeof window>"u"||typeof document>"u"||(C.value=document.querySelector(mo))}return(v,_)=>p.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:m},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(K,["prevent","stop"]),onMouseenter:J,onMouseleave:O,onFocus:J,onBlur:O},[..._[2]||(_[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),d.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:N.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!w.value}]),style:e.normalizeStyle(E.value),ref_key:"panel",ref:x,onClick:_[1]||(_[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",rf,[e.createElementVNode("div",lf,[e.createElementVNode("h3",af,e.toDisplayString(f.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:B},[e.createElementVNode("span",sf,[e.createVNode(e.unref(_t),{class:"h-4 w-4"})]),_[3]||(_[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:k.value,value:h.value,limit:10,onChange:_[0]||(_[0]=S=>H(S.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[c.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${c.top}px`,left:`${c.left}px`})},e.toDisplayString(c.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-cc1f0579"]]),cf={key:0,class:"flex justify-center items-center h-[40px] w-[40px] bg-white text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full"},fo=he(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",null,[t.filters.length>0?(e.openBlock(),e.createElementBlock("div",cf,[e.createVNode(vn,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),df={class:"flex flex-row gap-x-3 z-10 relative widget"},uf=["onClick"],pf=["src","alt"],Yt=e.defineComponent({__name:"BaseMaps",setup(t){var f,k,C;const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o={z:13,x:4790,y:2762};function r($){if($)return $.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function l($,w){let N=$||`layers-${Object.keys(w).length}`,E=1;for(;w[N];)N=`${$}-${E}`,E+=1;return N}const s=e.getCurrentInstance(),a=(f=s==null?void 0:s.appContext.config.globalProperties)==null?void 0:f.$settings,i=a==null?void 0:a.map,g=Fe.useRoute(),m=Fe.useRouter();function x(){const $=g==null?void 0:g.query;return!$||typeof $!="object"?null:typeof $.basemap=="string"?$.basemap:null}const u=e.computed(()=>x()),h=e.computed(()=>{const $=Array.isArray(i==null?void 0:i.basemaps)?i==null?void 0:i.basemaps:[];if(!$.length)return{};const w={};return $.forEach((N,E)=>{const B=N.name??N.title??`basemap-${E}`,M=(N.id??B??`basemap-${E}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),D=l(M||`basemap-${E}`,w),W=N.preview||(N.url?r(N.url):void 0);w[D]={url:N.url,preview:W,title:B}}),w}),c=e.computed(()=>{const $=h.value;return Object.keys($).length?$:n}),d=e.ref(u.value??Object.keys(c.value)[0]??"gki"),y=Se("base",{source:{type:"raster",tiles:(k=c.value[d.value])!=null&&k.url?[(C=c.value[d.value])==null?void 0:C.url]:[]},beforeId:0});function p($){if(!c.value[$])return;d.value=$;const w=c.value[$];if(!(w!=null&&w.url)){y.setVisible(!1);return}y.setVisible(!0),y.setTiles([w.url]),typeof window<"u"&&x()!==$&&m.replace({query:{...g==null?void 0:g.query,basemap:$}}).catch(()=>{})}return e.watch(()=>c.value,$=>{const w=u.value&&$[u.value]?u.value:d.value;$[w]?d.value=w:d.value=Object.keys($)[0]??w;const N=$[d.value];N!=null&&N.url?(y.setVisible(!0),y.setTiles([N.url])):y.setVisible(!1)},{immediate:!0}),e.watch(()=>[u.value,c.value],([$])=>{if(typeof $!="string"||!c.value[$]||d.value===$)return;d.value=$;const w=c.value[$];if(!(w!=null&&w.url)){y.setVisible(!1);return}y.setVisible(!0),y.setTiles([w.url])}),($,w)=>(e.openBlock(),e.createElementBlock("div",df,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(N,E)=>(e.openBlock(),e.createElementBlock("div",{key:E,onClick:B=>p(E)},[E!=="none"&&N.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",d.value===E?"border-blue-500":"border-gray-200"])},[N.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:N.preview,alt:N.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,pf)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",d.value===E?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(Yl),{class:"w-4 h-4 text-gray-500"})],2))],8,uf))),128))]))}}),mf={key:0,class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",style:{width:"100%"}},ff={class:"flex flex-col gap-1 p-5"},gf={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},go=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Pe(),l=e.ref([]);let s=null;function a(x){return x?x.map((u,h)=>{var y;const c=(u==null?void 0:u.name)||(u==null?void 0:u.label)||(u==null?void 0:u.title)||(u==null?void 0:u.id)||`Layer ${h+1}`,d=(u==null?void 0:u.color)||(u==null?void 0:u.fill)||((y=u==null?void 0:u.paint)==null?void 0:y.color)||"#3388ff";return{id:`${c}-${h}`,label:c,color:d}}):[]}function i(x){return x!=null&&x.layers?x.layers.filter(u=>{const h=u.paint||{};return h["fill-color"]||h["line-color"]||h["circle-color"]}).map((u,h)=>{var y;const c=u.paint||{},d=c["fill-color"]||c["line-color"]||c["circle-color"]||"#3388ff";return{id:u.id||`layer-${h}`,label:((y=u.metadata)==null?void 0:y.title)||u.id||`Layer ${h+1}`,color:d}}):[]}async function g(){var h;await r();const x=o.value;if(!x)return;const u=(h=x.getStyle)==null?void 0:h.call(x);l.value=i(u)}function m(){o.value&&(s==null||s())}return e.watch(()=>n.items,async x=>{x!=null?(l.value=a(x),s==null||s()):(await r(),m(),g())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),m(),g())}),e.onBeforeUnmount(()=>{s==null||s(),s=null}),(x,u)=>l.value.length?(e.openBlock(),e.createElementBlock("div",mf,[e.createElementVNode("div",ff,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:h.color})},null,4),e.createElementVNode("span",gf,[e.createElementVNode("span",null,e.toDisplayString(h.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function yf(){const{map:t,ready:n}=Pe(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(null);let a=[];function i(){a.forEach(c=>c()),a=[]}const g=c=>{const d=(c==null?void 0:c.properties)||{};return!!(d.cluster||d.point_count||d.point_count_abbreviated)},m=c=>{var f,k;o.value=[c.point.x,c.point.y];const d=t.value.queryRenderedFeatures(c.point);if(!(d!=null&&d.length)){x();return}const y=d.find(C=>!g(C));if(!y){x();return}const p=Se(y.source)||Se((f=y.layer)==null?void 0:f.id);p!=null&&p.popup&&(r.value=((k=p.popup)==null?void 0:k.fields)||p.popup,s.value=y.properties)},x=()=>{r.value=null,s.value=null,o.value=null};async function u(){await n(),t.value&&(i(),t.value.on("mousemove",m),t.value.on("mouseleave",x))}function h(){i(),r.value=null,s.value=null,o.value=null}return n().then(u),{popupCoords:o,popupFields:r,popupValues:s,disable:h,title:l}}const hf={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},xf={class:"space-y-1.5"},bf={class:"font-bold text-slate-700"},kf={class:"text-slate-700"},sl=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=yf(),{map:s}=Pe(),a=e.ref(null),i=e.ref({left:"-9999px",top:"-9999px"}),g=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function m(y,p){if(p==null||p==="")return p;if((y==null?void 0:y.type)==="number"){const f=typeof p=="number"?p:Number(p);if(Number.isFinite(f))return g.format(f)}return p}function x(y,p,f){const k=y.name||y.label||y.title||`field-${f}`,C=y.label||y.title||y.name||k,$=y.name?p[y.name]:void 0,N=(y.name?p[`${y.name}_text`]:void 0)??$??y.value??null;return{key:k,label:C,value:m(y,N)}}const u=e.computed(()=>{const y=o.value||[],p=r.value||{};return y.filter(f=>(f==null?void 0:f.meta)!=="title").map((f,k)=>x(f,p,k)).filter(f=>f.label)}),h=e.computed(()=>{const y=o.value||[],p=r.value||{},f=y.find(k=>(k==null?void 0:k.meta)==="title");return f?x(f,p,0):null}),c=e.computed(()=>{var p;const y=u.value;return(p=h.value)!=null&&p.value?[{...h.value,key:`${h.value.key}-title`,label:"Назва"},...y]:y});function d(){var F,X;if(!c.value.length||!n.value||!a.value){i.value={left:"-9999px",top:"-9999px"};return}const y=a.value,p=y.offsetParent||null,f=(p==null?void 0:p.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},k=((X=(F=s.value)==null?void 0:F.getContainer)==null?void 0:X.call(F))||void 0,C=(k==null?void 0:k.getBoundingClientRect())??f,$=C.left-f.left,w=C.top-f.top,N=y.offsetWidth||0,E=y.offsetHeight||0,B=12,M=8,[D,W]=n.value;let K=$+D+B,Q=w+W+B;K+N+M>f.width&&(K=$+D-N-B),Q+E+M>f.height&&(Q=w+W-E-B);const H=M,J=M,O=Math.max(M,f.width-N-M),T=Math.max(M,f.height-E-M);K=Math.min(Math.max(K,H),O),Q=Math.min(Math.max(Q,J),T),i.value={left:`${K}px`,top:`${Q}px`}}return e.watch([n,c],()=>{e.nextTick(()=>d())}),e.onMounted(()=>{window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",d),l()}),(y,p)=>c.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:a,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(i.value)},[e.createElementVNode("div",hf,[e.createElementVNode("div",xf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,f=>(e.openBlock(),e.createElementBlock("div",{key:f.key,class:"flex flex-col"},[e.createElementVNode("span",bf,e.toDisplayString(f.label),1),e.createElementVNode("span",kf,e.toDisplayString(f.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function wf(){const{map:t,ready:n}=Pe(),o=Fe.useRoute(),r=Fe.useRouter(),l=e.ref(null),s=e.ref(null),a=e.ref(null),i=e.ref(!1),g=e.ref([]),m=e.ref(0),x=e.computed(()=>g.value.length),u=e.computed(()=>i.value||!!l.value||!!a.value);let h=null,c=!1;function d(){l.value=null,s.value=null,a.value=null,i.value=!1,g.value=[],m.value=0}function y(){if(h){try{h()}catch{}h=null}}async function p(){await n();const K=t.value;K&&(y(),d(),K.on("click",f),h=()=>K.off("click",f),W(B()))}function f(K){const Q=t.value;if(!Q)return;const H=(Q.queryRenderedFeatures(K.point)||[]).filter(J=>{var O;return(O=J==null?void 0:J.properties)==null?void 0:O.id});if(!H.length){d(),D(null);return}g.value=H,m.value=0,k(m.value)}function k(K){const Q=g.value[K];if(!Q)return;m.value=K;const H=Se(Q.source);w(Q,H==null?void 0:H.card)}function C(){m.value>=g.value.length-1||k(m.value+1)}function $(){m.value<=0||k(m.value-1)}async function w(K,Q){var O,T,F,X,v;if(!((O=K==null?void 0:K.properties)!=null&&O.id))return;const H=new URLSearchParams;H.set("layer",K.source),H.set("id",String((T=K.properties)==null?void 0:T.id));const J=Array.isArray(Q)&&Q.length>0;i.value=J,a.value=null,l.value=null,s.value=K||null;try{const _=await fetch(`/api/map-format?${H.toString()}`);if(!_.ok)throw new Error(`Failed (${_.status})`);const S=await _.json(),z=Array.isArray(S.columns)?S.columns:[],I=Array.isArray(Q)?Q:[];if(!z.length&&!I.length){console.error("Configure layer in admin"),N();return}const G=S.rows??S.data??{};l.value={rows:G,fields:I,columns:z,html:S.html||null},c||D(s.value);const te=((F=S.rows)==null?void 0:F.geom)??((X=S.data)==null?void 0:X.geom);if(te){const oe=typeof te=="string"?JSON.parse(te):te;oe&&(s.value={...s.value,geometry:oe,properties:{...((v=s.value)==null?void 0:v.properties)||{},geom:oe,geom_4326:oe}})}}catch(_){console.error("Failed to load feature card:",_),N()}finally{i.value=!1}}function N(){d(),D(null)}function E(){y(),d()}n().then(p),e.onBeforeUnmount(()=>E());function B(){const K=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof K!="string"?null:K.trim()||null}function M(K){var O,T;const Q=(K==null?void 0:K.source)??((O=K==null?void 0:K.layer)==null?void 0:O.id),H=(T=K==null?void 0:K.properties)==null?void 0:T.id;return!Q||H===void 0||H===null?null:`${Q},${H}`.trim()||null}function D(K){const Q=M(K),H=B();if(Q===H)return;const J={...o.query};Q?J.info=Q:delete J.info,r.push({query:J}).catch(()=>{})}async function W(K){if(!K){d();return}if(K===M(s.value))return;const[Q,H]=K.split(","),J=Q==null?void 0:Q.trim(),O=H==null?void 0:H.trim();if(!J||!O){d(),D(null);return}c=!0;try{const T={source:J,properties:{id:O}};g.value=[T],m.value=0;const F=Se(J);await w(T,F==null?void 0:F.card)}finally{c=!1}}return e.watch(()=>B(),K=>{K!==M(s.value)&&(c=!0,W(K).finally(()=>{c=!1}))}),{card:l,cardFeature:s,cardError:a,cardLoading:i,isOpen:u,close:N,next:C,prev:$,count:x,index:m}}function _f(){const{map:t,ready:n}=Pe(),o=e.ref([]),r=e.ref(0),l=e.ref(0),s=e.ref(!1),a=e.ref(null),i=e.ref({}),g=e.ref(null),m=e.ref([]),x=e.computed(()=>o.value[l.value]||null),u=e.computed(()=>o.value.length>0);let h=null;const c=()=>{h==null||h.remove(),h=null},d=B=>B?B.type==="FeatureCollection"?B:B.type==="Feature"?{type:"FeatureCollection",features:[B]}:B.type&&Array.isArray(B.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:B,properties:{}}]}:Array.isArray(B.features)?{type:"FeatureCollection",features:B.features}:B.geometry?d(B.geometry):null:null,y=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),p=B=>Number(B.toFixed(5)),f=async B=>{if(await n(),!t.value)return;const M=d(B);M&&(c(),h=Se("feature-highlight",{source:{type:"geojson",data:M},style:y()},t))},k=async(B,M,D)=>{var Q,H;const[W,K]=[p(B),p(M)];g.value={x:W,y:K},m.value=D,s.value=!0,a.value=null,o.value=[],i.value={},l.value=0;try{const J=D.map(async v=>{const _=`/api/map-info-point?x=${W}&y=${K}&layers=${v}`,S=await fetch(_);if(!S.ok)return null;const z=await S.json();if(!z.count)return null;const G=await(await fetch(`${_}&index=0`)).json();return{layerId:v,data:G,count:z.count}}),T=(await Promise.all(J)).filter(Boolean);if(T.length===0){r.value=0;return}o.value=T.map(v=>v.data);const[F]=o.value;r.value=T.reduce((v,_)=>v+(_.count||0),0),i.value[0]=F;const X=((Q=F==null?void 0:F.data)==null?void 0:Q.geom_4326)??((H=F==null?void 0:F.data)==null?void 0:H.geom);await f(X)}catch(J){a.value=J.message}finally{s.value=!1}},C=async B=>{if(!g.value||!m.value.length)return;if(i.value[B]){o.value[B]=i.value[B];return}const{x:M,y:D}=g.value,W=m.value.join(","),K=`/api/map-info-point?x=${M}&y=${D}&index=${B}&layers=${W}`;try{s.value=!0;const Q=await fetch(K);if(!Q.ok)throw new Error("Failed to fetch feature by index");const H=await Q.json();o.value[B]=H,i.value[B]=H}catch(Q){a.value=Q.message}finally{s.value=!1}},$=async()=>{l.value<r.value-1&&(l.value+=1,i.value[l.value]||await C(l.value))},w=async()=>{l.value>0&&(l.value-=1,i.value[l.value]||await C(l.value))},N=()=>{o.value=[],r.value=0,l.value=0,i.value={},g.value=null,m.value=[],c()};e.watch(l,async()=>{var M,D;const B=x.value;if(B){const W=((M=B==null?void 0:B.data)==null?void 0:M.geom_4326)??((D=B==null?void 0:B.data)==null?void 0:D.geom);await f(W)}});let E=null;return e.onMounted(async()=>{await n(),t.value&&(E=async B=>{const{lng:M,lat:D}=B.lngLat,W=Se(),Q=Object.entries(W).map(([H,J])=>{var O,T,F,X;return{id:H,service:((O=J==null?void 0:J.opts)==null?void 0:O.service)??((F=(T=J==null?void 0:J.opts)==null?void 0:T.source)==null?void 0:F.service)??null,count:((X=J==null?void 0:J.opts)==null?void 0:X.count)??null,visible:(()=>{var v;try{return((v=t.value)==null?void 0:v.getLayer(H))?t.value.getLayoutProperty(H,"visibility")!=="none":!0}catch{return!0}})()}}).filter(H=>H.service==="ogc"&&H.visible).map(H=>H.id);Q.length>0&&await k(M,D,Q)},t.value.on("dblclick",E))}),e.onBeforeUnmount(()=>{t.value&&E&&t.value.off("dblclick",E),c()}),{features:o,count:r,index:l,current:x,loading:s,error:a,active:u,next:$,prev:w,close:N}}const il=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(m){const x=m.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(x)return x;const u=Array.from(m).map(h=>h.charCodeAt(0).toString(16)).join("").slice(0,8);return u?`layer-${u}`:"layer-temp"}const s=e.computed(()=>{var m;return((m=o.id)==null?void 0:m.trim())||l(o.title)}),a=e.computed(()=>o.buttonText||"Показати шар");function i(){return{id:s.value,title:o.title,url:o.url}}function g(){r("activate",i())}return(m,x)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:g},[e.renderSlot(m.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.value),1)])]))}}),at=e.ref([]);function Ef(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const s=n[l];return s!=null?String(s):""}):t}function Sn(t){return t==null?"":String(t).trim()}function yo(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Nf(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Cf(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let r=0;r<n.length;r+=1){const l=n[r];if(!(!l||typeof l.id!="string")&&l.type&&l.type!=="background"&&l.type!=="raster")return l.id}}function ho(t){function n(a,i={},g,m){var C,$;const x=Sn(a==null?void 0:a.id),u=((C=a==null?void 0:a.title)==null?void 0:C.trim())||x,h=(($=a==null?void 0:a.url)==null?void 0:$.trim())||"";if(!x||!h)return;const c=Ef(h,i);if(!c)return;const d=m??t;if(!d)return;const y=Nf(d);if(!y)return;const p=at.value.findIndex(w=>w.id===x);p!==-1&&(yo(at.value[p]),at.value.splice(p,1));let f=null;const k=a.beforeId??Cf(y);try{f=Se(x,{source:{type:"raster",tiles:[c],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:x,type:"raster",source:x,paint:{"raster-opacity":a.opacity??.85}},beforeId:k},d)}catch(w){const N=(w==null?void 0:w.message)??"";if(!(typeof N=="string"&&N.includes("Map provider")))throw w;return}at.value=[...at.value,{id:x,title:u,originalUrl:h,resolvedUrl:c,owner:g??null,handle:f??null}]}function o(a,i){const g=Sn(a);if(!g)return;const m=at.value.findIndex(u=>u.id===g&&(!i||u.owner===i));if(m===-1)return;const[x]=at.value.splice(m,1);yo(x)}function r(a,i,g){var u;const m=Sn(a);if(!m)return;const x=at.value.find(h=>h.id===m&&(!g||h.owner===g));(u=x==null?void 0:x.handle)!=null&&u.setOpacity&&x.handle.setOpacity(i)}function l(a){if(!at.value.length)return;const i=[];at.value.forEach(g=>{(a?g.owner===a:!0)?yo(g):i.push(g)}),at.value=i}function s(a,i){const g=Sn(a);return g?at.value.some(m=>m.id===g&&(!i||m.owner===i)):!1}return{temporaryLayers:at,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:s}}const xo="map-card:external-payload",Vf=t=>t?typeof t.html=="string"&&t.html.trim().length>0:!1,Bf={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},$f={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},vf={class:"min-w-0 flex-1"},Sf={class:"text-base font-semibold text-slate-900 truncate"},Lf={key:0,class:"flex gap-1 mt-1"},Af=["disabled"],Mf=["disabled"],Tf={key:1,class:"flex gap-1 mt-1"},Ff=["disabled"],Df=["disabled"],zf={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},If={key:0,class:"text-center text-xs text-slate-500"},jf={key:1,class:"text-center text-xs text-red-500"},Pf={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Rf={class:"divide-y divide-gray-100 py-[5px]"},Of={class:"text-gray-900 font-normal"},Uf={key:0,class:"flex gap-1 flex-wrap"},qf={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Hf=["innerHTML"],Wf=["innerHTML"],Yf={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},Zf={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},Gf={class:"text-xs tracking-[0.02em] leading-none"},Kf={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},Xf={class:"space-y-1"},Qf={class:"flex items-center cursor-pointer gap-2 flex-1"},Jf=["checked","onChange"],eg={class:"text-[13px] text-gray-600"},tg={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},ng={key:5,class:"text-center text-xs text-slate-400"},og="map:temporary-layer-request",cl="cardHideEmpty",rg=14,bo=he(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=wf(),r=_f(),l=e.ref(null),s=e.ref(null),a=e.computed(()=>{var V;return!!((V=l.value)!=null&&V.trim())});function i(){return a.value?s.value?(Vl(s.value),!0):(je(),!0):(je(),!1)}const g=V=>{var U,re;const L=V;l.value=((U=L.detail)==null?void 0:U.html)??null,s.value=((re=L.detail)==null?void 0:re.geometry)??null,a.value?i():je()};e.onMounted(()=>{typeof window>"u"||window.addEventListener(xo,g)}),e.onBeforeUnmount(()=>{typeof window>"u"||window.removeEventListener(xo,g)});const m=e.computed(()=>r.active.value),x=e.computed(()=>m.value||o.isOpen.value||a.value),u=e.computed(()=>m.value?r.loading.value:o.cardLoading.value),h=e.computed(()=>m.value?r.error.value:o.cardError.value),c=e.computed(()=>{var V,L;return m.value?((V=r.current.value)==null?void 0:V.html)||null:a.value?l.value:((L=o.card.value)==null?void 0:L.html)||null}),d=Pe(),y=po(),p=e.computed(()=>{var V,L;return((L=(V=y.value)==null?void 0:V.map)==null?void 0:L.cardHideEmpty)??null}),f=Fe.useRoute(),{activateTemporaryLayer:k,deactivateTemporaryLayer:C,clearTemporaryLayers:$,isTemporaryLayerActive:w}=ho(d.map);function N(V){window.dispatchEvent(new CustomEvent(og,{detail:V}))}const E=e.computed(()=>{var V;return((V=o.cardFeature.value)==null?void 0:V.source)??null}),B=e.computed(()=>E.value?`map-card:${E.value}`:"map-card"),M=e.computed(()=>{var re,de;const V=o.cardFeature.value,L=(V==null?void 0:V.source)||((re=V==null?void 0:V.layer)==null?void 0:re.id),U=((de=V==null?void 0:V.properties)==null?void 0:de.id)??(V==null?void 0:V.id);return L&&U!=null?`${L}:${U}`:null}),D=e.ref(null),W=e.ref(null),K=e.ref(0),Q=new Map;function H(){if(typeof window>"u")return null;const L=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return L&&L[1]?L[1]:null}const J=e.computed(()=>{const V=typeof n.mapId=="string"?n.mapId.trim():"";if(V.length)return V;const L=typeof f.params.slug=="string"?f.params.slug.trim():"";if(L.length)return L;const U=typeof f.query.slug=="string"?f.query.slug.trim():"";return U.length?U:H()}),O=e.ref(null),T=e.ref(null),F=new Map;function X(V){const L=V.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(L)return L;const U=Array.from(V).map(re=>re.charCodeAt(0).toString(16)).join("").slice(0,8);return U?`layer-${U}`:`layer-${Math.random().toString(36).slice(2,8)}`}function v(V){if(typeof V!="string")return"";const L=V.trim();if(!L)return"";if(/^https?:\/\//i.test(L))return L;if(L.startsWith("//"))return typeof window>"u"?`https:${L}`:`${window.location.protocol}${L}`;const U=typeof window<"u"?window.location.origin:"";return L.startsWith("/")?U?`${U}${L}`:L:U?`${U}/${L}`:L}function _(V){if(V==null)return[];if(Array.isArray(V))return V.flatMap(L=>_(L));if(typeof V=="number")return Number.isFinite(V)?[V]:[];if(typeof V=="string"){const L=V.match(/-?\d+(?:\.\d+)?/g);return!L||!L.length?[]:L.map(U=>Number(U)).filter(U=>Number.isFinite(U))}return[]}function S(V){const L=_(V);if(L.length<4)return null;const[U,re,de,ke]=L;return[U,re,de,ke].every(Me=>Number.isFinite(Me))?[U,re,de,ke]:null}function z(V){if(!V)return null;const L=V.trim();if(!L.length)return null;try{const de=JSON.parse(L),ke=S(de);if(ke)return ke}catch{}const U=L.match(/-?\d+(?:\.\d+)?/g);if(!U||U.length<4)return null;const re=U.slice(0,4).map(de=>Number(de));return re.every(de=>Number.isFinite(de))?[re[0],re[1],re[2],re[3]]:null}function I(V){const L={},U=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let re;for(;(re=U.exec(V))!==null;){const de=re[1],ke=re[2]??re[3]??re[4]??"";de&&(L[de]=ke)}return L}function G(V,L){for(const U of L)if(V[U]!=null&&String(V[U]).trim().length)return String(V[U]).trim();return""}function te(V){if(!(V!=null&&V.length))return;const L=Number(V);return Number.isFinite(L)?L:void 0}function oe(V){if(typeof V!="string"||!V.length)return[];const L=[],U=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let re=0,de;const ke=new Set,Me=Te=>{let We=Te,Qe=2;for(;ke.has(We);)We=`${Te}-${Qe}`,Qe+=1;return ke.add(We),We};for(;(de=U.exec(V))!==null;){const[Te,We="",Qe=""]=de,Oe=de.index;if(Oe>re){const vl=V.slice(re,Oe);vl.trim().length&&L.push({type:"html",content:vl})}const Je=I(We),lt=G(Je,["title"])||"Тимчасовий шар",$t=v(G(Je,["url"]));if(!$t){L.push({type:"html",content:Te}),re=Oe+Te.length;continue}const yn=G(Je,["id"]),_o=G(Je,["button-text","buttonText","show","show-label","showLabel"]),mw=te(G(Je,["tile-size","tileSize"])),fw=te(G(Je,["minzoom","minZoom"])),gw=te(G(Je,["maxzoom","maxZoom"])),yw=te(G(Je,["opacity"])),hw=z(G(Je,["bounds","data-bounds","bbox"])),xw=yn||X(`${lt}-${$t}`)||X(lt),Bl=Me(xw||`layer-${L.length+1}`),Eo=Qe.trim(),$l=/<[^>]+>/.test(Eo),bw=$l?Eo:null,No=$l?null:Eo,kw=_o&&_o.trim().length?_o.trim():No&&No.trim().length?No.trim():void 0;L.push({type:"layer",spec:{id:Bl,title:lt,url:$t,tileSize:mw,minzoom:fw,maxzoom:gw,opacity:yw,bounds:hw},componentProps:{title:lt,url:$t,id:Bl,buttonText:kw},slotText:bw}),re=Oe+Te.length}if(re<V.length){const Te=V.slice(re);Te.trim().length&&L.push({type:"html",content:Te})}return!L.length&&V.trim().length&&L.push({type:"html",content:V}),L}function ae(V){if(!V)return null;const L=typeof V.id=="string"?V.id.trim():"",U=typeof V.title=="string"?V.title.trim():"",re=v(typeof V.url=="string"?V.url:"");return!L||!re?null:{id:L,title:U||L,url:re,tileSize:V.tileSize,minzoom:V.minzoom,maxzoom:V.maxzoom,opacity:V.opacity,bounds:V.bounds}}const xe=e.computed(()=>{if(m.value&&r.current.value)return r.current.value.data??{};const V=o.card.value;return(V==null?void 0:V.rows)??{}}),we=e.computed(()=>{if(m.value&&r.current.value){const re=r.current.value,de=Array.isArray(re.columns)?re.columns:[];return de.length?de:re.fields??[]}const V=o.card.value;if(!V)return[];const L=Array.isArray(V.columns)?V.columns:[];return L.length?L:Array.isArray(V.fields)?V.fields:[]}),P=e.computed(()=>{const V=we.value;if(!V.length)return[];const L=xe.value;return V.map(U=>({key:U.name,label:U.ua||U.label||U.title||U.name,value:Z(L[U.name],U.format||"text"),format:U.format||"text"}))}),ee=new Set(["—","-","–","−"]);function b(V){const L=V.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!L)return V;const[,U,re,de]=L;return`${de}.${re}.${U}`}function A(V){return Number.isFinite(V)?new Intl.NumberFormat("uk-UA").format(V):"—"}function Z(V,L){if(V==null)return"—";if(L==="tags")return V;if(Array.isArray(V))return V.length?V.map(U=>Z(U,"text")).join(", "):"—";if(typeof V=="boolean")return V?"так":"ні";if(typeof V=="number")return A(V);if(typeof V=="string"){const U=V.trim();if(!U.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(U))return b(U);if(/^-?\d+(?:\.\d+)?$/.test(U)){const re=Number(U);return Number.isFinite(re)?A(re):U}return U}return String(V)}function le(V){if(V==null)return!0;if(typeof V=="string"){const L=V.trim();return L.length?ee.has(L):!0}return!1}function fe(V){if(!V)return[];if(Array.isArray(V))return V;if(typeof V=="string"){const L=V.trim();if(L.startsWith("{")&&L.endsWith("}")){const re=L.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return re?re.map(de=>de.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const ie=e.ref(!1),Be=e.ref(!0),$e=()=>{var V,L;return typeof window>"u"?null:((L=(V=window.localStorage)==null?void 0:V.getItem)==null?void 0:L.call(V,cl))??null},Re=e.ref($e()),De=V=>{const L=typeof V=="string"&&V.toLowerCase()==="true";ie.value=L,Be.value=!L},Ue=V=>{Re.value=V};if(typeof window<"u"){const V=L=>{L.key===cl&&Ue(L.newValue)};window.addEventListener("storage",V),e.onBeforeUnmount(()=>{window.removeEventListener("storage",V)})}const tt=e.computed(()=>typeof Re.value=="string");e.watch(Re,V=>{De(typeof V=="string"?V:p.value)},{immediate:!0}),e.watch(p,V=>{tt.value||De(V)},{immediate:!0});const Mt=e.computed(()=>P.value.filter(V=>le(V.value)).length),Tt=e.computed(()=>ie.value&&!Be.value?P.value.filter(V=>!le(V.value)):P.value);function Zt(V){const L=typeof V=="string"?V:"";if(!L.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:L,hiddenCount:0};const re=new DOMParser().parseFromString(L,"text/html");let de=0;return re.querySelectorAll("dd").forEach(ke=>{var We;const Me=((We=ke.textContent)==null?void 0:We.trim())??"",Te=ke.closest("div");if(le(Me)){de+=1,Te?Te.remove():ke.remove();return}}),{sanitized:re.body.innerHTML,hiddenCount:de}}const Ft=e.computed(()=>Zt(c.value)),ut=e.computed(()=>c.value?Ft.value.hiddenCount:0),dn=e.computed(()=>Mt.value+ut.value),un=e.computed(()=>{var V;return ie.value&&!Be.value&&!!((V=c.value)!=null&&V.trim())}),Bt=e.computed(()=>ie.value&&dn.value>0),pn=e.computed(()=>Be.value?"Приховати пусті значення":"Показати пусті значення"),j=e.computed(()=>Be.value?Pl:So);function Y(){Be.value=!Be.value}const q=e.computed(()=>{const V=un.value?Ft.value.sanitized:c.value??"";return oe(V)}),se=e.computed(()=>q.value.filter(V=>V.type==="layer"));function pe(V){return Array.isArray(V)?V.map((L,U)=>{const re=v(typeof(L==null?void 0:L.url)=="string"?L.url:""),de=typeof(L==null?void 0:L.geohub)=="string"&&L.geohub.trim().length?`/api-hub/tms/${L.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",ke=((L==null?void 0:L.name)||(L==null?void 0:L.title)||(L==null?void 0:L.label)||`Шар ${U+1}`).toString(),Me=(L==null?void 0:L.id)!=null?String(L.id):X(`${ke}-${U+1}`),Te=(L==null?void 0:L.buttonText)||(L==null?void 0:L.button_text)||null,We=(L==null?void 0:L.description)||(L==null?void 0:L.subtitle)||null,Qe=re||v(de)||"";if(!Qe)return null;const Oe={id:Me,title:ke,url:Qe,subtitle:We,buttonText:Te||void 0};typeof(L==null?void 0:L.tileSize)=="number"&&(Oe.tileSize=L.tileSize),typeof(L==null?void 0:L.tile_size)=="number"&&(Oe.tileSize=L.tile_size),typeof(L==null?void 0:L.minzoom)=="number"&&(Oe.minzoom=L.minzoom),typeof(L==null?void 0:L.maxzoom)=="number"&&(Oe.maxzoom=L.maxzoom),typeof(L==null?void 0:L.opacity)=="number"&&(Oe.opacity=L.opacity);const Je=S((L==null?void 0:L.bounds)??(L==null?void 0:L.bbox)??null);return Je&&(Oe.bounds=Je),Oe}).filter(Boolean):[]}const be=e.computed(()=>{var re,de;const V=o.card.value,L=r.current.value,U=[(re=V==null?void 0:V.rows)==null?void 0:re.layers,V==null?void 0:V.layers,(de=L==null?void 0:L.data)==null?void 0:de.layers,L==null?void 0:L.layers];for(const ke of U){const Me=pe(ke);if(Me.length)return Me}return[]}),Ne=e.computed(()=>q.value.length>0||P.value.length>0||be.value.length>0),_e=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function it(){const V={},L=O.value;if(L&&typeof L=="object"&&Object.entries(L).forEach(([U,re])=>{typeof re=="string"&&(V[U]=re)}),E.value&&(V.layer=E.value),!V.geohub){const U=typeof(L==null?void 0:L.geohub)=="string"?L.geohub:null,re=typeof(L==null?void 0:L.geohub_key)=="string"?L.geohub_key:null,de=typeof(L==null?void 0:L.geohubId)=="string"?L.geohubId:null;V.geohub=U||re||de||V.layer||""}return V}async function ot(){const V=E.value;if(!V)return O.value=null,T.value=null,null;if(T.value===V&&O.value)return O.value;if(F.has(V)){const L=F.get(V);return O.value=L,T.value=V,L}try{const L=await fetch(`/api/gis-service/${encodeURIComponent(V)}`);if(!L.ok)return null;const U=await L.json();return F.set(V,U),O.value=U,T.value=V,U}catch{return null}}async function Ze(V){if(!(V!=null&&V.id))return;await ot();const L=it(),U=se.value.find(Te=>Te.spec.id===V.id),re=be.value.find(Te=>Te.id===V.id),de=(U==null?void 0:U.spec)||ae(re)||ae(V),ke=(U==null?void 0:U.spec.bounds)??(re==null?void 0:re.bounds);if(!de||w(de.id,B.value))return;const Me=B.value||void 0;D.value=Me??null,k(de,L,Me),N({action:"activate",owner:Me,spec:de,context:L}),ct(ke)}async function ct(V){var ke;if(!(V!=null&&V.length))return;const[L,U,re,de]=V;[L,U,re,de].every(Me=>Number.isFinite(Me))&&typeof d.fitBounds=="function"&&(await((ke=d.ready)==null?void 0:ke.call(d)),d.fitBounds([[L,U],[re,de]],{padding:48,maxZoom:18}))}function kt(V){if(!V)return;const L=Gt()||void 0;C(V,L),N({action:"deactivate",owner:L,spec:{id:V}})}function zn(V){return w(V,Gt())}function In(V,L){const U=L.target;!!(U!=null&&U.checked)?Ze(V):kt(V.id)}function Gt(){return D.value||B.value||null}e.watch(E,(V,L)=>{V!==L&&(O.value=null,T.value=null)});const{next:mn,prev:fn,count:R,index:ne}=r,ge=e.computed(()=>o.count.value),Ce=e.computed(()=>o.index.value),ue=e.computed(()=>ge.value>1),Le=e.computed(()=>m.value?R.value:ge.value),Ve=e.computed(()=>m.value?ne.value:Ce.value),ce=o.next,ve=o.prev;function Ae(){const V=Gt();V&&($(V),N({action:"clear",owner:V}),D.value=null)}function ze(){l.value=null,s.value=null,o.close(),r.close(),Ae()}e.watch(x,(V,L)=>{!V&&L&&(Ae(),je())});function rt(){!o.isOpen.value&&!r.active.value&&Ae()}e.watch(()=>o.isOpen.value,()=>{rt()}),e.watch(()=>r.active.value,()=>{rt()}),e.watch(E,(V,L)=>{V&&L&&V!==L&&Ae()}),e.watch(ne,(V,L)=>{V!==L&&Ae()}),e.watch(M,(V,L)=>{V&&L&&V!==L&&Ae()});function pt(V){if(!V)return null;if(V.geometry)return V.geometry;const L=(V==null?void 0:V.data)??(V==null?void 0:V.properties);return L!=null&&L.geom_4326?L.geom_4326:L!=null&&L.geom?L.geom:null}function je(){var V,L;(L=(V=W.value)==null?void 0:V.remove)==null||L.call(V),W.value=null}function ft(V){var U,re,de;const L=(V==null?void 0:V.type)||((de=(re=(U=V==null?void 0:V.features)==null?void 0:U[0])==null?void 0:re.geometry)==null?void 0:de.type)||"";return L.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:L.includes("LineString")?{type:"line",paint:{"line-color":"#0a57ff","line-width":3,"line-opacity":.9}}:{type:"circle",paint:{"circle-color":"#0a57ff","circle-opacity":.9,"circle-radius":8,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}}let Xe=null;function wt(){const V=Array.isArray(f.query.info)?f.query.info[0]:f.query.info;return typeof V!="string"?null:V.trim()||null}function jn(V){var de,ke;if(!V)return null;const L=(V==null?void 0:V.source)??((de=V==null?void 0:V.layer)==null?void 0:de.id),U=((ke=V==null?void 0:V.properties)==null?void 0:ke.id)??(V==null?void 0:V.id);return!L||U===void 0||U===null?null:`${L},${U}`.trim()||null}function Pn(V,L){if(V){if(Array.isArray(V)){if(V.length>=2&&typeof V[0]=="number"&&typeof V[1]=="number"){L.push([V[0],V[1]]);return}V.forEach(U=>Pn(U,L));return}typeof V=="object"&&(Array.isArray(V.coordinates)&&Pn(V.coordinates,L),Array.isArray(V.features)&&V.features.forEach(U=>Pn(U==null?void 0:U.geometry,L)))}}function cw(V){var Te,We;if(!V)return null;const L=V.type==="FeatureCollection"?(We=(Te=V.features)==null?void 0:Te[0])==null?void 0:We.geometry:V.type==="Feature"?V.geometry:V,U=[];if(Pn(L,U),!U.length)return null;let re=U[0][0],de=U[0][0],ke=U[0][1],Me=U[0][1];return U.forEach(([Qe,Oe])=>{Qe<re&&(re=Qe),Qe>de&&(de=Qe),Oe<ke&&(ke=Oe),Oe>Me&&(Me=Oe)}),[(re+de)/2,(ke+Me)/2]}async function dw(V,L){var ke;const U=wt();if(!U)return;const re=jn(V);if(!re||re!==U||Xe===U)return;const de=cw(L);de&&(await((ke=d.ready)==null?void 0:ke.call(d)),d.flyTo({center:de,zoom:rg}),Xe=U)}function Vl(V){var de;if(!V){je();return}const L=(de=d.map)==null?void 0:de.value,U={type:"FeatureCollection",features:[{type:"Feature",geometry:V,properties:{}}]};je();const re=ft(V);if(W.value=Se("feature-card-highlight",{source:{type:"geojson",data:U},layer:{id:"feature-card-highlight",type:re.type,source:"feature-card-highlight",paint:re.paint}},d.map),L!=null&&L.moveLayer){const ke=()=>{try{L.moveLayer("feature-card-highlight")}catch{}},Me=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(ke)}):setTimeout(ke,0)};Me();const Te=()=>Me();L.once("styledata",Te);const We=()=>{Me(),L.off("styledata",Te),L.off("idle",We)};L.on("idle",We)}}function uw(V){var re,de;const L=(V==null?void 0:V.source)||((re=V==null?void 0:V.layer)==null?void 0:re.id)||"unknown",U=((de=V==null?void 0:V.properties)==null?void 0:de.id)??(V==null?void 0:V.id)??"unknown";return`${L}:${U}`}async function pw(V){var ke,Me,Te,We,Qe;if(!V)return null;const L=pt(V);if(L)return L;const U=((ke=V==null?void 0:V.properties)==null?void 0:ke.id)??(V==null?void 0:V.id);if(!U)return null;const re=uw(V);if(Q.has(re))return Q.get(re);const de=[J.value,V==null?void 0:V.source,(Me=V==null?void 0:V.layer)==null?void 0:Me.id].map(Oe=>typeof Oe=="string"?Oe.trim():"").filter(Boolean);for(const Oe of de)try{const Je=await fetch(`/api/map-features/${encodeURIComponent(Oe)}/${encodeURIComponent(String(U))}`);if(!Je.ok)continue;const lt=await Je.json(),$t=((Te=lt==null?void 0:lt.data)==null?void 0:Te.geom)||((We=lt==null?void 0:lt.data)==null?void 0:We.geometry)||((Qe=lt==null?void 0:lt.data)==null?void 0:Qe.geom_4326)||null,yn=typeof $t=="string"?JSON.parse($t):$t;if(yn)return Q.set(re,yn),yn}catch{continue}return null}async function gn(V){K.value+=1;const L=K.value;if(i())return;if(!V||m.value){je();return}if(!_e.value){je();return}const U=await pw(V);if(L===K.value){if(!U){je();return}Vl(U),dw(V,U)}}return e.watch(()=>o.cardFeature.value,V=>{gn(V)},{immediate:!0}),e.watch(()=>o.index.value,()=>{m.value||gn(o.cardFeature.value)}),e.watch(m,V=>{if(V){a.value||je();return}if(a.value){i();return}gn(o.cardFeature.value)}),e.watch(J,()=>{if(a.value){i();return}!m.value&&o.cardFeature.value&&gn(o.cardFeature.value)}),e.watch(_e,V=>{i()||(V?gn(o.cardFeature.value):je())}),e.watch(()=>wt(),()=>{Xe=null}),e.watch(l,V=>{V||(s.value=null,je())}),e.onBeforeUnmount(()=>{Ae(),je()}),(V,L)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[x.value?(e.openBlock(),e.createElementBlock("div",Bf,[e.createElementVNode("div",$f,[e.createElementVNode("div",vf,[e.createElementVNode("p",Sf,[m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Ve.value+1)+" / "+e.toDisplayString(Le.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[ue.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString(Ve.value+1)+" / "+e.toDisplayString(Le.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),m.value&&e.unref(R)>1?(e.openBlock(),e.createElementBlock("div",Lf,[e.createElementVNode("button",{onClick:L[0]||(L[0]=(...U)=>e.unref(fn)&&e.unref(fn)(...U)),disabled:e.unref(ne)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref($o),{class:"h-4 w-4"})],8,Af),e.createElementVNode("button",{onClick:L[1]||(L[1]=(...U)=>e.unref(mn)&&e.unref(mn)(...U)),disabled:e.unref(ne)===e.unref(R)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(vo),{class:"h-4 w-4"})],8,Mf)])):!m.value&&ue.value?(e.openBlock(),e.createElementBlock("div",Tf,[e.createElementVNode("button",{onClick:L[2]||(L[2]=(...U)=>e.unref(ve)&&e.unref(ve)(...U)),disabled:Ce.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref($o),{class:"h-4 w-4"})],8,Ff),e.createElementVNode("button",{onClick:L[3]||(L[3]=(...U)=>e.unref(ce)&&e.unref(ce)(...U)),disabled:Ce.value===ge.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(vo),{class:"h-4 w-4"})],8,Df)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700 ml-1",onClick:ze}," ✕ ")]),e.createElementVNode("div",zf,[u.value?(e.openBlock(),e.createElementBlock("div",If," Завантаження даних… ")):h.value?(e.openBlock(),e.createElementBlock("div",jf,e.toDisplayString(h.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[P.value.length?(e.openBlock(),e.createElementBlock("div",Pf,[e.createElementVNode("dl",Rf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Tt.value,U=>(e.openBlock(),e.createElementBlock("div",{key:U.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",Of,e.toDisplayString(U.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",U.format==="badge"?"font-semibold text-yellow-800":""])},[U.format==="tags"?(e.openBlock(),e.createElementBlock("div",Uf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(fe(U.value),(re,de)=>(e.openBlock(),e.createElementBlock("span",{key:de,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(re),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(U.value),1)],64))],2)]))),128))])])):q.value.length?(e.openBlock(),e.createElementBlock("div",qf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(q.value,(U,re)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:re},[U.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:U.content},null,8,Hf)):(e.openBlock(),e.createBlock(il,{key:1,title:U.componentProps.title,url:U.componentProps.url,id:U.componentProps.id,"button-text":U.componentProps.buttonText,onActivate:Ze},e.createSlots({_:2},[U.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:U.slotText},null,8,Wf)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),se.value.length?(e.openBlock(),e.createElementBlock("div",Yf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(se.value,U=>(e.openBlock(),e.createBlock(il,{key:U.spec.id,title:U.componentProps.title,url:U.componentProps.url,id:U.spec.id,"button-text":U.componentProps.buttonText,onActivate:Ze},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),Bt.value?(e.openBlock(),e.createElementBlock("div",Zf,[e.createElementVNode("button",{type:"button",class:"flex items-center gap-1 justify-end w-full font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-60 cursor-pointer",onClick:Y},[e.createElementVNode("span",Gf,e.toDisplayString(pn.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(j.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),be.value.length?(e.openBlock(),e.createElementBlock("div",Kf,[L[5]||(L[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",Xf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(be.value,U=>(e.openBlock(),e.createElementBlock("div",{key:U.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Qf,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:zn(U.id),onChange:re=>In(U,re)},null,40,Jf),L[4]||(L[4]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",eg,e.toDisplayString(U.title),1)]),U.subtitle?(e.openBlock(),e.createElementBlock("div",tg,e.toDisplayString(U.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Ne.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ng," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-79735544"]]),dl=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var h,c;const n=t,o=((c=(h=e.getCurrentInstance())==null?void 0:h.appContext.config.globalProperties)==null?void 0:c.$settings)||null,{map:r,ready:l}=Pe();let s=null;function a(){s==null||s.remove(),s=null}function i(d){if(!d)return null;if(typeof d=="string")try{d=JSON.parse(d)}catch{return null}return d.type==="FeatureCollection"?d:d.type==="Feature"?{type:"FeatureCollection",features:[d]}:d.type&&Array.isArray(d.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{}}]}:Array.isArray(d.features)?{type:"FeatureCollection",features:d.features}:d.geometry?i(d.geometry):null}function g(d){var f,k,C;return{type:"line",color:"#8e4484",width:2,opacity:((((C=(k=(f=d==null?void 0:d.features)==null?void 0:f[0])==null?void 0:k.geometry)==null?void 0:C.type)||"").includes("Polygon"),.95)}}async function m(d){const y=await fetch(d);if(!y.ok)throw new Error(String(y.status));return y.json()}async function x(d,y){if(d){const p=/^https?:\/\//.test(d)?d:new URL(d,location.origin).toString(),f=await m(p).catch(()=>null),k=i(f);if(k)return k}if(y){const p=await m(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(y)}`).catch(()=>null),f=i(p);if(f)return f}return null}async function u(){var f,k,C,$;if(!n.layerId||!r.value){a();return}typeof l=="function"&&await l().catch(()=>{});const d=n.boundary??((f=n.settingsMap)==null?void 0:f.boundary)??((k=o==null?void 0:o.map)==null?void 0:k.boundary)??null,y=n.katottg??((C=n.settingsMap)==null?void 0:C.katottg)??(($=o==null?void 0:o.map)==null?void 0:$.katottg)??null;if(!d&&!y){a();return}const p=await x(d,y);if(!p){a();return}a(),s=Se(`${n.layerId}-boundary`,{source:{type:"geojson",data:p},style:g(p)},r)}return e.watch(()=>{var d,y;return[n.layerId,n.boundary,n.katottg,(d=n.settingsMap)==null?void 0:d.boundary,(y=n.settingsMap)==null?void 0:y.katottg,r.value]},()=>{u()},{immediate:!0}),e.onBeforeUnmount(a),(d,y)=>null}}),lg={class:"map-center-control"},ag=["aria-label"],sg={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Lt=he(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Pe(),l=e.ref(null),s=e.ref(null),a=e.ref(null),i=e.ref(null),g=po(),m=e.computed(()=>{var k;return((k=g.value)==null?void 0:k.map)??null});function x(k){if(Array.isArray(k)&&k.length>=2){const[C,$]=k.slice(0,2).map(w=>Number(w));return Number.isNaN(C)||Number.isNaN($)?null:[C,$]}if(k&&typeof k=="object"){const C=k,$=C.lng??C.lon??C.long??C.x,w=C.lat??C.y;if($!=null&&w!=null){const N=Number($),E=Number(w);if(!Number.isNaN(N)&&!Number.isNaN(E))return[N,E]}}if(typeof k=="string"){const C=k.split(",").map($=>Number($.trim()));if(C.length>=2&&C.every($=>!Number.isNaN($)))return[C[0],C[1]]}return null}function u(k){const C=x(k);C&&(l.value=C)}function h(k){const C=Number(k);Number.isNaN(C)||(s.value=C)}e.watch(()=>n.center,k=>u(k),{immediate:!0}),e.watch(()=>n.zoom,k=>h(k),{immediate:!0}),e.watch(()=>n.targetCenter,k=>{a.value=x(k)},{immediate:!0}),e.watch(()=>n.targetZoom,k=>{const C=Number(k);i.value=Number.isNaN(C)?null:C},{immediate:!0}),e.watch(()=>{var k;return(k=m.value)==null?void 0:k.center},k=>{u(k)},{immediate:!0}),e.watch(()=>{var k;return(k=m.value)==null?void 0:k.zoom},k=>{h(k)},{immediate:!0});const c=e.computed(()=>{var k;return((k=n.targetLabel)==null?void 0:k.trim())||"Точка"}),d=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),y=e.computed(()=>!!a.value);e.onMounted(async()=>{await(r==null?void 0:r());const k=o.value;if(k){if(!l.value){const C=k.getCenter();l.value=[C.lng,C.lat]}s.value==null&&(s.value=k.getZoom())}});function p(){const k=o.value;if(!k)return;const C=l.value||(()=>{const w=k.getCenter();return[w.lng,w.lat]})(),$=s.value??k.getZoom();k.flyTo({center:C,zoom:$})}function f(){const k=o.value;if(!k||!a.value)return;const C=i.value??s.value??k.getZoom();k.flyTo({center:a.value,zoom:C})}return(k,C)=>(e.openBlock(),e.createElementBlock("div",lg,[y.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(p,["stop"])},[C[0]||(C[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(Zl),{class:"w-4 h-4"})])),y.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":d.value,onClick:e.withModifiers(f,["stop"])},[e.createElementVNode("span",sg,e.toDisplayString(c.value),1),e.createVNode(e.unref(bn),{class:"w-4 h-4"})],8,ag)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),ig={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},cg={class:"flex-1 relative overflow-hidden"},dg={class:"absolute top-0 left-0 w-full z-20"},ug={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},pg={class:"flex items-center gap-3 h-[2.75rem]"},mg={class:"font-semibold text-lg text-gray-800 line-clamp-1"},fg={key:0,class:"text-xs text-gray-500 truncate"},gg=["title"],yg={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},hg={class:"relative w-full h-full"},xg={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},bg={class:"absolute top-4 left-4 z-20"},kg={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},wg={class:"absolute bottom-4 left-4 z-20"},_g={class:"flex-1 flex flex-col h-full"},Eg={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Ng={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Cg=["aria-selected","onClick"],Vg={class:"leading-none"},Bg={class:"flex flex-col flex-1 overflow-y-hidden p-3"},$g="OpenGIS",ul=2,Ln=5,vg=1e3,Sg=he(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var P,ee;const n=t,o=e.toRef(n,"hideServiceKey"),r=Fe.useRoute(),l=Fe.useRouter(),{id:s}=r.params,a=e.ref(null),i=e.ref(null),g=e.ref({}),m=e.ref(null),x=((ee=(P=e.getCurrentInstance())==null?void 0:P.appContext.config.globalProperties)==null?void 0:ee.$settings)||null;function u(b){typeof document>"u"||(document.title=b?`${b} — Сервіс`:$g)}let h=null;const c=e.ref(!1);function d(){var b;return(b=a.value)==null?void 0:b.ctx}function y(b){if(Array.isArray(b))return y(b[0]);if(typeof b!="string"&&typeof b!="number")return null;const A=typeof b=="number"?b:Number(b.trim());return Number.isFinite(A)?A:null}function p(b,A){return b.toFixed(A)}function f(b,A,Z){const le=.5*10**-Z;return Math.abs(b-A)>le}function k(){var $e,Re,De,Ue;const b=(Re=($e=d())==null?void 0:$e.map)==null?void 0:Re.value;if(!b)return;const A=y(r.query.z),Z=y(r.query.x),le=y(r.query.y);if(A==null||Z==null||le==null)return;const fe=(De=b.getCenter)==null?void 0:De.call(b),ie=(Ue=b.getZoom)==null?void 0:Ue.call(b);(!fe||f(fe.lng,Z,Ln)||f(fe.lat,le,Ln)||f(ie??0,A,ul))&&(c.value=!0,b.jumpTo({center:[Z,le],zoom:A}),c.value=!1)}function C(){var fe,ie,Be,$e;if(c.value)return;const b=(ie=(fe=d())==null?void 0:fe.map)==null?void 0:ie.value;if(!b)return;const A=(Be=b.getCenter)==null?void 0:Be.call(b),Z=($e=b.getZoom)==null?void 0:$e.call(b);if(!A||Z==null)return;const le={...r.query,z:p(Z,ul),x:p(A.lng,Ln),y:p(A.lat,Ln)};r.query.z===le.z&&r.query.x===le.x&&r.query.y===le.y||l.replace({query:le})}const $=e.ref(null),w=e.ref(""),N=e.ref([]),E=e.ref([]),B=e.ref([]),M=e.ref("list"),D=e.ref(""),W=e.ref([]),K=e.ref(!0);let Q=null;const H=e.computed(()=>{var b,A;return((b=m.value)==null?void 0:b.id)??((A=m.value)==null?void 0:A.service_id)??null}),J=e.computed(()=>{const b=(x==null?void 0:x.map)||null,A=(b==null?void 0:b.boundary)??null,Z=(b==null?void 0:b.katottg)??null;return!A&&!Z?null:{boundary:A,katottg:Z}}),O=e.computed(()=>{const b=m.value;if(!b)return"";const A=[];!o.value&&b.service_key&&A.push(`Сервіс: ${b.service_key}`),b.description&&A.push(b.description);const Z=b.group_name||b.group_id;return Z&&A.push(`Група: ${Z}`),typeof b.is_public<"u"&&A.push(b.is_public?"Публічний":"Не публічний"),typeof b.is_active<"u"&&A.push(b.is_active?"Активний":"Неактивний"),A.join(", ")}),T=[{key:"style",label:"Стиль",icon:Xr},{key:"popup",label:"Попап",icon:Ip},{key:"filter",label:"Фільтр",icon:Op},{key:"legend",label:"Легенда",icon:Lp},{key:"card",label:"Картка",icon:Qr},{key:"metadata",label:"Метадані",icon:lo}],F=T.map(b=>b.key),X=e.ref("style");e.onMounted(async()=>{const b=r.query.tab;b&&F.includes(b)&&(X.value=b),await te(),v()});async function v(){var le;const b=d();if(!(b!=null&&b.ready))return;await b.ready(),k();const A=(le=b.map)==null?void 0:le.value;if(!A)return;const Z=()=>C();A.on("moveend",Z),A.on("zoomend",Z),h=()=>{A.off("moveend",Z),A.off("zoomend",Z)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{k()}),e.watch(X,b=>{r.query.tab!==b&&l.replace({query:{...r.query,tab:b}})}),e.watch(()=>r.query.tab,b=>{b&&F.includes(b)&&X.value!==b&&(X.value=b)}),e.watch(()=>{var b;return(b=m.value)==null?void 0:b.name},b=>u(b),{immediate:!0});function _(b){if(!b)return null;try{return JSON.parse(JSON.stringify(b))}catch(A){return console.warn("Failed to clone style",A),null}}function S(b){if(!b)return null;if(typeof b=="string")try{return oo(Kr.load(b)||null)}catch(A){return console.warn("Failed to parse style yaml",A),null}return oo(_(b))}function z(b,A){try{return JSON.stringify(b)===JSON.stringify(A)}catch{return!1}}function I(){var A;if(!m.value)return;const b=S($.value);z(b,((A=m.value)==null?void 0:A.style)??null)||(m.value={...m.value,style:b})}function G(){Q&&clearTimeout(Q),Q=setTimeout(()=>{Q=null,I()},vg)}const te=async()=>{try{const b=await fetch(`/api/gis-service/${s}`);if(!b.ok)throw new Error(`${b.status}`);const A=await b.json();g.value=A||{},i.value=s;const Z=S(A.style);m.value=A?{...A,style:_(Z)}:null,$.value=Z,w.value=typeof(A==null?void 0:A.style)=="string"?A.style:Z?Kr.dump(Z):"",E.value=(A==null?void 0:A.popup)||[],M.value=A.card_mode==="html"?"html":"list",B.value=A.card,D.value=A.html,N.value=(A==null?void 0:A.legend)||[],W.value=(A==null?void 0:A.filters)||[]}catch(b){console.error("Failed to fetch map info",b)}};e.watch(()=>{var b;return(b=m.value)==null?void 0:b.style},b=>{$.value=S(b)},{deep:!0}),e.watch(()=>$.value,()=>{G()},{deep:!0}),e.onBeforeUnmount(()=>{Q&&(clearTimeout(Q),Q=null),h==null||h(),h=null});async function oe(b,A){await xe({[b]:A},b)}function ae(){const b=_($.value);m.value=m.value?{...m.value,style:b}:m.value}async function xe(b,A){if(m.value={...m.value||{},...b},typeof b.html<"u"&&(g.value={...g.value||{},html:b.html}),!!H.value)try{if(!(await fetch(`/api/gis-service/${H.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)})).ok)throw new Error("Save failed");ye.notify({type:"success",title:"Успіх",message:`${A} saved`}),await te()}catch(Z){ye.notify({type:"error",title:"Помилка",message:`Failed to save ${A}`}),console.error(Z)}}async function we(b,A){if(b!=="card"){await oe(b,A);return}const Z=(A==null?void 0:A.card_mode)==="html"?"html":"list",le=Z==="html"&&typeof(A==null?void 0:A.html)=="string"?A.html:"",fe=(Z==="html"?[]:null)||(Array.isArray(A==null?void 0:A.list)?A.list:[]);B.value=fe,M.value=Z,D.value=le;const ie={card_mode:Z};Z==="html"&&(ie.html=le),Z==="list"&&(ie.card=fe),await xe(ie,"card")}return(b,A)=>{var Z,le,fe;return e.openBlock(),e.createElementBlock("div",ig,[e.createElementVNode("div",cg,[e.createElementVNode("div",dg,[e.createElementVNode("div",ug,[e.createElementVNode("div",pg,[e.createElementVNode("button",{onClick:A[0]||(A[0]=ie=>b.$router.back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...A[11]||(A[11]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",mg,e.toDisplayString((Z=m.value)==null?void 0:Z.name),1),O.value?(e.openBlock(),e.createElementBlock("div",fg,e.toDisplayString(O.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(le=m.value)==null?void 0:le.description},e.toDisplayString((fe=m.value)==null?void 0:fe.description),9,gg)])]),e.createElementVNode("div",yg,[e.createElementVNode("div",hg,[e.createVNode($n,{ref_key:"mapViewRef",ref:a},{default:e.withCtx(()=>{var ie,Be,$e,Re,De,Ue,tt;return[(ie=m.value)!=null&&ie.service_id?(e.openBlock(),e.createBlock(tf,{key:0,id:(Be=m.value)==null?void 0:Be.service_id,layer:m.value,"style-spec":(($e=m.value)==null?void 0:$e.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),H.value?(e.openBlock(),e.createBlock(dl,{key:1,"layer-id":H.value,boundary:((Re=m.value)==null?void 0:Re.boundary)||((De=J.value)==null?void 0:De.boundary)||null,katottg:((Ue=m.value)==null?void 0:Ue.katottg)||((tt=J.value)==null?void 0:tt.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",xg,[H.value?(e.openBlock(),e.createBlock(fo,{key:0,"layer-id":H.value,filters:W.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),A[12]||(A[12]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",bg,[e.createVNode(Yt)]),e.createElementVNode("div",kg,[e.createVNode(Lt),g.value.center?(e.openBlock(),e.createBlock(Lt,{key:0,targetCenter:g.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",wg,[e.createVNode(go,{items:N.value||null},null,8,["items"])]),e.createVNode(sl),e.createVNode(bo,{html:g.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(ro,{open:K.value,onToggle:A[1]||(A[1]=ie=>K.value=!K.value)},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",K.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",_g,[e.createElementVNode("div",Eg,[e.createElementVNode("div",Ng,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(T,ie=>e.createElementVNode("button",{key:ie.key,type:"button",role:"tab","aria-selected":X.value===ie.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",X.value===ie.key?"bg-white shadow-sm text-gray-700":""]),onClick:Be=>X.value=ie.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ie.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Vg,e.toDisplayString(ie.label),1)],10,Cg)),64))])]),e.createElementVNode("div",Bg,[X.value==="style"?(e.openBlock(),e.createBlock(ym,{key:0,token:H.value,"style-text":w.value,"style-yaml":$.value,"onUpdate:styleYaml":A[2]||(A[2]=ie=>$.value=ie),"onUpdate:styleText":A[3]||(A[3]=ie=>w.value=ie),onUpdate:ae},null,8,["token","style-text","style-yaml"])):X.value==="legend"?(e.openBlock(),e.createBlock(qm,{key:1,token:H.value,columns:N.value,"onUpdate:columns":A[4]||(A[4]=ie=>N.value=ie),onSave:A[5]||(A[5]=ie=>oe("legend",ie))},null,8,["token","columns"])):X.value==="popup"?(e.openBlock(),e.createBlock(Dm,{key:2,token:H.value,columns:E.value,fields:g.value.fields,"onUpdate:columns":A[6]||(A[6]=ie=>E.value=ie),onSave:A[7]||(A[7]=ie=>oe("popup",ie))},null,8,["token","columns","fields"])):X.value==="card"?(e.openBlock(),e.createBlock(Qm,{key:3,token:H.value,columns:B.value,fields:g.value.fields,"view-mode":M.value,html:D.value,"onUpdate:columns":A[8]||(A[8]=ie=>B.value=ie),onSave:we},null,8,["token","columns","fields","view-mode","html"])):X.value==="filter"?(e.openBlock(),e.createBlock(ef,{key:4,token:H.value,fields:g.value.fields,columns:W.value,"onUpdate:columns":A[9]||(A[9]=ie=>W.value=ie),onSave:A[10]||(A[10]=ie=>oe("filters",ie))},null,8,["token","fields","columns"])):X.value==="metadata"?(e.openBlock(),e.createBlock(ao,{key:5,data:m.value,"entity-id":String(e.unref(s)),"entity-type":"service",onSaved:te},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-88ab1a84"]]),Lg={class:"flex-1 overflow-y-auto p-4 sm:p-6"},Ag={class:"space-y-3"},Mg={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},Tg={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},Fg={class:"text-xs text-gray-500 mb-1"},Dg={key:0,class:"text-base text-md font-semibold text-gray-900"},zg={key:1,class:"text-base text-md font-semibold text-gray-900"},Ig={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},jg={class:"space-y-2"},Pg={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},Rg={class:"text-sm font-semibold text-gray-900"},Og={class:"text-xs text-gray-600 mt-1"},Ug={class:"grid grid-cols-2 gap-3"},qg={class:"text-xs text-gray-500 mb-1"},Hg={class:"text-sm font-semibold text-gray-900"},Wg={class:"bg-gray-50 p-4 rounded-lg"},Yg={class:"grid grid-cols-2 gap-4"},Zg={class:"text-xs text-gray-500 mb-1"},Gg={class:"text-sm font-semibold text-gray-900"},Kg=e.defineComponent({directives:{tooltip:ye.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",Lg,[e.createElementVNode("div",Ag,[e.createElementVNode("div",Mg,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",Tg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",Fg,e.toDisplayString(l.label),1),l.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",Dg,[e.createTextVNode(e.toDisplayString(l.value),1)])),[[r,l.tooltip]]):(e.openBlock(),e.createElementBlock("p",zg,e.toDisplayString(l.value),1))]))),128))])]),e.createElementVNode("div",Ig,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-2"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",jg,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",Pg,[e.createElementVNode("p",Rg,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",Og,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",Ug,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",qg,e.toDisplayString(l.label),1),e.createElementVNode("p",Hg,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",Wg,[e.createElementVNode("div",Yg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",Zg,e.toDisplayString(l.label),1),e.createElementVNode("p",Gg,e.toDisplayString(l.value),1)]))),128))])])])])])])}}}),Xg={class:"flex-1 overflow-y-auto space-y-3 pr-1"},Qg={class:"font-medium text-sm text-gray-800"},Jg={class:"text-xs text-gray-500"},e0=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Xg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,r=>(e.openBlock(),e.createElementBlock("div",{key:r.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",Qg,e.toDisplayString(r.name),1),e.createElementVNode("p",Jg,e.toDisplayString(r.resolution)+" • "+e.toDisplayString(r.size)+"MB",1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",r.statusClass])},e.toDisplayString(r.status),3)]))),128))]))}}),t0={},n0={xmlns:"http://www.w3.org/2000/svg",width:"12px",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function o0(t,n){return e.openBlock(),e.createElementBlock("svg",n0,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8",fill:"none",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e.createElementVNode("polygon",{fill:"none",points:"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])}const r0=he(t0,[["render",o0]]),l0={},a0={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 s0(t,n){return e.openBlock(),e.createElementBlock("svg",a0,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const i0=he(l0,[["render",s0]]),c0={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},d0={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},u0={class:"flex items-center gap-2"},p0={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},m0={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},f0=["checked"],g0=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{},showRasterExtent:{type:Boolean}},emits:["toggle-extent"],setup(t){const n=t,o=n.layerId||"raster-preview-layer",r=`${o}-source`,l=n.extent&&n.extent.length===4?[...n.extent]:void 0,s=Se(o,{sourceId:r,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...l?{bounds:l}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":1}},beforeId:n.beforeId??null}),{fitBounds:a}=Pe(),i=e.ref(1);e.watch(()=>n.tileUrl,u=>{if(!u){s.setVisible(!1);return}s.setVisible(!0),s.setTiles([u])},{immediate:!0}),e.watch(()=>i.value,u=>{s.setOpacity(u)},{immediate:!0});let g=null,m=!1;e.watch(()=>n.extent,u=>{if(!u||u.length!==4)return;const h=u.join(",");if(h!==g){if(g=h,!m){m=!0;return}a==null||a([[u[0],u[1]],[u[2],u[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const x=e.computed(()=>`${Math.round(i.value*100)}%`);return(u,h)=>(e.openBlock(),e.createElementBlock("div",c0,[e.createElementVNode("div",d0,[e.createElementVNode("div",u0,[h[2]||(h[2]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":h[0]||(h[0]=c=>i.value=c),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(x.value),1)])]),e.createElementVNode("div",p0,[e.createElementVNode("label",m0,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:t.showRasterExtent,onChange:h[1]||(h[1]=c=>u.$emit("toggle-extent",c.target.checked))},null,40,f0),h[3]||(h[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),pl=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,l=e.computed(()=>{const i=n.extent;if(!i||i.length!==4)return null;const[g,m,x,u]=i;return[g,m,x,u].some(h=>typeof h!="number"||Number.isNaN(h))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[g,m],[x,m],[x,u],[g,u],[g,m]]]}}]}}),s=Pe(),a=Se(o,{sourceId:r,source:{type:"geojson",data:l.value||{type:"FeatureCollection",features:[]}},layer:{id:o,type:"line",paint:{"line-color":"#ef4444","line-width":2}},beforeId:n.beforeId??null});return e.watch(()=>l.value,i=>{var m;if(!i){a.setVisible(!1),a.setData({type:"FeatureCollection",features:[]});return}a.setVisible(!0),a.setData(i);const g=(m=s.map)==null?void 0:m.value;g!=null&&g.moveLayer&&g.getLayer(o)&&g.moveLayer(o)},{immediate:!0}),(i,g)=>e.createCommentVNode("",!0)}}),y0=["href"],h0=["href"],x0={key:0,class:"py-6 px-4 text-sm text-gray-500"},b0={key:1,class:"py-6 px-4 text-sm text-red-600"},k0={class:"flex justify-end gap-2 px-4 py-3 border-t border-gray-100 w-full"},w0=["disabled"],_0=["disabled"],E0=192,ml=8,an=8,fl=e.defineComponent({__name:"HeaderActions",props:{entityId:{},entityInfo:{},table:{},formEndpoint:{type:[String,Function]},saveEndpoint:{type:[String,Function]},entityLabel:{},editButtonText:{},saveMethod:{}},emits:["saved"],setup(t,{emit:n}){const o=t,r=n,l=e.defineAsyncComponent(()=>import("@opengis/core").then(I=>I.VsModal)),s=e.defineAsyncComponent(()=>import("@opengis/form")),a=e.ref(!1),i=e.ref(null),g=e.ref(null),m=e.ref(null),x=e.ref(null),u=e.computed(()=>x.value?{position:"fixed",top:`${x.value.top}px`,left:`${x.value.left}px`}:{});e.watch(a,I=>{I&&e.nextTick(F)});const h=e.ref(!1),c=e.ref(null),d=e.ref({}),y=e.ref(null),p=e.ref(""),f=e.ref(!1),k=e.ref(!1),C=e.ref(null),$=e.computed(()=>o.entityId||""),w=(I,G)=>I?typeof I=="function"?I(G):typeof I!="string"?"":I.includes(":id")?G?I.replace(":id",encodeURIComponent(G)):"":I:"",N=e.computed(()=>{var I;return(I=o.table)==null?void 0:I.trim()}),E=e.computed(()=>{if(o.formEndpoint)return o.formEndpoint;if(N.value)return I=>`/api/form/${N.value}/${I}`}),B=e.computed(()=>{if(o.saveEndpoint)return o.saveEndpoint;if(N.value)return I=>`/api/table/${I}`}),M=e.computed(()=>w(E.value,$.value)),D=e.computed(()=>o.saveEndpoint?w(o.saveEndpoint,$.value):C.value?`/api/table/${encodeURIComponent(C.value)}`:w(B.value,$.value)),W=e.computed(()=>w("/api/gis-clear-rtile/:id",$.value)),K=e.computed(()=>w("/api/gis-xml/:id",$.value)),Q=e.computed(()=>{var te,oe,ae;const I=(oe=(te=o.entityInfo)==null?void 0:te.name)==null?void 0:oe.trim();if(I)return`Редагування ${I}`;const G=(ae=o.entityLabel)==null?void 0:ae.trim();return G?`Редагування ${G}`:"Редагування"}),H=e.computed(()=>o.editButtonText||"Редагувати"),J=e.computed(()=>(o.saveMethod||"POST").toUpperCase());function O(){a.value||F(),a.value=!a.value}function T(){a.value=!1}function F(){var b;if(typeof window>"u"||!g.value)return;const I=g.value.getBoundingClientRect(),G=window.innerWidth,te=window.innerHeight,oe=I.left,ae=Math.max(G-E0-an,an),xe=Math.min(Math.max(oe,an),ae),we=((b=m.value)==null?void 0:b.offsetHeight)??0,P=I.bottom+ml;let ee=P;if(we&&P+we>te-an){const A=I.top-ml-we;ee=Math.max(A,an)}x.value={top:ee,left:xe}}function X(I){var te,oe;if(!i.value&&!m.value)return;const G=I.target;G&&((te=i.value)!=null&&te.contains(G)||(oe=m.value)!=null&&oe.contains(G))||(a.value=!1)}function v(){a.value&&F()}e.onMounted(()=>{window.addEventListener("click",X),window.addEventListener("resize",v),window.addEventListener("scroll",v,!0)}),e.onUnmounted(()=>{window.removeEventListener("click",X),window.removeEventListener("resize",v),window.removeEventListener("scroll",v,!0)});async function _(){var I,G,te;if(!(!$.value||!M.value)){T(),h.value=!0,f.value=!0,p.value="",c.value=null,d.value={},C.value=null;try{const oe=await fetch(M.value);if(!oe.ok)throw new Error(`Failed to load form: ${oe.status}`);const ae=await oe.json();d.value=(ae==null?void 0:ae.data)||{},c.value=(ae==null?void 0:ae.schema)||null;const xe=typeof(ae==null?void 0:ae.token)=="string"&&ae.token||typeof((I=ae==null?void 0:ae.tokens)==null?void 0:I.edit)=="string"&&ae.tokens.edit||typeof((G=ae==null?void 0:ae.tokens)==null?void 0:G.edit_token)=="string"&&ae.tokens.edit_token||typeof((te=ae==null?void 0:ae.data)==null?void 0:te.token)=="string"&&ae.data.token||null;C.value=xe,y.value=null}catch(oe){console.error("Failed to load edit form",oe),p.value="Не вдалося завантажити форму редагування"}finally{f.value=!1}}}function S(){h.value=!1,c.value=null,p.value="",C.value=null}async function z(){var I,G;if(!(!$.value||!D.value)){if(y.value){const te=(G=(I=y.value).validate)==null?void 0:G.call(I);if(te){ye.notify({type:"warning",title:"Validation",message:Object.entries(te).map(([oe,ae])=>`${oe}: ${ae}`).join(`
|
|
246
|
-
`)});return}}k.value=!0;try{const te=await fetch(D.value,{method:J.value,headers:{"Content-Type":"application/json"},body:JSON.stringify(d.value)});if(!te.ok)throw new Error(`Failed to save: ${te.status}`);ye.notify({type:"success",title:"Збережено",message:"Зміни збережено"}),r("saved",d.value),S()}catch(te){console.error("Failed to save edit form",te),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти зміни"})}finally{k.value=!1}}}return(I,G)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:i,class:"relative flex items-center"},[e.createElementVNode("button",{ref_key:"triggerButton",ref:g,type:"button",onClick:e.withModifiers(O,["stop"]),class:"flex items-center justify-center w-9 h-9 hover:rounded-md hover:border hover:border-gray-200 bg-white text-gray-600 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-500","aria-label":"Дії"},[...G[3]||(G[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 5.5v.01M12 12v.01M12 18.5v.01"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuContainer",ref:m,style:e.normalizeStyle(u.value),class:"absolute top-0 left-0 mt-2 w-48 rounded-xl border border-gray-200 bg-white shadow-lg text-sm z-[1000]"},[W.value?(e.openBlock(),e.createElementBlock("a",{key:0,href:W.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:T},[e.createVNode(e.unref(Il),{size:16,class:"lucide lucide-brush-cleaning text-gray-500"}),G[4]||(G[4]=e.createElementVNode("span",null,"Очистити тайли",-1))],8,y0)):e.createCommentVNode("",!0),e.createElementVNode("a",{href:K.value,target:"_blank",rel:"noreferrer",class:"flex items-center gap-2 px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-t-xl",onClick:T},[e.createVNode(e.unref(ea),{size:16,class:"lucide lucide-square-code text-gray-500"}),G[5]||(G[5]=e.createElementVNode("span",null,"Створити XML",-1))],8,h0),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 w-full px-4 py-2 text-left text-gray-700 hover:bg-slate-50 hover:rounded-b-xl",onClick:_},[e.createVNode(e.unref(Ql),{size:16,class:"lucide lucide-pencil text-gray-500"}),e.createElementVNode("span",null,e.toDisplayString(H.value),1)])],4)):e.createCommentVNode("",!0)])),e.createVNode(e.unref(l),{teleport:"#modal",visible:h.value,"onUpdate:visible":G[2]||(G[2]=te=>h.value=te),title:Q.value,size:"lg"},{footer:e.withCtx(()=>[e.createElementVNode("div",k0,[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:S,disabled:k.value}," Скасувати ",8,w0),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:z,disabled:k.value},e.toDisplayString(k.value?"Зберігається…":"Зберегти"),9,_0)])]),default:e.withCtx(()=>[f.value?(e.openBlock(),e.createElementBlock("div",x0," Завантаження форми редагування… ")):p.value?(e.openBlock(),e.createElementBlock("div",b0,e.toDisplayString(p.value),1)):(e.openBlock(),e.createBlock(e.unref(s),{key:2,values:d.value,"onUpdate:values":G[0]||(G[0]=te=>d.value=te),form:y.value,"onUpdate:form":G[1]||(G[1]=te=>y.value=te),schema:c.value},null,8,["values","form","schema"]))]),_:1},8,["visible","title"])],512))}}),N0={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},C0={class:"flex-1 relative overflow-hidden"},V0={class:"absolute top-0 left-0 w-full z-20"},B0={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},$0={class:"flex items-center gap-3 min-w-0"},v0={class:"flex flex-col min-w-0"},S0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},L0={key:0,class:"text-xs text-gray-500 truncate"},A0={class:"flex items-center gap-4"},M0={class:"flex-1 min-w-0"},T0=["title"],F0={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},D0={class:"relative w-full h-full"},z0={class:"absolute top-4 left-4 z-20"},I0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},j0={class:"flex-1 flex flex-col h-full"},P0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},R0={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-3 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},O0=["aria-selected","onClick"],U0={class:"leading-none"},q0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},H0={key:0,class:"mb-3 text-xs text-slate-500"},W0={key:1,class:"mb-3 text-xs text-rose-600"},Y0="OpenGIS",gl=2,An=5,Z0=e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=Fe.useRouter(),r=Fe.useRoute(),l=e.ref(null),s=e.computed(()=>{var A;const b=(A=r.params)==null?void 0:A.id;return typeof b=="string"?b:void 0}),a=e.ref(null),i=e.ref(!1),g=e.ref(!1),m=e.ref(null),x=e.ref(!0);let u=null;const h=e.ref(!1);function c(b){if(Array.isArray(b))return c(b[0]);if(typeof b!="string"&&typeof b!="number")return null;const A=typeof b=="number"?b:Number(b.trim());return Number.isFinite(A)?A:null}function d(b,A){return b.toFixed(A)}function y(b,A,Z){const le=.5*10**-Z;return Math.abs(b-A)>le}function p(){var b;return(b=l.value)==null?void 0:b.ctx}function f(){var $e,Re,De,Ue;const b=(Re=($e=p())==null?void 0:$e.map)==null?void 0:Re.value;if(!b)return;const A=c(r.query.z),Z=c(r.query.x),le=c(r.query.y);if(A==null||Z==null||le==null)return;const fe=(De=b.getCenter)==null?void 0:De.call(b),ie=(Ue=b.getZoom)==null?void 0:Ue.call(b);(!fe||y(fe.lng,Z,An)||y(fe.lat,le,An)||y(ie??0,A,gl))&&(h.value=!0,b.jumpTo({center:[Z,le],zoom:A}),h.value=!1)}function k(){var fe,ie,Be,$e;if(h.value)return;const b=(ie=(fe=p())==null?void 0:fe.map)==null?void 0:ie.value;if(!b)return;const A=(Be=b.getCenter)==null?void 0:Be.call(b),Z=($e=b.getZoom)==null?void 0:$e.call(b);if(!A||Z==null)return;const le={...r.query,z:d(Z,gl),x:d(A.lng,An),y:d(A.lat,An)};r.query.z===le.z&&r.query.x===le.x&&r.query.y===le.y||o.replace({query:le})}function C(){var A;if(typeof document>"u")return;const b=(A=W.value)==null?void 0:A.name;document.title=b?`${b} — Растер`:Y0}const $=e.computed(()=>{var A;const b=(A=a.value)==null?void 0:A.url;return b?/^https?:\/\//i.test(b)||typeof window>"u"||typeof location>"u"?b:`${location.origin}${b}`:""}),w=e.computed(()=>{var b;return((b=a.value)==null?void 0:b.extent)??null}),N=e.computed(()=>s.value?`raster-${s.value}`:void 0),E=e.computed(()=>s.value?`raster-extent-${s.value}`:"raster-extent"),B=e.computed(()=>{const b=N.value??"raster",A=w.value&&w.value.length===4?w.value.join(","):"no-extent";return`${b}-${A}`}),M=e.computed(()=>!!$.value),D=e.computed(()=>{const b=w.value;if(!b||b.length!==4)return null;const[A,Z,le,fe]=b;return[A,Z,le,fe].some(ie=>typeof ie!="number"||Number.isNaN(ie))?null:[(A+le)/2,(Z+fe)/2]}),W=e.computed(()=>{var fe,ie;const b=a.value,A=b==null?void 0:b.extent;return{id:s.value??"—",name:(b==null?void 0:b.name)||((ie=(fe=b==null?void 0:b.files)==null?void 0:fe[0])==null?void 0:ie.name),description:b!=null&&b.extension?`Формат ${b.extension.toUpperCase()}`:"Попередній перегляд растрового шару. Реальні метадані підвантажуються.",coverage:A&&A.length===4?`${ee(A[0])}, ${ee(A[1])} → ${ee(A[2])}, ${ee(A[3])}`:"Покриття уточнюється",crs:b!=null&&b.srid?`EPSG:${b.srid}`:"EPSG:4326",source:b!=null&&b.proj4?b.proj4:"Джерело: Mapnik",updatedAt:b!=null&&b.cache?"Дані кешовано":"Нові дані"}}),K=e.computed(()=>{const b=a.value;return b?[b.source_path,b.description,b.is_public?"Публічна":"Не публічна",b.is_active?"Архівна":"Активна"].filter(A=>A).join(", "):""}),Q=[{key:"info",label:"Інформація",icon:i0},{key:"files",label:"Файли",icon:r0},{key:"metadata",label:"Метадані",icon:lo}],H=Q.map(b=>b.key),J=e.ref(H.includes(r.query.tab)?r.query.tab:"info"),O=e.ref(!0);e.watch(()=>r.query.tab,b=>{b&&H.includes(b)&&J.value!==b&&(J.value=b)}),e.watch(J,b=>{r.query.tab!==b&&o.replace({query:{...r.query,tab:b}})});const T=e.computed(()=>z(a.value)),F=e.computed(()=>G(a.value));e.watch(()=>a.value,()=>{C()},{immediate:!0});async function X(){var le;const b=p();if(!(b!=null&&b.ready))return;await b.ready(),f();const A=(le=b.map)==null?void 0:le.value;if(!A)return;const Z=()=>k();A.on("moveend",Z),A.on("zoomend",Z),u=()=>{A.off("moveend",Z),A.off("zoomend",Z)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{f()}),e.onMounted(()=>{X()}),e.onBeforeUnmount(()=>{u==null||u(),u=null}),e.watch(s,()=>{_()},{immediate:!0});async function v(b){var A;_(),((A=a.value)==null?void 0:A.srid)!==b.srid&&(ye.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await S(`/api/gis-xml/${encodeURIComponent(s.value)}`),ye.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function _(){const b=s.value;if(!b){a.value=null,m.value=null;return}i.value=!0,m.value=null;try{const A=await fetch(`/api/gis-raster/${encodeURIComponent(b)}`);if(!A.ok)throw new Error(`HTTP ${A.status}`);const Z=await A.json();Z.xml&&(g.value=!0),a.value=Z,Z.xml||(ye.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await S(`/api/gis-xml/${encodeURIComponent(b)}`),ye.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(b)}?nocache=1`),g.value=!0)}catch(A){console.error("Failed to load raster info",A),a.value=null,m.value=A instanceof Error?A.message:String(A)}finally{i.value=!1}}function S(b){return new Promise((A,Z)=>{const le=new EventSource(b),fe=[];le.onmessage=ie=>{fe.push(ie.data),console.log("Received:",ie.data)},le.addEventListener("end",()=>{le.close(),A(fe)}),le.onerror=ie=>{le.close(),A(ie)}})}function z(b){var A;return(A=b==null?void 0:b.files)!=null&&A.length?b.files.map(Z=>({name:Z.name,resolution:I(Z.name,b),size:Z.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function I(b,A){const Z=b.toLowerCase();return Z.endsWith(".tfw")?"Georeference":Z.endsWith(".xml")?"Опис":Z.endsWith(".tif")||Z.endsWith(".tiff")?A!=null&&A.resolution?A.resolution:"Растер":(A==null?void 0:A.resolution)??"Файл"}function G(b){return b?{baseParams:oe(b),spatial:{crs:{code:b.srid?`EPSG:${b.srid}`:"EPSG:4326",description:b.proj4||"WGS 84 — World Geodetic System 1984"},bounds:ae(b.extent),resolution:xe(b)},statistics:we(b),technical:P(b)}:null}function te(b){return b!=null&&b.length?b.map(Z=>{var fe;if(!Z)return"";const le=Z.trim().split(/\s+/)[0];return((fe=le==null?void 0:le[0])==null?void 0:fe.toUpperCase())||""}).filter(Boolean).join(""):""}function oe(b){var ie,Be;const A=b.bands_count??((ie=b.bands)==null?void 0:ie.length)??"—",Z=te(b.bands),le=(b.bands??[]).map($e=>$e.trim()).filter($e=>$e.length>0),fe=le.length?le.join(", "):void 0;return[{label:"Розмір растру, px",value:b.width&&b.height?`${b.width}×${b.height}`:"—"},{label:"Формат файлу",value:((Be=b.extension)==null?void 0:Be.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:b.total_size?`${b.total_size}`:"—"},{label:"Кількість каналів",value:typeof A=="number"?`${A}${Z?` (${Z})`:""}`:`${A}${Z?` (${Z})`:""}`,tooltip:fe},{label:"Глибина кольору",value:b.color_depth?`${b.color_depth} біт/канал`:"—"},{label:"Стиснення",value:b.compression||"—"}]}function ae(b){return!b||b.length!==4?[]:[{label:"Північ",value:ee(b[3],"N")},{label:"Схід",value:ee(b[2],"E")},{label:"Південь",value:ee(b[1],"S")},{label:"Захід",value:ee(b[0],"W")}]}function xe(b){const A=[{label:"Роздільна здатність",value:b.resolution||"—"}];return b.width&&b.height&&A.push({label:"Розмір пікселя",value:`${b.width} × ${b.height} px`}),A}function we(b){var A;return(A=b.bands)!=null&&A.length?b.bands.map((Z,le)=>{const fe=n[le%n.length];return{label:`Канал ${le+1}${Z?` (${Z})`:""}`,cardClass:fe.cardClass,titleClass:fe.titleClass,metrics:[{label:"Назва",value:Z||`Канал ${le+1}`},{label:"Глибина",value:b.color_depth?`${b.color_depth} біт`:"—"},{label:"Статус",value:b.cache?"Кешовано":"Готово"}]}}):[]}function P(b){var A;return[{label:"Тип даних",value:b.color_depth?`Unsigned Integer ${b.color_depth}-bit`:"—"},{label:"Компресія",value:b.compression||"—"},{label:"Кольорова інтерпретація",value:((A=b.bands)==null?void 0:A.join(", "))||"—"},{label:"SRID",value:b.srid?`EPSG:${b.srid}`:"—"},{label:"Проекція (proj4)",value:b.proj4||"—"},{label:"URL тайла",value:b.url||"—"}]}function ee(b,A){if(b==null||Number.isNaN(b))return"—";const Z=`${b.toFixed(5)}°`;return A?`${Z} ${A}`:Z}return(b,A)=>(e.openBlock(),e.createElementBlock("div",N0,[e.createElementVNode("div",C0,[e.createElementVNode("div",V0,[e.createElementVNode("div",B0,[e.createElementVNode("div",$0,[e.createElementVNode("button",{type:"button",onClick:A[0]||(A[0]=Z=>e.unref(o).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...A[3]||(A[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",v0,[e.createElementVNode("div",S0,e.toDisplayString(W.value.name),1),K.value?(e.openBlock(),e.createElementBlock("div",L0,e.toDisplayString(K.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",A0,[e.createElementVNode("div",M0,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:W.value.description},e.toDisplayString(W.value.description),9,T0)]),e.createVNode(fl,{"entity-id":s.value||"","entity-info":{name:W.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:v},null,8,["entity-id","entity-info"])])])]),e.createElementVNode("div",F0,[e.createElementVNode("div",D0,[e.createVNode($n,{ref_key:"mapViewRef",ref:l},{default:e.withCtx(()=>[M.value&&g.value?(e.openBlock(),e.createBlock(g0,{key:B.value,"tile-url":$.value,extent:w.value,"layer-id":N.value,"show-raster-extent":x.value,onToggleExtent:A[1]||(A[1]=Z=>x.value=Z)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(pl,{extent:x.value?w.value:null,"layer-id":E.value},null,8,["extent","layer-id"]),e.createElementVNode("div",z0,[e.createVNode(Yt)]),e.createElementVNode("div",I0,[e.createVNode(Lt),D.value?(e.openBlock(),e.createBlock(Lt,{key:0,targetCenter:D.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1},512)])]),e.createVNode(ro,{open:O.value,"top-class":"top-3",onToggle:A[2]||(A[2]=Z=>O.value=!O.value)},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",O.value?"w-[520px]":"w-0"])},[e.createElementVNode("div",j0,[e.createElementVNode("div",P0,[e.createElementVNode("div",R0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Q,Z=>e.createElementVNode("button",{key:Z.key,type:"button",role:"tab","aria-selected":J.value===Z.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",J.value===Z.key?"bg-white shadow-sm text-gray-700":""]),onClick:le=>J.value=Z.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(Z.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",U0,e.toDisplayString(Z.label),1)],10,O0)),64))])]),e.createElementVNode("div",q0,[i.value?(e.openBlock(),e.createElementBlock("div",H0," Завантаження метаданих растру… ")):m.value?(e.openBlock(),e.createElementBlock("div",W0," Не вдалося отримати дані: "+e.toDisplayString(m.value),1)):e.createCommentVNode("",!0),J.value==="files"?(e.openBlock(),e.createBlock(e0,{key:2,files:T.value},null,8,["files"])):J.value==="metadata"?(e.openBlock(),e.createBlock(ao,{key:3,data:a.value,"entity-id":s.value,"entity-type":"raster",onSaved:_},null,8,["data","entity-id"])):F.value?(e.openBlock(),e.createBlock(Kg,{key:4,details:F.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}}),G0={},K0={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"};function X0(t,n){return e.openBlock(),e.createElementBlock("svg",K0,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const Q0=he(G0,[["render",X0]]),J0={class:"flex flex-col h-full"},ey={class:"flex justify-end mb-3 gap-2"},ty=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.modelValue,set:s=>r("update:modelValue",s)});return(s,a)=>(e.openBlock(),e.createElementBlock("div",J0,[e.createElementVNode("div",ey,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:a[0]||(a[0]=i=>s.$emit("save"))},[...a[2]||(a[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(rn,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=i=>l.value=i),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),ny={class:"flex flex-col flex-1 min-h-0"},oy={class:"flex justify-between mb-3 gap-2"},ry={class:"text-left"},ly={class:"font-medium text-gray-900"},ay={class:"text-xs text-gray-500"},sy={class:"flex justify-center gap-2"},iy=["checked","onChange"],cy={class:"text-sm font-medium text-gray-900"},dy=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Min Зум",slot:"zoomCell",width:"140px"}],r=e.defineAsyncComponent(()=>import("@opengis/core").then(d=>d.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),a=n,i=e.ref(!1),g=e.ref({table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),m={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function x(){g.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},i.value=!0}function u(){i.value=!1}function h(){var p,f;const d=(p=g.value.table)==null?void 0:p.trim(),y=(f=g.value.key)==null?void 0:f.trim();if(!d||!y){ye.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}s.value=[...Array.isArray(s.value)?s.value:[],{...g.value,table:d,key:y}],i.value=!1}function c(d,y){var f;const p=((f=y==null?void 0:y.target)==null?void 0:f.checked)??!1;d.active=p,s.value=Array.isArray(s.value)?[...s.value]:[]}return(d,y)=>(e.openBlock(),e.createElementBlock("div",ny,[e.createElementVNode("div",oy,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500",onClick:x}," Додати таблицю "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:y[0]||(y[0]=p=>a("save"))}," Зберегти ")]),e.createVNode(Et,{modelValue:s.value,"onUpdate:modelValue":y[1]||(y[1]=p=>s.value=p),"columns-scheme":o,"form-scheme":m,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:p})=>[e.createElementVNode("div",ry,[e.createElementVNode("div",ly,e.toDisplayString(p.table),1),e.createElementVNode("div",ay,e.toDisplayString(p.key),1)])]),activeCell:e.withCtx(({row:p})=>[e.createElementVNode("label",sy,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:p.active,onChange:f=>c(p,f)},null,40,iy)])]),zoomCell:e.withCtx(({row:p})=>[e.createElementVNode("div",cy,e.toDisplayString(p.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:i.value,"onUpdate:visible":y[3]||(y[3]=p=>i.value=p),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:u}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:h}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{values:g.value,"onUpdate:values":y[2]||(y[2]=p=>g.value=p),schema:m},null,8,["values"])]),_:1},8,["visible"])]))}}),uy={class:"flex flex-col flex-1 min-h-0 gap-4"},py={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},my=e.defineComponent({__name:"cartocss-card-tab",props:{card:{},table:{}},emits:["save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.table),s=e.ref(o.card),a=e.defineAsyncComponent(()=>import("@opengis/form").then(g=>g.VsInputText));function i(){r("save",{card_html:s.value,card_table:l.value})}return(g,m)=>(e.openBlock(),e.createElementBlock("div",uy,[e.createElementVNode("div",{class:"flex items-center justify-end gap-3"},[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:i},[...m[2]||(m[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти картку ",-1)])])]),e.createElementVNode("div",null,[e.createVNode(e.unref(a),{modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=x=>l.value=x)},null,8,["modelValue"])]),e.createElementVNode("div",py,[e.createVNode(rn,{modelValue:s.value,"onUpdate:modelValue":m[1]||(m[1]=x=>s.value=x),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),fy=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:1}},setup(t){const n=t,o=Pe(),{activateTemporaryLayer:r,deactivateTemporaryLayer:l,setTemporaryLayerOpacity:s}=ho(o.map),a=e.computed(()=>{var u;const x=`${(u=n==null?void 0:n.tileUrl)==null?void 0:u.trim()}`;return x?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(x)?x:x.startsWith("//")?`${window.location.protocol}${x}`:x.startsWith("/")?`${location.origin}${x}`:`${location.origin}/${x}`:""});let i="",g="";function m(){const x=n.active&&!!a.value;i&&(!x||i!==n.layerId)&&(l(i,g||void 0),i="",g=""),x&&(r({id:n.layerId,title:n.title||n.layerId,url:a.value,opacity:n.opacity},{},n.owner),i=n.layerId,g=n.owner||"")}return e.watch(()=>[n.layerId,a.value,n.active,n.owner],m,{immediate:!0}),e.watch(()=>n.opacity,x=>{!i||!n.active||s(i,x,g||void 0)},{immediate:!0}),e.onUnmounted(()=>{i&&(l(i,g||void 0),i="",g="")}),(x,u)=>e.createCommentVNode("",!0)}}),gy=e.defineComponent({__name:"CartocssMapClickListener",props:{cartocssId:{},infoEnabled:{type:[Boolean,null]}},setup(t){const n=t,o=e.computed(()=>n.cartocssId??null),r=e.computed(()=>!!n.infoEnabled),{map:l,ready:s}=Pe(),a=c=>{!c||typeof window>"u"||window.dispatchEvent(new CustomEvent(xo,{detail:c}))},i=async c=>{const d=await fetch(`/api/map-format?${c.toString()}`);if(!d.ok)throw new Error(`API returned ${d.status}`);return d.json()};let g=null,m=null;const x=c=>{if(!c)return null;if(typeof c=="string")try{return JSON.parse(c)}catch{return null}return c},u=async(c,d)=>{var p;const y=new URLSearchParams({layer:o.value??"",id:String(c)});try{const f=await i(y),k=typeof f.html=="string"?f.html:null,C=x(((p=f==null?void 0:f.data)==null?void 0:p.geom)??(f==null?void 0:f.geom)??null);(k||C)&&a({html:k,geometry:C??d})}catch(f){console.warn("CartoCSS map-format (id) error",f)}},h=async c=>{var f,k,C,$;if(!o.value)return;if(!r.value){ye.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const d=(f=c==null?void 0:c.lngLat)==null?void 0:f.lng,y=(k=c==null?void 0:c.lngLat)==null?void 0:k.lat;if(typeof d!="number"||typeof y!="number")return;const p=new URLSearchParams({layer:o.value,lat:y.toFixed(6),lng:d.toFixed(6)});try{const w=await i(p),N=x(((C=w==null?void 0:w.data)==null?void 0:C.geom)??(w==null?void 0:w.geom)??null),E=(($=w==null?void 0:w.data)==null?void 0:$.id)??(w==null?void 0:w.id);if(E!=null){await u(E,N);return}Vf({html:w==null?void 0:w.html})&&a({html:w==null?void 0:w.html,geometry:N})}catch(w){console.warn("CartoCSS map-format error",w)}};return s().then(()=>{m=l.value,m&&(m.on("click",h),g=()=>m==null?void 0:m.off("click",h))}),e.onBeforeUnmount(()=>{g==null||g(),g=null,m=null}),()=>{}}}),yy={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},hy={class:"flex-1 relative overflow-hidden"},xy={class:"absolute top-0 left-0 w-full z-20"},by={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},ky={class:"flex items-center gap-3 min-w-0"},wy={class:"flex flex-col min-w-0"},_y={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Ey={key:0,class:"text-xs text-gray-500 truncate"},Ny={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Cy={class:"relative w-full h-full"},Vy={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},By={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},$y={class:"flex items-center gap-2"},vy={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},Sy={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},Ly=["checked"],Ay={class:"absolute top-4 left-4 z-20"},My={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Ty={class:"flex-1 flex flex-col h-full"},Fy={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},Dy={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-4 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},zy=["aria-selected","onClick"],Iy={class:"leading-none"},jy={class:"flex flex-col flex-1 overflow-y-hidden p-4"},Py={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},Ry="cartocss-demo-001",Oy="OpenGIS",yl=2,Mn=5,Uy=e.defineComponent({__name:"cartocss",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.ref(null),l=[{key:"css",label:"CSS",icon:Xr},{key:"data",label:"Дані",icon:Q0},{key:"metadata",label:"Метадані",icon:lo},{key:"card",label:"Картка",icon:Qr}],s=l.map(P=>P.key),a=e.ref(s.includes(o.query.tab)?o.query.tab:"css"),i=e.ref(!0),g=e.ref(null),m=e.computed(()=>{var P;return(P=g.value)!=null&&P.source_path?l.filter(ee=>ee.key==="card"||ee.key==="metadata"):l}),x=e.computed(()=>o.params.id||Ry),u=e.ref({id:x.value,name:"",description:""});let h=null;const c=e.ref(!1);function d(P){if(Array.isArray(P))return d(P[0]);if(typeof P!="string"&&typeof P!="number")return null;const ee=typeof P=="number"?P:Number(P.trim());return Number.isFinite(ee)?ee:null}function y(P,ee){return P.toFixed(ee)}function p(P,ee,b){const A=.5*10**-b;return Math.abs(P-ee)>A}function f(){var P;return(P=r.value)==null?void 0:P.ctx}function k(){var ie,Be,$e,Re;const P=(Be=(ie=f())==null?void 0:ie.map)==null?void 0:Be.value;if(!P)return;const ee=d(o.query.z),b=d(o.query.x),A=d(o.query.y);if(ee==null||b==null||A==null)return;const Z=($e=P.getCenter)==null?void 0:$e.call(P),le=(Re=P.getZoom)==null?void 0:Re.call(P);(!Z||p(Z.lng,b,Mn)||p(Z.lat,A,Mn)||p(le??0,ee,yl))&&(c.value=!0,P.jumpTo({center:[b,A],zoom:ee}),c.value=!1)}function C(){var Z,le,fe,ie;if(c.value)return;const P=(le=(Z=f())==null?void 0:Z.map)==null?void 0:le.value;if(!P)return;const ee=(fe=P.getCenter)==null?void 0:fe.call(P),b=(ie=P.getZoom)==null?void 0:ie.call(P);if(!ee||b==null)return;const A={...o.query,z:y(b,yl),x:y(ee.lng,Mn),y:y(ee.lat,Mn)};o.query.z===A.z&&o.query.x===A.x&&o.query.y===A.y||n.replace({query:A})}function $(P){typeof document>"u"||(document.title=P?`${P} — CartoCSS`:Oy)}const w=e.ref("");e.ref("");const N=e.ref([]),E=e.ref(!1),B=e.ref(!1),M=e.ref(""),D=e.ref(0),W=e.ref(!1),K=e.ref(1),Q=e.ref(!0),H=e.computed(()=>`cartocss-layer-${x.value}`),J=e.computed(()=>`${Math.round(K.value*100)}%`),O=e.computed(()=>`cartocss-extent-${x.value}`),T=e.computed(()=>{var Z;const P=(Z=M.value)==null?void 0:Z.trim();if(!P)return"";const ee=P.includes("?")?"&":"?",b=`${P}${ee}nottl=1`,A=D.value;return A?`${P}${ee}ts=${A}&nocache=1`:b});e.computed(()=>{const P=g.value;return P?P.cartocss_key||P.source_path||x.value||"":x.value||""});const F=e.ref(""),X=e.ref(""),v=e.computed(()=>{var le;const P=(le=g.value)==null?void 0:le.bounds;if(!Array.isArray(P)||P.length<4)return null;const[ee,b,A,Z]=P;return[ee,b,A,Z].some(fe=>typeof fe!="number"||Number.isNaN(fe))?null:[(ee+A)/2,(b+Z)/2]}),_=e.computed(()=>{var le;const P=(le=g.value)==null?void 0:le.bounds;if(!Array.isArray(P)||P.length<4)return null;const[ee,b,A,Z]=P;return[ee,b,A,Z].some(fe=>typeof fe!="number"||Number.isNaN(fe))?null:[ee,b,A,Z]}),S=e.computed(()=>{const P=g.value;return P?(N.value.map(b=>b==null?void 0:b.table).filter(Boolean),[P.description,P.group_id?`Група: ${P.group_id}`:null,P.source_path?`Шлях: ${P.source_path}`:null,P.is_public===!0?"Публічний":"Не публічний",P.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", ")):""});e.watch(x,P=>{P&&ae(P)},{immediate:!0}),e.watch(()=>{var P;return(P=u.value)==null?void 0:P.name},P=>$(P),{immediate:!0});async function z(){var A;const P=f();if(!(P!=null&&P.ready))return;await P.ready(),k();const ee=(A=P.map)==null?void 0:A.value;if(!ee)return;const b=()=>C();ee.on("moveend",b),ee.on("zoomend",b),h=()=>{ee.off("moveend",b),ee.off("zoomend",b)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{k()}),e.onMounted(()=>{z()}),e.onBeforeUnmount(()=>{h==null||h(),h=null}),e.watch(()=>o.query.tab,P=>{P&&m.value.some(ee=>ee.key===P)&&a.value!==P&&(a.value=P)}),e.watch(m,P=>{P.length&&!P.some(ee=>ee.key===a.value)&&(a.value=P[0].key)},{immediate:!0}),e.watch(a,P=>{o.query.tab!==P&&m.value.some(ee=>ee.key===P)&&n.replace({query:{...o.query,tab:P}})}),e.watch(()=>g.value,P=>{const ee=P==null?void 0:P.card_html;F.value=ee,X.value=P==null?void 0:P.card_table},{immediate:!0});function I(){x.value&&ae(x.value,{bustCache:!0})}async function G(P,ee){if(x.value){B.value=!0;try{const b=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!b.ok)throw new Error(`Failed to save cartocss: ${b.status}`);ye.notify({type:"success",title:"Збережено",message:ee}),await ae(x.value,{bustCache:!0})}catch(b){console.error("Failed to save CartoCSS",b),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{B.value=!1}}}function te(P){if(!P)return null;if(typeof P=="string")try{return JSON.parse(P)}catch(ee){return console.warn("Failed to parse CartoCSS config",ee),null}return typeof P=="object"?P:null}function oe(P){const ee=Array.isArray(P)?P:P==null?void 0:P.datasets;return Array.isArray(ee)?ee.map((b,A)=>({table:(b==null?void 0:b.table)||(b==null?void 0:b.id)||`dataset_${A+1}`,query:(b==null?void 0:b.query)||"",srid:(b==null?void 0:b.srid)||"",key:(b==null?void 0:b.key)||(b==null?void 0:b.label)||"Без підпису",active:typeof(b==null?void 0:b.active)=="boolean"?b.active:!0,minzoom:typeof(b==null?void 0:b.zoom)>"u"?"":String(b.zoom),maxzoom:typeof(b==null?void 0:b.maxzoom)>"u"?"":String(b.maxzoom),columns:(b==null?void 0:b.columns)||"",proj4text:(b==null?void 0:b.proj4text)||""})):[]}async function ae(P,ee){E.value=!0;try{const b=await fetch(`/api/gis-css/${P}`);if(!b.ok)throw new Error(`Failed to load cartocss: ${b.status}`);const A=await b.json(),Z=(A==null?void 0:A.message)||A||{};g.value=Z,u.value={id:Z.cartocss_key||P,name:Z.name||u.value.name,description:Z.description||u.value.description},w.value=typeof Z.style=="string"?Z.style:"";const le=te(Z.config??[]);N.value=oe(le);const fe=typeof Z.url=="string"?Z.url:"";M.value=fe,W.value=!!(fe&&Z.enabled!==!1),D.value=ee!=null&&ee.bustCache?Date.now():0}catch(b){console.error("Failed to fetch CartoCSS",b),W.value=!1,M.value="",D.value=0,g.value=null}finally{E.value=!1}}async function xe(){await G({style:w.value||"",config:N.value},"CartoCSS оновлено")}async function we(P){const ee=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!ee.ok)throw new Error(`Failed to save cartocss: ${ee.status}`);ye.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(P,ee)=>(e.openBlock(),e.createElementBlock("div",yy,[e.createElementVNode("div",hy,[e.createElementVNode("div",xy,[e.createElementVNode("div",by,[e.createElementVNode("div",ky,[e.createElementVNode("button",{type:"button",onClick:ee[0]||(ee[0]=b=>e.unref(n).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...ee[6]||(ee[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",wy,[e.createElementVNode("div",_y,e.toDisplayString(u.value.name),1),S.value?(e.openBlock(),e.createElementBlock("div",Ey,e.toDisplayString(S.value),1)):e.createCommentVNode("",!0)])]),e.createVNode(fl,{"entity-id":x.value,"entity-info":u.value,"form-endpoint":b=>`/api/form/gis.cartocss.table/${b}`,"save-endpoint":b=>`/api/gis-css/${b}`,"entity-label":"CartoCSS","save-method":"post",onSaved:I},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])]),e.createElementVNode("div",Ny,[e.createElementVNode("div",Cy,[e.createVNode($n,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var b,A;return[e.createElementVNode("div",Vy,[e.createElementVNode("div",By,[e.createElementVNode("div",$y,[ee[7]||(ee[7]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":ee[1]||(ee[1]=Z=>K.value=Z),type:"range",min:"0",max:"1",step:"0.01",class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,K.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(J.value),1)])]),e.createElementVNode("div",vy,[e.createElementVNode("label",Sy,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:Q.value,onChange:ee[2]||(ee[2]=Z=>Q.value=Z.target.checked)},null,40,Ly),ee[8]||(ee[8]=e.createElementVNode("span",null,"Межі css",-1))])])]),e.createElementVNode("div",Ay,[e.createVNode(Yt)]),e.createElementVNode("div",My,[e.createVNode(Lt),v.value?(e.openBlock(),e.createBlock(Lt,{key:0,targetCenter:v.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),T.value?(e.openBlock(),e.createBlock(fy,{key:0,"layer-id":H.value,"tile-url":T.value,active:W.value,opacity:K.value,title:u.value.name,owner:x.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(pl,{extent:Q.value?_.value:null,"layer-id":O.value},null,8,["extent","layer-id"]),e.createVNode(gy,{"cartocss-id":x.value,bounds:((b=g.value)==null?void 0:b.bounds)??null,active:W.value,"info-enabled":(A=g.value)==null?void 0:A.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(bo,{"map-id":x.value},null,8,["map-id"])]}),_:1},512)])]),g.value?(e.openBlock(),e.createBlock(ro,{key:0,open:i.value,"top-class":"top-4",onToggle:ee[3]||(ee[3]=b=>i.value=!i.value)},null,8,["open"])):e.createCommentVNode("",!0)]),g.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",i.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",Ty,[m.value.length>1?(e.openBlock(),e.createElementBlock("div",Fy,[e.createElementVNode("div",Dy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,b=>(e.openBlock(),e.createElementBlock("button",{key:b.key,type:"button",role:"tab","aria-selected":a.value===b.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",a.value===b.key?"bg-white shadow-sm text-gray-700":""]),onClick:A=>a.value=b.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(b.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Iy,e.toDisplayString(b.label),1)],10,zy))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("div",jy,[E.value?(e.openBlock(),e.createElementBlock("div",Py," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[a.value==="css"?(e.openBlock(),e.createBlock(ty,{key:0,modelValue:w.value,"onUpdate:modelValue":ee[4]||(ee[4]=b=>w.value=b),class:"flex-1 min-h-0",onSave:xe},null,8,["modelValue"])):a.value==="data"?(e.openBlock(),e.createBlock(dy,{key:1,modelValue:N.value,"onUpdate:modelValue":ee[5]||(ee[5]=b=>N.value=b),class:"flex-1 min-h-0 flex flex-col",onSave:xe},null,8,["modelValue"])):a.value==="card"?(e.openBlock(),e.createBlock(my,{key:2,card:F.value,table:X.value,class:"flex-1 min-h-0",onSave:we},null,8,["card","table"])):a.value==="metadata"?(e.openBlock(),e.createBlock(ao,{key:3,data:g.value,"entity-id":x.value,"entity-type":"css",onSaved:I},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}}),qy={class:"w-full mb-6"},Hy={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},Wy=["onClick"],Yy=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,r=l=>{o("update:activeTab",l)};return(l,s)=>(e.openBlock(),e.createElementBlock("div",qy,[e.createElementVNode("div",Hy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,a=>(e.openBlock(),e.createElementBlock("button",{key:a.id,onClick:i=>r(a.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",a.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(a.name),11,Wy))),128))])]))}}),Zy={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},Gy=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,l=n,s=e.computed({get:()=>r.modelValue,set:i=>l("update:modelValue",i)}),a=e.computed({get:()=>r.form,set:i=>l("update:form",i)});return(i,g)=>(e.openBlock(),e.createElementBlock("section",Zy,[g[2]||(g[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:s.value,"onUpdate:values":g[0]||(g[0]=m=>s.value=m),form:a.value,"onUpdate:form":g[1]||(g[1]=m=>a.value=m)},null,8,["schema","values","form"]))]))}}),Ky={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},Xy=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},layerNames:{},options:{}},emits:["update:layerIDs","update:layerNames"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.layerIDs,set:s=>r("update:layerIDs",s)});return e.computed({get:()=>o.layerNames,set:s=>r("update:layerNames",s)}),(s,a)=>(e.openBlock(),e.createElementBlock("section",Ky,[a[1]||(a[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),a[2]||(a[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(Co.VsInputArraySelect),{options:t.options,modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=i=>l.value=i),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),Qy={class:"mapLayer-info__inner"},Jy={class:"mapLayer-info__item-label"},ko=he(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let a=null;const i=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function g(y){if(r.open){h();return}const p=y.currentTarget,f=p==null?void 0:p.closest(".mapLayer-info");if(!f){h();return}l.value=f,r.open=!0,e.nextTick(()=>{m(),c(),requestAnimationFrame(()=>{m()})})}function m(){if(!r.open||!l.value||!s.value)return;const y=l.value.getBoundingClientRect(),p=12,f=window.scrollX+p,k=window.scrollX+window.innerWidth-p,C=window.scrollY+p,$=window.scrollY+window.innerHeight-p,w=s.value.offsetWidth||Math.min(300,window.innerWidth-24),N=s.value.offsetHeight||0;let E=y.left+window.scrollX+(y.width-w)/2;E<f&&(E=f),E+w>k&&(E=Math.max(f,k-w)),r.left=E;let B=y.bottom+window.scrollY+p;B+N>$&&(B=y.top+window.scrollY-N-p,B<C&&(B=Math.max(C,$-N))),B<C&&(B=C),B+N>$&&(B=Math.max(C,$-N)),r.top=B,r.transform="none"}function x(y){var f,k;if(!r.open)return;const p=y.target;(f=l.value)!=null&&f.contains(p)||(k=s.value)!=null&&k.contains(p)||h()}function u(y){y.key==="Escape"&&h()}function h(){d(),r.open=!1,l.value=null,s.value=null}function c(){d(),s.value&&(a=new ResizeObserver(()=>{m()}),a.observe(s.value))}function d(){a&&(a.disconnect(),a=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),d()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>m())},{deep:!0}),n({close:h}),(y,p)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(g,["prevent","stop"])},[...p[1]||(p[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(i.value),ref_key:"popoverEl",ref:s,onClick:p[0]||(p[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Qy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"mapLayer-info__item"},[e.createElementVNode("div",Jy,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),eh={key:0,class:"map-info__title"},th={class:"map-info__actions"},nh={key:0,class:"map-info__menu"},oh=["href"],rh=["innerHTML"],hl=he(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),s=e.ref(null),a=e.ref({top:0,left:0});Fe.useRouter();const i=e.ref(!0),g=e.ref(!1),m=e.computed(()=>Array.isArray(n.links)?n.links.filter($=>($==null?void 0:$.name)&&($==null?void 0:$.slug)):[]),x=e.computed(()=>({top:`${a.value.top}px`,left:`${a.value.left}px`})),u=e.computed(()=>{const $=[];return n.mapName&&$.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&$.push({label:"Опис",value:n.mapDescription,breakLine:!0}),$});function h($){return $==null?!1:$.replace(/<[^>]*>/g,"").trim().length>0}const c=e.computed(()=>h(n.content)),d=e.computed(()=>c.value);function y($){$.stopPropagation(),r.value=!r.value}function p(){const $=l.value;if(!$||!s.value)return;const w=$.getBoundingClientRect(),N=12,E=8,B=window.scrollX+N,M=window.scrollX+window.innerWidth-N,D=window.scrollY+N,W=window.scrollY+window.innerHeight-N,K=s.value.offsetWidth||160,Q=s.value.offsetHeight||0;let H=w.bottom+window.scrollY+E,J=w.left+window.scrollX;J+K>M&&(J=w.right+window.scrollX-K,J<B&&(J=B)),J<B&&(J=B),H+Q>W&&(H=w.top+window.scrollY-Q-E,H<D&&(H=Math.max(D,W-Q))),H<D&&(H=D),H+Q>W&&(H=Math.max(D,W-Q)),a.value={top:H,left:J}}function f($){if(!r.value)return;const w=o.value;if(!w){r.value=!1;return}w.contains($.target)||(r.value=!1)}e.watch(r,$=>{$?e.nextTick(()=>{p(),requestAnimationFrame(()=>{p()}),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}):(window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p))});function k(){i.value=!i.value}function C(){g.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",f,!0),C(),d.value?g.value&&(i.value=!1):i.value=!1,window.addEventListener("resize",C)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",f,!0),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),window.removeEventListener("resize",C)}),($,w)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[t.title||m.value.length||u.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([c.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",eh,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",th,[m.value.length?(e.openBlock(),e.createElementBlock("div",nh,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:y,"aria-label":"Показати посилання"},[...w[1]||(w[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:s,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(x.value),onClick:w[0]||(w[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,N=>(e.openBlock(),e.createElementBlock("a",{key:N.slug||N.name,href:`/maps/${N.slug}`,class:"map-info__popover-link"},e.toDisplayString(N.name),9,oh))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),u.value.length?(e.openBlock(),e.createBlock(ko,{key:1,items:u.value},null,8,["items"])):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:k,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":i.value})},[...w[2]||(w[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!i.value}]),innerHTML:t.content},null,10,rh)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),lh={class:"opacity-popover__content"},ah={class:"opacity-popover__value"},xl=he(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),s=e.ref(null),a=e.reactive({top:0,left:0});function i(){var w;const u=(w=s.value)==null?void 0:w.querySelector("button");if(!u||!l.value)return;const h=u.getBoundingClientRect(),c=260,d=l.value.offsetHeight||60,y=8,p=12,f=window.innerWidth,k=window.innerHeight;let C=h.bottom+y+window.scrollY,$=h.left+window.scrollX;$+c>f-p&&($=f-c-p+window.scrollX),$<p+window.scrollX&&($=p+window.scrollX),C+d>k+window.scrollY-p&&(C=h.top-d-y+window.scrollY,C<p+window.scrollY&&(C=k-d-p+window.scrollY)),a.top=C,a.left=$}function g(){o.value=!o.value,o.value&&e.nextTick(i)}function m(){var d;const u=Se(n.layerId),h=(r.value??100)/100;if(u!=null&&u.setOpacity){u.setOpacity(h);return}const c=(d=u==null?void 0:u.getLayer)==null?void 0:d.call(u);if(c)switch(c.type){case"raster":u.updatePaint({"raster-opacity":h});break;case"fill":u.updatePaint({"fill-opacity":h});break;case"line":u.updatePaint({"line-opacity":h});break;case"circle":u.updatePaint({"circle-opacity":h});break;case"symbol":u.updatePaint({"icon-opacity":h});break}}function x(u){var c,d;if(!o.value)return;const h=u.target;(c=l.value)!=null&&c.contains(h)||(d=s.value)!=null&&d.contains(h)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",x),window.addEventListener("scroll",i,!0),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x),window.removeEventListener("scroll",i,!0),window.removeEventListener("resize",i)}),(u,h)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:s},[e.renderSlot(u.$slots,"trigger",{toggle:g,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(g,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:a.top+"px",left:a.left+"px"})},[e.createElementVNode("div",lh,[h[1]||(h[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":h[0]||(h[0]=c=>r.value=c),class:"opacity-popover__range",onInput:m},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",ah,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),sh={class:"layers-panel"},ih={class:"layers-panel__header"},ch={class:"layers-panel__heading"},dh={class:"layers-panel__heading-title"},uh={class:"layers-panel__count"},ph={class:"layers-panel__bulk-actions"},mh={class:"layers-panel__header-actions"},fh={class:"layers-panel__header-controls"},gh={class:"layers-panel__label"},yh={class:"layers-panel__label-row"},hh=["checked","onChange"],xh={class:"layers-panel__title-block"},bh={class:"layers-panel__name"},kh={class:"layers-panel__meta text-slate-500"},wh=["onClick"],_h={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Eh={key:0,class:"layers-panel__actions"},Nh=["innerHTML","onClick"],bl="map:temporary-layer-request",Ch="#5763ba",kl=he(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),s=e.ref(!1),a=Pe(),{temporaryLayers:i,activateTemporaryLayer:g,deactivateTemporaryLayer:m,clearTemporaryLayers:x}=ho(a.map),u=e.computed(()=>{const v=o.layers.map(S=>({...S,isTemporary:!1,owner:null,visible:S.visible!==!1})),_=i.value.map(S=>({id:S.id,name:S.title,visible:r.value[S.id]??!0,actions:[],filters:null,isTemporary:!0,owner:S.owner??null,handle:S.handle??null,card:S.card??null,popup:S.popup??null,style:S.style??null,group_name:null,count:null,holder:null}));return[...v,..._]}),h=e.computed(()=>u.value.length),c=e.computed(()=>u.value.filter(v=>$(v.id)).length),d=e.computed(()=>h.value>0&&c.value===h.value),y=e.computed(()=>i.value.length>0),p=n;function f(){var v;for(let _=0;_<o.layers.length;_++){const S=o.layers[_],z=k(S);if(!z)continue;const I=Se(S.id,z),G=S.visible!==!1;r.value[S.id]=G,G||(v=I==null?void 0:I.setVisible)==null||v.call(I,!1)}}function k(v){const _=v.id;if(!_)return null;const S=(v.type||v.service_type||v.service||"").toString().toLowerCase(),z=v.service_url||v.url||null;if(!!z&&(S==="tms"||S==="wmts"||S==="wms"||S==="ogc")){const te=C(z);return te?{sourceId:_,source:{type:"raster",tiles:[te],tileSize:v.tileSize||256,minzoom:v.minzoom??0,maxzoom:v.maxzoom??22,scheme:v.scheme||"xyz"},layer:{id:_,type:"raster",source:_},card:v.card,popup:v.popup}:null}if(S==="cartocss"){const te=v.url?C(v.url):`${location.origin}/api/gis-rtile/${_}/{z}/{x}/{y}.png`;return te?{sourceId:_,source:{type:"raster",tiles:[te],tileSize:v.tileSize||256,minzoom:v.minzoom??0,maxzoom:v.maxzoom??22},layer:{id:_,type:"raster",source:_},card:v.card,popup:v.popup}:null}if(S==="raster"){const te=v.url?C(v.url):`${location.origin}/api/gis-rtile/${_}/{z}/{x}/{y}.png`;return te?{sourceId:_,source:{type:"raster",tiles:[te],tileSize:v.tileSize||256,minzoom:v.minzoom??0,maxzoom:v.maxzoom??22},layer:{id:_,type:"raster",source:_},card:v.card,popup:v.popup}:null}const G=`${location.origin}/api/vtile/${_}/ua/{z}/{x}/{y}.vmt`;return{sourceId:_,source:{type:"vector",tiles:[G],minZoom:4,maxZoom:14},layer:{id:_,source:_,"source-layer":_,style:v.style},card:v.card,popup:v.popup}}function C(v){return v?/^https?:\/\//i.test(v)?v:v.startsWith("//")?`${window.location.protocol}${v}`:v.startsWith("/")?`${location.origin}${v}`:`${location.origin}/${v}`:null}function $(v){const _=r.value[v];return _??!0}function w(v){var z,I;if(!(v!=null&&v.id))return null;const _=(z=v.title)==null?void 0:z.trim(),S=(I=v.url)==null?void 0:I.trim();return!_||!S?null:{id:v.id,title:_,url:S,tileSize:v.tileSize,minzoom:v.minzoom,maxzoom:v.maxzoom,opacity:v.opacity}}function N(v){if(!v)return;const _=v.owner;if(v.action==="clear"){const z=i.value.filter(I=>!_||I.owner===_).map(I=>I.id);x(_),z.forEach(I=>{I in r.value&&delete r.value[I]});return}const S=w(v.spec);if(S){if(v.action==="activate"){g(S,v.context||{},_),r.value[S.id]=!0;return}v.action==="deactivate"&&(m(S.id,_),delete r.value[S.id])}}function E(v){v instanceof CustomEvent&&N(v.detail)}e.watch(()=>i.value.map(v=>v.id),(v,_)=>{const S=new Set(_||[]),z=new Set(v);v.forEach(I=>{I in r.value||(r.value[I]=!0)}),S.forEach(I=>{z.has(I)||delete r.value[I]})},{immediate:!0});function B(v,_){var z,I,G;if(v.isTemporary){if(!_){m(v.id,v.owner||void 0),delete r.value[v.id];return}r.value[v.id]=!0;const te=v.handle||((z=i.value.find(oe=>oe.id===v.id))==null?void 0:z.handle);(I=te==null?void 0:te.setVisible)==null||I.call(te,!0);return}r.value[v.id]=_;const S=Se(v.id);(G=S==null?void 0:S.setVisible)==null||G.call(S,_)}function M(v,_){const S=_.target;B(v,S.checked)}function D(v){u.value.forEach(_=>B(_,v))}function W(){D(!d.value)}function K(v){return v.isTemporary?[{label:"Назва",value:v.name??null},{label:"Тип",value:"Тимчасовий шар"},v.owner?{label:"Джерело",value:v.owner}:null].filter(Boolean):[{label:"Назва",value:v.name??null},{label:"Назва групи",value:v.group_name||null},{label:"Кількість",value:v.count??null},{label:"Балансоутримувач",value:v.holder??null}]}function Q(v){const _=v.trim();return _?!!(/^#[\da-fA-F]{3,8}$/.test(_)||/^rgb\s*\(/.test(_)||/^rgba\s*\(/.test(_)||/^hsl\s*\(/.test(_)||/^hsla\s*\(/.test(_)||/^[a-zA-Z]+$/.test(_)&&_.length<25):!1}function H(v){var _,S,z,I,G,te;if(!v)return null;if(typeof v=="string"){const oe=v.trim();return!oe||!Q(oe)?null:oe}if(Array.isArray(v)){for(const oe of v){const ae=H(oe);if(ae)return ae}return null}if(typeof v=="object"){const oe=v;return H(oe.color??oe.fill??oe.stroke??oe.lineColor??oe.fillColor??((_=oe.paint)==null?void 0:_["fill-color"])??((S=oe.paint)==null?void 0:S["line-color"])??((z=oe.paint)==null?void 0:z["circle-color"])??((I=oe.paint)==null?void 0:I.color)??((G=oe.paint)==null?void 0:G.lineColor)??((te=oe.paint)==null?void 0:te.fillColor)??oe.paint??oe.value)}return null}function J(v){const _=Array.isArray(v==null?void 0:v.legend)?v.legend[0]:v==null?void 0:v.legend,S=H(_);return S||H(v==null?void 0:v.style)||Ch}function O(v){return{"--layers-panel-checkbox-color":J(v)}}function T(){if(!i.value.length)return;const v=i.value.map(_=>_.id);x(),v.forEach(_=>delete r.value[_])}function F(){l.value=!l.value}function X(){s.value=window.innerWidth<=768}return e.onMounted(()=>{f(),window.addEventListener(bl,E),X(),s.value&&(l.value=!1),window.addEventListener("resize",X)}),e.watch(()=>{var v;return((v=o.layers)==null?void 0:v.length)??0},(v,_)=>{v>0&&_===0&&f()}),e.onBeforeUnmount(()=>{window.removeEventListener(bl,E),window.removeEventListener("resize",X)}),(v,_)=>(e.openBlock(),e.createElementBlock("div",sh,[e.createElementVNode("div",ih,[e.createElementVNode("div",ch,[e.createElementVNode("div",dh,[_[0]||(_[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",uh," ("+e.toDisplayString(c.value)+" з "+e.toDisplayString(h.value)+") ",1),e.createElementVNode("div",ph,[u.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:W},e.toDisplayString(d.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",mh,[e.createElementVNode("div",fh,[u.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:F,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":l.value})},[..._[1]||(_[1]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0),y.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:T}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,S=>{var z;return e.openBlock(),e.createElementBlock("div",{key:S.id,class:"layers-panel__item"},[e.createElementVNode("label",gh,[e.createElementVNode("div",yh,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:$(S.id),style:e.normalizeStyle(O(S)),onChange:I=>M(S,I)},null,44,hh),e.createElementVNode("div",xh,[e.createElementVNode("span",bh,e.toDisplayString(S.name),1)]),e.createElementVNode("div",kh,[$(S.id)&&!S.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(xl,{"layer-id":S.id,class:"flex"},{trigger:e.withCtx(({toggle:I})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(I,["prevent","stop"])},[e.createElementVNode("div",_h,[e.createVNode(e.unref(ql))])],8,wh)]),_:1},8,["layer-id"]),e.createVNode(vn,{count:Array.isArray(S.filters)?S.filters.length:0,layer:S},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(ko,{items:K(S)},null,8,["items"])])])]),(z=S.actions)!=null&&z.length?(e.openBlock(),e.createElementBlock("div",Eh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.actions,I=>(e.openBlock(),e.createElementBlock("button",{key:I.widget||I.id||I.icon,type:"button",class:"layers-panel__action",innerHTML:I.icon,onClick:G=>p("action",{layerId:I.widget})},null,8,Nh))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-0636139f"]]),Vh={class:"catalog-tab__search relative mt-[10px]"},Bh={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-[40%] left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}},$h={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},vh={key:0,class:"text-sm text-gray-400 text-center mt-6"},Sh=["onClick"],Lh={class:"flex items-center gap-x-3"},Ah={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Mh={class:"text-xs opacity-60 text-[#4b5563]"},Th={class:"flex items-center cursor-pointer gap-2 flex-1"},Fh=["checked","onChange"],Dh={class:"text-[13px] text-gray-600 max-w-[260px]"},zh={class:"flex items-center gap-2"},Ih=he(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),a=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),i=new Intl.Collator("uk",{sensitivity:"base"}),g=e.computed(()=>{const f=o.search.trim().toLowerCase();return o.catalog.groups.map(k=>{const C=k.layers.filter($=>{const w=y($);return w?f?w.toLowerCase().includes(f):!0:!1}).sort(($,w)=>i.compare(y($),y(w)));return{...k,layers:C}}).filter(k=>k.layers.length>0).sort((k,C)=>i.compare(k.name,C.name))}),m=e.computed({get:()=>o.search,set:f=>r("update:search",f)});function x(f){l[f]=!l[f],nf()}function u(f){return!!l[f]}function h(f,k){if(o.selected.includes(k)){a.visible=!1,a.layerId=null;return}const C=f.currentTarget;if(!C)return;const $=C.getBoundingClientRect(),w=typeof window<"u"?window.scrollX:0,N=typeof window<"u"?window.scrollY:0;a.left=$.left+$.width/2+w,a.top=$.bottom+8+N,a.layerId=k,a.visible=!0}function c(){a.visible=!1,a.layerId=null}function d(f){return[{label:"Назва",value:p(f.name)},{label:"Сервіс",value:p(f.service)},{label:"Посилання",value:p(f.url),breakLine:!0}]}function y(f){return typeof(f==null?void 0:f.name)=="string"?f.name.trim():""}function p(f){return f==null||f===""?null:String(f)}return e.watch(()=>o.selected?o.selected.slice():[],f=>{!a.visible||!a.layerId||f.includes(a.layerId)&&(a.visible=!1,a.layerId=null)}),(f,k)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:s,class:"catalog-tab"},[e.createElementVNode("div",Vh,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[0]||(k[0]=C=>m.value=C),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,m.value]]),(e.openBlock(),e.createElementBlock("svg",Bh,[...k[1]||(k[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",$h,[g.value.length===0?(e.openBlock(),e.createElementBlock("div",vh," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,C=>(e.openBlock(),e.createElementBlock("div",{key:C.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:$=>x(C.id)},[e.createElementVNode("div",Lh,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",u(C.id)?"rotate-90":""])},[...k[2]||(k[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",Ah,e.toDisplayString(C.name),1)]),e.createElementVNode("div",Mh,e.toDisplayString(C.layers.length),1)],8,Sh),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.layers,$=>(e.openBlock(),e.createElementBlock("div",{key:$.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Th,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes($.id),onChange:w=>f.$emit("toggle-layer",$.id,w.target.checked,$)},null,40,Fh),k[3]||(k[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 shrink-0"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",Dh,e.toDisplayString($.name),1)]),e.createElementVNode("div",zh,[Array.isArray($.filters)&&$.filters.length?(e.openBlock(),e.createBlock(vn,{key:0,count:$.filters.length,layer:$,disabled:!t.selected.includes($.id),onMouseenter:w=>h(w,$.id),onMouseleave:c,onFocus:w=>h(w,$.id),onBlur:c},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(ko,{items:d($)},null,8,["items"])])]))),128))],512),[[e.vShow,u(C.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${a.top}px`,left:`${a.left}px`})},e.toDisplayString(a.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-36ed2aad"]]),jh={class:"flex flex-col gap-0"},Ph={class:"text-xs text-slate-600 font-semibold"},Rh=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let a=null;const i=e.computed(()=>{if(!r.open)return{display:"none"};const y=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${y}px`,maxWidth:`${y}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function g(){if(r.open){h();return}if(!l.value){h();return}r.open=!0,e.nextTick(()=>{m(),c(),requestAnimationFrame(()=>{m()})})}function m(){if(!r.open||!l.value||!s.value)return;const y=l.value.getBoundingClientRect(),p=12,f=window.scrollX+p,k=window.scrollX+window.innerWidth-p,C=window.scrollY+p,$=window.scrollY+window.innerHeight-p,w=s.value.offsetWidth||Math.min(460,window.innerWidth-24),N=s.value.offsetHeight||0;let E=y.left+window.scrollX+(y.width-w)/2;E<f&&(E=f),E+w>k&&(E=Math.max(f,k-w)),r.left=E;let B=y.bottom+window.scrollY+p;B+N>$&&(B=y.top+window.scrollY-N-p,B<C&&(B=Math.max(C,$-N))),B<C&&(B=C),B+N>$&&(B=Math.max(C,$-N)),r.top=B,r.transform="none"}function x(y){var f,k;if(!r.open)return;const p=y.target;(f=l.value)!=null&&f.contains(p)||(k=s.value)!=null&&k.contains(p)||h()}function u(y){y.key==="Escape"&&h()}function h(){d(),r.open=!1,l.value=null,s.value=null}function c(){d(),s.value&&(a=new ResizeObserver(()=>{m()}),a.observe(s.value))}function d(){a&&(a.disconnect(),a=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),d()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>m())},{deep:!0}),n({close:h}),(y,p)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(g,["prevent","stop"])},[e.renderSlot(y.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(i.value),ref_key:"popoverEl",ref:s,onClick:p[0]||(p[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",jh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,f=>(e.openBlock(),e.createElementBlock("div",{key:f.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",Ph,e.toDisplayString(f.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":f.breakLine}])},e.toDisplayString(f.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Oh={class:"selected-tab"},Uh={class:"selected-tab__actions"},qh={key:0,class:"selected-tab__scroll"},Hh=["onDragstart","onDragover","onDrop"],Wh={class:"selected-tab__item-header"},Yh={class:"selected-tab__item-info"},Zh=["checked","onChange"],Gh={class:"selected-tab__item-name"},Kh={class:"selected-tab__item-controls"},Xh=["onClick"],Qh={class:"selected-tab__menu-inner"},Jh=he(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),a=e.ref(null),i=new Map,g=e.reactive({top:0,left:0}),m=e.ref(null),x=e.reactive({top:0,left:0}),u=e.ref(null),h=new Map,c=e.reactive({});function d(v){var _;for(const S of((_=o.catalog)==null?void 0:_.groups)??[]){const z=S.layers.find(I=>I.id===v);if(z)return z}return null}const y=new Intl.Collator("uk",{sensitivity:"base"}),p=e.computed(()=>[...o.selected].sort((v,_)=>{var I,G;const S=((I=d(v))==null?void 0:I.name)??"",z=((G=d(_))==null?void 0:G.name)??"";return y.compare(S,z)}));e.watch(()=>o.selected,v=>{v.forEach(_=>{l[_]==null&&(l[_]=100)})},{immediate:!0});function f(){if(!s.value)return;const v=i.get(s.value);if(!v)return;const _=v.getBoundingClientRect();g.top=_.bottom+8+window.scrollY,g.left=_.left+window.scrollX}e.watch(()=>o.selected,v=>{v.forEach(_=>{c[_]==null&&(c[_]=!0)})},{immediate:!0});function k(v,_){c[v]=_;const S=Se(v);S&&S.setVisible(_)}function C(v,_){_?h.set(v,_):h.delete(v)}function $(v){m.value=m.value===v?null:v,m.value&&e.nextTick(()=>{w(v),requestAnimationFrame(()=>{w(v)})})}function w(v){const _=h.get(v);if(!_||!u.value)return;const S=_.getBoundingClientRect(),z=12,I=6,G=window.scrollX+z,te=window.scrollX+window.innerWidth-z,oe=window.scrollY+z,ae=window.scrollY+window.innerHeight-z,xe=u.value.offsetWidth||190,we=u.value.offsetHeight||0;let P=S.bottom+window.scrollY+I,ee=S.left+window.scrollX;ee+xe>te&&(ee=S.right+window.scrollX-xe,ee<G&&(ee=G)),ee<G&&(ee=G),P+we>ae&&(P=S.top+window.scrollY-we-I,P<oe&&(P=Math.max(oe,ae-we))),P<oe&&(P=oe),P+we>ae&&(P=Math.max(oe,ae-we)),x.top=P,x.left=ee}function N(v){const _=Se(v);_&&_.remove(),r("remove",v),m.value=null}function E(v){const _=v.target,S=s.value,z=m.value;if(S){const I=a.value,G=i.get(S);if(I&&I.contains(_)||G&&G.contains(_))return;s.value=null}if(z){const I=u.value,G=h.get(z);if(I&&I.contains(_)||G&&G.contains(_))return;m.value=null}}function B(){s.value&&f(),m.value&&w(m.value)}e.onMounted(()=>{document.addEventListener("click",E),window.addEventListener("resize",B),window.addEventListener("scroll",B,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",E),window.removeEventListener("resize",B),window.removeEventListener("scroll",B,!0)});const{map:M}=Pe();function D(v){var I,G,te;if(!v)return;const _=Se(v),S=d(v);if(!_&&!S)return;if(((I=S==null?void 0:S.extent)==null?void 0:I.length)===4&&((G=M.value)!=null&&G.fitBounds)){const oe=S.extent.map(ae=>Number(ae));if(oe.every(ae=>Number.isFinite(ae))){const[ae,xe,we,P]=oe;M.value.fitBounds([[ae,xe],[we,P]],{padding:40}),m.value=null;return}}(te=_==null?void 0:_.getSource)!=null&&te.call(_)&&(m.value=null)}const W=e.ref(null),K=e.ref(null);function Q(v,_){W.value=_,K.value=_,v.dataTransfer&&(v.dataTransfer.effectAllowed="move",v.dataTransfer.setData("text/plain",String(_)))}function H(v){K.value=v}function J(v,_){if(v.preventDefault(),W.value===null||W.value===_){W.value=null,K.value=null;return}const z=[...p.value],[I]=z.splice(W.value,1);z.splice(_,0,I),r("reorder",z),W.value=null,K.value=null}function O(){W.value=null,K.value=null}function T(v){return v==null||v===""?null:String(v)}function F(v,_){return!Array.isArray(v)||v.length===0?null:`${v.length} ${_}`}function X(v){var P,ee,b,A,Z,le;const _=Se(v),S=d(v);if(!_&&!S)return[];const z=(S==null?void 0:S.name)||((ee=(P=_==null?void 0:_.opts)==null?void 0:P.layer)==null?void 0:ee.name)||null,I=(S==null?void 0:S.service)||((b=_==null?void 0:_.opts)==null?void 0:b.service)||null,G=(A=_==null?void 0:_.getSource)==null?void 0:A.call(_),te=G&&"tiles"in G?(Z=G.tiles)==null?void 0:Z[0]:(S==null?void 0:S.url)||null,oe=(S==null?void 0:S.source_path)||null,ae=(_==null?void 0:_.popup)||(S==null?void 0:S.popup),xe=(_==null?void 0:_.card)||(S==null?void 0:S.card),we=(S==null?void 0:S.filters)||((le=_==null?void 0:_.opts)==null?void 0:le.filters);return[{label:"Назва",value:T(z)},{label:"Сервіс",value:T(I)},{label:"Посилання",value:T(te),breakLine:!0},{label:"Джерело",value:T(oe),breakLine:!0},{label:"Popup",value:F(ae,"полів")},{label:"Картка",value:F(xe,"полів")},{label:"Фільтри",value:F(we,"фільтрів")}]}return(v,_)=>(e.openBlock(),e.createElementBlock("div",Oh,[e.createElementVNode("div",Uh,[e.createElementVNode("button",{class:"selected-tab__add",onClick:_[0]||(_[0]=S=>r("select-layer"))},[..._[3]||(_[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),t.selected.length?(e.openBlock(),e.createElementBlock("div",qh,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(S,z)=>{var I;return e.openBlock(),e.createElementBlock("div",{key:S,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":W.value===z,"selected-tab__item--over":K.value===z}]),draggable:"true",onDragstart:G=>Q(G,z),onDragover:e.withModifiers(G=>H(z),["prevent"]),onDrop:G=>J(G,z),onDragend:O},[e.createElementVNode("div",Wh,[e.createElementVNode("div",Yh,[_[4]||(_[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:c[S]??!0,onChange:G=>k(S,G.target.checked)},null,40,Zh),e.createElementVNode("span",Gh,e.toDisplayString(((I=d(S))==null?void 0:I.name)||"Шар"),1)]),e.createElementVNode("div",Kh,[e.createVNode(xl,{"layer-id":S},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:G=>C(S,G),onClick:e.withModifiers(G=>$(S),["stop"])},[..._[5]||(_[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,Xh)])])],42,Hh)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[m.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:u,class:"selected-tab__menu",style:e.normalizeStyle({top:x.top+"px",left:x.left+"px"})},[e.createElementVNode("div",Qh,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:_[1]||(_[1]=S=>D(m.value))},[..._[6]||(_[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),e.createVNode(Rh,{items:X(m.value)},{default:e.withCtx(()=>[..._[7]||(_[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)])]),_:1},8,["items"]),_[9]||(_[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:_[2]||(_[2]=S=>N(m.value))},[..._[8]||(_[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-aabdc291"]]),ex={class:"filter-tab"},tx={key:0,class:"filter-tab__header"},nx={class:"filter-tab__title"},ox={key:1,class:"filter-tab__content rounded-md"},rx={class:"filter-tab__scroll"},lx={key:2,class:"filter-tab__empty"},ax=he(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,s=e.computed(()=>{var g;return((g=r.layer)==null?void 0:g.filters)??[]}),a=e.computed(()=>s.value.length>0);function i(g){l("change",g.data)}return(g,m)=>(e.openBlock(),e.createElementBlock("div",ex,[t.layer&&a.value?(e.openBlock(),e.createElementBlock("div",tx,[e.createElementVNode("div",null,[e.createElementVNode("p",nx,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&a.value?(e.openBlock(),e.createElementBlock("div",ox,[e.createElementVNode("div",rx,[e.createVNode(e.unref(o),{view:"vertical",schema:s.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:m[0]||(m[0]=x=>i(x))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",lx,[...m[1]||(m[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),sx={class:"flex items-center justify-between mb-1"},ix={class:"flex items-center gap-2"},cx={class:"text-lg font-semibold text-gray-800"},dx={key:0},ux={key:1,class:"block text-sm font-normal text-gray-500"},px={class:"flex items-center gap-2"},mx={class:"flex mb-4 border-b border-gray-200"},fx={class:"map-catalog-widget__body"},wl=he(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=Fe.useRoute(),o=Fe.useRouter();function r(){const T=n.query["catalog-tab"];return(Array.isArray(T)?T[0]:T)==="selected"?"selected":"catalog"}const l=e.ref(r()),s=e.ref({groups:[]}),a=e.ref([]),i=e.ref(""),{map:g}=Pe(),m=e.reactive({}),x=e.ref(null),u=e.ref(!0),h=e.ref(!1);function c(T){return s.value.groups.map(F=>F.layers.find(X=>X.id===T)).find(Boolean)||null}function d(T){return typeof(T==null?void 0:T.name)=="string"&&T.name.trim().length>0}function y(){const T=x.value;if(!T)return;delete m[T];const F=Se(T);F!=null&&F.setFilter&&F.setFilter("")}function p(T,F){const X=Se(T);if(m[T]={...F},!(X!=null&&X.setFilter))return;const v=Object.entries(F).filter(([,_])=>_!=null&&_!=="").map(([_,S])=>`${_}=${S}`);X.setFilter(v.join("|"))}function f(T){const F=x.value;F&&p(F,T)}function k(T){const F=T.url;let X=null;if(F&&(X=F.startsWith("http")?F:`${window.location.origin}${F}`),!X)return null;const v=(T.service||"").toString().toLowerCase(),_=T.count??null;return v&&v!=="vtile"?{service:v,count:_,source:{type:"raster",tiles:[X],tileSize:256,minzoom:0,maxzoom:20}}:{service:v,count:_,source:{type:"vector",tiles:[X],minzoom:0,maxzoom:14},layer:{style:T.style},card:T.card,popup:T.popup}}function C(T,F,X){var z;const v=X??c(T);if(!v)return;const _=k(v);if(!_)return;const S=Se(v.id,_,g);if(S)if(S.setVisible(F),F){if(!a.value.includes(T)&&(a.value.push(T),(z=g.value)!=null&&z.getLayer(T)))try{g.value.moveLayer(T)}catch(I){console.warn("Cannot move new layer",T,I)}}else a.value=a.value.filter(I=>I!==T),x.value===T&&(y(),x.value=null)}function $(){a.value.forEach(T=>{const F=Se(T);F&&F.setVisible(!1)}),a.value=[]}function w(T){a.value=[...T],e.nextTick(()=>{var _;if(!g.value)return;const F=((_=g.value.getStyle())==null?void 0:_.layers)??[];let X;const v=S=>F.filter(z=>{var I,G;return(z==null?void 0:z.source)===S||(z==null?void 0:z.id)===S||((G=(I=z==null?void 0:z.id)==null?void 0:I.startsWith)==null?void 0:G.call(I,`${S}`))}).map(z=>z.id);for(let S=T.length-1;S>=0;S-=1){const z=T[S],I=v(z);I.length&&(I.forEach(G=>{var te;if((te=g.value)!=null&&te.getLayer(G))try{g.value.moveLayer(G,X)}catch(oe){console.warn("Cannot move layer",G,oe)}}),X=I[0])}})}function N(T){!T||!Array.isArray(T.filters)||T.filters.length===0||a.value.includes(T.id)&&(x.value=T.id,m[T.id]||(m[T.id]={}),l.value="filter")}function E(){l.value="catalog"}const B=e.computed(()=>x.value?c(x.value):null),M=e.computed(()=>{const T=x.value;return T?m[T]??{}:{}}),D=e.computed(()=>s.value.groups.reduce((T,F)=>T+F.layers.filter(d).length,0)),W=e.computed(()=>l.value==="selected"?"Вибрані шари":l.value==="filter"?"Фільтр шарів":"Каталог"),K=e.computed(()=>l.value==="selected"?a.value.length:l.value==="catalog"?D.value:null),Q=e.computed(()=>{var T;return l.value==="filter"?((T=B.value)==null?void 0:T.name)??"":""});async function H(){const F=await(await fetch("/api/gis-layer-list")).json(),X=new Map;F.forEach(S=>{const z=S.group_id??"other";X.has(z)||X.set(z,{id:z,name:S.group_name||"Інші шари",layers:[]}),X.get(z).layers.push(S)}),s.value={groups:Array.from(X.values())};const v=n.query.layers;if(!v)return;const _=Array.isArray(v)?v[0]:v;typeof _=="string"&&_.split(",").forEach(S=>{const z=S.trim();if(!z)return;const I=c(z);I&&C(z,!0,I)})}e.watch(x,T=>{!T&&l.value==="filter"&&(l.value="catalog")}),e.watch(B,T=>{!T&&x.value&&(x.value=null)}),e.watch(a,T=>{const F={...n.query};T.length?F.layers=T.join(","):delete F.layers,o.replace({query:F}).catch(()=>{})},{deep:!0});function J(){u.value=!u.value}function O(){h.value=window.innerWidth<=768}return e.onMounted(()=>{H(),O(),h.value&&(u.value=!1),window.addEventListener("resize",O)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",O)}),(T,F)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",K.value>1?"min-h-[250px] md:min-h-[0px]":"min-h-[0px]"])},[e.createElementVNode("div",sx,[e.createElementVNode("div",ix,[F[5]||(F[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",cx,[e.createTextVNode(e.toDisplayString(W.value)+" ",1),K.value!==null?(e.openBlock(),e.createElementBlock("span",dx,"("+e.toDisplayString(K.value)+")",1)):e.createCommentVNode("",!0),Q.value?(e.openBlock(),e.createElementBlock("span",ux,e.toDisplayString(Q.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",px,[e.createElementVNode("button",{onClick:$,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...F[6]||(F[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-99290304><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-99290304></path><path d="M21 3v5h-5" data-v-99290304></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-99290304></path><path d="M8 16H3v5" data-v-99290304></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:J,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":u.value})},[...F[7]||(F[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!u.value}])},[e.createElementVNode("div",mx,[e.createElementVNode("button",{onClick:F[0]||(F[0]=X=>l.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:F[1]||(F[1]=X=>l.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",fx,[l.value==="catalog"?(e.openBlock(),e.createBlock(Ih,{key:0,class:"map-catalog-widget__scroll",catalog:s.value,selected:a.value,search:i.value,"onUpdate:search":F[2]||(F[2]=X=>i.value=X),onToggleLayer:C,onOpenFilter:N},null,8,["catalog","selected","search"])):l.value==="selected"?(e.openBlock(),e.createBlock(Jh,{key:1,catalog:s.value,selected:a.value,onToggleLayer:C,onSelectLayer:F[3]||(F[3]=X=>l.value="catalog"),onReorder:w,onRemove:F[4]||(F[4]=X=>a.value=a.value.filter(v=>v!==X))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(ax,{key:2,layer:B.value,value:M.value,onChange:f,onClose:E},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-99290304"]]),gx={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},yx={class:"flex items-start justify-between gap-3 p-5 pb-3"},hx={class:"inline-block text-xl font-semibold text-gray-800"},xx={key:0,class:"mt-1 text-sm text-gray-500"},bx={class:"flex items-center gap-[6px]"},kx={class:"px-5 pb-5 space-y-6"},wx={key:0,class:"space-y-2"},_x={class:"flex flex-wrap gap-4"},Ex=["value"],Nx={key:1,class:"text-sm text-gray-500"},Cx={key:2,class:"text-sm text-gray-500"},Vx={class:"text-4xl font-medium text-gray-800"},Bx={class:"space-y-[14px]"},$x={class:"flex items-center gap-[10px] text-gray-600"},vx={class:"font-medium text-gray-700"},Sx={class:"flex items-center justify-end text-end gap-3"},Lx={class:"font-medium text-gray-800"},Ax={class:"min-w-[40px] font-medium text-[#3C3C4399]"},_l=he(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),s=e.ref([]),a=e.ref(null),i=e.ref(null),g=e.ref(null),m=e.ref(null),x=e.ref(null),u=e.ref({}),h=e.ref(null);function c(O){return O&&JSON.parse(JSON.stringify(O))}const d=e.computed(()=>{const O=o.config.layer;if(typeof O!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const T=O.trim();if(!T)throw new Error("MapAttributeWidget: `layer` must be non-empty");return T}),y=e.computed(()=>{const{list:O,attribute:T}=o.config;if(Array.isArray(O)&&O.length)return O.map(F=>({id:(F==null?void 0:F.id)!=null?String(F.id).trim():"",text:(F==null?void 0:F.text)!=null&&String(F.text).trim()||null})).filter(F=>F.id.length);if(Array.isArray(T))return T.map(F=>F!=null?String(F).trim():"").filter(F=>F.length).map(F=>({id:F,text:null}));if(typeof T=="string"){const F=T.trim();if(!F)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:F,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),p=e.computed(()=>y.value.map(O=>({id:O.id,label:O.text||u.value[O.id]||O.id})));e.watch(y,O=>{if(!O.length){h.value=null,s.value=[];return}(!h.value||!O.some(T=>T.id===h.value))&&(h.value=O[0].id)},{immediate:!0});const f=e.computed(()=>{var O;return h.value||((O=y.value[0])==null?void 0:O.id)||null});e.watch(d,()=>{var O,T;(T=(O=i.value)==null?void 0:O.remove)==null||T.call(O),i.value=null,g.value=null,m.value=null,x.value=null,u.value={}});const k=e.computed(()=>{var O;return(O=m.value)!=null&&O.length?{id:d.value,name:g.value,filters:m.value}:null}),C=e.computed(()=>{var O,T;return((T=(O=k.value)==null?void 0:O.filters)==null?void 0:T.length)||0});async function $(O){var X;const T=await fetch(`/api/gis-service/${encodeURIComponent(O)}`);if(!T.ok){let v="Не вдалося завантажити налаштування шару";try{const _=await T.json();v=((X=_==null?void 0:_.message)==null?void 0:X.error)||(_==null?void 0:_.message)||v}catch{}throw new Error(v)}const F=await T.json();return g.value=(F==null?void 0:F.name)||null,m.value=Array.isArray(F==null?void 0:F.filters)?F.filters:null,x.value=c((F==null?void 0:F.style)||{}),u.value=((F==null?void 0:F.attributes)||[]).reduce((v,_)=>{const S=typeof(_==null?void 0:_.name)=="string"?_.name.trim():"",z=typeof(_==null?void 0:_.ua)=="string"?_.ua.trim():"";return S&&(v[S]=z||S),v},{}),F}function w(O,T){let F=Se(O);if(!F){const X=`${location.origin}/api/vtile/${O}/ua/{z}/{x}/{y}.vmt`;F=Se(O,{source:{type:"vector",tiles:[X],minzoom:0,maxzoom:14},layer:{id:O,source:O,"source-layer":O,style:(T==null?void 0:T.style)||{}},card:T==null?void 0:T.card,popup:T==null?void 0:T.popup})}return i.value=F,F}async function N(O,T){var v;const F=`/api/gis-service/${encodeURIComponent(O)}/${encodeURIComponent(T)}`,X=await fetch(F);if(!X.ok){let _="Не вдалося отримати статистику";try{const S=await X.json();_=((v=S==null?void 0:S.message)==null?void 0:v.error)||(S==null?void 0:S.message)||_}catch{}throw new Error(_)}return X.json()}function E(O){const T=new Map;return O&&(O.rules||[]).forEach(X=>{const v=(X==null?void 0:X.value)??(X==null?void 0:X.id);v!=null&&T.set(String(v),X)}),T}function B(O,T,F,X,v){if(typeof(T==null?void 0:T.color)=="string"&&T.color.trim())return T.color.trim();const _=o.config.colors||{};if(_[O])return _[O];const z=E(F==null?void 0:F.style).get(O);return typeof(z==null?void 0:z.color)=="string"&&z.color.trim()?z.color.trim():n[v%n.length]}function M(O,T,F,X){var v;return(T==null?void 0:T.text)||(T==null?void 0:T.label)||(T==null?void 0:T.name)||(T==null?void 0:T[`${X}_text`])||((v=E(F==null?void 0:F.style).get(O))==null?void 0:v.label)||O}function D(O,T,F,X){if(!O)return;const v=c((T==null?void 0:T.style)||x.value)||{},_=X.trim();if(!_)return;const S={...v.colors||{},...o.config.colors||{}};_===X&&F.forEach(z=>{z.color.trim()&&(S[z.id]=z.color)}),O.setStyle({...v,type:v.type||"polygon",colorAttr:_,opacity:.8,colors:S})}async function W(){var _,S;s.value=[],a.value=null;const O=d.value,T=f.value;if(!T)return;l.value=!0;const F=await $(O);w(O,F);const X=await N(O,T),v=Array.isArray(X==null?void 0:X.rows)?X.rows.map((z,I)=>{const G=(z==null?void 0:z.id)??(z==null?void 0:z.value),te=G!=null?String(G):"";if(!te)return null;const oe=M(te,z,F,T),ae=Number((z==null?void 0:z.count)??0)||0,xe=B(te,z,F,T,I);return{id:te,label:oe,count:ae,color:xe}}).filter(Boolean):[];s.value=v,a.value=((_=X==null?void 0:X.field)==null?void 0:_.label)||((S=X==null?void 0:X.field)==null?void 0:S.name)||null,D(i.value,F,v,T),l.value=!1}e.watch(()=>[d.value,f.value],()=>{W()},{immediate:!0});const K=e.computed(()=>"Набори даних"),Q=e.computed(()=>s.value.reduce((O,T)=>O+T.count,0)),H=e.computed(()=>{var F;const O=f.value;return((F=p.value.find(X=>X.id===O))==null?void 0:F.label)||null||a.value||O||null});function J(O){return Q.value?`${(O/Q.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var O,T;(T=(O=i.value)==null?void 0:O.remove)==null||T.call(O)}),(O,T)=>r.value?(e.openBlock(),e.createElementBlock("div",gx,[e.createElementVNode("div",yx,[e.createElementVNode("div",null,[e.createElementVNode("h2",hx,e.toDisplayString(K.value),1),H.value&&p.value.length===1?(e.openBlock(),e.createElementBlock("p",xx,e.toDisplayString(H.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",bx,[k.value?(e.openBlock(),e.createBlock(vn,{key:0,class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",count:C.value,layer:k.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:T[1]||(T[1]=F=>r.value=!1)},[...T[3]||(T[3]=[e.createElementVNode("svg",{class:"w-4 h-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",viewBox:"0 0 24 24"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])]),e.createElementVNode("div",kx,[p.value.length>1?(e.openBlock(),e.createElementBlock("div",wx,[e.createElementVNode("div",_x,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,F=>(e.openBlock(),e.createElementBlock("label",{key:F.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:F.id,"onUpdate:modelValue":T[2]||(T[2]=X=>h.value=X)},null,8,Ex),[[e.vModelRadio,h.value]]),e.createElementVNode("span",null,e.toDisplayString(F.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Nx,"Завантаження…")):s.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Vx,e.toDisplayString(Q.value),1),e.createElementVNode("ul",Bx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,F=>(e.openBlock(),e.createElementBlock("li",{key:F.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",$x,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:F.color})},null,4),e.createElementVNode("span",vx,e.toDisplayString(F.label),1)]),e.createElementVNode("div",Sx,[e.createElementVNode("span",Lx,e.toDisplayString(F.count),1),e.createElementVNode("span",Ax,e.toDisplayString(J(F.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Cx,"Дані відсутні"))])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"py-2 px-2.5 max-h-[38px] inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50",onClick:T[0]||(T[0]=F=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Mx=["title"],Tx={key:0,class:"vs-select__options absolute z-50 mt-1 w-auto min-w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900"},Fx=["onClick"],Dx=["placeholder"],zx={class:"absolute inset-y-0 right-2 flex items-center gap-1"},Ix={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},jx={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},Px={class:"max-h-[60vh] overflow-auto"},Rx={key:0,class:"divide-y divide-gray-100"},Ox=["onClick"],Ux={key:1,class:"px-3 py-3 text-xs text-gray-500"},El="mapSearchAddressHistory",sn="search-geom-source",cn="search-geom-layer-fill",Tn="search-geom-layer-line",qx=12,Hx="https://data.softpro.ua/api-user/gis-url-proxy",Wx="https://geo.rv.ua/api-user/dzk.api",Yx="https://nominatim.openstreetmap.org/search",Nl=he(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(j,Y){if(typeof document>"u")return;let q=null;const se=8,pe=()=>{const Ne=String((Y==null?void 0:Y.value)??"");if(!Ne)return;q=document.createElement("div"),q.textContent=Ne,Object.assign(q.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(q);const _e=j.getBoundingClientRect();q.style.left=`${_e.right+window.scrollX+se}px`,q.style.top=`${_e.top+window.scrollY+(_e.height-q.offsetHeight)/2}px`},be=()=>{q!=null&&q.parentNode&&q.parentNode.removeChild(q),q=null};j.addEventListener("mouseenter",pe),j.addEventListener("mouseleave",be),Object.assign(j,{tooltipRightHandlers:{show:pe,hide:be}})},unmounted(j){if(typeof document>"u")return;const Y=j.tooltipRightHandlers;Y&&(j.removeEventListener("mouseenter",Y.show),j.removeEventListener("mouseleave",Y.hide))}},o=t,r=Pe(),l=e.getCurrentInstance();function s(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var se,pe,be;const j=(se=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:se.$settings,Y=(pe=j==null?void 0:j.map)==null?void 0:pe.searchViewbox;if(Y)return Y;const q=s();return(be=q==null?void 0:q.map)==null?void 0:be.searchViewbox}function i(){var pe,be,Ne;const j=(pe=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:pe.$settings,Y=(be=j==null?void 0:j.map)==null?void 0:be.addressSuggest;if(typeof Y=="string"&&Y.trim())return Y.trim();const q=s(),se=(Ne=q==null?void 0:q.map)==null?void 0:Ne.addressSuggest;if(typeof se=="string"&&se.trim())return se.trim()}const g=!!i(),m=!!a(),x=e.computed(()=>{const j=["xy","parcel"];return g&&j.push("address"),m&&j.push("nominatim"),j}),u=e.computed(()=>{var q,se;const j=x.value,Y=(se=(q=o.config)==null?void 0:q.tools)==null?void 0:se.filter(pe=>j.includes(pe));return Y&&Y.length?Y:j}),h=e.computed(()=>{var j,Y;return((Y=(j=o.config)==null?void 0:j.placeholder)==null?void 0:Y.trim())||"Пошук…"}),c=e.ref(u.value[0]);e.watch(u,j=>{j.includes(c.value)||(c.value=j[0])});const d=e.ref(""),y=e.ref(!1),p=e.ref(null),f=e.ref(null),k=e.ref(null),C=e.ref(null),$=e.ref([]),w=e.ref(null),N=e.ref(!1),E=e.ref([]),B=e.computed(()=>(c.value==="address"||c.value==="nominatim")&&N.value),M=e.computed(()=>{var j;return((j=o.config)==null?void 0:j.addressDebounceMs)??1e3});let D=null;const W=e.ref(!1),K=e.computed(()=>d.value.trim().length>0?$.value:E.value),Q=e.computed(()=>d.value.trim().length?`Знайдено ${$.value.length}`:"Історія пошуку"),H=e.computed(()=>d.value.trim().length?"Нічого не знайдено":"Історія порожня");function J(){var j,Y;if(typeof window>"u")return[];try{const q=(Y=(j=window.localStorage)==null?void 0:j.getItem)==null?void 0:Y.call(j,El);if(!q)return[];const se=JSON.parse(q);return Array.isArray(se)?se:[]}catch{return[]}}function O(j){var Y,q;typeof window>"u"||(q=(Y=window.localStorage)==null?void 0:Y.setItem)==null||q.call(Y,El,JSON.stringify(j))}function T(j){const q=[j,...E.value.filter(se=>se.id!==j.id)].slice(0,10);E.value=q,O(q)}let F=null;function X(){F&&(F.remove(),F=null)}function v(){var Y;const j=(Y=r.map)==null?void 0:Y.value;j&&(j.getLayer(cn)&&j.removeLayer(cn),j.getLayer(Tn)&&j.removeLayer(Tn),j.getSource(sn)&&j.removeSource(sn))}function _(j){var pe,be,Ne,_e;if(!((pe=o.config)!=null&&pe.showMarker)||!j)return;const Y=(be=r.map)==null?void 0:be.value;if(!Y)return;v(),z();const q={type:"Feature",geometry:j,properties:{}};Y.addSource(sn,{type:"geojson",data:q});const se=((Ne=o.config)==null?void 0:Ne.geometryColor)||((_e=o.config)==null?void 0:_e.markerColor)||"#3B82F6";Y.addLayer({id:cn,type:"fill",source:sn,paint:{"fill-color":se,"fill-opacity":.3}}),Y.addLayer({id:Tn,type:"line",source:sn,paint:{"line-color":se,"line-width":1,"line-opacity":1}}),I(Y)}let S=null;function z(){S&&(cancelAnimationFrame(S),S=null)}function I(j){const q=performance.now();function se(pe){if(!j.getLayer(cn))return;const Ne=(pe-q)%1200/1200,_e=Math.sin(Ne*Math.PI),it=.2+_e*.3,ot=1+_e*1;j.setPaintProperty(cn,"fill-opacity",it),j.setPaintProperty(Tn,"line-width",ot),S=requestAnimationFrame(se)}S=requestAnimationFrame(se)}function G(j,Y){var pe,be,Ne;if(!((pe=o.config)!=null&&pe.showMarker))return;X(),v();const q=(be=r.map)==null?void 0:be.value;if(!q)return;if(Y){_(Y);return}const se=((Ne=o.config)==null?void 0:Ne.markerColor)||"#3B82F6";F=new maplibregl.Marker({color:se}).setLngLat([j.lng,j.lat]).addTo(q)}const te=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function oe(){var be;if(!C.value)return;const j=C.value.getBoundingClientRect(),Y=(be=k.value)==null?void 0:be.getBoundingClientRect(),q=(Y==null?void 0:Y.width)??j.width,se=((Y==null?void 0:Y.left)??j.left)+window.scrollX,pe=j.bottom+window.scrollY+qx;te.left=`${se}px`,te.top=`${pe}px`,te.width=`${q}px`,te.display="block"}const ae=()=>{B.value&&oe()};function xe(){D&&(clearTimeout(D),D=null)}e.watch(c,()=>{d.value="",y.value=!1,$.value=[],N.value=!1,xe(),W.value=!1,X(),v()}),e.watch(B,j=>{j?e.nextTick(()=>{oe()}):te.display="none"}),e.watch(d,j=>{if(c.value!=="address"&&c.value!=="nominatim"){$.value=[],xe();return}if(!j.trim()){$.value=[],N.value=E.value.length>0,xe();return}xe(),N.value=!0,D=window.setTimeout(()=>{Ft(j).catch(Y=>{const q=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:q})})},M.value)});function we(j){var se;const Y=[];f.value&&Y.push(f.value),j instanceof HTMLElement&&Y.push(j);const q=(se=p.value)==null?void 0:se.querySelectorAll("li");q==null||q.forEach(pe=>{Y.push(pe)}),Y.forEach(pe=>{pe.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function P(j){y.value&&we(j.target),y.value=!y.value}function ee(j,Y){we(Y==null?void 0:Y.target),c.value=j}function b(){d.value="",$.value=[],N.value=!1,W.value=!1,X(),v()}function A(j){const Y=j.target;if(y.value){const q=p.value;q&&!q.contains(Y)&&(we(Y),y.value=!1)}if(B.value){const q=w.value,se=C.value;q&&!q.contains(Y)&&(!se||!se.contains(Y))&&(N.value=!1)}}e.onMounted(()=>{E.value=J(),window.addEventListener("click",A,!0),window.addEventListener("scroll",ae,!0),window.addEventListener("resize",ae)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",A,!0),window.removeEventListener("scroll",ae,!0),window.removeEventListener("resize",ae),xe(),X(),v()});function Z(j){return j==="xy"?"Координати":j==="parcel"?"Кадастр":j==="nominatim"?"Nominatim":"Адресний"}function le(j){switch(j){case"xy":return"Пошук за географічними координатами. Введіть широту і довготу через пробіл або кому (lat lng або lng lat).";case"parcel":return"Пошук земельної ділянки за кадастровим номером у форматі 0000000000:00:000:0000 з відображенням меж ділянки на карті.";case"nominatim":return"Пошук адрес та обʼєктів через Nominatim з обмеженням у межах карти.";case"address":return"Пошук адрес через локальний сервіс addressSuggest (швидкі підказки з вашого геопорталу).";default:return""}}function fe(j){const Y=j.replace(/[,]+/g," ").trim();if(!Y)return null;const q=Y.split(/\s+/).filter(Boolean);if(q.length<2)return null;const se=q.slice(0,2).map(Number);if(!se.every(Ze=>Number.isFinite(Ze)))return null;let[pe,be]=se,Ne=pe,_e=be;const it=Ze=>Math.abs(Ze)<=90,ot=Ze=>Math.abs(Ze)<=180;if(!it(Ne)||!ot(_e))if(it(_e)&&ot(Ne))Ne=be,_e=pe;else return null;return{lat:Ne,lng:_e}}function ie(j){return((j==null?void 0:j.items)||[]).map((q,se)=>{var pe,be,Ne;return{id:String((q==null?void 0:q.id)??se),title:(q==null?void 0:q.title)||((pe=q==null?void 0:q.address)==null?void 0:pe.label)||"Знайдений обʼєкт",lat:Number((be=q==null?void 0:q.position)==null?void 0:be.lat),lng:Number((Ne=q==null?void 0:q.position)==null?void 0:Ne.lng)}})}function Be(j){const Y=(j==null?void 0:j.result)||(j==null?void 0:j.data)||j;if(!Y)return[];const q=Y.geom_centroid;if(!q||!Array.isArray(q.coordinates))return[];const[se,pe]=q.coordinates;return!Number.isFinite(pe)||!Number.isFinite(se)?[]:[{id:"parcel",title:Y.cadnum||Y.cad_num||"Земельна ділянка",lat:pe,lng:se,geom:Y.geom||null}]}function $e(j){return(Array.isArray(j==null?void 0:j.features)?j.features:[]).map((q,se)=>{var Ze,ct,kt;const pe=(Ze=q==null?void 0:q.geometry)==null?void 0:Ze.coordinates,be=Number(pe==null?void 0:pe[0]),Ne=Number(pe==null?void 0:pe[1]);if(!Number.isFinite(Ne)||!Number.isFinite(be))return null;const _e=(q==null?void 0:q.properties)||{},it=((ct=_e==null?void 0:_e.geocoding)==null?void 0:ct.label)||(_e==null?void 0:_e.display_name)||(_e==null?void 0:_e.label)||"Адреса";return{id:String(((kt=_e==null?void 0:_e.geocoding)==null?void 0:kt.place_id)||(_e==null?void 0:_e.place_id)||se),title:it,lat:Ne,lng:be}}).filter(q=>!!q)}function Re(j){return Number.isFinite(j.lat)&&Number.isFinite(j.lng)}function De(j){const Y=Number(j);return Number.isFinite(Y)?Y:null}function Ue(j){var pe,be,Ne,_e,it,ot;const Y=De(j.lng)??De(j.lon)??De(j.longitude)??De(j.x),q=De(j.lat)??De(j.latitude)??De(j.y);if(Y!=null&&q!=null)return{lat:q,lng:Y};const se=((pe=j==null?void 0:j.geometry)==null?void 0:pe.coordinates)??((be=j==null?void 0:j.geom_centroid)==null?void 0:be.coordinates)??((Ne=j==null?void 0:j.centroid)==null?void 0:Ne.coordinates)??((it=(_e=j==null?void 0:j.geojson)==null?void 0:_e.geometry)==null?void 0:it.coordinates)??((ot=j==null?void 0:j.geom)==null?void 0:ot.coordinates);if(Array.isArray(se)&&se.length>=2){const Ze=De(se[0]),ct=De(se[1]);if(Ze!=null&&ct!=null)return{lat:ct,lng:Ze}}return null}function tt(j){return(Array.isArray(j==null?void 0:j.data)?j.data:[]).map((q,se)=>{const pe=Ue(q),be=String(q.text??q.title??q.label??q.name??q.address??q.display_name??q.id??"Адреса"),Ne=String(q.id??q.code??q.value??se);return pe?{id:Ne,title:be,...pe}:{id:Ne,title:be}}).filter(q=>!!(q!=null&&q.title))}function Mt(j){const Y=i();if(!Y)return null;if(Y.includes(":name"))return Y.replace(":name",encodeURIComponent(j));try{const q=new URL(Y,window.location.origin);return j.trim()&&q.searchParams.set("q",j),q.toString()}catch{return Y}}async function Tt(j){const Y=Mt(j);if(!Y)return[];const q=await fetch(Y);if(!q.ok)throw new Error(`HTTP ${q.status}`);const se=await q.json();return tt(se)}async function Zt(j){const Y=new URL(Yx);Y.searchParams.set("format","geojson"),Y.searchParams.set("q",j),Y.searchParams.set("addressdetails","1"),Y.searchParams.set("bounded","1");const q=a();q&&Y.searchParams.set("viewbox",q);const se=await fetch(Y.toString());if(!se.ok)throw new Error(`HTTP ${se.status}`);const pe=await se.json();return $e(pe)}async function Ft(j){if($.value=[],xe(),c.value==="address"){if(!i()){ye.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const se=await Tt(j);if(!se.length){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}$.value=se;return}const Y=await Zt(j);if(!Y.length){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}$.value=Y}async function ut(j){if(Re(j)){Bt(j),T(j);return}try{const q=(await Zt(j.title))[0];if(!q||!Re(q)){ye.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено координати адреси"});return}Bt(q),T(q)}catch(Y){const q=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:q})}}function dn(){c.value!=="address"&&c.value!=="nominatim"||d.value.trim().length||E.value.length&&(N.value=!0,e.nextTick(()=>{oe()}))}function un(j){const q=j.replace(/\s+/g,"").split(":");if(console.log(q),q.length!==4)return!1;const se=[10,2,3,4];return q.every((pe,be)=>pe.length===se[be]&&/^\d+$/.test(pe))}function Bt(j){var q,se;const Y=((q=o.config)==null?void 0:q.zoom)??17;(se=r.flyTo)==null||se.call(r,{center:[j.lng,j.lat],zoom:Y}),G(j,j.geom),W.value=!0}async function pn(){const j=d.value.trim();if(j){if(c.value==="xy"){const Y=fe(j);if(!Y){ye.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}Bt(Y);return}if(c.value==="address"||c.value==="nominatim"){try{await Ft(j)}catch(Y){const q=(Y==null?void 0:Y.message)||"Помилка пошуку адреси";ye.notify({type:"error",title:"Пошук адреси",message:q})}return}try{const Y=new URL(c.value==="here"?Hx:Wx);if(c.value==="here")Y.searchParams.set("searchtext",j);else{if(!un(j)){ye.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}Y.searchParams.set("cad_num",j)}const q=await fetch(Y.toString());if(!q.ok)throw new Error(`HTTP ${q.status}`);const se=await q.json(),pe=c.value==="here"?ie(se):Be(se);if(!pe.length)ye.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const be=pe[0];Bt(be)}}catch(Y){const q=(Y==null?void 0:Y.message)||"Помилка пошуку";ye.notify({type:"error",title:"Пошук",message:q})}}}return(j,Y)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:k,class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(pn,["prevent"])},[u.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:p,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:P},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:f,class:"block w-full truncate",title:Z(c.value)},[e.createTextVNode(e.toDisplayString(Z(c.value)),1)],8,Mx)),[[n,le(c.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":y.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...Y[3]||(Y[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),y.value?(e.openBlock(),e.createElementBlock("div",Tx,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,q=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:q,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:se=>ee(q,se)},[e.createTextVNode(e.toDisplayString(Z(q)),1)],8,Fx)),[[n,le(q)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:C,class:"relative flex-1 min-w-[140px]"},[c.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Co.VsInputMask),{key:0,modelValue:d.value,"onUpdate:modelValue":Y[0]||(Y[0]=q=>d.value=q),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",W.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":Y[1]||(Y[1]=q=>d.value=q),placeholder:h.value,type:"text",class:e.normalizeClass(["vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",W.value?"!pr-14":"!pr-8"]),onFocus:dn},null,42,Dx)),[[e.vModelText,d.value,void 0,{trim:!0}]]),e.createElementVNode("div",zx,[W.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:b},[...Y[4]||(Y[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})],-1)])])):e.createCommentVNode("",!0),Y[5]||(Y[5]=e.createElementVNode("button",{type:"submit",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Пошук"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-4.35-4.35m0 0A7.5 7.5 0 1 0 5 5a7.5 7.5 0 0 0 11.65 11.65Z"})])],-1))]),B.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:w,class:"vs-select__options mt-1 bg-white border border-gray-300 rounded-lg shadow-lg text-sm text-gray-900 z-50",style:e.normalizeStyle(te)},[e.createElementVNode("div",Ix,[e.createElementVNode("span",jx,e.toDisplayString(Q.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:Y[2]||(Y[2]=q=>N.value=!1)}," ✕ ")]),e.createElementVNode("div",Px,[K.value.length?(e.openBlock(),e.createElementBlock("ul",Rx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(K.value,q=>(e.openBlock(),e.createElementBlock("li",{key:q.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:se=>ut(q)},e.toDisplayString(q.title),9,Ox))),128))])):(e.openBlock(),e.createElementBlock("div",Ux,e.toDisplayString(H.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-ba50488b"]]),Zx="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Gx="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Kx=he(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Pe(),s=e.ref(null),a=e.ref(null),i=e.ref(null),g=e.ref(null);let m=null;function x(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function u(N){if(Array.from(document.styleSheets).some(M=>{var D;return(D=M==null?void 0:M.href)==null?void 0:D.includes(N)}))return;const B=document.createElement("link");B.rel="stylesheet",B.href=N,document.head.appendChild(B)}function h(N){return new Promise((E,B)=>{const M=Array.from(document.scripts).find(W=>W.src===N);if(M){if(M._loaded)return E();M.addEventListener("load",()=>E()),M.addEventListener("error",()=>B(new Error(`Failed ${N}`)));return}const D=document.createElement("script");D.src=N,D.async=!0,D.onload=()=>{D._loaded=!0,E()},D.onerror=()=>B(new Error(`Failed ${N}`)),document.head.appendChild(D)})}function c(){var E,B,M;const N=window;return N.MapboxExportControl||((E=N.mapboxgl)==null?void 0:E.MapboxExportControl)||((B=N.mapboxglExport)==null?void 0:B.MapboxExportControl)||((M=N.mapboxglExport)==null?void 0:M.default)||null}function d(){const N=document.createElementNS("http://www.w3.org/2000/svg","svg");return N.setAttribute("xmlns","http://www.w3.org/2000/svg"),N.setAttribute("viewBox","0 0 24 24"),N.setAttribute("width","18"),N.setAttribute("height","18"),N.setAttribute("fill","none"),N.setAttribute("stroke","currentColor"),N.setAttribute("stroke-width","2"),N.setAttribute("stroke-linecap","round"),N.setAttribute("stroke-linejoin","round"),N.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((B,M)=>{const D=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(B).forEach(([W,K])=>{D.setAttribute(W,K)}),N.appendChild(D)}),N}function y(){const N=document.createElement("button");N.id="print-btn",N.type="button",N.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),N.setAttribute("aria-label","Друк карти");const E=d(),B=document.createElement("span");return B.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),B.textContent="Друк карти",B.setAttribute("aria-hidden","true"),N.appendChild(E),N.appendChild(B),N.addEventListener("click",M=>{M.stopPropagation(),p()}),g.value=N,N}function p(){if(!i.value)return;i.value.style.display==="block"?k():f()}function f(){var N,E,B;i.value&&(i.value.style.display="block",(N=g.value)==null||N.classList.add("scale-105","shadow-xl"),(E=a.value)==null||E.toggleCrosshair(!0),(B=a.value)==null||B.togglePrintableArea(!0),document.addEventListener("click",C))}function k(){var N,E,B;i.value&&(i.value.style.display="none",(N=g.value)==null||N.classList.remove("scale-105","shadow-xl"),(E=a.value)==null||E.toggleCrosshair(!1),(B=a.value)==null||B.togglePrintableArea(!1),document.removeEventListener("click",C))}function C(N){const E=s.value;E&&(N.target&&E.contains(N.target)||k())}function $(N){const E={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};N.querySelectorAll("label, option").forEach(M=>{var W;const D=(W=M.textContent)==null?void 0:W.trim();D&&E[D]&&(M.textContent=E[D])});const B=N.querySelector("button");B&&(B.textContent="Друкувати")}function w(N){const E=N.querySelector(".mapboxgl-export-list");if(!E||!s.value)return;i.value=E;const B=N.querySelector("button");if(B&&(B.style.display="none"),N.style.display="none",!g.value){const D=y();s.value.appendChild(D)}E.style.display="none";const M="_printControlBound";if(!E[M]){const D=W=>W.stopPropagation();E.addEventListener("click",D),E.addEventListener("mousedown",D),E[M]=!0}s.value.appendChild(E),$(E)}return e.onMounted(async()=>{await(o==null?void 0:o());const N=n.value;if(!N)return;u(Zx),x();try{await h(Gx)}catch(M){console.warn("[MapPrintControl] load error",M);return}const E=c();if(!E)return;const B=new E({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(a.value=B,typeof B.onAdd=="function"){const M=B.onAdd.bind(B);B.onAdd=D=>{const W=M(D);return setTimeout(()=>W&&w(W),50),W}}r?r(B,"top-right"):N.addControl(B,"top-right"),m=M=>{M.key==="Escape"&&k()},document.addEventListener("keyup",m)}),e.onBeforeUnmount(()=>{k(),m&&(document.removeEventListener("keyup",m),m=null);const N=n.value;if(a.value)try{l?l(a.value):N==null||N.removeControl(a.value)}catch{}a.value=null}),(N,E)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),Xx={class:"cursor-coordinates"},Qx={class:"cursor-coordinates__text"},Jx=he(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Xx,[e.createElementVNode("span",Qx,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),e1={class:"minimap__wrapper"},Fn="minimap-viewport",t1="minimap-viewport-layer",n1=he(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var C,$,w,N;const n=t,o=(($=(C=e.getCurrentInstance())==null?void 0:C.appContext.config.globalProperties)==null?void 0:$.$settings)||null,r=St((w=o==null?void 0:o.map)==null?void 0:w.center)||[30,50],l=e.ref(null),s=e.shallowRef(null),a=(N=n.options)==null?void 0:N.active,i=e.ref(a===void 0?!1:!!a);function g(E,B){return typeof E=="number"&&Number.isFinite(E)?E:B}const m=e.computed(()=>{var W,K;const E=(W=n.options)==null?void 0:W.width,B=(K=n.options)==null?void 0:K.height,M=g(n.width??E,210),D=g(n.height??B,150);return{width:`${M}px`,height:`${D}px`}});function x(){var B,M;const E=(M=(B=n.mapContext)==null?void 0:B.map)==null?void 0:M.value;if(!E||typeof E.getStyle!="function")return null;try{const D=E.getStyle();return D?JSON.parse(JSON.stringify(D)):null}catch{return null}}let u=null;function h(){var W;if(typeof window>"u"||s.value||!l.value)return;const E=x(),B=r,M={container:l.value,style:E??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:B,zoom:((W=n.options)==null?void 0:W.zoom)??3,interactive:!1,attributionControl:!1},D={...M,...n.options??{}};D.container=M.container,s.value=new maplibregl.Map(D),s.value.on("load",()=>{d(),p()})}function c(){if(!s.value)return;const E=x();E&&(s.value.once("styledata",()=>{d(),p()}),s.value.setStyle(E))}function d(){if(s.value){if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{d(),p()});return}s.value.getSource(Fn)||(s.value.addSource(Fn,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),s.value.addLayer({id:t1,type:"fill",source:Fn,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function y(){i.value=!i.value,i.value&&e.nextTick(()=>{var E;return(E=s.value)==null?void 0:E.resize()})}function p(){var Q,H;const E=(H=(Q=n.mapContext)==null?void 0:Q.map)==null?void 0:H.value;if(!s.value||!E||!E.getBounds)return;if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{p()});return}const B=E.getBounds();if(!B)return;const M=B.getNorthEast(),D=B.getSouthWest();if(!M||!D)return;const W=[[D.lng,M.lat],[M.lng,M.lat],[M.lng,D.lat],[D.lng,D.lat],[D.lng,M.lat]],K=s.value.getSource(Fn);if(!K){d();return}K.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[W]},properties:{}})}function f(){var M;const E=n.mapContext,B=(M=E==null?void 0:E.map)==null?void 0:M.value;!(E!=null&&E.on)||!B||(u==null||u(),u=E.on("move",p),p())}async function k(){const E=n.mapContext;if(E){if(typeof E.ready=="function")try{await E.ready()}catch{return}f()}}return e.onMounted(()=>{h(),k()}),e.watch(()=>n.mapContext,()=>{k(),p()}),e.watch(()=>{var E,B;return(B=(E=n.mapContext)==null?void 0:E.map)==null?void 0:B.value},()=>{s.value&&(c(),k())}),e.watch(m,()=>{s.value&&e.nextTick(()=>{var E;return(E=s.value)==null?void 0:E.resize()})}),e.watch(()=>n.options,()=>{var B;u==null||u(),u=null,s.value&&(s.value.remove(),s.value=null);const E=(B=n.options)==null?void 0:B.active;typeof E=="boolean"&&(i.value=E),e.nextTick(()=>{h(),k()})},{deep:!0}),e.onBeforeUnmount(()=>{u==null||u(),u=null,s.value&&(s.value.remove(),s.value=null)}),(E,B)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":i.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:y},[e.createVNode(e.unref(zl))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",e1,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(m.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,i.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),o1={class:"pt-1 border-t border-gray-100"},r1={class:"space-y-1"},l1=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),s=(g,m,x)=>Math.min(Math.max(g,m),x),a=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const g=s(r.value,-90,90),m=s(l.value,-180,180);o("submit",{lat:g,lng:m}),r.value=null,l.value=null},i=()=>{r.value=null,l.value=null,o("cancel")};return(g,m)=>(e.openBlock(),e.createElementBlock("div",o1,[m[2]||(m[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",r1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=x=>r.value=x),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта (50.4501)"},null,512),[[e.vModelText,r.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[1]||(m[1]=x=>l.value=x),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick:a}," Додати "),e.createElementVNode("button",{class:"px-2 py-1 bg-gray-200 hover:bg-gray-300 text-gray-700 text-xs font-medium rounded transition-colors",type:"button",onClick:i}," Скасувати ")])])]))}}),a1=e.defineComponent({__name:"BtnAdd",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(wn),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),s1=e.defineComponent({__name:"BtnClear",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"w-full px-2 py-1.5 bg-rose-500 hover:bg-rose-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(On),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),i1=e.defineComponent({__name:"BtnComplete",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(Lo),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),c1=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function At(t){return c1.format(t)}function Cl(t){return t>=1e3?`${At(t/1e3)} км`:`${At(t)} м`}const d1={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},u1={key:0,class:"flex-1 flex gap-1"},p1={key:1,class:"flex-1 font-mono text-gray-700"},m1=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),s=e.ref(!1),a=e.ref(o.coords.lat),i=e.ref(o.coords.lng);e.watch(()=>o.coords,h=>{a.value=h.lat,i.value=h.lng},{deep:!0,immediate:!0});const g=(h,c,d)=>Math.min(Math.max(h,c),d),m=()=>{s.value=!0},x=()=>{if(!Number.isFinite(a.value)||!Number.isFinite(i.value))return;const h=g(a.value,-90,90),c=g(i.value,-180,180);r("update",{id:o.id,coords:{lat:h,lng:c}}),s.value=!1},u=()=>{r("delete",o.id)};return(h,c)=>(e.openBlock(),e.createElementBlock("div",d1,[e.createVNode(e.unref(bn),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),s.value?(e.openBlock(),e.createElementBlock("div",u1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=d=>a.value=d),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,a.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[1]||(c[1]=d=>i.value=d),type:"number",step:"0.0001",min:"-180",max:"180",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота"},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.createElementVNode("button",{class:"px-1.5 py-0.5 bg-emerald-500 text-white rounded hover:bg-emerald-600 text-xs",type:"button",onClick:x}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",p1,e.toDisplayString(l.value),1)),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"text-blue-500 hover:text-blue-600 px-0.5",type:"button",onClick:m}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:u}," ✕ ")]))}}),f1={class:"ruler-control px-3 py-2.5 space-y-2"},g1={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},y1={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Сумарна довжина всіх відрізків","aria-hidden":"true"},h1={class:"text-sm font-semibold text-slate-700"},x1={class:"ruler-row"},b1={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},k1={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Площа замкнутого контуру","aria-hidden":"true"},w1={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},_1=["onClick"],E1={class:"flex items-center gap-2 mt-0.5 pl-7"},N1={key:0,class:"text-base font-semibold text-green-600"},C1={key:1,class:"text-xs text-gray-400"},V1={class:"ruler-row flex items-center gap-2 cursor-pointer"},B1={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Список точок","aria-hidden":"true"},$1={class:"text-xs font-medium text-gray-600 flex-1"},v1={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},S1=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],s=()=>{o.value=!o.value},a=(d,y)=>{const p=M=>M*Math.PI/180,f=p(y.lat-d.lat),k=p(y.lng-d.lng),C=p(d.lat),$=p(y.lat),w=Math.sin(f/2),N=Math.sin(k/2);return 6371e3*(2*Math.asin(Math.sqrt(w*w+Math.cos(C)*Math.cos($)*N*N)))},i=e.computed(()=>{if(n.points.length<2)return 0;let d=0;for(let y=1;y<n.points.length;y+=1)d+=a(n.points[y-1].coords,n.points[y].coords);return n.isShapeClosed&&n.points.length>=2&&(d+=a(n.points[n.points.length-1].coords,n.points[0].coords)),d}),g=e.computed(()=>i.value>=1e3?`${At(i.value/1e3)} км`:`${At(i.value)} м`);function m(d){if(d.length<3)return 0;const y=d[0].lat,p=d[0].lng,f=(C,$)=>{const w=(C-y)*110574;return{x:($-p)*111320*Math.cos(y*Math.PI/180),y:w}};let k=0;for(let C=0;C<d.length;C++){const $=(C+1)%d.length,w=f(d[C].lat,d[C].lng),N=f(d[$].lat,d[$].lng);k+=w.x*N.y-w.y*N.x}return Math.abs(k)*.5}const x=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const d=n.points.map(y=>y.coords);return m(d)}),u=e.computed(()=>x.value>0),h=e.computed(()=>{const d=x.value;if(d===0)return"—";if(r.value==="km2"){const p=d/1e6;return`${At(p)} км²`}if(r.value==="ha"){const p=d/1e4;return`${At(p)} га`}const y=d>=1?Math.round(d):d;return`${At(y)} м²`}),c=e.computed(()=>{const d=n.points.length;return d===1?"1 точка":d>=2&&d<=4?`${d} точки`:`${d} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(d,y)=>(e.openBlock(),e.createElementBlock("div",f1,[e.createElementVNode("button",g1,[e.createElementVNode("span",y1,[e.createVNode(e.unref(xn),{size:12,"stroke-width":2.5})]),y[1]||(y[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",h1,e.toDisplayString(g.value),1)]),e.createElementVNode("div",x1,[e.createElementVNode("button",b1,[e.createElementVNode("span",k1,[e.createVNode(e.unref(xn),{size:12,"stroke-width":2.5})]),y[2]||(y[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",w1,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(p,f)=>e.createElementVNode("button",{key:p.id,type:"button",class:e.normalizeClass(["px-2.5 py-1 text-xs font-medium transition-colors border-r border-gray-200 last:border-r-0",f===0&&"rounded-l-md",f===l.length-1&&"rounded-r-md",r.value===p.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(k=>r.value=p.id,["stop"])},e.toDisplayString(p.label),11,_1)),64))])]),e.createElementVNode("div",E1,[u.value?(e.openBlock(),e.createElementBlock("span",N1,e.toDisplayString(h.value),1)):(e.openBlock(),e.createElementBlock("span",C1,"—"))])]),e.createElementVNode("div",V1,[e.createElementVNode("span",B1,[e.createVNode(e.unref(xn),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",$1,e.toDisplayString(c.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(s,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",v1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(p,f)=>(e.openBlock(),e.createBlock(m1,{key:p.id,id:p.id,index:f+1,coords:p.coords,onUpdate:y[0]||(y[0]=k=>d.$emit("update-point",k)),onDelete:k=>d.$emit("delete-point",p.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),L1={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},A1={class:"flex items-start gap-2"},M1=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",L1,[e.createElementVNode("div",A1,[e.createVNode(e.unref(xn),{size:16,"stroke-width":2,class:"text-blue-600 flex-shrink-0 mt-0.5"}),o[0]||(o[0]=e.createElementVNode("div",{class:"space-y-1"},[e.createElementVNode("p",{class:"text-xs font-medium text-blue-900"}," Натискайте на карту, щоб додати точки вимірювання "),e.createElementVNode("p",{class:"text-[10px] text-blue-700"},' Або скористайтесь кнопкою "Додати" внизу для введення координат вручну ')],-1))])]))}}),T1={class:"space-y-1.5"},F1={class:"space-y-1 max-h-40 overflow-y-auto"},D1={class:"text-gray-700"},z1={class:"font-semibold text-slate-800"},I1=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(s,a){const i=c=>c*Math.PI/180,g=i(a.lat-s.lat),m=i(a.lng-s.lng),x=i(s.lat),u=i(a.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(g/2)**2+Math.cos(x)*Math.cos(u)*Math.sin(m/2)**2)))}function r(s){return Cl(s)}const l=e.computed(()=>{const s=[],a=n.points;if(a.length<2)return s;for(let i=0;i<a.length;i++){const g=i===a.length-1&&n.isShapeClosed?0:i+1;if(g>=a.length)break;const m=o(a[i].coords,a[g].coords);s.push({from:i+1,to:g+1,label:r(m)})}return s});return(s,a)=>(e.openBlock(),e.createElementBlock("div",T1,[a[0]||(a[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",F1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(i,g)=>(e.openBlock(),e.createElementBlock("div",{key:g,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",D1,"Точка "+e.toDisplayString(i.from)+" → Точка "+e.toDisplayString(i.to),1),e.createElementVNode("span",z1,e.toDisplayString(i.label),1)]))),128))])]))}}),j1={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},P1={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},R1={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},O1={class:"flex items-center gap-2"},U1={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},q1={class:"flex border-b border-gray-200"},H1={key:1,class:"px-3 py-2.5"},W1={key:1,class:"text-xs text-gray-500"},Y1={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},Z1={class:"flex gap-1.5"},G1=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),s=e.computed(()=>l.value.length>0),a=e.ref(!1),i=e.ref(!1),g=e.ref("general");function m(W){g.value=W,r("tab-change",W)}e.onMounted(()=>{r("tab-change",g.value)});const x=e.computed(()=>l.value.length>=3&&!i.value);let u=1;const h=()=>l.value.map(W=>({id:W.id,coords:{...W.coords}})),c=()=>{l.value.length<3&&i.value&&(i.value=!1,r("shape-closed-change",!1)),r("points-change",h())},d=()=>{const W=u;return u+=1,W},y=W=>{l.value=[...l.value,{id:d(),coords:{lat:W.lat,lng:W.lng}}],c()},p=({id:W,coords:K})=>{const Q=l.value.findIndex(J=>J.id===W);if(Q===-1)return;const H=[...l.value];H[Q]={id:W,coords:{...K}},l.value=H,c()},f=W=>{l.value=l.value.filter(K=>K.id!==W),c()},k=()=>{l.value=[],i.value&&(i.value=!1,r("shape-closed-change",!1)),c()},C=W=>{p(W)},$=W=>{f(W)},w=()=>{a.value=!0,r("add-request")},N=W=>{y(W),a.value=!1},E=()=>{a.value=!1},B=()=>{x.value&&(i.value=!0,r("complete"),r("shape-closed-change",!0))},M=W=>{const K=(W??[]).map(Q=>({id:Q.id??d(),coords:{...Q.coords}}));l.value=K,K.length===0?u=1:u=Math.max(...K.map(Q=>Q.id))+1,c()},D=()=>{k(),a.value=!1,r("close")};return n({addPoint:y,setPoints:M,clearPoints:k}),(W,K)=>(e.openBlock(),e.createElementBlock("div",j1,[e.createElementVNode("div",P1,[e.createElementVNode("div",R1,[e.createElementVNode("div",O1,[e.createElementVNode("div",U1,[e.createVNode(e.unref(To),{size:14,"stroke-width":2,class:"text-white"})]),K[2]||(K[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Вимірювання",-1))]),e.createElementVNode("button",{class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:D},[e.createVNode(e.unref(_t),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",q1,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",g.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:K[0]||(K[0]=Q=>m("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",g.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:K[1]||(K[1]=Q=>m("topoint"))}," До точки ",2)]),g.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value?(e.openBlock(),e.createBlock(S1,{key:1,points:l.value,"is-shape-closed":i.value,onUpdatePoint:C,onDeletePoint:$},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(M1,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",H1,[s.value?(e.openBlock(),e.createBlock(I1,{key:0,points:l.value,"is-shape-closed":i.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",W1,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",Y1,[e.createElementVNode("div",Z1,[a.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(a1,{key:0,onClick:w})),x.value?(e.openBlock(),e.createBlock(i1,{key:1,onClick:B})):e.createCommentVNode("",!0)]),a.value?(e.openBlock(),e.createBlock(l1,{key:0,onSubmit:N,onCancel:E})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(s1,{key:1,onClick:k})):e.createCommentVNode("",!0)])])]))}}),st="ruler-points",yt="ruler-line",ht="ruler-polygon",xt="ruler-segments",K1=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(p,f){const k=B=>B*Math.PI/180,C=k(f.lat-p.lat),$=k(f.lng-p.lng),w=k(p.lat),N=k(f.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(C/2)**2+Math.cos(w)*Math.cos(N)*Math.sin($/2)**2)))}function o(p){return Cl(p)}const r=t,{map:l,ready:s}=Pe();function a(){return{type:"FeatureCollection",features:[]}}function i(p,f,k){const C=k??"general",$=[];let w=0;$.push(0);for(let N=1;N<p.length;N++)w+=n(p[N-1].coords,p[N].coords),$.push(w);return f&&p.length>=2&&(w+=n(p[p.length-1].coords,p[0].coords)),{type:"FeatureCollection",features:p.map((N,E)=>{const B=C==="general"?E===0?"0":o($[E]):E===0?"0":o(n(p[E-1].coords,p[E].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[N.coords.lng,N.coords.lat]},properties:{id:N.id,index:E+1,label:B}}})}}function g(p,f){if(p.length<2)return a();const k=[];for(let C=0;C<p.length;C++){const $=C===p.length-1&&f?0:C+1;if($>=p.length)break;const w=p[C].coords,N=p[$].coords,E=n(w,N);k.push({type:"Feature",geometry:{type:"LineString",coordinates:[[w.lng,w.lat],[N.lng,N.lat]]},properties:{distance:o(E)}})}return{type:"FeatureCollection",features:k}}function m(p,f){if(p.length<2)return a();const k=p.map(C=>[C.coords.lng,C.coords.lat]);return f&&k.push(k[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:k},properties:{}}]}}function x(p){if(p.length<3)return a();const f=p.map(k=>[k.coords.lng,k.coords.lat]);return f.push(f[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[f]},properties:{}}]}}let u=!1;function h(p){p.getSource(st)||(p.addSource(st,{type:"geojson",data:a()}),p.addLayer({id:`${st}-circle`,type:"circle",source:st,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),p.addLayer({id:`${st}-labels`,type:"symbol",source:st,layout:{"text-field":["get","label"],"text-size":14,"text-offset":[0,1.3]},paint:{"text-color":"#0f172a","text-halo-color":"#ffffff","text-halo-width":1}})),p.getSource(xt)||(p.addSource(xt,{type:"geojson",data:a()}),p.addLayer({id:`${xt}-labels`,type:"symbol",source:xt,layout:{"text-field":["get","distance"],"text-size":13,"symbol-placement":"line-center","text-rotation-alignment":"map","text-pitch-alignment":"map"},paint:{"text-color":"#1e293b","text-halo-color":"#ffffff","text-halo-width":1.5}})),p.getSource(yt)||(p.addSource(yt,{type:"geojson",data:a()}),p.addLayer({id:`${yt}-layer`,type:"line",source:yt,paint:{"line-color":"#3b82f6","line-width":2}})),p.getSource(ht)||(p.addSource(ht,{type:"geojson",data:a()}),p.addLayer({id:`${ht}-layer`,type:"fill",source:ht,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),u=!0}function c(p){if(p){try{p.getLayer(`${ht}-layer`)&&p.removeLayer(`${ht}-layer`),p.getSource(ht)&&p.removeSource(ht),p.getLayer(`${yt}-layer`)&&p.removeLayer(`${yt}-layer`),p.getSource(yt)&&p.removeSource(yt),p.getLayer(`${xt}-labels`)&&p.removeLayer(`${xt}-labels`),p.getSource(xt)&&p.removeSource(xt),p.getLayer(`${st}-labels`)&&p.removeLayer(`${st}-labels`),p.getLayer(`${st}-circle`)&&p.removeLayer(`${st}-circle`),p.getSource(st)&&p.removeSource(st)}catch{}u=!1}}function d(p){if(!p)return;const f=p.getSource(st),k=p.getSource(yt),C=p.getSource(ht),$=p.getSource(xt),w=r.points,N=r.labelMode??"general";f&&f.setData(i(w,r.isShapeClosed,N)),k&&k.setData(m(w,r.isShapeClosed)),C&&C.setData(x(w)),$&&$.setData(N==="topoint"?g(w,r.isShapeClosed):a())}function y(){s().then(()=>{const p=l.value;p&&(u||h(p),d(p))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>y(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{s().then(()=>c(l.value))}),(p,f)=>null}}),X1={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},Q1={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},J1={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},eb={class:"flex items-center gap-2"},tb=["disabled"],nb={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},ob={class:"text-sm font-mono text-slate-700"},rb={class:"flex items-center gap-2 shrink-0"},lb={key:0,class:"text-xs font-[100] text-gray-500"},ab=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),s=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),a=e.ref(!1);let i=null;function g(){if(o.position==null)return;const u=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(u).then(()=>{a.value=!0,i&&clearTimeout(i),i=setTimeout(()=>{a.value=!1,i=null},600)})}function m(){r("close")}function x(){o.position!=null&&r("recenter")}return(u,h)=>(e.openBlock(),e.createElementBlock("div",X1,[e.createElementVNode("div",Q1,[e.createElementVNode("div",J1,[e.createElementVNode("div",eb,[e.createElementVNode("button",{type:"button",class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center hover:bg-white/30 transition-colors disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Центрувати на моєму місці",disabled:t.position==null,onClick:x},[e.createVNode(e.unref(bn),{size:14,"stroke-width":2,class:"text-white"})],8,tb),h[0]||(h[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Ваше розташування",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:m},[e.createVNode(e.unref(_t),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",nb,[e.createElementVNode("div",null,[h[4]||(h[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",ob,[h[1]||(h[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.value)+" ",1),h[2]||(h[2]=e.createElementVNode("br",null,null,-1)),h[3]||(h[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(s.value),1)])]),e.createElementVNode("div",rb,[a.value?(e.openBlock(),e.createElementBlock("span",lb," Скопійовано! ")):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center justify-center w-9 h-9 rounded-xl border border-gray-200 text-gray-500 hover:bg-gray-50 hover:text-gray-700 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/50 focus-visible:ring-offset-1","aria-label":"Копіювати координати",onClick:g},[e.createVNode(e.unref(Ol),{size:18,"stroke-width":2})])])])])]))}}),bt="geolocation-marker",sb=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=Pe();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function a(u){return{type:"Feature",geometry:{type:"Point",coordinates:[u.lng,u.lat]},properties:{}}}function i(u){u.getSource(bt)||(u.addSource(bt,{type:"geojson",data:s()}),u.addLayer({id:`${bt}-circle`,type:"circle",source:bt,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function g(u){try{u.getLayer(`${bt}-circle`)&&u.removeLayer(`${bt}-circle`),u.getSource(bt)&&u.removeSource(bt)}catch{}l=!1}function m(u){const h=u.getSource(bt);if(h){if(n.position==null){h.setData(s());return}h.setData({type:"FeatureCollection",features:[a(n.position)]})}}function x(){r().then(()=>{const u=o.value;if(u){if(n.position==null){l&&g(u);return}l||i(u),m(u)}})}return e.watch(()=>n.position,()=>x(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>g(o.value))}),(u,h)=>null}}),ib={class:"animate-slide-up"},cb={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},db={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},ub={class:"flex items-center gap-2"},pb={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},mb={class:"px-3 py-2.5 border-b border-gray-200"},fb={class:"flex gap-1 flex-nowrap"},gb=["title","onClick"],yb={class:"px-3 py-2.5 border-b border-gray-200"},hb={class:"flex items-center gap-4"},xb={class:"flex items-center gap-2 cursor-pointer shrink-0"},bb={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},kb={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},wb={class:"flex items-center gap-1.5"},_b=he(e.defineComponent({name:"DrawingPanel",__name:"index",emits:["close","clear","download","finish-polygon","undo","update:tool","update:stroke-color","update:stroke-width"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"pen",icon:kn,title:"Олівець"},{id:"line",icon:Kl,title:"Лінія"},{id:"rect",icon:ta,title:"Прямокутник"},{id:"circle",icon:Lo,title:"Коло"},{id:"polygon",icon:Mo,title:"Полігон"},{id:"paint",icon:Xl,title:"Балончик"},{id:"eraser",icon:Wl,title:"Стирачка"}],s=e.ref("pen"),a=e.ref("#2563eb"),i=e.ref(3),g=()=>r("update:stroke-color",a.value),m=()=>r("update:stroke-width",i.value);e.watch(s,y=>r("update:tool",y)),e.watch(a,y=>r("update:stroke-color",y)),e.watch(i,y=>r("update:stroke-width",y));function x(){r("close")}function u(){r("undo")}function h(){r("finish-polygon")}function c(){r("clear")}function d(){r("download")}return n({tool:s,strokeColor:a,strokeWidth:i}),(y,p)=>(e.openBlock(),e.createElementBlock("div",ib,[e.createElementVNode("div",cb,[e.createElementVNode("div",db,[e.createElementVNode("div",ub,[e.createElementVNode("div",pb,[e.createVNode(e.unref(kn),{size:14,"stroke-width":2,class:"text-white"})]),p[2]||(p[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Малювання",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:x},[e.createVNode(e.unref(_t),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",mb,[p[3]||(p[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",fb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,f=>e.createElementVNode("button",{key:f.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",s.value===f.id?"bg-blue-50 text-blue-600 border-blue-200 ring-2 ring-blue-200":"bg-gray-50 text-gray-500 border-gray-200 hover:bg-gray-100 hover:text-gray-700 hover:border-gray-300"]),title:f.title,onClick:k=>s.value=f.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(f.icon),{size:16,"stroke-width":2}))],10,gb)),64))])]),e.createElementVNode("section",yb,[p[6]||(p[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",hb,[e.createElementVNode("label",xb,[p[4]||(p[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[0]||(p[0]=f=>a.value=f),type:"color",class:"w-9 h-9 p-0.5 border-2 border-gray-200 rounded-lg cursor-pointer bg-white [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-none [&::-webkit-color-swatch]:rounded-md",onChange:g},null,544),[[e.vModelText,a.value]])]),e.createElementVNode("label",bb,[p[5]||(p[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[1]||(p[1]=f=>i.value=f),type:"range",min:"1",max:"12",class:"drawing-panel-range w-full min-w-[100px] h-2 bg-gray-200 rounded-full appearance-none cursor-pointer",onInput:m},null,544),[[e.vModelText,i.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",kb,[e.createElementVNode("div",wb,[e.createElementVNode("button",{type:"button",class:"w-9 h-9 shrink-0 flex items-center justify-center rounded-lg bg-gray-100 text-gray-700 hover:bg-gray-200 transition-colors",title:"Відкотити дію","aria-label":"Відкотити дію",onClick:u},[e.createVNode(e.unref(oa),{size:14,"stroke-width":2})]),e.createElementVNode("button",{type:"button",class:"flex-1 flex items-center justify-center gap-1.5 px-2 py-2 text-xs font-medium rounded-lg bg-red-50 text-red-600 hover:bg-red-100 hover:text-red-700 transition-colors",onClick:c},[e.createVNode(e.unref(On),{size:14,"stroke-width":2}),p[7]||(p[7]=e.createTextVNode(" Очистити ",-1))])]),s.value==="polygon"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-blue-50 text-blue-600 hover:bg-blue-100 transition-colors",onClick:h},[e.createVNode(e.unref(Mo),{size:14,"stroke-width":2}),p[8]||(p[8]=e.createTextVNode(" Замкнути полігон ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-gradient-to-r from-blue-400 to-blue-500 text-white shadow-sm hover:brightness-105 transition-[filter]",onClick:d},[e.createVNode(e.unref(Hl),{size:14,"stroke-width":2}),p[9]||(p[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),Eb=he(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref({x:0,y:0}),a=e.ref(!1),i=t,g=e.computed(()=>Math.max(i.strokeWidth*3,12)),m=e.computed(()=>{const _=g.value*2;return{width:`${_}px`,height:`${_}px`,left:`${s.value.x}px`,top:`${s.value.y}px`,marginLeft:`-${g.value}px`,marginTop:`-${g.value}px`}}),{ready:x}=Pe(),u=e.ref(!1),h=e.ref([]),c=e.ref([]);let d=0,y=0,p=0,f=0,k=null;function C(){const _=r.value,S=l.value,z=o.value;if(!_||!z)return;const I=z.parentElement;if(!I)return;const G=I.clientWidth,te=I.clientHeight;if(G<=0||te<=0)return;const oe=window.devicePixelRatio||1;_.width=G*oe,_.height=te*oe,_.style.width=`${G}px`,_.style.height=`${te}px`;const ae=_.getContext("2d");if(ae&&ae.scale(oe,oe),S){S.width=G*oe,S.height=te*oe,S.style.width=`${G}px`,S.style.height=`${te}px`;const xe=S.getContext("2d");xe&&xe.scale(oe,oe)}}function $(_){const S=r.value;if(!S)return{x:0,y:0};const z=S.getBoundingClientRect();return{x:_.clientX-z.left,y:_.clientY-z.top}}function w(){const _=r.value;return _?_.getContext("2d"):null}function N(){const _=l.value;return _?_.getContext("2d"):null}function E(){const _=l.value;if(!_)return;const S=window.devicePixelRatio||1,z=_.getContext("2d");z&&z.clearRect(0,0,_.width/S,_.height/S)}function B(){const _=N();if(_){if(E(),_.globalCompositeOperation="source-over",_.strokeStyle=i.strokeColor,_.lineWidth=i.strokeWidth,_.lineCap="round",_.lineJoin="round",i.tool==="line")_.beginPath(),_.moveTo(d,y),_.lineTo(p,f),_.stroke();else if(i.tool==="rect"){const S=Math.min(d,p),z=Math.min(y,f),I=Math.abs(p-d),G=Math.abs(f-y);_.strokeRect(S,z,I,G)}else if(i.tool==="circle"){const S=Math.sqrt((p-d)**2+(f-y)**2);_.beginPath(),_.arc(d,y,Math.max(S,1),0,2*Math.PI),_.stroke()}else if(i.tool==="polygon"&&h.value.length>0){const S=h.value;_.beginPath(),_.moveTo(S[0].x,S[0].y);for(let z=1;z<S.length;z++)_.lineTo(S[z].x,S[z].y);_.lineTo(p,f),_.stroke()}}}function M(_){_.strokeStyle=i.strokeColor,_.lineWidth=i.strokeWidth,_.lineCap="round",_.lineJoin="round"}function D(){const _=r.value;if(!_)return;const S=_.getContext("2d");if(!S)return;const z=S.getImageData(0,0,_.width,_.height);c.value=[...c.value.slice(-19),z]}function W(_){if(!r.value)return;const{x:S,y:z}=$(_);d=S,y=z,p=S,f=z;const I=w();if(I){if(i.tool==="pen"||i.tool==="eraser"){D(),u.value=!0,i.tool==="eraser"?(I.globalCompositeOperation="destination-out",I.lineWidth=Math.max(i.strokeWidth*3,12)):(I.globalCompositeOperation="source-over",M(I)),I.beginPath(),I.moveTo(S,z);return}if(i.tool==="paint"){D(),u.value=!0,I.globalCompositeOperation="source-over",I.fillStyle=i.strokeColor,J(I,S,z);return}if(i.tool==="line"||i.tool==="rect"||i.tool==="circle"){D(),u.value=!0;return}if(i.tool==="polygon"){h.value=[...h.value,{x:S,y:z}],p=S,f=z,B();return}}}function K(_){const{x:S,y:z}=$(_);p=S,f=z,i.tool==="eraser"&&(s.value={x:_.clientX,y:_.clientY},a.value=!0);const I=w();if(I){if(i.tool==="pen"&&u.value){I.globalCompositeOperation="source-over",M(I),I.lineTo(S,z),I.stroke();return}if(i.tool==="eraser"&&u.value){I.globalCompositeOperation="destination-out",I.lineWidth=Math.max(i.strokeWidth*3,12),I.lineTo(S,z),I.stroke();return}if(i.tool==="paint"&&u.value){I.globalCompositeOperation="source-over",I.fillStyle=i.strokeColor,J(I,S,z);return}u.value&&(i.tool==="line"||i.tool==="rect"||i.tool==="circle")&&B(),i.tool==="polygon"&&h.value.length>0&&B()}}function Q(){a.value=!1}function H(){i.tool==="polygon"&&T()}function J(_,S,z){const I=Math.max(i.strokeWidth*2.5,8),G=12+Math.floor(i.strokeWidth);for(let te=0;te<G;te++){const oe=Math.random()*2*Math.PI,ae=I*Math.random(),xe=S+Math.cos(oe)*ae,we=z+Math.sin(oe)*ae,P=1+Math.random()*2;_.beginPath(),_.arc(xe,we,P,0,2*Math.PI),_.fill()}}function O(){if(!u.value)return;const _=w();if(!_){u.value=!1;return}if(i.tool==="paint"){E(),u.value=!1,_.globalCompositeOperation="source-over";return}if(i.tool==="line")_.globalCompositeOperation="source-over",M(_),_.beginPath(),_.moveTo(d,y),_.lineTo(p,f),_.stroke();else if(i.tool==="rect"){_.globalCompositeOperation="source-over",M(_);const S=Math.min(d,p),z=Math.min(y,f),I=Math.abs(p-d),G=Math.abs(f-y);_.strokeRect(S,z,I,G)}else if(i.tool==="circle"){_.globalCompositeOperation="source-over",M(_);const S=Math.sqrt((p-d)**2+(f-y)**2);_.beginPath(),_.arc(d,y,Math.max(S,1),0,2*Math.PI),_.stroke()}E(),u.value=!1,_.globalCompositeOperation="source-over"}function T(){const _=w(),S=h.value;if(!_||S.length<2){h.value=[],E();return}D(),_.globalCompositeOperation="source-over",M(_),_.beginPath(),_.moveTo(S[0].x,S[0].y);for(let z=1;z<S.length;z++)_.lineTo(S[z].x,S[z].y);_.closePath(),_.stroke(),h.value=[],E(),_.globalCompositeOperation="source-over"}function F(){const _=r.value;if(!_||c.value.length===0)return;const S=_.getContext("2d");if(!S)return;const z=c.value[c.value.length-1];c.value=c.value.slice(0,-1),S.putImageData(z,0,0)}function X(){const _=r.value;if(!_)return;const S=_.getContext("2d");if(!S)return;const z=window.devicePixelRatio||1;S.clearRect(0,0,_.width/z,_.height/z),h.value=[],c.value=[],E()}function v(){return r.value}return e.watch(()=>i.tool,(_,S)=>{S==="polygon"&&_!=="polygon"&&(h.value=[],E())}),e.onMounted(()=>{x().then(()=>{var S;C();const _=(S=o.value)==null?void 0:S.parentElement;_&&typeof ResizeObserver<"u"&&(k=new ResizeObserver(C),k.observe(_))})}),e.onBeforeUnmount(()=>{k==null||k.disconnect(),k=null}),n({clear:X,getCanvas:v,finishPolygon:T,undo:F,canUndo:()=>c.value.length>0}),(_,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:W,onMousemove:K,onMouseup:O,onDblclick:H,onMouseleave:S[0]||(S[0]=()=>{Q(),O()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:l,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(m.value)},null,4),[[e.vShow,t.tool==="eraser"&&a.value]])],34))}}),[["__scopeId","data-v-ed2688bc"]]),Nb={key:2,class:"absolute bottom-16 right-4 z-[100] pointer-events-auto"},Cb={key:3,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Vb={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},Bb=["aria-label","disabled"],$b={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},vb=["aria-label"],Sb={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Lb=["aria-label"],Ab={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Mb={class:"map-widget__overlay-grid"},Tb={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Fb={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},Db={class:"map-widget__stack"},zb={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},Ib={class:"map-widget__stack map-widget__stack--bottom"},jb={key:0,class:"map-widget__state"},Pb={key:1,class:"map-widget__state map-widget__state--error"},Dn=he(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var In,Gt,mn,fn;const n=t,o=Fe.useRoute(),r=Fe.useRouter(),l=e.ref(null),s=e.ref({}),a=e.ref(null),i=e.ref(!1),g=e.ref(null),m=e.ref(!1),x=e.ref([]),u=e.ref(null),h=e.computed(()=>u.value==="ruler"),c=e.computed(()=>u.value==="draw"),d=e.computed(()=>u.value==="geolocation"),y=e.ref("general"),p=e.ref(null),f=e.ref(null),k=e.ref(null),C=e.ref("pen"),$=e.ref("#2563eb"),w=e.ref(3),N=e.ref([]),E=e.ref(!1),B=e.ref(null),M=e.ref(!1),D=e.ref(null),W=e.computed(()=>n.id||"main"),K=e.computed(()=>{var R,ne;return{height:((R=n.height)==null?void 0:R.trim())||((ne=s.value)==null?void 0:ne.height)||"calc(100vh - 65px)"}}),Q=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.name)??null}),H=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.description)??null}),J=e.computed(()=>{var R;return xe((R=s.value)==null?void 0:R.maps)}),O=e.computed(()=>{var ne,ge;const R=((ne=s.value)==null?void 0:ne.minZoom)??((ge=s.value)==null?void 0:ge.minzoom)??null;return typeof R=="number"?R:null}),T=e.computed(()=>{var ne,ge;const R=((ne=s.value)==null?void 0:ne.maxZoom)??((ge=s.value)==null?void 0:ge.maxzoom)??null;return typeof R=="number"?R:typeof n.maxZoom=="number"?n.maxZoom:20}),F=e.ref(null),X=e.computed(()=>{if(!F.value)return null;const{lng:R,lat:ne}=F.value;return`${ne.toFixed(6)}, ${R.toFixed(6)}`}),v=e.computed(()=>{var R;return((R=l.value)==null?void 0:R.ctx)??null}),_=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.minimap)??null});function S(R){if(!R||typeof R!="object")return R;const ne=St(R.center);return ne?{...R,center:ne}:R}const z=((Gt=(In=e.getCurrentInstance())==null?void 0:In.appContext.config.globalProperties)==null?void 0:Gt.$settings)||null;function I(R){if(R==null)return null;const ne=Number(typeof R=="string"?R.trim():R);return Number.isFinite(ne)?ne:null}const G=St((mn=z==null?void 0:z.map)==null?void 0:mn.center),te=I((fn=z==null?void 0:z.map)==null?void 0:fn.zoom),oe=e.computed(()=>{const R=(z==null?void 0:z.map)||null,ne=(R==null?void 0:R.boundary)??null,ge=(R==null?void 0:R.katottg)??null;return!ne&&!ge?null:{boundary:ne,katottg:ge}});function ae(R){return typeof R=="string"&&R.trim()?R.trim().toLowerCase():"top-left"}function xe(R){return Array.isArray(R)?R:R&&typeof R=="object"?Object.values(R).filter(Boolean):[]}const we=e.computed(()=>{var R;return xe((R=s.value)==null?void 0:R.widgets)}),P=e.computed(()=>we.value.some(R=>(R==null?void 0:R.type)==="basemaps")),ee=["left","right"],b=e.computed(()=>{const R={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},ne={"top-left":{side:"left",align:"top"},"bottom-left":{side:"left",align:"bottom"},"top-right":{side:"right",align:"top"},"bottom-right":{side:"right",align:"bottom"}};return we.value.forEach(ge=>{const Ce=ae(ge.position),ue=ne[Ce]??{side:"left",align:"top"};R[ue.side][ue.align].push(ge)}),R});function A(R){return Array.isArray(R)?R[0]??null:typeof R=="string"?R:null}async function Z(){var ne;await e.nextTick();const R=(ne=l.value)==null?void 0:ne.ctx;return R?(R.ready&&await R.ready(),R):null}function le(){var R,ne,ge;return((ge=(ne=(R=l.value)==null?void 0:R.ctx)==null?void 0:ne.map)==null?void 0:ge.value)??null}function fe(){const R=le();if(!R)return null;const ne=R.getCenter();return{z:R.getZoom().toFixed(2),x:ne.lng.toFixed(5),y:ne.lat.toFixed(5)}}async function ie(){var ge;const R=await Z(),ne=(ge=R==null?void 0:R.map)==null?void 0:ge.value;ne&&(typeof O.value=="number"&&ne.setMinZoom(O.value),typeof T.value=="number"&&ne.setMaxZoom(T.value))}async function Be(){var ue;if(a.value)return;const R=await Z(),ne=(ue=R==null?void 0:R.map)==null?void 0:ue.value;if(!ne)return;const ge=ne.getCenter(),Ce=ne.getZoom();a.value={center:[ge.lng,ge.lat],zoom:Ce}}function $e(){if(Mt.value)return;const R=fe();if(!R)return;const ne=A(o.query.x),ge=A(o.query.y),Ce=A(o.query.z);ne===R.x&&ge===R.y&&Ce===R.z||(Tt.value=R,r.replace({query:{...o.query,...R}}).catch(()=>{}))}function Re(R,ne,ge=1e-6){return Math.abs(R-ne)<=ge}async function De(){var Ae;if(Zt())return;const R=await Z(),ne=(Ae=R==null?void 0:R.map)==null?void 0:Ae.value;if(!R||!ne)return;const ge=parseFloat(A(o.query.x)??""),Ce=parseFloat(A(o.query.y)??""),ue=parseFloat(A(o.query.z)??""),Le=!Number.isNaN(ge),Ve=!Number.isNaN(Ce),ce=!Number.isNaN(ue);let ve=!1;Mt.value=!0;try{if(Le&&Ve){const ze=ne.getCenter();(!Re(ze.lng,ge)||!Re(ze.lat,Ce))&&(ne.setCenter([ge,Ce]),ve=!0)}if(ce){const ze=ne.getZoom();Re(ze,ue,.001)||(ne.setZoom(ue),ve=!0)}(!Le||!Ve||!ce||ve)&&$e()}finally{Mt.value=!1}}let Ue=null,tt=null;const Mt=e.ref(!1),Tt=e.ref(null);function Zt(){const R=Tt.value;if(!R)return!1;const ne=A(o.query.x),ge=A(o.query.y),Ce=A(o.query.z);return ne===R.x&&ge===R.y&&Ce===R.z?(Tt.value=null,!0):!1}function Ft(R){const ne=R==null?void 0:R.lngLat;ne&&(F.value={lng:ne.lng,lat:ne.lat})}let ut=null;function dn(R){var ge;if(!x.value.includes("ruler")||!h.value)return;const ne=R==null?void 0:R.lngLat;ne&&((ge=p.value)==null||ge.addPoint({lat:ne.lat,lng:ne.lng}))}function un(){var R;u.value==="ruler"?(N.value=[],E.value=!1,(R=p.value)==null||R.clearPoints(),u.value=null):(B.value=null,D.value=null,u.value="ruler")}function Bt(){u.value=null,N.value=[],E.value=!1}function pn(){u.value==="draw"?u.value=null:(B.value=null,D.value=null,u.value="draw")}function j(){if(u.value==="geolocation"&&B.value!=null){q();return}if(D.value=null,M.value=!0,!navigator.geolocation){D.value="Геолокація не підтримується браузером",M.value=!1;return}navigator.geolocation.getCurrentPosition(R=>{const ne=R.coords.latitude,ge=R.coords.longitude;B.value={lat:ne,lng:ge},D.value=null,M.value=!1,u.value="geolocation",Z().then(Ce=>{Ce!=null&&Ce.flyTo&&Ce.flyTo({center:[ge,ne],zoom:15})})},()=>{D.value="Не вдалося визначити місце розташування",M.value=!1},{enableHighAccuracy:!0})}function Y(){u.value=null,B.value=null,D.value=null}function q(){const R=B.value;R!=null&&Z().then(ne=>{ne!=null&&ne.flyTo&&ne.flyTo({center:[R.lng,R.lat],zoom:15})})}function se(R){N.value=R}function pe(){var R;(R=k.value)==null||R.clear()}function be(){var R;(R=k.value)==null||R.finishPolygon()}function Ne(){var R;(R=k.value)==null||R.undo()}function _e(){var ue,Le,Ve,ce;const R=(Ve=(Le=(ue=l.value)==null?void 0:ue.ctx)==null?void 0:Le.map)==null?void 0:Ve.value,ne=(ce=k.value)==null?void 0:ce.getCanvas();if(!R||!ne)return;const ge=(ve,Ae)=>{const ze=document.createElement("a");ze.download=Ae,ze.rel="noopener",typeof ve=="string"?ze.href=ve:(ze.href=URL.createObjectURL(ve),setTimeout(()=>URL.revokeObjectURL(ze.href),100)),document.body.appendChild(ze),ze.click(),document.body.removeChild(ze)},Ce=()=>{const ve=R.getCanvas();if(!ve)return;const Ae=ve.width,ze=ve.height;if(Ae<=0||ze<=0)return;const rt=document.createElement("canvas");rt.width=Ae,rt.height=ze;const pt=rt.getContext("2d");if(!pt)return;pt.drawImage(ve,0,0),pt.drawImage(ne,0,0,ne.width,ne.height,0,0,Ae,ze);const je=`map-drawing-${Date.now()}.png`;rt.toBlob(ft=>{if(ft){ge(ft,je);return}try{const Xe=rt.toDataURL("image/png");ge(Xe,je)}catch{const Xe=document.createElement("canvas");Xe.width=ne.width,Xe.height=ne.height;const wt=Xe.getContext("2d");wt&&(wt.drawImage(ne,0,0),Xe.toBlob(jn=>jn&&ge(jn,je),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Ce))}async function it(){const R=await Z();R!=null&&R.on&&(Ue==null||Ue(),Ue=R.on("moveend",$e),tt==null||tt(),tt=R.on("mousemove",Ft),ut==null||ut(),ut=R.on("click",dn))}e.onUnmounted(()=>{Ue==null||Ue(),Ue=null,tt==null||tt(),tt=null,ut==null||ut(),ut=null});async function ot(R=!1){var ge,Ce;m.value=!1,g.value=null,F.value=null;const ne=R||!n.data;i.value=ne;try{const ue=ne?await(async()=>{const Ae=await fetch(`/api/gis-map/${encodeURIComponent(W.value)}`);if(!Ae.ok)throw new Error(`Помилка завантаження (${Ae.status})`);return Ae.json()})():n.data;ne||(m.value=!0);const Le=St(ue.center)??G,Ve=xe(ue.layers).map(Ae=>S(Ae)),ce=I(ue.zoom)??te;s.value={...ue,center:Le??null,zoom:ce??ue.zoom??null,layers:Ve,widgets:ue.widgets},x.value=ue.tools||["home","print","ruler","draw"];const ve=await Z();ve&&(Le&&((ge=ve.setCenter)==null||ge.call(ve,Le)),ce!=null&&((Ce=ve.setZoom)==null||Ce.call(ve,ce)),a.value||await Be()),await ie(),await De(),await it(),m.value=!0}catch(ue){g.value=(ue==null?void 0:ue.message)||"Не вдалося завантажити карту"}finally{ne&&(i.value=!1)}}const Ze=e.computed(()=>{var Ce;const R=new Map;return xe((Ce=s.value)==null?void 0:Ce.layers).forEach(ue=>{if(!(ue!=null&&ue.id))return;const Le=S(ue)||ue;R.set(ue.id,{...Le})}),we.value.filter(ue=>(ue==null?void 0:ue.type)==="layers").flatMap(ue=>{var Le;return xe((Le=ue==null?void 0:ue.config)==null?void 0:Le.layers)}).forEach(ue=>{if(!(ue!=null&&ue.id))return;const Le=R.get(ue.id)||{},Ve=S(ue)||ue;R.set(ue.id,{...Le,...Ve,actions:ue.actions||Le.actions||null,name:Le.name||ue.name||ue.title||Le.title||ue.id,title:Le.title||ue.title||Le.name||null,visible:Le.visible??ue.visible??!0})}),Array.from(R.values())}),ct=e.ref([]);function kt(R){ct.value.includes(R)?ct.value=ct.value.filter(ne=>ne!==R):ct.value.push(R)}const zn=e.computed(()=>R=>ct.value.includes(R.id));return e.watch([O,T],()=>{ie()},{immediate:!0}),e.watch(W,()=>{ot(!0)}),e.watch(()=>n.data,R=>{R&&ot()}),e.onMounted(()=>{ot()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{De()}),(R,ne)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(K.value)},[ne[8]||(ne[8]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode($n,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var ge,Ce,ue,Le;return[P.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Yt,{key:0,class:"hidden"})),oe.value?(e.openBlock(),e.createBlock(dl,{key:1,"layer-id":"app-boundary",boundary:oe.value.boundary,katottg:oe.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),v.value&&x.value.includes("draw")&&c.value?(e.openBlock(),e.createElementBlock("div",Nb,[e.createVNode(_b,{ref_key:"drawingPanelRef",ref:f,onClose:ne[0]||(ne[0]=Ve=>u.value=null),onClear:pe,onDownload:_e,onFinishPolygon:be,onUndo:Ne,"onUpdate:tool":ne[1]||(ne[1]=Ve=>C.value=Ve),"onUpdate:strokeColor":ne[2]||(ne[2]=Ve=>$.value=Ve),"onUpdate:strokeWidth":ne[3]||(ne[3]=Ve=>w.value=Ve)},null,512)])):e.createCommentVNode("",!0),v.value?(e.openBlock(),e.createElementBlock("div",Cb,[X.value?(e.openBlock(),e.createBlock(Jx,{key:0,coordinates:X.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(n1,{"map-context":v.value,options:_.value},null,8,["map-context","options"]),x.value.includes("ruler")&&h.value?(e.openBlock(),e.createBlock(G1,{key:1,ref_key:"rulerPanelRef",ref:p,onClose:Bt,onTabChange:ne[4]||(ne[4]=Ve=>y.value=Ve),onPointsChange:se,onShapeClosedChange:ne[5]||(ne[5]=Ve=>E.value=Ve)},null,512)):e.createCommentVNode("",!0),x.value.includes("geolocation")&&d.value?(e.openBlock(),e.createBlock(ab,{key:2,position:B.value,onClose:Y,onRecenter:q},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Vb,[x.value.includes("home")?(e.openBlock(),e.createBlock(Lt,{key:0,center:((ge=s.value)==null?void 0:ge.center)||((Ce=a.value)==null?void 0:Ce.center)||null,zoom:((ue=s.value)==null?void 0:ue.zoom)??((Le=a.value)==null?void 0:Le.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),x.value.includes("print")?(e.openBlock(),e.createBlock(Kx,{key:1})):e.createCommentVNode("",!0),x.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",d.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":d.value?"Вимкнути геолокацію":"Ваше розташування",disabled:M.value,onClick:e.withModifiers(j,["stop"])},[e.createElementVNode("span",$b,e.toDisplayString(d.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(bn),{class:"w-4 h-4"})],10,Bb)):e.createCommentVNode("",!0),x.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",h.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":h.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(un,["stop"])},[e.createElementVNode("span",Sb,e.toDisplayString(h.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(To),{class:"w-4 h-4"})],10,vb)):e.createCommentVNode("",!0),x.value.includes("draw")?(e.openBlock(),e.createElementBlock("button",{key:4,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",c.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":c.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(pn,["stop"])},[e.createElementVNode("span",Ab,e.toDisplayString(c.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(kn),{class:"w-4 h-4"})],10,Lb)):e.createCommentVNode("",!0)]),m.value&&h.value&&N.value.length>0?(e.openBlock(),e.createBlock(K1,{key:4,points:N.value,"is-shape-closed":E.value,"label-mode":y.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),m.value&&B.value!=null?(e.openBlock(),e.createBlock(sb,{key:5,position:B.value},null,8,["position"])):e.createCommentVNode("",!0),m.value&&c.value?(e.openBlock(),e.createBlock(Eb,{key:6,ref_key:"drawingCanvasRef",ref:k,tool:C.value,"stroke-color":$.value,"stroke-width":w.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",Mb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(ee,Ve=>e.createElementVNode("div",{key:Ve,class:e.normalizeClass(["map-widget__side",`map-widget__side--${Ve}`])},[Ve==="left"?(e.openBlock(),e.createElementBlock("div",Tb)):e.createCommentVNode("",!0),b.value[Ve].top.length?(e.openBlock(),e.createElementBlock("div",Fb,[e.createElementVNode("div",Db,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value[Ve].top,ce=>{var ve,Ae,ze,rt,pt,je,ft,Xe;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ce.id||ce.type,class:"map-overlay__item"},[ce.type==="info"?(e.openBlock(),e.createBlock(hl,{key:0,title:((ve=ce.config)==null?void 0:ve.title)||ce.title||null,content:((Ae=ce.config)==null?void 0:Ae.content)||"",links:J.value,"map-name":Q.value,"map-description":H.value},null,8,["title","content","links","map-name","map-description"])):ce.type==="catalog"?(e.openBlock(),e.createBlock(wl,{key:1,api:((ze=ce.config)==null?void 0:ze.api)||null},null,8,["api"])):ce.type==="layers"?(e.openBlock(),e.createBlock(kl,{key:2,layers:Ze.value,onAction:ne[6]||(ne[6]=wt=>kt(wt.layerId)),config:ce.config},null,8,["layers","config"])):ce.type==="basemaps"?(e.openBlock(),e.createBlock(Yt,{key:3,layers:((rt=ce.config)==null?void 0:rt.layers)||null,"default-layer":((pt=ce.config)==null?void 0:pt.default)||null,title:ce.title||((je=ce.config)==null?void 0:je.title)||null},null,8,["layers","default-layer","title"])):ce.type==="legend"?(e.openBlock(),e.createBlock(go,{key:4,items:((ft=ce.config)==null?void 0:ft.items)||[]},null,8,["items"])):ce.type==="filters"&&zn.value(ce)?(e.openBlock(),e.createBlock(fo,{key:5,"layer-id":(Xe=ce.config)==null?void 0:Xe.layer,onClose:kt},null,8,["layer-id"])):ce.type==="dataset"||ce.type==="attribute"?(e.openBlock(),e.createBlock(_l,{key:6,config:ce.config},null,8,["config"])):ce.type==="search"?(e.openBlock(),e.createBlock(Nl,{key:7,config:ce.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ce.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),b.value[Ve].bottom.length?(e.openBlock(),e.createElementBlock("div",zb,[e.createElementVNode("div",Ib,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.value[Ve].bottom,ce=>{var ve,Ae,ze,rt,pt,je,ft,Xe;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ce.id||ce.type,class:"map-overlay__item"},[ce.type==="info"?(e.openBlock(),e.createBlock(hl,{key:0,title:((ve=ce.config)==null?void 0:ve.title)||ce.title||null,content:((Ae=ce.config)==null?void 0:Ae.content)||"",links:J.value,"map-name":Q.value,"map-description":H.value},null,8,["title","content","links","map-name","map-description"])):ce.type==="catalog"?(e.openBlock(),e.createBlock(wl,{key:1,api:((ze=ce.config)==null?void 0:ze.api)||null},null,8,["api"])):ce.type==="layers"?(e.openBlock(),e.createBlock(kl,{key:2,layers:Ze.value,onAction:ne[7]||(ne[7]=wt=>kt(wt.layerId)),config:ce.config},null,8,["layers","config"])):ce.type==="basemaps"?(e.openBlock(),e.createBlock(Yt,{key:3,layers:((rt=ce.config)==null?void 0:rt.layers)||null,"default-layer":((pt=ce.config)==null?void 0:pt.default)||null,title:ce.title||((je=ce.config)==null?void 0:je.title)||null},null,8,["layers","default-layer","title"])):ce.type==="legend"?(e.openBlock(),e.createBlock(go,{key:4,items:((ft=ce.config)==null?void 0:ft.items)||[]},null,8,["items"])):ce.type==="filters"&&zn.value(ce)?(e.openBlock(),e.createBlock(fo,{key:5,"layer-id":(Xe=ce.config)==null?void 0:Xe.layer,onClose:kt},null,8,["layer-id"])):ce.type==="dataset"||ce.type==="attribute"?(e.openBlock(),e.createBlock(_l,{key:6,config:ce.config},null,8,["config"])):ce.type==="search"?(e.openBlock(),e.createBlock(Nl,{key:7,config:ce.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ce.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(sl),e.createVNode(bo,{"map-id":W.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),i.value?(e.openBlock(),e.createElementBlock("div",jb,"Завантаження карти…")):g.value?(e.openBlock(),e.createElementBlock("div",Pb,e.toDisplayString(g.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-524cd6dd"]]),Rb={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Ob={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},Ub=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",Rb,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Ob,[e.createVNode(Dn,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),qb={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},Hb={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Wb={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},Yb={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},Zb={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Gb=["disabled"],Kb=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(""),s=e.ref(null);e.watch(()=>o.modelValue,g=>{if(g){try{l.value=JSON.stringify(g,null,2)}catch{l.value="{}"}s.value=null}},{immediate:!0}),e.watch(l,g=>{if(!g.trim()){s.value=null;return}try{JSON.parse(g),s.value=null}catch(m){s.value=m.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:g}=window;if(g&&g.editor){const m=g.editor.getEditors();m.length>0&&m[m.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function a(){r("update:modelValue",null),l.value="",s.value=null}function i(){if(!s.value)try{const g=JSON.parse(l.value);r("save",g),a()}catch(g){console.error("Failed to parse JSON",g)}}return(g,m)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(a,["self"])},[e.createElementVNode("div",qb,[e.createElementVNode("div",Hb,[m[1]||(m[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:a,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(_t),{size:20})])]),s.value?(e.openBlock(),e.createElementBlock("div",Wb," Помилка JSON: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Yb,[e.createVNode(rn,{modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=x=>l.value=x),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",Zb,[e.createElementVNode("button",{onClick:a,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:i,disabled:!!s.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,Gb)])])])):e.createCommentVNode("",!0)}}),Xb={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},Qb={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},Jb={class:"w-full text-sm"},ek={class:"divide-y divide-gray-200"},tk={class:"px-4 py-3"},nk=["onUpdate:modelValue","onChange"],ok=["value"],rk={class:"px-4 py-3"},lk=["onUpdate:modelValue","onChange"],ak=["value"],sk={class:"px-4 py-3 text-center"},ik=["checked","onChange"],ck={class:"px-4 py-3"},dk={key:0,class:"flex items-center gap-2"},uk=["onClick"],pk=["onClick"],mk={key:1},fk=["onClick"],gk={class:"px-4 py-3 text-right"},yk=["onClick"],hk=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=["catalog","legend","basemaps","info","layers","dataset","filters","search"],s=["top-left","top-right","bottom-left","bottom-right"],a=e.ref(null),i=e.ref(-1),g=e.computed(()=>o.modelValue||[]);function m(){const f=[...g.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",f)}function x(f){ye.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const k=g.value.filter((C,$)=>$!==f);r("update:modelValue",k)}})}function u(f,k,C){const $=[...g.value];$[f]={...$[f],[k]:C},r("update:modelValue",$)}function h(f){return!!f&&Object.keys(f).length>0}function c(f,k){i.value=f,a.value=k||{}}function d(f){c(f,{})}function y(f){ye.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{u(f,"config",void 0)}})}function p(f){i.value>-1&&u(i.value,"config",f),a.value=null,i.value=-1}return(f,k)=>{var C;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[k[1]||(k[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:m,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(C=g.value)!=null&&C.length?(e.openBlock(),e.createElementBlock("div",Qb,[e.createElementVNode("table",Jb,[k[2]||(k[2]=e.createElementVNode("thead",{class:"bg-[rgba(252,252,252,0.8)] border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",ek,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,($,w)=>(e.openBlock(),e.createElementBlock("tr",{key:w,class:"hover:bg-gray-50"},[e.createElementVNode("td",tk,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":N=>$.type=N,onChange:N=>u(w,"type",$.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,N=>e.createElementVNode("option",{key:N,value:N},e.toDisplayString(N),9,ok)),64))],40,nk),[[e.vModelSelect,$.type]])]),e.createElementVNode("td",rk,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":N=>$.position=N,onChange:N=>u(w,"position",$.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,N=>e.createElementVNode("option",{key:N,value:N},e.toDisplayString(N),9,ak)),64))],40,lk),[[e.vModelSelect,$.position]])]),e.createElementVNode("td",sk,[e.createElementVNode("input",{type:"checkbox",checked:$.visible!==!1,onChange:N=>u(w,"visible",N.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,ik)]),e.createElementVNode("td",ck,[h($.config)?(e.openBlock(),e.createElementBlock("div",dk,[e.createElementVNode("button",{onClick:N=>c(w,$.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(kn),{size:16})],8,uk),e.createElementVNode("button",{onClick:N=>y(w),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(_t),{size:16})],8,pk)])):(e.openBlock(),e.createElementBlock("div",mk,[e.createElementVNode("button",{onClick:N=>d(w),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(wn),{size:16})],8,fk)]))]),e.createElementVNode("td",gk,[e.createElementVNode("button",{onClick:N=>x(w),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(On),{size:16})],8,yk)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Xb," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Kb,{teleport:"#modal",modelValue:a.value,"onUpdate:modelValue":k[0]||(k[0]=$=>a.value=$),onSave:p},null,8,["modelValue"])])}}}),xk={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},bk={class:"mx-1"},kk={class:"text-gray-900 font-semibold"},wk=["disabled"],_k={key:0,class:"text-center py-12 mt-6 px-[24px]"},Ek={key:1,class:"px-[24px] overflow-y-auto"},Nk={class:"space-y-6"},Ck={class:"space-y-6"},Vk={class:"space-y-6"},Bk=he(e.defineComponent({__name:"MapSettings",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.computed(()=>{var E;return((E=n.resolve("/maps").meta)==null?void 0:E.title)??"Карти"}),l=e.ref(!0),s=e.ref(!1),a=e.ref([]),i=e.ref({}),g=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],m=g.map(E=>E.id),x=E=>E?Array.isArray(E)?E[0]:E:null,u=(()=>{const E=x(o.query.tab);return E&&m.includes(E)?E:"general"})(),h=e.ref(u);e.watch(()=>o.query.tab,E=>{const B=x(E);B&&m.includes(B)&&h.value!==B&&(h.value=B)}),e.watch(h,E=>{o.query.tab!==E&&n.replace({query:{...o.query,tab:E}})});const c=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),d=e.computed({get:()=>(c.value.layers||[]).map(E=>E.id||E),set:E=>{c.value.layers=E}}),y=e.computed(()=>{var B;return(Array.isArray(a.value)?a.value:((B=a.value)==null?void 0:B.data)||[]).map(M=>({id:M.id,text:M.text||M.name||M.id}))}),p=e.computed({get:()=>d.value.map(E=>{const B=y.value.find(M=>M.id===E);return B?B.text:E}),set:E=>{const B=E.map(M=>{const D=y.value.find(W=>W.text===M);return D?D.id:null}).filter(M=>M!==null);d.value=B}}),f=e.computed(()=>{const E=c.value.center;if(!Array.isArray(E)||E.length<2)return"Не задано";const[B,M]=E;return B===void 0||M===void 0||B===null||M===null||Number.isNaN(Number(B))||Number.isNaN(Number(M))?"Не задано":`Lng ${Number(B).toFixed(6)}, Lat ${Number(M).toFixed(6)}`}),k=e.computed(()=>{const E=c.value.zoom;if(E==null||E==="")return"Не задано";const B=Number(E);return Number.isNaN(B)?"Не задано":B.toFixed(2)}),C=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function $(){try{const E=await fetch("/api/suggest/layer_list");E.ok&&(a.value=await E.json())}catch(E){console.error("Failed to load available layers:",E)}}async function w(){try{const B=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();c.value={...B,keywords:B.keywords||[],center:B.center??null,widgets:Array.isArray(B.widgets)?B.widgets:[],layers:(B.layers||[]).map(M=>M.id||M)}}catch(E){console.error("Failed to load map:",E),ye.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function N(){var B,M;const E=(M=(B=i.value)==null?void 0:B.validate)==null?void 0:M.call(B);if(E){ye.notify({type:"warning",title:"Валідація",message:Object.entries(E).map(([D,W])=>`${D}: ${W}`).join(`
|
|
247
|
-
`)});return}s.value=!0;try{const D=JSON.parse(JSON.stringify(c.value));if(D.zoom=Number(D.zoom),Array.isArray(D.center)&&(D.center.every(Q=>Q==null||Q===""||Q===0)||D.center.length===0)&&(D.center=null),delete D.created_at,delete D.updated_at,delete D.created_by,delete D.updated_by,delete D.history,delete D.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(D)})).ok)throw new Error("Save failed");ye.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(D){console.error("Save error:",D),ye.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{s.value=!1}}return e.onMounted(async()=>{await $(),w()}),(E,B)=>{const M=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",xk,[e.createVNode(Vo,{variant:"form",title:c.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(M,{to:"/maps",class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1}),e.createElementVNode("span",bk,[e.createVNode(e.unref(Rn),{size:16,class:"shrink-0"})]),e.createElementVNode("span",kk,e.toDisplayString(c.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...B[7]||(B[7]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:B[0]||(B[0]=D=>e.unref(n).back()),class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:N,disabled:s.value,class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 disabled:opacity-50"},e.toDisplayString(s.value?"Збереження...":"Зберегти"),9,wk)]),_:1},8,["title"]),l.value?(e.openBlock(),e.createElementBlock("div",_k,[...B[8]||(B[8]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",Ek,[e.createVNode(Yy,{tabs:g,activeTab:h.value,"onUpdate:activeTab":B[1]||(B[1]=D=>h.value=D)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",Nk,[e.createVNode(Gy,{schema:C,loading:l.value,modelValue:c.value,"onUpdate:modelValue":B[2]||(B[2]=D=>c.value=D),form:i.value,"onUpdate:form":B[3]||(B[3]=D=>i.value=D)},null,8,["loading","modelValue","form"])],512),[[e.vShow,h.value==="general"]]),e.withDirectives(e.createElementVNode("div",Ck,[e.createVNode(Xy,{options:y.value,layerIDs:d.value,"onUpdate:layerIDs":B[4]||(B[4]=D=>d.value=D),layerNames:p.value,"onUpdate:layerNames":B[5]||(B[5]=D=>p.value=D)},null,8,["options","layerIDs","layerNames"])],512),[[e.vShow,h.value==="layers"]]),e.withDirectives(e.createVNode(hk,{modelValue:c.value.widgets,"onUpdate:modelValue":B[6]||(B[6]=D=>c.value.widgets=D)},null,8,["modelValue"]),[[e.vShow,h.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",Vk,[e.createVNode(Ub,{"center-display":f.value,"zoom-display":k.value,"layer-names":p.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,h.value==="map"]])]))])}}}),[["__scopeId","data-v-54593f35"]]),$k={class:"flex-1 overflow-y-auto p-0 overflow-x-hidden max-h-[70%] lg:max-h-[80%] xl:max-h-[83%] 2xl:max-h-[95%]"},vk={class:"pt-0 mt-0"},Sk={key:0,class:"flex items-center justify-center py-12"},Lk={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Ak={key:2,class:"text-center py-12 text-gray-500"},Mk={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},Tk=["onClick"],Fk={class:"flex items-start justify-between"},Dk={class:"flex items-start gap-3"},zk={class:"flex-1 min-w-0"},Ik={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},jk=["onClick"],Pk={class:"relative"},Rk=["onClick"],Ok={key:0,class:"absolute left-full top-1/2 -translate-y-1/2 ml-2 px-2 py-1 bg-white text-gray-600 text-xs rounded shadow-sm z-10 whitespace-nowrap animate-fade-in-out border border-gray-200/70"},Uk={class:"text-xs text-gray-600 line-clamp-2"},qk={class:"flex items-center gap-2 shrink-0"},Hk={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},Wk={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},wo=30,Yk=he(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=Fe.useRouter(),a=Fe.useRoute(),i=e.ref(Number(a.query.page)||1),g=e.ref(!1),m=e.ref(0),x=e.ref([]),u=e.computed(()=>{const E=(i.value-1)*wo,B=E+wo;return x.value.slice(E,B)}),h=e.ref(!0),c=e.ref(null),d=e.ref(null);let y=null,p=null;const f=(E="",B="")=>{const M=new URLSearchParams,D=E.trim();D&&M.set("search",D);const W=(B||"").trim();W&&M.set("type",W);const K=M.toString();return K?`/api/user-cls?${K}`:"/api/user-cls"},k=async(E="",B="")=>{try{h.value=!0,c.value=null;const M=f(E,B),D=await fetch(M);if(!D.ok)throw new Error(`HTTP error: ${D.status}`);const W=await D.json();if(x.value=W.data,!E.trim())m.value=W.data.length;else if(m.value===0){const K=await fetch(f("",B));if(K.ok){const Q=await K.json();m.value=Q.data.length}}l("update:counts",{filtered:x.value.length,total:m.value})}catch(M){c.value=M instanceof Error?M.message:"Failed to load classifiers",console.error("Error fetching classifiers:",M)}finally{h.value=!1}};e.onMounted(()=>{g.value=!0,k(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([E,B])=>{y&&clearTimeout(y),y=setTimeout(()=>{k(E,B??""),i.value=1},300)});const C=E=>{s.push({name:"classifier-detail",params:{name:E.name}})},$=()=>{k(r.search,r.type??"")},w=async E=>{try{await navigator.clipboard.writeText(E),d.value=E,p&&clearTimeout(p),p=setTimeout(()=>{d.value=null},500)}catch(B){console.error("Failed to copy text: ",B)}};n({refetch:$});const N=E=>{i.value=E,s.replace({query:{...a.query,page:String(E)}})};return(E,B)=>(e.openBlock(),e.createElementBlock("div",$k,[e.createElementVNode("div",vk,[h.value?(e.openBlock(),e.createElementBlock("div",Sk,[e.createVNode(e.unref(Ao),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):c.value?(e.openBlock(),e.createElementBlock("div",Lk,e.toDisplayString(c.value),1)):x.value.length===0?(e.openBlock(),e.createElementBlock("div",Ak," Нічого не знайдено ")):e.createCommentVNode("",!0),x.value.length>0?(e.openBlock(),e.createElementBlock("div",Mk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(M,D)=>(e.openBlock(),e.createElementBlock("div",{key:D,class:"w-full border border-gray-200 bg-white rounded-lg p-4 text-left hover:shadow-md transition-all hover:border-gray-300 cursor-pointer",onClick:W=>C(M)},[e.createElementVNode("div",Fk,[e.createElementVNode("div",Dk,[M.type==="sql"?(e.openBlock(),e.createBlock(e.unref(Ul),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(Gl),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",zk,[e.createElementVNode("div",Ik,[e.createElementVNode("h4",{onClick:e.withModifiers(W=>w(M.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(M.name),9,jk),e.createElementVNode("div",Pk,[e.createElementVNode("button",{onClick:e.withModifiers(W=>w(M.name),["stop"]),class:"pt-1 mt-0.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors"},[e.createVNode(e.unref(Rl),{width:14,height:14,"stroke-width":2})],8,Rk),d.value===M.name?(e.openBlock(),e.createElementBlock("div",Ok," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",Uk,e.toDisplayString(M.description||"Опис відсутній"),1)])]),e.createElementVNode("div",qk,[M.type!="sql"?(e.openBlock(),e.createElementBlock("span",Hk,e.toDisplayString(M.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(Rn),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,Tk))),128))])):e.createCommentVNode("",!0)]),g.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",Wk,[e.createVNode(e.unref(ye.VsPagination),{total:x.value.length,page:i.value,"page-size":wo,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":N,onPageChange:N},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-e728e68b"]]),Zk={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Gk={class:""},Kk={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Xk={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Qk={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},Jk={class:"w-full md:w-auto"},e2=["value"],t2={class:"relative w-full lg:w-[16rem]"},n2={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},o2={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},r2=["value"],l2=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,l=a=>{const i=a.target.value;r("update:filter",i)},s=e.ref(!1);return(a,i)=>(e.openBlock(),e.createElementBlock("div",Zk,[e.createElementVNode("div",Gk,[e.createElementVNode("h1",Kk,[i[3]||(i[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Xk,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),i[4]||(i[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Qk,[e.createElementVNode("div",Jk,[i[6]||(i[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:l},[...i[5]||(i[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,e2)]),e.createElementVNode("div",t2,[e.createElementVNode("div",n2,[e.createElementVNode("div",o2,[e.createVNode(e.unref(Fo),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:i[0]||(i[0]=g=>a.$emit("update:modelValue",g.target.value))},null,40,r2),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:i[1]||(i[1]=g=>a.$emit("update:modelValue",""))},[e.createVNode(e.unref(_t),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:i[2]||(i[2]=g=>s.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(wn),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),i[7]||(i[7]=e.createTextVNode(" Додати ",-1))])])]))}}),a2={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},s2={key:0,class:"flex items-center justify-center py-12"},i2={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},c2={key:2,class:"text-center py-12 text-gray-500"},d2={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},u2={class:"bg-gray-50 border-b border-gray-200"},p2={class:"divide-y divide-gray-200"},m2={class:"px-4 py-3 w-1/12"},f2={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},g2={class:"px-4 py-3 text-sm text-gray-600 font-mono"},y2=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,r=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],l=e.ref([]),s=e.ref(!0),a=e.ref(null),i=e.computed(()=>{var u;if(!((u=o.search)!=null&&u.trim()))return l.value;const x=o.search.toLowerCase().trim();return l.value.filter(h=>{var c,d;return((c=h.text)==null?void 0:c.toLowerCase().includes(x))||((d=h.id)==null?void 0:d.toLowerCase().includes(x))})}),g=async x=>{try{s.value=!0,a.value=null;const u=await fetch(`/api/suggest/${encodeURIComponent(x)}`);if(!u.ok)throw new Error(`HTTP error: ${u.status}`);const h=await u.json();l.value=h.data}catch(u){a.value=u instanceof Error?u.message:"Failed to load items",console.error("Error fetching suggest items:",u)}finally{s.value=!1}};return e.onMounted(()=>{o.classifierName&&g(o.classifierName)}),e.watch(()=>o.classifierName,x=>{x&&g(x)}),n({refetch:()=>{g(o.classifierName)}}),(x,u)=>(e.openBlock(),e.createElementBlock("div",a2,[s.value?(e.openBlock(),e.createElementBlock("div",s2,[e.createVNode(e.unref(Ao),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):a.value?(e.openBlock(),e.createElementBlock("div",i2,e.toDisplayString(a.value),1)):l.value.length===0?(e.openBlock(),e.createElementBlock("div",c2," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",d2,[e.createElementVNode("thead",u2,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,h=>e.createElementVNode("th",{key:h.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[h.width,h.align]])},e.toDisplayString(h.label),3)),64))])]),e.createElementVNode("tbody",p2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,h=>(e.openBlock(),e.createElementBlock("tr",{key:h.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",m2,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:h.color})},null,4)]),e.createElementVNode("td",f2,e.toDisplayString(h.text),1),e.createElementVNode("td",g2,e.toDisplayString(h.id),1)]))),128))])]))]))}}),h2={class:"space-y-6 flex-1 overflow-y-auto p-0"},x2={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},b2={class:"text-gray-900"},k2={class:"flex items-start justify-between mb-6"},w2={class:"flex-1 mr-4"},_2={class:"text-2xl font-bold text-gray-900"},E2={key:0,class:"flex items-center gap-2 group mt-1"},N2={class:"text-sm text-gray-500"},C2={key:1,class:"flex items-center gap-2 mt-1"},V2=["disabled"],B2=["disabled"],$2={class:"flex items-center gap-3"},v2={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},S2={class:"relative max-w-md"},L2={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},A2={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},M2=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),s=e.ref(null),a=e.ref(null),i=e.ref(""),g=e.ref(""),m=e.ref(""),x=e.ref(!1),u=e.ref(!1),h=e.ref(null),c=async()=>{var C;try{const $=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!$.ok)return;const N=(C=(await $.json()).data)==null?void 0:C[0];N&&(g.value=N.description||"")}catch($){console.error("Error fetching classifier details:",$)}},d=()=>{m.value=g.value,x.value=!0,e.nextTick(()=>{var C;(C=h.value)==null||C.focus()})},y=()=>{x.value=!1,m.value=""},p=async()=>{try{u.value=!0;const w=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],N={name:r.value,description:m.value.trim()||null,data:w},E=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(N)});if(!E.ok)throw new Error(`HTTP error: ${E.status}`);g.value=m.value,x.value=!1}catch(C){console.error("Error saving description:",C)}finally{u.value=!1}};e.onMounted(()=>{c()}),e.watch(r,()=>{c()});const f=()=>{s.value=null,l.value=!0},k=C=>{s.value=C,l.value=!0};return(C,$)=>(e.openBlock(),e.createElementBlock("div",h2,[e.createElementVNode("div",null,[e.createElementVNode("div",x2,[e.createElementVNode("button",{onClick:$[0]||($[0]=w=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),$[4]||($[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",b2,e.toDisplayString(r.value),1)]),e.createElementVNode("div",k2,[e.createElementVNode("div",w2,[e.createElementVNode("h1",_2,e.toDisplayString(r.value),1),x.value?(e.openBlock(),e.createElementBlock("div",C2,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:h,"onUpdate:modelValue":$[1]||($[1]=w=>m.value=w),type:"text",class:"text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",onKeydown:[e.withKeys(p,["enter"]),e.withKeys(y,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,m.value]]),e.createElementVNode("button",{onClick:p,disabled:u.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(jl),{width:18,height:18,"stroke-width":2})],8,V2),e.createElementVNode("button",{onClick:y,disabled:u.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(_t),{width:18,height:18,"stroke-width":2})],8,B2)])):(e.openBlock(),e.createElementBlock("div",E2,[e.createElementVNode("p",N2,e.toDisplayString(g.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:d,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(Do),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",$2,[e.createElementVNode("button",{onClick:f,class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(wn),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),$[5]||($[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:$[2]||($[2]=w=>e.unref(n).back()),class:"px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium"}," Назад ")])])]),e.createElementVNode("div",v2,[e.createElementVNode("div",S2,[e.createElementVNode("div",L2,[e.createElementVNode("div",A2,[e.createVNode(e.unref(Fo),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":$[3]||($[3]=w=>i.value=w),type:"text",placeholder:"Пошук за назвою або описом...",class:"pl-9 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-200 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg"},null,512),[[e.vModelText,i.value]])])])]),e.createVNode(y2,{ref_key:"detailsTableRef",ref:a,"classifier-name":r.value,search:i.value,onEdit:k},null,8,["classifier-name","search"])]))}}),T2={class:"flex-col justify-between h-full"},F2={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},D2=e.defineComponent({__name:"index",setup(t){const n=Fe.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),s=e.ref({filtered:0,total:0}),a=g=>{s.value=g},i=()=>{var g;(g=l.value)==null||g.refetch()};return(g,m)=>(e.openBlock(),e.createElementBlock("div",T2,[e.createElementVNode("div",F2,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(l2,{key:0,modelValue:o.value,"onUpdate:modelValue":m[0]||(m[0]=x=>o.value=x),filter:r.value,"onUpdate:filter":m[1]||(m[1]=x=>r.value=x),counts:s.value,onRefresh:i},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(M2,{key:2})):(e.openBlock(),e.createBlock(Yk,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":a},null,8,["search","type"]))]),m[2]||(m[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),z2={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},I2={class:"w-full bg-white relative"},j2={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},P2={key:0,class:"bg-white divide-y divide-gray-200"},R2={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},O2=["onClick"],U2={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},q2={key:1,class:"px-6 py-3.5"},H2={class:"text-sm font-semibold text-gray-900"},W2={class:"text-xs text-gray-400 mt-0.5"},Y2={key:0,class:"inline-flex items-center cursor-pointer"},Z2={class:"relative"},G2=["checked","onChange"],K2=["checked","onChange"],X2={class:"px-6 py-3"},Q2={class:"ml-6"},J2={class:"text-sm text-black font-medium"},ew={class:"text-xs text-gray-400 mt-0.5"},tw=["checked","onChange"],nw={key:1},ow=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),a=e.ref({}),i=e.ref({}),g=e.computed(()=>{var C;return((C=r.data)==null?void 0:C.routers)||[]});e.watch(()=>r.modelValue,C=>{const $={};(C||[]).forEach(w=>{$[w.id]=new Set(w.actions||[])}),i.value=$},{immediate:!0});function m(){const C=Object.entries(i.value).map(([$,w])=>({id:$,actions:Array.from(w)}));l("update:modelValue",C)}function x(C){return C?C.id||C.path||C.table||C.ua||JSON.stringify(C):""}function u(C){return C?C.id||C.ua||C.name:""}function h(C){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[C]||C}function c(C,$){var N;const w=x(C);return((N=i.value[w])==null?void 0:N.has($))||!1}function d(C){const $=u(C);return a.value[$]===!0}function y(C){const $=u(C);a.value[$]=!d(C)}function p(C,$){var w;return(w=C.menu)!=null&&w.length?C.menu.every(N=>c(N,$)):c(C,$)}function f(C,$,w){var N;if((N=C.menu)!=null&&N.length){const E={...i.value};C.menu.forEach(B=>{const M=x(B),D=new Set(E[M]||[]);w?D.add($):D.delete($),E[M]=D}),i.value=E,m()}}function k(C,$,w){const N=x(C),E=new Set(i.value[N]||[]);w?E.add($):E.delete($),i.value={...i.value,[N]:E},m()}return n({getSelected:()=>r.modelValue}),(C,$)=>{var w;return e.openBlock(),e.createElementBlock("div",z2,[e.createElementVNode("table",I2,[e.createElementVNode("thead",j2,[e.createElementVNode("tr",null,[$[0]||($[0]=e.createElementVNode("th",{class:"px-6 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-32 text-left"},"Групи",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,N=>(e.openBlock(),e.createElementBlock("th",{key:N,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(h(N)),1))),128))])]),(w=g.value)!=null&&w.length?(e.openBlock(),e.createElementBlock("tbody",P2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.value,N=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:x(N)},[e.createElementVNode("tr",R2,[N!=null&&N.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:E=>y(N)},[e.createElementVNode("button",U2,[e.createVNode(e.unref(So),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":d(N)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(N.ua),1)])],8,O2)):(e.openBlock(),e.createElementBlock("td",q2,[e.createElementVNode("div",H2,e.toDisplayString(N.ua),1),e.createElementVNode("div",W2,e.toDisplayString(N.path||N.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,E=>(e.openBlock(),e.createElementBlock("td",{key:E,class:"px-4 py-3.5 text-center"},[N!=null&&N.menu?(e.openBlock(),e.createElementBlock("label",Y2,[e.createElementVNode("div",Z2,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:p(N,E),onChange:B=>f(N,E,B.target.checked)},null,40,G2),$[1]||($[1]=e.createElementVNode("div",{class:"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600"},null,-1))])])):(e.openBlock(),e.createElementBlock("input",{key:1,type:"checkbox",checked:c(N,E),onChange:B=>k(N,E,B.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,K2))]))),128))]),N!=null&&N.menu&&d(N)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(N.menu,E=>(e.openBlock(),e.createElementBlock("tr",{key:x(E),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",X2,[e.createElementVNode("div",Q2,[e.createElementVNode("div",J2,e.toDisplayString(E.ua),1),e.createElementVNode("div",ew,e.toDisplayString(E.path||E.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,B=>(e.openBlock(),e.createElementBlock("td",{key:B,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:c(E,B),onChange:M=>k(E,B,M.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,tw)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",nw,[...$[2]||($[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),rw={class:"flex flex-col gap-4 mt-2 mx-2"},lw={class:"flex items-center gap-3"},aw={class:"flex-1 relative"},sw=e.defineComponent({__name:"VsPermissions",setup(t){const n=Fe.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),s=e.ref([]),a=e.ref(["edit"]),i=e.computed(()=>m(l.value)),g=e.computed(()=>{const h=o.value.toLowerCase().trim();return h?i.value.map(c=>{const d=String(c.ua||"").toLowerCase().includes(h),y=(c.menu||[]).filter(p=>String(p.ua||"").toLowerCase().includes(h));return d?{...c,menu:c.menu}:y.length?{...c,menu:y}:null}).filter(Boolean):i.value}),m=h=>{const c=h.categories||[],d=h.layers||[],y=c.map(f=>{const k=d.filter(C=>C.category_id===f.category_id).map(C=>({id:String(C.layer_id),ua:C.name,path:String(C.layer_id)}));return k.length?{ua:f.name,menu:k,id:String(f.category_id)}:null}).filter(Boolean),p=d.filter(f=>!f.category_id).map(f=>({ua:f.name,id:String(f.layer_id),path:String(f.layer_id)}));return p.length&&y.push({ua:"Без категорії",menu:p,id:"noCategory"}),y},x=async()=>{const[h,c]=await Promise.all([fetch("/api/catalog").then(d=>d.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(d=>d.json())]);l.value=h,s.value=((c==null?void 0:c.layer_list)||[]).filter(d=>d.service_id).map(d=>({id:String(d.service_id),actions:d.actions||[]}))},u=async()=>{var d,y;const c=(((y=(d=r.value)==null?void 0:d.getSelected)==null?void 0:y.call(d))||s.value).filter(p=>{var f;return(f=p.actions)==null?void 0:f.length}).map(p=>({service_id:p.id,actions:p.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)}).then(p=>p.json()).then(p=>{ye.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(p=>{ye.notify({title:"Помилка",message:p.message,type:"error"})})};return e.onMounted(x),(h,c)=>(e.openBlock(),e.createElementBlock("div",rw,[e.createElementVNode("div",lw,[e.createElementVNode("div",aw,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=d=>o.value=d),type:"text",placeholder:"Пошук...",class:"w-full pl-3 pr-4 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border bg-background hover:text-accent-foreground h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50",onClick:c[1]||(c[1]=d=>h.$router.back())}," Повернутися "),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700",onClick:u}," Зберегти ")]),e.createVNode(ow,{ref_key:"accessRef",ref:r,data:{routers:g.value},modelValue:s.value,"onUpdate:modelValue":c[2]||(c[2]=d=>s.value=d),actions:a.value},null,8,["data","modelValue","actions"])]))}});function iw(t){t.component("MapCustom",Dn)}Ie.CartoCSS=Uy,Ie.Classifiers=D2,Ie.MapSettings=Bk,Ie.MapWidget=Dn,Ie.Permissions=sw,Ie.Raster=Z0,Ie.Register=nd,Ie.Service=Sg,Ie.default=Dn,Ie.install=iw,Ie.template1=Po,Ie.template2=Ro,Ie.template3=Oo,Ie.template4=Uo,Ie.template5=qo,Object.defineProperties(Ie,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|
|
245
|
+
`),E=(a.value??"").trimEnd();a.value=E?`${E}
|
|
246
|
+
${V}`:V}i.value=!1,f.value=[]}function c(){i.value=!1,f.value=[]}function d(){const p=s.value==="html"?"html":"list",g={card_mode:p};p==="html"?g.html=a.value:p==="list"&&(g.list=l.value),r("save","card",g)}const y=[{value:"all",label:"Всі"},{value:"list",label:"Список"},{value:"none",label:"Жодне"},{value:"html",label:"HTML"}];return(p,g)=>(e.openBlock(),e.createElementBlock("div",rf,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:u,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:d,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти ")]),e.createVNode(of,{modelValue:s.value,"onUpdate:modelValue":g[0]||(g[0]=b=>s.value=b),options:y},null,8,["modelValue"]),e.createElementVNode("div",lf,[s.value==="list"?(e.openBlock(),e.createBlock(Ct,{key:0,modelValue:l.value,"onUpdate:modelValue":g[1]||(g[1]=b=>l.value=b),"columns-scheme":m,"form-scheme":x,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):s.value==="html"?(e.openBlock(),e.createBlock(ln,{key:1,modelValue:a.value,"onUpdate:modelValue":g[2]||(g[2]=b=>a.value=b),language:"html",theme:"vs-light",class:"flex-1 min-h-0"},null,8,["modelValue"])):e.createCommentVNode("",!0)]),e.createVNode(Dt,{visible:i.value,"onUpdate:visible":g[3]||(g[3]=b=>i.value=b),selection:f.value,"onUpdate:selection":g[4]||(g[4]=b=>f.value=b),fields:t.fields,title:"Імпорт полів для картки","id-prefix":"import-card",onConfirm:h,onCancel:c},null,8,["visible","selection","fields"])]))}}),sf={class:"flex flex-col flex-1 min-h-0"},cf=e.defineComponent({__name:"vs-tab-filter",props:{fields:{},columns:{}},emits:["update:columns","save"],setup(t,{emit:n}){const o=t,r=n;console.log(o.columns);const l=e.ref(o.columns||[]);e.watch(()=>o.columns,d=>l.value=d||[],{immediate:!0}),e.watch(l,d=>r("update:columns",d),{deep:!0,immediate:!0});const s=e.ref("list"),a=e.ref(!1),i=e.ref([]),f=[{key:"id",label:"Name"},{key:"label",label:"UA"}],m={name:{type:"text",label:"Name",disabled:!0,validators:["required"]},label:{type:"text",label:"UA",validators:["required"]},type:{type:"radio",label:"Тип",position:"horizontal",validators:["required"],options:[{text:"Check",id:"check"},{text:"Range",id:"range"},{text:"Date",id:"date"},{text:"Text",id:"text"},{text:"Select",id:"select"}]},hidden:{label:"Приховати",type:"Switcher"},data:{type:"text",label:"Класифікатор",conditions:["type","in",["autocomplete","select","check"]],validators:["required"]}};function x(){i.value=l.value.map(d=>d.name||d.id),a.value=!0}function u(){var g;const d=[...l.value],y=((g=o.fields)==null?void 0:g.filter(b=>i.value.includes(b.name)))||[],p=It(d,y,{selectedKeys:i.value,resolveKey:b=>Vt(b)});l.value=p,a.value=!1,i.value=[]}function h(){a.value=!1,i.value=[]}function c(){let d=[];s.value==="all"?d=o.fields||[]:s.value==="none"?d=[]:d=l.value,r("save",d)}return(d,y)=>(e.openBlock(),e.createElementBlock("div",sf,[e.createElementVNode("div",{class:"flex justify-between mb-3 gap-2"},[e.createElementVNode("button",{onClick:x,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Імпорт "),e.createElementVNode("button",{onClick:c,class:"inline-flex items-center justify-center gap-1 px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition disabled:opacity-70 disabled:cursor-not-allowed"}," Зберегти фільтр ")]),s.value==="list"?(e.openBlock(),e.createBlock(Ct,{key:0,modelValue:l.value,"onUpdate:modelValue":y[0]||(y[0]=p=>l.value=p),"columns-scheme":f,"form-scheme":m,"main-col-width":"250px","add-button":!1},null,8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(Dt,{visible:a.value,"onUpdate:visible":y[1]||(y[1]=p=>a.value=p),selection:i.value,"onUpdate:selection":y[2]||(y[2]=p=>i.value=p),fields:t.fields,title:"Імпорт полів","id-prefix":"import-filter",onConfirm:u,onCancel:h},null,8,["visible","selection","fields"])]))}}),cl=Symbol.for("gis.settingsRef");function mo(){const t=e.getCurrentInstance();if(!t)return e.ref(null);const n=t.appContext.config.globalProperties;let o=n[cl];return o||(o=e.ref(n.$settings??null),Object.defineProperty(n,"$settings",{configurable:!0,enumerable:!0,get:()=>o.value,set:r=>{o.value=r}}),n[cl]=o),o}const $n=xe(e.defineComponent({__name:"MapView",setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=mo(),s=Cm({container:o,mapOptions:{style:{version:8,sources:{},layers:[]},doubleClickZoom:!1,canvasContextAttributes:{preserveDrawingBuffer:!0}},controls:{navigation:!0,scale:!0},settings:l});async function a(){var x;await e.nextTick();const m=(x=s.map)==null?void 0:x.value;m!=null&&m.resize&&m.resize()}function i(){typeof ResizeObserver>"u"||r.value||!o.value||(r.value=new ResizeObserver(()=>{a()}),r.value.observe(o.value))}function f(){var m;(m=r.value)==null||m.disconnect(),r.value=null}return e.onMounted(()=>{a(),i(),window.addEventListener("resize",a)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",a),f()}),n({ctx:s}),(m,x)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:o,class:"map-view-root w-full h-full rounded-xl overflow-hidden"},[e.renderSlot(m.$slots,"default",{},void 0,!0)],512))}}),[["__scopeId","data-v-d6e61166"]]),df=e.defineComponent({__name:"MapDataLayer",props:{id:{},layer:{},styleSpec:{},autoCenter:{type:[Boolean,null]}},setup(t,{expose:n}){var d,y,p,g;const{map:o,flyTo:r,setZoom:l}=Re(),s=((y=(d=e.getCurrentInstance())==null?void 0:d.appContext.config.globalProperties)==null?void 0:y.$settings)||null,a=t,i=a.id;String(a.id);const f=`${location.origin}/api/vtile/${a.id}/ua/{z}/{x}/{y}.vmt?all=1`,m=Se(i,{source:{type:"vector",tiles:[f],minzoom:0,maxzoom:14},popup:a.layer.popup,layer:{style:(p=a.layer)==null?void 0:p.style}});n({layerHandle:m}),(a.autoCenter??!0)&&r({center:a.layer.center||((g=s==null?void 0:s.map)==null?void 0:g.center)||[30,50],animate:!1});let x=null;function u(){if(!(m!=null&&m.setTiles))return;const b=f.includes("?")?"&":"?",N=`${f}${b}_=${Date.now()}`;m.setTiles([N])}function h(){x&&clearTimeout(x),x=setTimeout(()=>{x=null,c().catch(b=>console.error("Failed to update map layer",b))},300)}async function c(){o.value&&(u(),m.setStyle(a.styleSpec??null))}return e.watch(()=>a.styleSpec,h,{deep:!0}),e.onBeforeUnmount(()=>{m.remove()}),(b,N)=>null}}),an=e.ref(null);function uf(){an.value=null}function pf(t){const n=e.ref(!1),o=()=>typeof t=="string"?t:t.value;e.watch(an,a=>{a!==o()&&n.value&&(n.value=!1)});function r(){an.value=o(),n.value=!0}function l(){an.value===o()&&(an.value=null),n.value=!1}function s(){n.value?l():r()}return{isOpen:n,open:r,close:l,toggle:s}}const mf={class:"map-filter"},ff={class:"map-filter__header"},gf={class:"map-filter__title"},yf={"aria-hidden":"true"},fo="#map-filter-popover-host",vn=xe(e.defineComponent({__name:"MapFilterPopover",props:{count:{},layer:{},catalogAnchor:{},disabled:{type:Boolean}},setup(t){const n=e.defineAsyncComponent(()=>import("@opengis/filter")),o=t,r=e.computed(()=>{var $;return(($=o.layer)==null?void 0:$.id)??""}),l=e.computed(()=>`filter-popover-${r.value}`),{isOpen:s,close:a,toggle:i}=pf(l),f=e.reactive({top:0,left:0,transform:"translateX(-50%)"}),m=e.ref(null),x=e.ref(null);let u=null;const h=e.ref({}),c=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0}),d=e.computed(()=>s.value),y=e.computed(()=>{var $;return Array.isArray(($=o.layer)==null?void 0:$.filters)?o.layer.filters:[]}),p=e.computed(()=>y.value.length>0),g=e.computed(()=>{var $;return(($=o.layer)==null?void 0:$.name)??""}),b=e.computed(()=>y.value),N=e.ref(null),V=e.computed(()=>y.value.length),k=e.computed(()=>V.value<=2),E=e.computed(()=>k.value?"body":typeof window>"u"||N.value?fo:"body"),_=e.computed(()=>{if(!d.value||!k.value)return{};const $=typeof window<"u"?window.innerWidth:280,S=Math.max(280,$-16*2);return{position:"absolute",top:`${f.top}px`,left:`${f.left}px`,transform:f.transform,zIndex:1e3,width:"280px",maxWidth:`${S}px`}});function B(){a()}function M($,w,S=8){const I=window.scrollY+S,Y=window.scrollY+window.innerHeight-S;let Z=$;return Z+w>Y&&(Z=Y-w),Z<I&&(Z=I),Z}function z(){var re,ie,se;if(!m.value||!k.value)return;const $=m.value.getBoundingClientRect(),w=window.scrollX+8,S=window.scrollX+window.innerWidth-8,I=((re=x.value)==null?void 0:re.offsetWidth)||280,Y=((ie=x.value)==null?void 0:ie.offsetHeight)||0;let Z=0,ee=0;if((se=o.catalogAnchor)!=null&&se.value){const we=o.catalogAnchor.value.getBoundingClientRect(),P=we.top+window.scrollY;Z=M(P,Y,8);const te=we.right+window.scrollX+12,v=S-I,L=w;ee=Math.min(Math.max(te,L),Math.max(L,v))}else{const we=$.bottom+window.scrollY+8;Z=M(we,Y,8);let P=$.left+window.scrollX;P<w&&(P=w),P+I>S&&(P=Math.max(w,S-I)),ee=P}f.left=ee,f.top=Z,f.transform="none"}function W(){k.value||X(),i(),s.value&&k.value&&e.nextTick(()=>{z(),T(),requestAnimationFrame(()=>z())})}function K(){o.disabled||W()}e.watch(d,$=>{$&&k.value?e.nextTick(()=>{z(),T(),requestAnimationFrame(()=>z())}):(D(),k.value||X())}),e.watch(b,()=>{!d.value||!k.value||e.nextTick(()=>z())},{deep:!0}),e.watch(k,$=>{d.value&&($?e.nextTick(()=>{z(),T()}):(D(),X()))}),e.watch(()=>o.disabled,$=>{$&&(a(),h.value={})});function Q(){!d.value||!k.value||z()}function H($){const w=r.value;if(!w)return;const S=Se(w);if(!(S!=null&&S.setFilter))return;h.value=$;const I=Object.entries($).map(([Y,Z])=>`${Y}=${Z}`).join("|");S.setFilter(I)}function J($){if(!o.disabled)return;const w=$.currentTarget;if(!w)return;const S=w.getBoundingClientRect();c.left=S.left+S.width/2+window.scrollX,c.top=S.bottom+8+window.scrollY,c.visible=!0}function O(){c.visible=!1}e.onMounted(()=>{X(),window.addEventListener("resize",Q),window.addEventListener("scroll",Q,!0)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",Q),window.removeEventListener("scroll",Q,!0),D()});function T(){D(),!(!x.value||!k.value)&&(u=new ResizeObserver(()=>{!d.value||!k.value||z()}),u.observe(x.value))}function D(){u&&(u.disconnect(),u=null)}function X(){typeof window>"u"||typeof document>"u"||(N.value=document.querySelector(fo))}return($,w)=>p.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mapLayer-filter",ref_key:"anchor",ref:m},[e.createElementVNode("a",{class:e.normalizeClass(["mapLayer-filter__trigger",{"mapLayer-filter__trigger--disabled":o.disabled}]),href:"#",onClick:e.withModifiers(K,["prevent","stop"]),onMouseenter:J,onMouseleave:O,onFocus:J,onBlur:O},[...w[2]||(w[2]=[e.createElementVNode("div",{class:"mapLayer-filter__icon"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.8","stroke-linecap":"round","stroke-linejoin":"round"},[e.createElementVNode("path",{d:"M3 4h18l-7 8v6l-4 2v-8z"})])],-1)])],34),d.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:E.value},[e.createElementVNode("div",{class:e.normalizeClass(["vst-popover__content inline-block z-50 rounded-[16px] bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-filter__popover",{"mapLayer-filter__popover--static":!k.value}]),style:e.normalizeStyle(_.value),ref_key:"panel",ref:x,onClick:w[1]||(w[1]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",mf,[e.createElementVNode("div",ff,[e.createElementVNode("h3",gf,e.toDisplayString(g.value||"Фільтр"),1),e.createElementVNode("button",{type:"button",class:"map-filter__close",onClick:B},[e.createElementVNode("span",yf,[e.createVNode(e.unref(Nt),{class:"h-4 w-4"})]),w[3]||(w[3]=e.createElementVNode("span",{class:"sr-only"},"Закрити",-1))])]),e.createVNode(e.unref(n),{view:"inline",schema:b.value,value:h.value,limit:10,onChange:w[0]||(w[0]=S=>H(S.data)),width:250},null,8,["schema","value"])])],6)],8,["to"])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[c.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${c.top}px`,left:`${c.left}px`})},e.toDisplayString(c.text),5)):e.createCommentVNode("",!0)]))],512)):e.createCommentVNode("",!0)}}),[["__scopeId","data-v-cc1f0579"]]),hf={key:0,class:"flex justify-center items-center h-[40px] w-[40px] bg-white text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full"},go=xe(e.defineComponent({__name:"MapFilterWidget",props:{filters:{},title:{},layerId:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",null,[t.filters.length>0?(e.openBlock(),e.createElementBlock("div",hf,[e.createVNode(vn,{layer:{filters:t.filters,id:t.layerId},count:t.filters.length},null,8,["layer","count"])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-98772410"]]),xf={class:"flex flex-row gap-x-3 z-10 relative widget"},bf=["onClick"],kf=["src","alt"],Yt=e.defineComponent({__name:"BaseMaps",setup(t){var g,b,N;const n={gki:{url:"https://data.gki.com.ua/api-user/rtile/voyager/ua/{z}/{x}/{y}.png",preview:"https://data.gki.com.ua/api-user/rtile/voyager/ua/12/2422/1400.png",title:"Базова карта (voyager)"},arcgisonline:{url:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png",preview:"https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/7/47/69.png",title:"ESRI Online Imagery(2022-2023)"},none:{}},o={z:13,x:4790,y:2762};function r(V){if(V)return V.replace(/{z}/gi,String(o.z)).replace(/{x}/gi,String(o.x)).replace(/{y}/gi,String(o.y))}function l(V,k){let E=V||`layers-${Object.keys(k).length}`,_=1;for(;k[E];)E=`${V}-${_}`,_+=1;return E}const s=e.getCurrentInstance(),a=(g=s==null?void 0:s.appContext.config.globalProperties)==null?void 0:g.$settings,i=a==null?void 0:a.map,f=Fe.useRoute(),m=Fe.useRouter();function x(){const V=f==null?void 0:f.query;return!V||typeof V!="object"?null:typeof V.basemap=="string"?V.basemap:null}const u=e.computed(()=>x()),h=e.computed(()=>{const V=Array.isArray(i==null?void 0:i.basemaps)?i==null?void 0:i.basemaps:[];if(!V.length)return{};const k={};return V.forEach((E,_)=>{const B=E.name??E.title??`basemap-${_}`,M=(E.id??B??`basemap-${_}`).toString().toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,""),z=l(M||`basemap-${_}`,k),W=E.preview||(E.url?r(E.url):void 0);k[z]={url:E.url,preview:W,title:B}}),k}),c=e.computed(()=>{const V=h.value;return Object.keys(V).length?V:n}),d=e.ref(u.value??Object.keys(c.value)[0]??"gki"),y=Se("base",{source:{type:"raster",tiles:(b=c.value[d.value])!=null&&b.url?[(N=c.value[d.value])==null?void 0:N.url]:[]},beforeId:0});function p(V){if(!c.value[V])return;d.value=V;const k=c.value[V];if(!(k!=null&&k.url)){y.setVisible(!1);return}y.setVisible(!0),y.setTiles([k.url]),typeof window<"u"&&x()!==V&&m.replace({query:{...f==null?void 0:f.query,basemap:V}}).catch(()=>{})}return e.watch(()=>c.value,V=>{const k=u.value&&V[u.value]?u.value:d.value;V[k]?d.value=k:d.value=Object.keys(V)[0]??k;const E=V[d.value];E!=null&&E.url?(y.setVisible(!0),y.setTiles([E.url])):y.setVisible(!1)},{immediate:!0}),e.watch(()=>[u.value,c.value],([V])=>{if(typeof V!="string"||!c.value[V]||d.value===V)return;d.value=V;const k=c.value[V];if(!(k!=null&&k.url)){y.setVisible(!1);return}y.setVisible(!0),y.setTiles([k.url])}),(V,k)=>(e.openBlock(),e.createElementBlock("div",xf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(E,_)=>(e.openBlock(),e.createElementBlock("div",{key:_,onClick:B=>p(_)},[_!=="none"&&E.url?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200 rounded-xl shadow-2xs cursor-pointer transition-all border-4",d.value===_?"border-blue-500":"border-gray-200"])},[E.preview?(e.openBlock(),e.createElementBlock("img",{key:0,src:E.preview,alt:E.title,class:"object-cover rounded-lg lg:w-12 lg:h-12 w-8 h-8"},null,8,kf)):e.createCommentVNode("",!0)],2)):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["lg:w-14 lg:h-14 w-10 h-10 flex items-center justify-center bg-gray-200/80 rounded-xl shadow-2xs cursor-pointer transition-all border-4",d.value===_?"border-blue-500":"border-gray-200"])},[e.createVNode(e.unref(Yl),{class:"w-4 h-4 text-gray-500"})],2))],8,bf))),128))]))}}),wf={key:0,class:"legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",style:{width:"100%"}},_f={class:"flex flex-col gap-1 p-5"},Ef={class:"flex items-center justify-between w-full text-sm text-gray-800 ml-2"},yo=e.defineComponent({__name:"MapLegendWidget",props:{items:{}},setup(t){const n=t,{map:o,ready:r}=Re(),l=e.ref([]);let s=null;function a(x){return x?x.map((u,h)=>{var y;const c=(u==null?void 0:u.name)||(u==null?void 0:u.label)||(u==null?void 0:u.title)||(u==null?void 0:u.id)||`Layer ${h+1}`,d=(u==null?void 0:u.color)||(u==null?void 0:u.fill)||((y=u==null?void 0:u.paint)==null?void 0:y.color)||"#3388ff";return{id:`${c}-${h}`,label:c,color:d}}):[]}function i(x){return x!=null&&x.layers?x.layers.filter(u=>{const h=u.paint||{};return h["fill-color"]||h["line-color"]||h["circle-color"]}).map((u,h)=>{var y;const c=u.paint||{},d=c["fill-color"]||c["line-color"]||c["circle-color"]||"#3388ff";return{id:u.id||`layer-${h}`,label:((y=u.metadata)==null?void 0:y.title)||u.id||`Layer ${h+1}`,color:d}}):[]}async function f(){var h;await r();const x=o.value;if(!x)return;const u=(h=x.getStyle)==null?void 0:h.call(x);l.value=i(u)}function m(){o.value&&(s==null||s())}return e.watch(()=>n.items,async x=>{x!=null?(l.value=a(x),s==null||s()):(await r(),m(),f())},{immediate:!0,deep:!0}),e.onMounted(async()=>{(n.items===void 0||n.items===null)&&(await r(),m(),f())}),e.onBeforeUnmount(()=>{s==null||s(),s=null}),(x,u)=>l.value.length?(e.openBlock(),e.createElementBlock("div",wf,[e.createElementVNode("div",_f,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:"flex items-center"},[e.createElementVNode("span",{class:"shrink-0 size-2.5 inline-block me-2.5 h-[10px] w-[10px] rounded-full",style:e.normalizeStyle({background:h.color})},null,4),e.createElementVNode("span",Ef,[e.createElementVNode("span",null,e.toDisplayString(h.label),1)])]))),128))])])):e.createCommentVNode("",!0)}});function Nf(){const{map:t,ready:n}=Re(),o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref(null);let a=[];function i(){a.forEach(c=>c()),a=[]}const f=c=>{const d=(c==null?void 0:c.properties)||{};return!!(d.cluster||d.point_count||d.point_count_abbreviated)},m=c=>{var g,b;o.value=[c.point.x,c.point.y];const d=t.value.queryRenderedFeatures(c.point);if(!(d!=null&&d.length)){x();return}const y=d.find(N=>!f(N));if(!y){x();return}const p=Se(y.source)||Se((g=y.layer)==null?void 0:g.id);p!=null&&p.popup&&(r.value=((b=p.popup)==null?void 0:b.fields)||p.popup,s.value=y.properties)},x=()=>{r.value=null,s.value=null,o.value=null};async function u(){await n(),t.value&&(i(),t.value.on("mousemove",m),t.value.on("mouseleave",x))}function h(){i(),r.value=null,s.value=null,o.value=null}return n().then(u),{popupCoords:o,popupFields:r,popupValues:s,disable:h,title:l}}const Cf={class:"min-w-[200px] max-w-[280px] rounded-lg border border-slate-200 bg-white/90 p-3 text-xs shadow-lg backdrop-blur"},Vf={class:"space-y-1.5"},Bf={class:"font-bold text-slate-700"},$f={class:"text-slate-700"},dl=e.defineComponent({__name:"MapPopup",setup(t){const{popupCoords:n,popupFields:o,popupValues:r,disable:l}=Nf(),{map:s}=Re(),a=e.ref(null),i=e.ref({left:"-9999px",top:"-9999px"}),f=new Intl.NumberFormat("uk-UA",{maximumFractionDigits:2});function m(y,p){if(p==null||p==="")return p;if((y==null?void 0:y.type)==="number"){const g=typeof p=="number"?p:Number(p);if(Number.isFinite(g))return f.format(g)}return p}function x(y,p,g){const b=y.name||y.label||y.title||`field-${g}`,N=y.label||y.title||y.name||b,V=y.name?p[y.name]:void 0,E=(y.name?p[`${y.name}_text`]:void 0)??V??y.value??null;return{key:b,label:N,value:m(y,E)}}const u=e.computed(()=>{const y=o.value||[],p=r.value||{};return y.filter(g=>(g==null?void 0:g.meta)!=="title").map((g,b)=>x(g,p,b)).filter(g=>g.label)}),h=e.computed(()=>{const y=o.value||[],p=r.value||{},g=y.find(b=>(b==null?void 0:b.meta)==="title");return g?x(g,p,0):null}),c=e.computed(()=>{var p;const y=u.value;return(p=h.value)!=null&&p.value?[{...h.value,key:`${h.value.key}-title`,label:"Назва"},...y]:y});function d(){var D,X;if(!c.value.length||!n.value||!a.value){i.value={left:"-9999px",top:"-9999px"};return}const y=a.value,p=y.offsetParent||null,g=(p==null?void 0:p.getBoundingClientRect())??{left:0,top:0,width:window.innerWidth,height:window.innerHeight},b=((X=(D=s.value)==null?void 0:D.getContainer)==null?void 0:X.call(D))||void 0,N=(b==null?void 0:b.getBoundingClientRect())??g,V=N.left-g.left,k=N.top-g.top,E=y.offsetWidth||0,_=y.offsetHeight||0,B=12,M=8,[z,W]=n.value;let K=V+z+B,Q=k+W+B;K+E+M>g.width&&(K=V+z-E-B),Q+_+M>g.height&&(Q=k+W-_-B);const H=M,J=M,O=Math.max(M,g.width-E-M),T=Math.max(M,g.height-_-M);K=Math.min(Math.max(K,H),O),Q=Math.min(Math.max(Q,J),T),i.value={left:`${K}px`,top:`${Q}px`}}return e.watch([n,c],()=>{e.nextTick(()=>d())}),e.onMounted(()=>{window.addEventListener("resize",d)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",d),l()}),(y,p)=>c.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popupRef",ref:a,class:"absolute pointer-events-none z-20",style:e.normalizeStyle(i.value)},[e.createElementVNode("div",Cf,[e.createElementVNode("div",Vf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,g=>(e.openBlock(),e.createElementBlock("div",{key:g.key,class:"flex flex-col"},[e.createElementVNode("span",Bf,e.toDisplayString(g.label),1),e.createElementVNode("span",$f,e.toDisplayString(g.value??"—"),1)]))),128))])])],4)):e.createCommentVNode("",!0)}});function vf(){const{map:t,ready:n}=Re(),o=Fe.useRoute(),r=Fe.useRouter(),l=e.ref(null),s=e.ref(null),a=e.ref(null),i=e.ref(!1),f=e.ref([]),m=e.ref(0),x=e.computed(()=>f.value.length),u=e.computed(()=>i.value||!!l.value||!!a.value);let h=null,c=!1;function d(){l.value=null,s.value=null,a.value=null,i.value=!1,f.value=[],m.value=0}function y(){if(h){try{h()}catch{}h=null}}async function p(){await n();const K=t.value;K&&(y(),d(),K.on("click",g),h=()=>K.off("click",g),W(B()))}function g(K){const Q=t.value;if(!Q)return;const H=(Q.queryRenderedFeatures(K.point)||[]).filter(J=>{var O;return(O=J==null?void 0:J.properties)==null?void 0:O.id});if(!H.length){d(),z(null);return}f.value=H,m.value=0,b(m.value)}function b(K){const Q=f.value[K];if(!Q)return;m.value=K;const H=Se(Q.source);k(Q,H==null?void 0:H.card)}function N(){m.value>=f.value.length-1||b(m.value+1)}function V(){m.value<=0||b(m.value-1)}async function k(K,Q){var O,T,D,X,$;if(!((O=K==null?void 0:K.properties)!=null&&O.id))return;const H=new URLSearchParams;H.set("layer",K.source),H.set("id",String((T=K.properties)==null?void 0:T.id));const J=Array.isArray(Q)&&Q.length>0;i.value=J,a.value=null,l.value=null,s.value=K||null;try{const w=await fetch(`/api/map-format?${H.toString()}`);if(!w.ok)throw new Error(`Failed (${w.status})`);const S=await w.json(),I=Array.isArray(S.columns)?S.columns:[],Y=Array.isArray(Q)?Q:[];if(!I.length&&!Y.length){console.error("Configure layer in admin"),E();return}const Z=S.rows??S.data??{};l.value={rows:Z,fields:Y,columns:I,html:S.html||null},c||z(s.value);const ee=((D=S.rows)==null?void 0:D.geom)??((X=S.data)==null?void 0:X.geom);if(ee){const re=typeof ee=="string"?JSON.parse(ee):ee;re&&(s.value={...s.value,geometry:re,properties:{...(($=s.value)==null?void 0:$.properties)||{},geom:re,geom_4326:re}})}}catch(w){console.error("Failed to load feature card:",w),E()}finally{i.value=!1}}function E(){d(),z(null)}function _(){y(),d()}n().then(p),e.onBeforeUnmount(()=>_());function B(){const K=Array.isArray(o.query.info)?o.query.info[0]:o.query.info;return typeof K!="string"?null:K.trim()||null}function M(K){var O,T;const Q=(K==null?void 0:K.source)??((O=K==null?void 0:K.layer)==null?void 0:O.id),H=(T=K==null?void 0:K.properties)==null?void 0:T.id;return!Q||H===void 0||H===null?null:`${Q},${H}`.trim()||null}function z(K){const Q=M(K),H=B();if(Q===H)return;const J={...o.query};Q?J.info=Q:delete J.info,r.push({query:J}).catch(()=>{})}async function W(K){if(!K){d();return}if(K===M(s.value))return;const[Q,H]=K.split(","),J=Q==null?void 0:Q.trim(),O=H==null?void 0:H.trim();if(!J||!O){d(),z(null);return}c=!0;try{const T={source:J,properties:{id:O}};f.value=[T],m.value=0;const D=Se(J);await k(T,D==null?void 0:D.card)}finally{c=!1}}return e.watch(()=>B(),K=>{K!==M(s.value)&&(c=!0,W(K).finally(()=>{c=!1}))}),{card:l,cardFeature:s,cardError:a,cardLoading:i,isOpen:u,close:E,next:N,prev:V,count:x,index:m}}function Sf(){const{map:t,ready:n}=Re(),o=e.ref([]),r=e.ref(0),l=e.ref(0),s=e.ref(!1),a=e.ref(null),i=e.ref({}),f=e.ref(null),m=e.ref([]),x=e.computed(()=>o.value[l.value]||null),u=e.computed(()=>o.value.length>0);let h=null;const c=()=>{h==null||h.remove(),h=null},d=B=>B?B.type==="FeatureCollection"?B:B.type==="Feature"?{type:"FeatureCollection",features:[B]}:B.type&&Array.isArray(B.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:B,properties:{}}]}:Array.isArray(B.features)?{type:"FeatureCollection",features:B.features}:B.geometry?d(B.geometry):null:null,y=()=>({type:"line",color:"#0a57ff",width:4,opacity:.95}),p=B=>Number(B.toFixed(5)),g=async B=>{if(await n(),!t.value)return;const M=d(B);M&&(c(),h=Se("feature-highlight",{source:{type:"geojson",data:M},style:y()},t))},b=async(B,M,z)=>{var Q,H;const[W,K]=[p(B),p(M)];f.value={x:W,y:K},m.value=z,s.value=!0,a.value=null,o.value=[],i.value={},l.value=0;try{const J=z.map(async $=>{const w=`/api/map-info-point?x=${W}&y=${K}&layers=${$}`,S=await fetch(w);if(!S.ok)return null;const I=await S.json();if(!I.count)return null;const Z=await(await fetch(`${w}&index=0`)).json();return{layerId:$,data:Z,count:I.count}}),T=(await Promise.all(J)).filter(Boolean);if(T.length===0){r.value=0;return}o.value=T.map($=>$.data);const[D]=o.value;r.value=T.reduce(($,w)=>$+(w.count||0),0),i.value[0]=D;const X=((Q=D==null?void 0:D.data)==null?void 0:Q.geom_4326)??((H=D==null?void 0:D.data)==null?void 0:H.geom);await g(X)}catch(J){a.value=J.message}finally{s.value=!1}},N=async B=>{if(!f.value||!m.value.length)return;if(i.value[B]){o.value[B]=i.value[B];return}const{x:M,y:z}=f.value,W=m.value.join(","),K=`/api/map-info-point?x=${M}&y=${z}&index=${B}&layers=${W}`;try{s.value=!0;const Q=await fetch(K);if(!Q.ok)throw new Error("Failed to fetch feature by index");const H=await Q.json();o.value[B]=H,i.value[B]=H}catch(Q){a.value=Q.message}finally{s.value=!1}},V=async()=>{l.value<r.value-1&&(l.value+=1,i.value[l.value]||await N(l.value))},k=async()=>{l.value>0&&(l.value-=1,i.value[l.value]||await N(l.value))},E=()=>{o.value=[],r.value=0,l.value=0,i.value={},f.value=null,m.value=[],c()};e.watch(l,async()=>{var M,z;const B=x.value;if(B){const W=((M=B==null?void 0:B.data)==null?void 0:M.geom_4326)??((z=B==null?void 0:B.data)==null?void 0:z.geom);await g(W)}});let _=null;return e.onMounted(async()=>{await n(),t.value&&(_=async B=>{const{lng:M,lat:z}=B.lngLat,W=Se(),Q=Object.entries(W).map(([H,J])=>{var O,T,D,X;return{id:H,service:((O=J==null?void 0:J.opts)==null?void 0:O.service)??((D=(T=J==null?void 0:J.opts)==null?void 0:T.source)==null?void 0:D.service)??null,count:((X=J==null?void 0:J.opts)==null?void 0:X.count)??null,visible:(()=>{var $;try{return(($=t.value)==null?void 0:$.getLayer(H))?t.value.getLayoutProperty(H,"visibility")!=="none":!0}catch{return!0}})()}}).filter(H=>H.service==="ogc"&&H.visible).map(H=>H.id);Q.length>0&&await b(M,z,Q)},t.value.on("dblclick",_))}),e.onBeforeUnmount(()=>{t.value&&_&&t.value.off("dblclick",_),c()}),{features:o,count:r,index:l,current:x,loading:s,error:a,active:u,next:V,prev:k,close:E}}const ul=e.defineComponent({__name:"LayerSwitcher",props:{title:{},url:{},id:{},buttonText:{}},emits:["activate"],setup(t,{emit:n}){const o=t,r=n;function l(m){const x=m.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(x)return x;const u=Array.from(m).map(h=>h.charCodeAt(0).toString(16)).join("").slice(0,8);return u?`layer-${u}`:"layer-temp"}const s=e.computed(()=>{var m;return((m=o.id)==null?void 0:m.trim())||l(o.title)}),a=e.computed(()=>o.buttonText||"Показати шар");function i(){return{id:s.value,title:o.title,url:o.url}}function f(){r("activate",i())}return(m,x)=>(e.openBlock(),e.createElementBlock("button",{type:"button",class:"flex items-center justify-center bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded w-full",onClick:f},[e.renderSlot(m.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.value),1)])]))}}),at=e.ref([]);function Lf(t,n){return typeof t!="string"?"":t.includes("{{")?t.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*}}/g,(o,r)=>{const l=String(r||"").trim();if(!l)return"";const s=n[l];return s!=null?String(s):""}):t}function Sn(t){return t==null?"":String(t).trim()}function ho(t){var n,o;(o=(n=t==null?void 0:t.handle)==null?void 0:n.remove)==null||o.call(n)}function Af(t){return t?typeof(t==null?void 0:t.value)<"u"?t.value:t:null}function Mf(t){var o;if(!(t!=null&&t.getStyle))return;const n=((o=t.getStyle())==null?void 0:o.layers)||[];for(let r=0;r<n.length;r+=1){const l=n[r];if(!(!l||typeof l.id!="string")&&l.type&&l.type!=="background"&&l.type!=="raster")return l.id}}function xo(t){function n(a,i={},f,m){var N,V;const x=Sn(a==null?void 0:a.id),u=((N=a==null?void 0:a.title)==null?void 0:N.trim())||x,h=((V=a==null?void 0:a.url)==null?void 0:V.trim())||"";if(!x||!h)return;const c=Lf(h,i);if(!c)return;const d=m??t;if(!d)return;const y=Af(d);if(!y)return;const p=at.value.findIndex(k=>k.id===x);p!==-1&&(ho(at.value[p]),at.value.splice(p,1));let g=null;const b=a.beforeId??Mf(y);try{g=Se(x,{source:{type:"raster",tiles:[c],tileSize:a.tileSize??256,minzoom:a.minzoom??0,maxzoom:a.maxzoom??19},layer:{id:x,type:"raster",source:x,paint:{"raster-opacity":a.opacity??.85}},beforeId:b},d)}catch(k){const E=(k==null?void 0:k.message)??"";if(!(typeof E=="string"&&E.includes("Map provider")))throw k;return}at.value=[...at.value,{id:x,title:u,originalUrl:h,resolvedUrl:c,owner:f??null,handle:g??null}]}function o(a,i){const f=Sn(a);if(!f)return;const m=at.value.findIndex(u=>u.id===f&&(!i||u.owner===i));if(m===-1)return;const[x]=at.value.splice(m,1);ho(x)}function r(a,i,f){var u;const m=Sn(a);if(!m)return;const x=at.value.find(h=>h.id===m&&(!f||h.owner===f));(u=x==null?void 0:x.handle)!=null&&u.setOpacity&&x.handle.setOpacity(i)}function l(a){if(!at.value.length)return;const i=[];at.value.forEach(f=>{(a?f.owner===a:!0)?ho(f):i.push(f)}),at.value=i}function s(a,i){const f=Sn(a);return f?at.value.some(m=>m.id===f&&(!i||m.owner===i)):!1}return{temporaryLayers:at,activateTemporaryLayer:n,deactivateTemporaryLayer:o,setTemporaryLayerOpacity:r,clearTemporaryLayers:l,isTemporaryLayerActive:s}}const bo="map-card:external-payload",Tf=t=>t?typeof t.html=="string"&&t.html.trim().length>0:!1,Ff={key:0,class:"card absolute top-4 lg:left-auto right-11 md:left-4 z-[82] w-[calc(100%-36px)] md:w-[400px] max-h-[80%] overflow-hidden rounded-2xl border border-slate-200 bg-white/95 shadow-2xl backdrop-blur-md flex flex-col"},Df={class:"flex items-start justify-between gap-3 border-b border-slate-200 px-4 py-3"},zf={class:"min-w-0 flex-1"},If={class:"text-base font-semibold text-slate-900 truncate"},jf={key:0,class:"flex gap-1 mt-1"},Pf=["disabled"],Rf=["disabled"],Of={key:1,class:"flex gap-1 mt-1"},Uf=["disabled"],qf=["disabled"],Hf={class:"flex-1 overflow-y-auto px-4 py-3 space-y-4 text-sm text-slate-700"},Wf={key:0,class:"text-center text-xs text-slate-500"},Yf={key:1,class:"text-center text-xs text-red-500"},Zf={key:0,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Gf={class:"divide-y divide-gray-100 py-[5px]"},Kf={class:"text-gray-900 font-normal"},Xf={key:0,class:"flex gap-1 flex-wrap"},Qf={key:1,class:"prose prose-sm max-w-none space-y-3 border-slate-200"},Jf=["innerHTML"],eg=["innerHTML"],tg={key:2,class:"space-y-3 border-t border-slate-200 pt-3"},ng={key:3,class:"border-t border-slate-100 px-4 py-2 text-right text-xs text-slate-500"},og={class:"text-xs tracking-[0.02em] leading-none"},rg={key:4,class:"space-y-3 border-t border-slate-200 pt-3"},lg={class:"space-y-1"},ag={class:"flex items-center cursor-pointer gap-2 flex-1"},sg=["checked","onChange"],ig={class:"text-[13px] text-gray-600"},cg={key:0,class:"text-right text-xs text-gray-400 truncate max-w-[40%]"},dg={key:5,class:"text-center text-xs text-slate-400"},ug="map:temporary-layer-request",pl="cardHideEmpty",pg=14,ko=xe(e.defineComponent({__name:"MapCardWidget",props:{mapId:{}},setup(t){const n=t,o=vf(),r=Sf(),l=e.ref(null),s=e.ref(null),a=e.computed(()=>{var C;return!!((C=l.value)!=null&&C.trim())});function i(){return a.value?s.value?(Bl(s.value),!0):(Pe(),!0):(Pe(),!1)}const f=C=>{var U,le;const A=C;l.value=((U=A.detail)==null?void 0:U.html)??null,s.value=((le=A.detail)==null?void 0:le.geometry)??null,a.value?i():Pe()};e.onMounted(()=>{typeof window>"u"||window.addEventListener(bo,f)}),e.onBeforeUnmount(()=>{typeof window>"u"||window.removeEventListener(bo,f)});const m=e.computed(()=>r.active.value),x=e.computed(()=>m.value||o.isOpen.value||a.value),u=e.computed(()=>m.value?r.loading.value:o.cardLoading.value),h=e.computed(()=>m.value?r.error.value:o.cardError.value),c=e.computed(()=>{var C,A;return m.value?((C=r.current.value)==null?void 0:C.html)||null:a.value?l.value:((A=o.card.value)==null?void 0:A.html)||null}),d=Re(),y=mo(),p=e.computed(()=>{var C,A;return((A=(C=y.value)==null?void 0:C.map)==null?void 0:A.cardHideEmpty)??null}),g=Fe.useRoute(),{activateTemporaryLayer:b,deactivateTemporaryLayer:N,clearTemporaryLayers:V,isTemporaryLayerActive:k}=xo(d.map);function E(C){window.dispatchEvent(new CustomEvent(ug,{detail:C}))}const _=e.computed(()=>{var C;return((C=o.cardFeature.value)==null?void 0:C.source)??null}),B=e.computed(()=>_.value?`map-card:${_.value}`:"map-card"),M=e.computed(()=>{var le,de;const C=o.cardFeature.value,A=(C==null?void 0:C.source)||((le=C==null?void 0:C.layer)==null?void 0:le.id),U=((de=C==null?void 0:C.properties)==null?void 0:de.id)??(C==null?void 0:C.id);return A&&U!=null?`${A}:${U}`:null}),z=e.ref(null),W=e.ref(null),K=e.ref(0),Q=new Map;function H(){if(typeof window>"u")return null;const A=(window.location.pathname||"").match(/\/maps?\/([^/]+)/i);return A&&A[1]?A[1]:null}const J=e.computed(()=>{const C=typeof n.mapId=="string"?n.mapId.trim():"";if(C.length)return C;const A=typeof g.params.slug=="string"?g.params.slug.trim():"";if(A.length)return A;const U=typeof g.query.slug=="string"?g.query.slug.trim():"";return U.length?U:H()}),O=e.ref(null),T=e.ref(null),D=new Map;function X(C){const A=C.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-zA-Z0-9]+/g,"-").replace(/^-+|-+$/g,"").toLowerCase();if(A)return A;const U=Array.from(C).map(le=>le.charCodeAt(0).toString(16)).join("").slice(0,8);return U?`layer-${U}`:`layer-${Math.random().toString(36).slice(2,8)}`}function $(C){if(typeof C!="string")return"";const A=C.trim();if(!A)return"";if(/^https?:\/\//i.test(A))return A;if(A.startsWith("//"))return typeof window>"u"?`https:${A}`:`${window.location.protocol}${A}`;const U=typeof window<"u"?window.location.origin:"";return A.startsWith("/")?U?`${U}${A}`:A:U?`${U}/${A}`:A}function w(C){if(C==null)return[];if(Array.isArray(C))return C.flatMap(A=>w(A));if(typeof C=="number")return Number.isFinite(C)?[C]:[];if(typeof C=="string"){const A=C.match(/-?\d+(?:\.\d+)?/g);return!A||!A.length?[]:A.map(U=>Number(U)).filter(U=>Number.isFinite(U))}return[]}function S(C){const A=w(C);if(A.length<4)return null;const[U,le,de,_e]=A;return[U,le,de,_e].every(Me=>Number.isFinite(Me))?[U,le,de,_e]:null}function I(C){if(!C)return null;const A=C.trim();if(!A.length)return null;try{const de=JSON.parse(A),_e=S(de);if(_e)return _e}catch{}const U=A.match(/-?\d+(?:\.\d+)?/g);if(!U||U.length<4)return null;const le=U.slice(0,4).map(de=>Number(de));return le.every(de=>Number.isFinite(de))?[le[0],le[1],le[2],le[3]]:null}function Y(C){const A={},U=/([:@\w-]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;let le;for(;(le=U.exec(C))!==null;){const de=le[1],_e=le[2]??le[3]??le[4]??"";de&&(A[de]=_e)}return A}function Z(C,A){for(const U of A)if(C[U]!=null&&String(C[U]).trim().length)return String(C[U]).trim();return""}function ee(C){if(!(C!=null&&C.length))return;const A=Number(C);return Number.isFinite(A)?A:void 0}function re(C){if(typeof C!="string"||!C.length)return[];const A=[],U=/<LayerSwitcher\b([^>]*)>([\s\S]*?)<\/LayerSwitcher>/gi;let le=0,de;const _e=new Set,Me=Te=>{let We=Te,Je=2;for(;_e.has(We);)We=`${Te}-${Je}`,Je+=1;return _e.add(We),We};for(;(de=U.exec(C))!==null;){const[Te,We="",Je=""]=de,Oe=de.index;if(Oe>le){const Sl=C.slice(le,Oe);Sl.trim().length&&A.push({type:"html",content:Sl})}const et=Y(We),lt=Z(et,["title"])||"Тимчасовий шар",St=$(Z(et,["url"]));if(!St){A.push({type:"html",content:Te}),le=Oe+Te.length;continue}const yn=Z(et,["id"]),Eo=Z(et,["button-text","buttonText","show","show-label","showLabel"]),fw=ee(Z(et,["tile-size","tileSize"])),gw=ee(Z(et,["minzoom","minZoom"])),yw=ee(Z(et,["maxzoom","maxZoom"])),hw=ee(Z(et,["opacity"])),xw=I(Z(et,["bounds","data-bounds","bbox"])),bw=yn||X(`${lt}-${St}`)||X(lt),$l=Me(bw||`layer-${A.length+1}`),No=Je.trim(),vl=/<[^>]+>/.test(No),kw=vl?No:null,Co=vl?null:No,ww=Eo&&Eo.trim().length?Eo.trim():Co&&Co.trim().length?Co.trim():void 0;A.push({type:"layer",spec:{id:$l,title:lt,url:St,tileSize:fw,minzoom:gw,maxzoom:yw,opacity:hw,bounds:xw},componentProps:{title:lt,url:St,id:$l,buttonText:ww},slotText:kw}),le=Oe+Te.length}if(le<C.length){const Te=C.slice(le);Te.trim().length&&A.push({type:"html",content:Te})}return!A.length&&C.trim().length&&A.push({type:"html",content:C}),A}function ie(C){if(!C)return null;const A=typeof C.id=="string"?C.id.trim():"",U=typeof C.title=="string"?C.title.trim():"",le=$(typeof C.url=="string"?C.url:"");return!A||!le?null:{id:A,title:U||A,url:le,tileSize:C.tileSize,minzoom:C.minzoom,maxzoom:C.maxzoom,opacity:C.opacity,bounds:C.bounds}}const se=e.computed(()=>{if(m.value&&r.current.value)return r.current.value.data??{};const C=o.card.value;return(C==null?void 0:C.rows)??{}}),we=e.computed(()=>{if(m.value&&r.current.value){const le=r.current.value,de=Array.isArray(le.columns)?le.columns:[];return de.length?de:le.fields??[]}const C=o.card.value;if(!C)return[];const A=Array.isArray(C.columns)?C.columns:[];return A.length?A:Array.isArray(C.fields)?C.fields:[]}),P=e.computed(()=>{const C=we.value;if(!C.length)return[];const A=se.value;return C.map(U=>({key:U.name,label:U.ua||U.label||U.title||U.name,value:F(A[U.name],U.format||"text"),format:U.format||"text"}))}),te=new Set(["—","-","–","−"]);function v(C){const A=C.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!A)return C;const[,U,le,de]=A;return`${de}.${le}.${U}`}function L(C){return Number.isFinite(C)?new Intl.NumberFormat("uk-UA").format(C):"—"}function F(C,A){if(C==null)return"—";if(A==="tags")return C;if(Array.isArray(C))return C.length?C.map(U=>F(U,"text")).join(", "):"—";if(typeof C=="boolean")return C?"так":"ні";if(typeof C=="number")return L(C);if(typeof C=="string"){const U=C.trim();if(!U.length)return"—";if(/^\d{4}-\d{2}-\d{2}$/.test(U))return v(U);if(/^-?\d+(?:\.\d+)?$/.test(U)){const le=Number(U);return Number.isFinite(le)?L(le):U}return U}return String(C)}function oe(C){if(C==null)return!0;if(typeof C=="string"){const A=C.trim();return A.length?te.has(A):!0}return!1}function ue(C){if(!C)return[];if(Array.isArray(C))return C;if(typeof C=="string"){const A=C.trim();if(A.startsWith("{")&&A.endsWith("}")){const le=A.slice(1,-1).match(/"((?:[^"\\]|\\.)*)"/g);return le?le.map(de=>de.slice(1,-1).replace(/\\"/g,'"')):[]}}return[]}const be=e.ref(!1),Ve=e.ref(!0),ge=()=>{var C,A;return typeof window>"u"?null:((A=(C=window.localStorage)==null?void 0:C.getItem)==null?void 0:A.call(C,pl))??null},De=e.ref(ge()),ze=C=>{const A=typeof C=="string"&&C.toLowerCase()==="true";be.value=A,Ve.value=!A},Ue=C=>{De.value=C};if(typeof window<"u"){const C=A=>{A.key===pl&&Ue(A.newValue)};window.addEventListener("storage",C),e.onBeforeUnmount(()=>{window.removeEventListener("storage",C)})}const Ze=e.computed(()=>typeof De.value=="string");e.watch(De,C=>{ze(typeof C=="string"?C:p.value)},{immediate:!0}),e.watch(p,C=>{Ze.value||ze(C)},{immediate:!0});const ft=e.computed(()=>P.value.filter(C=>oe(C.value)).length),gt=e.computed(()=>be.value&&!Ve.value?P.value.filter(C=>!oe(C.value)):P.value);function Zt(C){const A=typeof C=="string"?C:"";if(!A.length)return{sanitized:"",hiddenCount:0};if(typeof DOMParser>"u")return{sanitized:A,hiddenCount:0};const le=new DOMParser().parseFromString(A,"text/html");let de=0;return le.querySelectorAll("dd").forEach(_e=>{var We;const Me=((We=_e.textContent)==null?void 0:We.trim())??"",Te=_e.closest("div");if(oe(Me)){de+=1,Te?Te.remove():_e.remove();return}}),{sanitized:le.body.innerHTML,hiddenCount:de}}const Ft=e.computed(()=>Zt(c.value)),ut=e.computed(()=>c.value?Ft.value.hiddenCount:0),dn=e.computed(()=>ft.value+ut.value),un=e.computed(()=>{var C;return be.value&&!Ve.value&&!!((C=c.value)!=null&&C.trim())}),vt=e.computed(()=>be.value&&dn.value>0),pn=e.computed(()=>Ve.value?"Приховати пусті значення":"Показати пусті значення"),j=e.computed(()=>Ve.value?Pl:Ao);function G(){Ve.value=!Ve.value}const q=e.computed(()=>{const C=un.value?Ft.value.sanitized:c.value??"";return re(C)}),ae=e.computed(()=>q.value.filter(C=>C.type==="layer"));function me(C){return Array.isArray(C)?C.map((A,U)=>{const le=$(typeof(A==null?void 0:A.url)=="string"?A.url:""),de=typeof(A==null?void 0:A.geohub)=="string"&&A.geohub.trim().length?`/api-hub/tms/${A.geohub.trim()}/ua/{z}/{x}/{y}.png`:"",_e=((A==null?void 0:A.name)||(A==null?void 0:A.title)||(A==null?void 0:A.label)||`Шар ${U+1}`).toString(),Me=(A==null?void 0:A.id)!=null?String(A.id):X(`${_e}-${U+1}`),Te=(A==null?void 0:A.buttonText)||(A==null?void 0:A.button_text)||null,We=(A==null?void 0:A.description)||(A==null?void 0:A.subtitle)||null,Je=le||$(de)||"";if(!Je)return null;const Oe={id:Me,title:_e,url:Je,subtitle:We,buttonText:Te||void 0};typeof(A==null?void 0:A.tileSize)=="number"&&(Oe.tileSize=A.tileSize),typeof(A==null?void 0:A.tile_size)=="number"&&(Oe.tileSize=A.tile_size),typeof(A==null?void 0:A.minzoom)=="number"&&(Oe.minzoom=A.minzoom),typeof(A==null?void 0:A.maxzoom)=="number"&&(Oe.maxzoom=A.maxzoom),typeof(A==null?void 0:A.opacity)=="number"&&(Oe.opacity=A.opacity);const et=S((A==null?void 0:A.bounds)??(A==null?void 0:A.bbox)??null);return et&&(Oe.bounds=et),Oe}).filter(Boolean):[]}const ke=e.computed(()=>{var le,de;const C=o.card.value,A=r.current.value,U=[(le=C==null?void 0:C.rows)==null?void 0:le.layers,C==null?void 0:C.layers,(de=A==null?void 0:A.data)==null?void 0:de.layers,A==null?void 0:A.layers];for(const _e of U){const Me=me(_e);if(Me.length)return Me}return[]}),Ce=e.computed(()=>q.value.length>0||P.value.length>0||ke.value.length>0),Ee=e.computed(()=>!o.cardLoading.value&&!!o.card.value);function it(){const C={},A=O.value;if(A&&typeof A=="object"&&Object.entries(A).forEach(([U,le])=>{typeof le=="string"&&(C[U]=le)}),_.value&&(C.layer=_.value),!C.geohub){const U=typeof(A==null?void 0:A.geohub)=="string"?A.geohub:null,le=typeof(A==null?void 0:A.geohub_key)=="string"?A.geohub_key:null,de=typeof(A==null?void 0:A.geohubId)=="string"?A.geohubId:null;C.geohub=U||le||de||C.layer||""}return C}async function ot(){const C=_.value;if(!C)return O.value=null,T.value=null,null;if(T.value===C&&O.value)return O.value;if(D.has(C)){const A=D.get(C);return O.value=A,T.value=C,A}try{const A=await fetch(`/api/gis-service/${encodeURIComponent(C)}`);if(!A.ok)return null;const U=await A.json();return D.set(C,U),O.value=U,T.value=C,U}catch{return null}}async function Ge(C){if(!(C!=null&&C.id))return;await ot();const A=it(),U=ae.value.find(Te=>Te.spec.id===C.id),le=ke.value.find(Te=>Te.id===C.id),de=(U==null?void 0:U.spec)||ie(le)||ie(C),_e=(U==null?void 0:U.spec.bounds)??(le==null?void 0:le.bounds);if(!de||k(de.id,B.value))return;const Me=B.value||void 0;z.value=Me??null,b(de,A,Me),E({action:"activate",owner:Me,spec:de,context:A}),ct(_e)}async function ct(C){var _e;if(!(C!=null&&C.length))return;const[A,U,le,de]=C;[A,U,le,de].every(Me=>Number.isFinite(Me))&&typeof d.fitBounds=="function"&&(await((_e=d.ready)==null?void 0:_e.call(d)),d.fitBounds([[A,U],[le,de]],{padding:48,maxZoom:18}))}function _t(C){if(!C)return;const A=Gt()||void 0;N(C,A),E({action:"deactivate",owner:A,spec:{id:C}})}function zn(C){return k(C,Gt())}function In(C,A){const U=A.target;!!(U!=null&&U.checked)?Ge(C):_t(C.id)}function Gt(){return z.value||B.value||null}e.watch(_,(C,A)=>{C!==A&&(O.value=null,T.value=null)});const{next:mn,prev:fn,count:R,index:ne}=r,ye=e.computed(()=>o.count.value),Be=e.computed(()=>o.index.value),pe=e.computed(()=>ye.value>1),Le=e.computed(()=>m.value?R.value:ye.value),$e=e.computed(()=>m.value?ne.value:Be.value),ce=o.next,ve=o.prev;function Ae(){const C=Gt();C&&(V(C),E({action:"clear",owner:C}),z.value=null)}function Ie(){l.value=null,s.value=null,o.close(),r.close(),Ae()}e.watch(x,(C,A)=>{!C&&A&&(Ae(),Pe())});function rt(){!o.isOpen.value&&!r.active.value&&Ae()}e.watch(()=>o.isOpen.value,()=>{rt()}),e.watch(()=>r.active.value,()=>{rt()}),e.watch(_,(C,A)=>{C&&A&&C!==A&&Ae()}),e.watch(ne,(C,A)=>{C!==A&&Ae()}),e.watch(M,(C,A)=>{C&&A&&C!==A&&Ae()});function pt(C){if(!C)return null;if(C.geometry)return C.geometry;const A=(C==null?void 0:C.data)??(C==null?void 0:C.properties);return A!=null&&A.geom_4326?A.geom_4326:A!=null&&A.geom?A.geom:null}function Pe(){var C,A;(A=(C=W.value)==null?void 0:C.remove)==null||A.call(C),W.value=null}function yt(C){var U,le,de;const A=(C==null?void 0:C.type)||((de=(le=(U=C==null?void 0:C.features)==null?void 0:U[0])==null?void 0:le.geometry)==null?void 0:de.type)||"";return A.includes("Polygon")?{type:"fill",paint:{"fill-color":"#0a57ff","fill-opacity":.2,"fill-outline-color":"#0a57ff"}}:A.includes("LineString")?{type:"line",paint:{"line-color":"#0a57ff","line-width":3,"line-opacity":.9}}:{type:"circle",paint:{"circle-color":"#0a57ff","circle-opacity":.9,"circle-radius":8,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}}let Qe=null;function Et(){const C=Array.isArray(g.query.info)?g.query.info[0]:g.query.info;return typeof C!="string"?null:C.trim()||null}function jn(C){var de,_e;if(!C)return null;const A=(C==null?void 0:C.source)??((de=C==null?void 0:C.layer)==null?void 0:de.id),U=((_e=C==null?void 0:C.properties)==null?void 0:_e.id)??(C==null?void 0:C.id);return!A||U===void 0||U===null?null:`${A},${U}`.trim()||null}function Pn(C,A){if(C){if(Array.isArray(C)){if(C.length>=2&&typeof C[0]=="number"&&typeof C[1]=="number"){A.push([C[0],C[1]]);return}C.forEach(U=>Pn(U,A));return}typeof C=="object"&&(Array.isArray(C.coordinates)&&Pn(C.coordinates,A),Array.isArray(C.features)&&C.features.forEach(U=>Pn(U==null?void 0:U.geometry,A)))}}function dw(C){var Te,We;if(!C)return null;const A=C.type==="FeatureCollection"?(We=(Te=C.features)==null?void 0:Te[0])==null?void 0:We.geometry:C.type==="Feature"?C.geometry:C,U=[];if(Pn(A,U),!U.length)return null;let le=U[0][0],de=U[0][0],_e=U[0][1],Me=U[0][1];return U.forEach(([Je,Oe])=>{Je<le&&(le=Je),Je>de&&(de=Je),Oe<_e&&(_e=Oe),Oe>Me&&(Me=Oe)}),[(le+de)/2,(_e+Me)/2]}async function uw(C,A){var _e;const U=Et();if(!U)return;const le=jn(C);if(!le||le!==U||Qe===U)return;const de=dw(A);de&&(await((_e=d.ready)==null?void 0:_e.call(d)),d.flyTo({center:de,zoom:pg}),Qe=U)}function Bl(C){var de;if(!C){Pe();return}const A=(de=d.map)==null?void 0:de.value,U={type:"FeatureCollection",features:[{type:"Feature",geometry:C,properties:{}}]};Pe();const le=yt(C);if(W.value=Se("feature-card-highlight",{source:{type:"geojson",data:U},layer:{id:"feature-card-highlight",type:le.type,source:"feature-card-highlight",paint:le.paint}},d.map),A!=null&&A.moveLayer){const _e=()=>{try{A.moveLayer("feature-card-highlight")}catch{}},Me=()=>{typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(()=>{window.requestAnimationFrame(_e)}):setTimeout(_e,0)};Me();const Te=()=>Me();A.once("styledata",Te);const We=()=>{Me(),A.off("styledata",Te),A.off("idle",We)};A.on("idle",We)}}function pw(C){var le,de;const A=(C==null?void 0:C.source)||((le=C==null?void 0:C.layer)==null?void 0:le.id)||"unknown",U=((de=C==null?void 0:C.properties)==null?void 0:de.id)??(C==null?void 0:C.id)??"unknown";return`${A}:${U}`}async function mw(C){var _e,Me,Te,We,Je;if(!C)return null;const A=pt(C);if(A)return A;const U=((_e=C==null?void 0:C.properties)==null?void 0:_e.id)??(C==null?void 0:C.id);if(!U)return null;const le=pw(C);if(Q.has(le))return Q.get(le);const de=[J.value,C==null?void 0:C.source,(Me=C==null?void 0:C.layer)==null?void 0:Me.id].map(Oe=>typeof Oe=="string"?Oe.trim():"").filter(Boolean);for(const Oe of de)try{const et=await fetch(`/api/map-features/${encodeURIComponent(Oe)}/${encodeURIComponent(String(U))}`);if(!et.ok)continue;const lt=await et.json(),St=((Te=lt==null?void 0:lt.data)==null?void 0:Te.geom)||((We=lt==null?void 0:lt.data)==null?void 0:We.geometry)||((Je=lt==null?void 0:lt.data)==null?void 0:Je.geom_4326)||null,yn=typeof St=="string"?JSON.parse(St):St;if(yn)return Q.set(le,yn),yn}catch{continue}return null}async function gn(C){K.value+=1;const A=K.value;if(i())return;if(!C||m.value){Pe();return}if(!Ee.value){Pe();return}const U=await mw(C);if(A===K.value){if(!U){Pe();return}Bl(U),uw(C,U)}}return e.watch(()=>o.cardFeature.value,C=>{gn(C)},{immediate:!0}),e.watch(()=>o.index.value,()=>{m.value||gn(o.cardFeature.value)}),e.watch(m,C=>{if(C){a.value||Pe();return}if(a.value){i();return}gn(o.cardFeature.value)}),e.watch(J,()=>{if(a.value){i();return}!m.value&&o.cardFeature.value&&gn(o.cardFeature.value)}),e.watch(Ee,C=>{i()||(C?gn(o.cardFeature.value):Pe())}),e.watch(()=>Et(),()=>{Qe=null}),e.watch(l,C=>{C||(s.value=null,Pe())}),e.onBeforeUnmount(()=>{Ae(),Pe()}),(C,A)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[x.value?(e.openBlock(),e.createElementBlock("div",Ff,[e.createElementVNode("div",Df,[e.createElementVNode("div",zf,[e.createElementVNode("p",If,[m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Об’єкт "+e.toDisplayString($e.value+1)+" / "+e.toDisplayString(Le.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[pe.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" Об’єкт "+e.toDisplayString($e.value+1)+" / "+e.toDisplayString(Le.value),1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Інформація про об’єкт ")],64))],64))])]),m.value&&e.unref(R)>1?(e.openBlock(),e.createElementBlock("div",jf,[e.createElementVNode("button",{onClick:A[0]||(A[0]=(...U)=>e.unref(fn)&&e.unref(fn)(...U)),disabled:e.unref(ne)===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(vo),{class:"h-4 w-4"})],8,Pf),e.createElementVNode("button",{onClick:A[1]||(A[1]=(...U)=>e.unref(mn)&&e.unref(mn)(...U)),disabled:e.unref(ne)===e.unref(R)-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(So),{class:"h-4 w-4"})],8,Rf)])):!m.value&&pe.value?(e.openBlock(),e.createElementBlock("div",Of,[e.createElementVNode("button",{onClick:A[2]||(A[2]=(...U)=>e.unref(ve)&&e.unref(ve)(...U)),disabled:Be.value===0,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(vo),{class:"h-4 w-4"})],8,Uf),e.createElementVNode("button",{onClick:A[3]||(A[3]=(...U)=>e.unref(ce)&&e.unref(ce)(...U)),disabled:Be.value===ye.value-1,class:"border p-1 rounded text-xs disabled:opacity-40"},[e.createVNode(e.unref(So),{class:"h-4 w-4"})],8,qf)])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"inline-flex h-7 w-7 items-center justify-center rounded-full bg-slate-100 text-slate-500 hover:bg-slate-200 hover:text-slate-700 ml-1",onClick:Ie}," ✕ ")]),e.createElementVNode("div",Hf,[u.value?(e.openBlock(),e.createElementBlock("div",Wf," Завантаження даних… ")):h.value?(e.openBlock(),e.createElementBlock("div",Yf,e.toDisplayString(h.value),1)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[P.value.length?(e.openBlock(),e.createElementBlock("div",Zf,[e.createElementVNode("dl",Gf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(gt.value,U=>(e.openBlock(),e.createElementBlock("div",{key:U.key,class:"grid grid-cols-1 gap-1 py-3 sm:grid-cols-3 sm:gap-4 even:bg-gray-50 text-[12px]"},[e.createElementVNode("dt",Kf,e.toDisplayString(U.label),1),e.createElementVNode("dd",{class:e.normalizeClass(["text-gray-700 sm:col-span-2 font-normal whitespace-pre-wrap",U.format==="badge"?"font-semibold text-yellow-800":""])},[U.format==="tags"?(e.openBlock(),e.createElementBlock("div",Xf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ue(U.value),(le,de)=>(e.openBlock(),e.createElementBlock("span",{key:de,class:"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold text-foreground"},e.toDisplayString(le),1))),128))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(U.value),1)],64))],2)]))),128))])])):q.value.length?(e.openBlock(),e.createElementBlock("div",Qf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(q.value,(U,le)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:le},[U.type==="html"?(e.openBlock(),e.createElementBlock("div",{key:0,innerHTML:U.content},null,8,Jf)):(e.openBlock(),e.createBlock(ul,{key:1,title:U.componentProps.title,url:U.componentProps.url,id:U.componentProps.id,"button-text":U.componentProps.buttonText,onActivate:Ge},e.createSlots({_:2},[U.slotText?{name:"default",fn:e.withCtx(()=>[e.createElementVNode("span",{innerHTML:U.slotText},null,8,eg)]),key:"0"}:void 0]),1032,["title","url","id","button-text"]))],64))),128))])):e.createCommentVNode("",!0),ae.value.length?(e.openBlock(),e.createElementBlock("div",tg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ae.value,U=>(e.openBlock(),e.createBlock(ul,{key:U.spec.id,title:U.componentProps.title,url:U.componentProps.url,id:U.spec.id,"button-text":U.componentProps.buttonText,onActivate:Ge},null,8,["title","url","id","button-text"]))),128))])):e.createCommentVNode("",!0),vt.value?(e.openBlock(),e.createElementBlock("div",ng,[e.createElementVNode("button",{type:"button",class:"flex items-center gap-1 justify-end w-full font-medium text-blue-600 hover:text-blue-800 transition-colors disabled:opacity-60 cursor-pointer",onClick:G},[e.createElementVNode("span",og,e.toDisplayString(pn.value),1),(e.openBlock(),e.createBlock(e.resolveDynamicComponent(j.value),{class:"h-3 w-3 stroke-[1.5px]"}))])])):e.createCommentVNode("",!0),ke.value.length?(e.openBlock(),e.createElementBlock("div",rg,[A[5]||(A[5]=e.createElementVNode("p",{class:"text-xs font-semibold uppercase tracking-wide text-slate-500"},"Шари",-1)),e.createElementVNode("div",lg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(ke.value,U=>(e.openBlock(),e.createElementBlock("div",{key:U.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",ag,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:zn(U.id),onChange:le=>In(U,le)},null,40,sg),A[4]||(A[4]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-width":"1.4","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",ig,e.toDisplayString(U.title),1)]),U.subtitle?(e.openBlock(),e.createElementBlock("div",cg,e.toDisplayString(U.subtitle),1)):e.createCommentVNode("",!0)]))),128))])])):e.createCommentVNode("",!0),Ce.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",dg," Даних не знайдено. "))],64))])])):e.createCommentVNode("",!0)]),_:1}))}}),[["__scopeId","data-v-79735544"]]),ml=e.defineComponent({__name:"MapBoundaryLayer",props:{layerId:{},boundary:{},katottg:{},settingsMap:{}},setup(t){var h,c;const n=t,o=((c=(h=e.getCurrentInstance())==null?void 0:h.appContext.config.globalProperties)==null?void 0:c.$settings)||null,{map:r,ready:l}=Re();let s=null;function a(){s==null||s.remove(),s=null}function i(d){if(!d)return null;if(typeof d=="string")try{d=JSON.parse(d)}catch{return null}return d.type==="FeatureCollection"?d:d.type==="Feature"?{type:"FeatureCollection",features:[d]}:d.type&&Array.isArray(d.coordinates)?{type:"FeatureCollection",features:[{type:"Feature",geometry:d,properties:{}}]}:Array.isArray(d.features)?{type:"FeatureCollection",features:d.features}:d.geometry?i(d.geometry):null}function f(d){var g,b,N;return{type:"line",color:"#8e4484",width:2,opacity:((((N=(b=(g=d==null?void 0:d.features)==null?void 0:g[0])==null?void 0:b.geometry)==null?void 0:N.type)||"").includes("Polygon"),.95)}}async function m(d){const y=await fetch(d);if(!y.ok)throw new Error(String(y.status));return y.json()}async function x(d,y){if(d){const p=/^https?:\/\//.test(d)?d:new URL(d,location.origin).toString(),g=await m(p).catch(()=>null),b=i(g);if(b)return b}if(y){const p=await m(`https://data.gki.com.ua/api-user/atu/${encodeURIComponent(y)}`).catch(()=>null),g=i(p);if(g)return g}return null}async function u(){var g,b,N,V;if(!n.layerId||!r.value){a();return}typeof l=="function"&&await l().catch(()=>{});const d=n.boundary??((g=n.settingsMap)==null?void 0:g.boundary)??((b=o==null?void 0:o.map)==null?void 0:b.boundary)??null,y=n.katottg??((N=n.settingsMap)==null?void 0:N.katottg)??((V=o==null?void 0:o.map)==null?void 0:V.katottg)??null;if(!d&&!y){a();return}const p=await x(d,y);if(!p){a();return}a(),s=Se(`${n.layerId}-boundary`,{source:{type:"geojson",data:p},style:f(p)},r)}return e.watch(()=>{var d,y;return[n.layerId,n.boundary,n.katottg,(d=n.settingsMap)==null?void 0:d.boundary,(y=n.settingsMap)==null?void 0:y.katottg,r.value]},()=>{u()},{immediate:!0}),e.onBeforeUnmount(a),(d,y)=>null}}),mg={class:"map-center-control"},fg=["aria-label"],gg={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Mt=xe(e.defineComponent({name:"MapCenterControl",__name:"MapCenterControl",props:{center:{},zoom:{},targetCenter:{},targetZoom:{},targetLabel:{},targetAriaLabel:{}},setup(t){const n=t,{map:o,ready:r}=Re(),l=e.ref(null),s=e.ref(null),a=e.ref(null),i=e.ref(null),f=mo(),m=e.computed(()=>{var b;return((b=f.value)==null?void 0:b.map)??null});function x(b){if(Array.isArray(b)&&b.length>=2){const[N,V]=b.slice(0,2).map(k=>Number(k));return Number.isNaN(N)||Number.isNaN(V)?null:[N,V]}if(b&&typeof b=="object"){const N=b,V=N.lng??N.lon??N.long??N.x,k=N.lat??N.y;if(V!=null&&k!=null){const E=Number(V),_=Number(k);if(!Number.isNaN(E)&&!Number.isNaN(_))return[E,_]}}if(typeof b=="string"){const N=b.split(",").map(V=>Number(V.trim()));if(N.length>=2&&N.every(V=>!Number.isNaN(V)))return[N[0],N[1]]}return null}function u(b){const N=x(b);N&&(l.value=N)}function h(b){const N=Number(b);Number.isNaN(N)||(s.value=N)}e.watch(()=>n.center,b=>u(b),{immediate:!0}),e.watch(()=>n.zoom,b=>h(b),{immediate:!0}),e.watch(()=>n.targetCenter,b=>{a.value=x(b)},{immediate:!0}),e.watch(()=>n.targetZoom,b=>{const N=Number(b);i.value=Number.isNaN(N)?null:N},{immediate:!0}),e.watch(()=>{var b;return(b=m.value)==null?void 0:b.center},b=>{u(b)},{immediate:!0}),e.watch(()=>{var b;return(b=m.value)==null?void 0:b.zoom},b=>{h(b)},{immediate:!0});const c=e.computed(()=>{var b;return((b=n.targetLabel)==null?void 0:b.trim())||"Точка"}),d=e.computed(()=>n.targetAriaLabel||"Перейти до точки"),y=e.computed(()=>!!a.value);e.onMounted(async()=>{await(r==null?void 0:r());const b=o.value;if(b){if(!l.value){const N=b.getCenter();l.value=[N.lng,N.lat]}s.value==null&&(s.value=b.getZoom())}});function p(){const b=o.value;if(!b)return;const N=l.value||(()=>{const k=b.getCenter();return[k.lng,k.lat]})(),V=s.value??b.getZoom();b.flyTo({center:N,zoom:V})}function g(){const b=o.value;if(!b||!a.value)return;const N=i.value??s.value??b.getZoom();b.flyTo({center:a.value,zoom:N})}return(b,N)=>(e.openBlock(),e.createElementBlock("div",mg,[y.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,id:"center-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":"Повернути центр",onClick:e.withModifiers(p,["stop"])},[N[0]||(N[0]=e.createElementVNode("span",{class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},"Центр мапи",-1)),e.createVNode(e.unref(Zl),{class:"w-4 h-4"})])),y.value?(e.openBlock(),e.createElementBlock("button",{key:1,id:"goto-target-btn",type:"button",class:"group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200 bg-white text-gray-700 hover:bg-gray-50 hover:scale-105 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2","aria-label":d.value,onClick:e.withModifiers(g,["stop"])},[e.createElementVNode("span",gg,e.toDisplayString(c.value),1),e.createVNode(e.unref(bn),{class:"w-4 h-4"})],8,fg)):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-03fa94f6"]]),yg={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},hg={class:"flex-1 relative overflow-hidden"},xg={class:"absolute top-0 left-0 w-full z-20"},bg={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},kg={class:"flex items-center gap-3 h-[2.75rem]"},wg={class:"font-semibold text-lg text-gray-800 line-clamp-1"},_g={key:0,class:"text-xs text-gray-500 truncate"},Eg={class:"flex items-center gap-4 min-w-0"},Ng=["title"],Cg={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Vg={class:"relative w-full h-full"},Bg={style:{top:"17px",left:"230px",position:"absolute","z-index":"1"}},$g={class:"absolute top-4 left-4 z-20"},vg={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Sg={class:"absolute bottom-4 left-4 z-20"},Lg={class:"flex-1 flex flex-col h-full"},Ag={class:"px-3 pt-3 pb-2 border-b border-gray-100"},Mg={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-6 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Tg=["aria-selected","onClick"],Fg={class:"leading-none"},Dg={class:"flex flex-col flex-1 overflow-y-hidden p-3"},zg="OpenGIS",fl=2,Ln=5,Ig=1e3,jg=xe(e.defineComponent({__name:"service",props:{hideServiceKey:{type:Boolean,default:!1}},setup(t){var te,v;const n=t,o=e.toRef(n,"hideServiceKey"),r=Fe.useRoute(),l=Fe.useRouter(),{id:s}=r.params,a=e.ref(null),i=e.ref(null),f=e.ref({}),m=e.ref(null),x=((v=(te=e.getCurrentInstance())==null?void 0:te.appContext.config.globalProperties)==null?void 0:v.$settings)||null;function u(L){typeof document>"u"||(document.title=L?`${L} — Сервіс`:zg)}let h=null;const c=e.ref(!1);function d(){var L;return(L=a.value)==null?void 0:L.ctx}function y(L){if(Array.isArray(L))return y(L[0]);if(typeof L!="string"&&typeof L!="number")return null;const F=typeof L=="number"?L:Number(L.trim());return Number.isFinite(F)?F:null}function p(L,F){return L.toFixed(F)}function g(L,F,oe){const ue=.5*10**-oe;return Math.abs(L-F)>ue}function b(){var De,ze,Ue,Ze;const L=(ze=(De=d())==null?void 0:De.map)==null?void 0:ze.value;if(!L)return;const F=y(r.query.z),oe=y(r.query.x),ue=y(r.query.y);if(F==null||oe==null||ue==null)return;const be=(Ue=L.getCenter)==null?void 0:Ue.call(L),Ve=(Ze=L.getZoom)==null?void 0:Ze.call(L);(!be||g(be.lng,oe,Ln)||g(be.lat,ue,Ln)||g(Ve??0,F,fl))&&(c.value=!0,L.jumpTo({center:[oe,ue],zoom:F}),c.value=!1)}function N(){var be,Ve,ge,De;if(c.value)return;const L=(Ve=(be=d())==null?void 0:be.map)==null?void 0:Ve.value;if(!L)return;const F=(ge=L.getCenter)==null?void 0:ge.call(L),oe=(De=L.getZoom)==null?void 0:De.call(L);if(!F||oe==null)return;const ue={...r.query,z:p(oe,fl),x:p(F.lng,Ln),y:p(F.lat,Ln)};r.query.z===ue.z&&r.query.x===ue.x&&r.query.y===ue.y||l.replace({query:ue})}const V=e.ref(null),k=e.ref(""),E=e.ref([]),_=e.ref([]),B=e.ref([]),M=e.ref("list"),z=e.ref(""),W=e.ref([]),K=e.ref(!0);let Q=null;const H=e.computed(()=>{var L,F;return((L=m.value)==null?void 0:L.id)??((F=m.value)==null?void 0:F.service_id)??null}),J=e.computed(()=>{const L=(x==null?void 0:x.map)||null,F=(L==null?void 0:L.boundary)??null,oe=(L==null?void 0:L.katottg)??null;return!F&&!oe?null:{boundary:F,katottg:oe}}),O=e.computed(()=>{const L=m.value;if(!L)return"";const F=[];!o.value&&L.service_key&&F.push(`Сервіс: ${L.service_key}`),L.description&&F.push(L.description);const oe=L.group_name||L.group_id;return oe&&F.push(`Група: ${oe}`),typeof L.is_public<"u"&&F.push(L.is_public?"Публічний":"Не публічний"),typeof L.is_active<"u"&&F.push(L.is_active?"Активний":"Неактивний"),F.join(", ")}),T=[{key:"style",label:"Стиль",icon:Jr},{key:"popup",label:"Попап",icon:Ip},{key:"filter",label:"Фільтр",icon:Op},{key:"legend",label:"Легенда",icon:Lp},{key:"card",label:"Картка",icon:el},{key:"metadata",label:"Метадані",icon:lo}],D=T.map(L=>L.key),X=e.ref("style");e.onMounted(async()=>{const L=r.query.tab;L&&D.includes(L)&&(X.value=L),await ee(),$()});async function $(){var ue;const L=d();if(!(L!=null&&L.ready))return;await L.ready(),b();const F=(ue=L.map)==null?void 0:ue.value;if(!F)return;const oe=()=>N();F.on("moveend",oe),F.on("zoomend",oe),h=()=>{F.off("moveend",oe),F.off("zoomend",oe)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{b()}),e.watch(X,L=>{r.query.tab!==L&&l.replace({query:{...r.query,tab:L}})}),e.watch(()=>r.query.tab,L=>{L&&D.includes(L)&&X.value!==L&&(X.value=L)}),e.watch(()=>{var L;return(L=m.value)==null?void 0:L.name},L=>u(L),{immediate:!0});function w(L){if(!L)return null;try{return JSON.parse(JSON.stringify(L))}catch(F){return console.warn("Failed to clone style",F),null}}function S(L){if(!L)return null;if(typeof L=="string")try{return oo(Qr.load(L)||null)}catch(F){return console.warn("Failed to parse style yaml",F),null}return oo(w(L))}function I(L,F){try{return JSON.stringify(L)===JSON.stringify(F)}catch{return!1}}function Y(){var F;if(!m.value)return;const L=S(V.value);I(L,((F=m.value)==null?void 0:F.style)??null)||(m.value={...m.value,style:L})}function Z(){Q&&clearTimeout(Q),Q=setTimeout(()=>{Q=null,Y()},Ig)}const ee=async()=>{try{const L=await fetch(`/api/gis-service/${s}`);if(!L.ok)throw new Error(`${L.status}`);const F=await L.json();f.value=F||{},i.value=s;const oe=S(F.style);m.value=F?{...F,style:w(oe)}:null,V.value=oe,k.value=typeof(F==null?void 0:F.style)=="string"?F.style:oe?Qr.dump(oe):"",_.value=(F==null?void 0:F.popup)||[],M.value=F.card_mode==="html"?"html":"list",B.value=F.card,z.value=F.html,E.value=(F==null?void 0:F.legend)||[],W.value=(F==null?void 0:F.filters)||[]}catch(L){console.error("Failed to fetch map info",L)}};e.watch(()=>{var L;return(L=m.value)==null?void 0:L.style},L=>{V.value=S(L)},{deep:!0}),e.watch(()=>V.value,()=>{Z()},{deep:!0}),e.onBeforeUnmount(()=>{Q&&(clearTimeout(Q),Q=null),h==null||h(),h=null});async function re(L){try{const F=await fetch(`/api/gis-clear-vtile/${L}`),{message:oe,error:ue,code:be}=await F.json();if(be===200)return he.notify({type:"success",title:"Успіх",message:oe});he.notify({type:"error",title:"Помилка",message:ue})}catch(F){he.notify({type:"error",title:"Помилка",message:"Не вдалося очистити тайли"}),console.error(F)}}async function ie(L,F){await we({[L]:F},L)}function se(){const L=w(V.value);m.value=m.value?{...m.value,style:L}:m.value}async function we(L,F){if(m.value={...m.value||{},...L},typeof L.html<"u"&&(f.value={...f.value||{},html:L.html}),!!H.value)try{if(!(await fetch(`/api/gis-service/${H.value}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(L)})).ok)throw new Error("Save failed");he.notify({type:"success",title:"Успіх",message:`${F} saved`}),await ee()}catch(oe){he.notify({type:"error",title:"Помилка",message:`Failed to save ${F}`}),console.error(oe)}}async function P(L,F){if(L!=="card"){await ie(L,F);return}const oe=(F==null?void 0:F.card_mode)==="html"?"html":"list",ue=oe==="html"&&typeof(F==null?void 0:F.html)=="string"?F.html:"",be=(oe==="html"?[]:null)||(Array.isArray(F==null?void 0:F.list)?F.list:[]);B.value=be,M.value=oe,z.value=ue;const Ve={card_mode:oe};oe==="html"&&(Ve.html=ue),oe==="list"&&(Ve.card=be),await we(Ve,"card")}return(L,F)=>{var oe,ue,be,Ve;return e.openBlock(),e.createElementBlock("div",yg,[e.createElementVNode("div",hg,[e.createElementVNode("div",xg,[e.createElementVNode("div",bg,[e.createElementVNode("div",kg,[e.createElementVNode("button",{onClick:F[0]||(F[0]=ge=>L.$router.back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...F[11]||(F[11]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",null,[e.createElementVNode("div",wg,e.toDisplayString((oe=m.value)==null?void 0:oe.name),1),O.value?(e.openBlock(),e.createElementBlock("div",_g,e.toDisplayString(O.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Eg,[e.createElementVNode("div",{class:"max-w-xl text-xs text-gray-600 truncate",title:(ue=m.value)==null?void 0:ue.description},e.toDisplayString((be=m.value)==null?void 0:be.description),9,Ng),H.value?(e.openBlock(),e.createBlock(so,{key:0,"entity-id":H.value,"entity-info":{name:(Ve=m.value)==null?void 0:Ve.name},table:"gis.services.table","entity-label":"Сервіс","save-method":"put","show-xml-item":!1,"clear-tiles-handler":re,onSaved:ee},null,8,["entity-id","entity-info"])):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",Cg,[e.createElementVNode("div",Vg,[e.createVNode($n,{ref_key:"mapViewRef",ref:a},{default:e.withCtx(()=>{var ge,De,ze,Ue,Ze,ft,gt;return[(ge=m.value)!=null&&ge.service_id?(e.openBlock(),e.createBlock(df,{key:0,id:(De=m.value)==null?void 0:De.service_id,layer:m.value,"style-spec":((ze=m.value)==null?void 0:ze.style)||null,autoCenter:!1},null,8,["id","layer","style-spec"])):e.createCommentVNode("",!0),H.value?(e.openBlock(),e.createBlock(ml,{key:1,"layer-id":H.value,boundary:((Ue=m.value)==null?void 0:Ue.boundary)||((Ze=J.value)==null?void 0:Ze.boundary)||null,katottg:((ft=m.value)==null?void 0:ft.katottg)||((gt=J.value)==null?void 0:gt.katottg)||null},null,8,["layer-id","boundary","katottg"])):e.createCommentVNode("",!0),e.createElementVNode("div",Bg,[H.value?(e.openBlock(),e.createBlock(go,{key:0,"layer-id":H.value,filters:W.value},null,8,["layer-id","filters"])):e.createCommentVNode("",!0)]),F[12]||(F[12]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createElementVNode("div",$g,[e.createVNode(Yt)]),e.createElementVNode("div",vg,[e.createVNode(Mt),f.value.center?(e.openBlock(),e.createBlock(Mt,{key:0,targetCenter:f.value.center,targetLabel:"Ценр даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Sg,[e.createVNode(yo,{items:E.value||null},null,8,["items"])]),e.createVNode(dl),e.createVNode(ko,{html:f.value.html},null,8,["html"])]}),_:1},512)])]),e.createVNode(ro,{open:K.value,onToggle:F[1]||(F[1]=ge=>K.value=!K.value)},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",K.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",Lg,[e.createElementVNode("div",Ag,[e.createElementVNode("div",Mg,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(T,ge=>e.createElementVNode("button",{key:ge.key,type:"button",role:"tab","aria-selected":X.value===ge.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",X.value===ge.key?"bg-white shadow-sm text-gray-700":""]),onClick:De=>X.value=ge.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(ge.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",Fg,e.toDisplayString(ge.label),1)],10,Tg)),64))])]),e.createElementVNode("div",Dg,[X.value==="style"?(e.openBlock(),e.createBlock(Nm,{key:0,token:H.value,"style-text":k.value,"style-yaml":V.value,"onUpdate:styleYaml":F[2]||(F[2]=ge=>V.value=ge),"onUpdate:styleText":F[3]||(F[3]=ge=>k.value=ge),onUpdate:se},null,8,["token","style-text","style-yaml"])):X.value==="legend"?(e.openBlock(),e.createBlock(Qm,{key:1,token:H.value,columns:E.value,"onUpdate:columns":F[4]||(F[4]=ge=>E.value=ge),onSave:F[5]||(F[5]=ge=>ie("legend",ge))},null,8,["token","columns"])):X.value==="popup"?(e.openBlock(),e.createBlock(qm,{key:2,token:H.value,columns:_.value,fields:f.value.fields,"onUpdate:columns":F[6]||(F[6]=ge=>_.value=ge),onSave:F[7]||(F[7]=ge=>ie("popup",ge))},null,8,["token","columns","fields"])):X.value==="card"?(e.openBlock(),e.createBlock(af,{key:3,token:H.value,columns:B.value,fields:f.value.fields,"view-mode":M.value,html:z.value,"onUpdate:columns":F[8]||(F[8]=ge=>B.value=ge),onSave:P},null,8,["token","columns","fields","view-mode","html"])):X.value==="filter"?(e.openBlock(),e.createBlock(cf,{key:4,token:H.value,fields:f.value.fields,columns:W.value,"onUpdate:columns":F[9]||(F[9]=ge=>W.value=ge),onSave:F[10]||(F[10]=ge=>ie("filters",ge))},null,8,["token","fields","columns"])):X.value==="metadata"?(e.openBlock(),e.createBlock(ao,{key:5,data:m.value,"entity-id":String(e.unref(s)),"entity-type":"service",onSaved:ee},null,8,["data","entity-id"])):e.createCommentVNode("",!0)])])],2)])}}}),[["__scopeId","data-v-f5afd7c1"]]),Pg={class:"flex-1 overflow-y-auto p-4 sm:p-6"},Rg={class:"space-y-3"},Og={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},Ug={class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2"},qg={class:"text-xs text-gray-500 mb-1"},Hg={key:0,class:"text-base text-md font-semibold text-gray-900"},Wg={key:1,class:"text-base text-md font-semibold text-gray-900"},Yg={class:"bg-white p-3 rounded-xl border border-gray-200 shadow-sm"},Zg={class:"space-y-2"},Gg={class:"bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200"},Kg={class:"text-sm font-semibold text-gray-900"},Xg={class:"text-xs text-gray-600 mt-1"},Qg={class:"grid grid-cols-2 gap-3"},Jg={class:"text-xs text-gray-500 mb-1"},e0={class:"text-sm font-semibold text-gray-900"},t0={class:"bg-gray-50 p-4 rounded-lg"},n0={class:"grid grid-cols-2 gap-4"},o0={class:"text-xs text-gray-500 mb-1"},r0={class:"text-sm font-semibold text-gray-900"},l0=e.defineComponent({directives:{tooltip:he.TooltipDirective},__name:"raster-info-tab",props:{details:{}},setup(t){return(n,o)=>{const r=e.resolveDirective("tooltip");return e.openBlock(),e.createElementBlock("div",Pg,[e.createElementVNode("div",Rg,[e.createElementVNode("div",Og,[o[0]||(o[0]=e.createElementVNode("div",{class:"mb-4"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Основні параметри")],-1)),e.createElementVNode("div",Ug,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.baseParams,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg"},[e.createElementVNode("p",qg,e.toDisplayString(l.label),1),l.tooltip?e.withDirectives((e.openBlock(),e.createElementBlock("p",Hg,[e.createTextVNode(e.toDisplayString(l.value),1)])),[[r,l.tooltip]]):(e.openBlock(),e.createElementBlock("p",Wg,e.toDisplayString(l.value),1))]))),128))])]),e.createElementVNode("div",Yg,[o[3]||(o[3]=e.createElementVNode("div",{class:"mb-2"},[e.createElementVNode("h4",{class:"text-sm font-semibold text-gray-900 uppercase tracking-wide"},"Просторова інформація")],-1)),e.createElementVNode("div",Zg,[e.createElementVNode("div",null,[o[1]||(o[1]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Система координат",-1)),e.createElementVNode("div",Gg,[e.createElementVNode("p",Kg,e.toDisplayString(t.details.spatial.crs.code),1),e.createElementVNode("p",Xg,e.toDisplayString(t.details.spatial.crs.description),1)])]),e.createElementVNode("div",null,[o[2]||(o[2]=e.createElementVNode("p",{class:"text-xs text-gray-500 mb-2"},"Межі покриття",-1)),e.createElementVNode("div",Qg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.bounds,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label,class:"bg-gray-50 p-2 rounded-lg border border-gray-200"},[e.createElementVNode("p",Jg,e.toDisplayString(l.label),1),e.createElementVNode("p",e0,e.toDisplayString(l.value),1)]))),128))])]),e.createElementVNode("div",t0,[e.createElementVNode("div",n0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.details.spatial.resolution,l=>(e.openBlock(),e.createElementBlock("div",{key:l.label},[e.createElementVNode("p",o0,e.toDisplayString(l.label),1),e.createElementVNode("p",r0,e.toDisplayString(l.value),1)]))),128))])])])])])])}}}),a0={class:"flex-1 overflow-y-auto space-y-3 pr-1"},s0={class:"font-medium text-sm text-gray-800"},i0={class:"text-xs text-gray-500"},c0=e.defineComponent({__name:"raster-files-tab",props:{files:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",a0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.files,r=>(e.openBlock(),e.createElementBlock("div",{key:r.name,class:"border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"},[e.createElementVNode("div",null,[e.createElementVNode("p",s0,e.toDisplayString(r.name),1),e.createElementVNode("p",i0,e.toDisplayString(r.resolution)+" • "+e.toDisplayString(r.size)+"MB",1)]),e.createElementVNode("span",{class:e.normalizeClass(["text-[11px] font-semibold px-2 py-0.5 rounded-full",r.statusClass])},e.toDisplayString(r.status),3)]))),128))]))}}),d0={},u0={xmlns:"http://www.w3.org/2000/svg",width:"12px",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"};function p0(t,n){return e.openBlock(),e.createElementBlock("svg",u0,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M20,16v4a2,2,0,0,1-2,2H4a2,2,0,0,1-2-2V6A2,2,0,0,1,4,4H8",fill:"none",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e.createElementVNode("polygon",{fill:"none",points:"12.5 15.8 22 6.2 17.8 2 8.3 11.5 8 16 12.5 15.8",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])])}const m0=xe(d0,[["render",p0]]),f0={},g0={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 y0(t,n){return e.openBlock(),e.createElementBlock("svg",g0,[...n[0]||(n[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"9"},null,-1),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"8"},null,-1),e.createElementVNode("path",{d:"M11 12h1v4h1"},null,-1)])])}const h0=xe(f0,[["render",y0]]),x0={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},b0={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},k0={class:"flex items-center gap-2"},w0={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},_0={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},E0=["checked"],N0=e.defineComponent({__name:"RasterLayer",props:{tileUrl:{},extent:{},layerId:{},beforeId:{},showRasterExtent:{type:Boolean}},emits:["toggle-extent"],setup(t){const n=t,o=n.layerId||"raster-preview-layer",r=`${o}-source`,l=n.extent&&n.extent.length===4?[...n.extent]:void 0,s=Se(o,{sourceId:r,source:{type:"raster",tiles:n.tileUrl?[n.tileUrl+"?nottl=1"]:[],tileSize:256,...l?{bounds:l}:{}},layer:{id:`${o}-raster`,type:"raster",paint:{"raster-opacity":1}},beforeId:n.beforeId??null}),{fitBounds:a}=Re(),i=e.ref(1);e.watch(()=>n.tileUrl,u=>{if(!u){s.setVisible(!1);return}s.setVisible(!0),s.setTiles([u])},{immediate:!0}),e.watch(()=>i.value,u=>{s.setOpacity(u)},{immediate:!0});let f=null,m=!1;e.watch(()=>n.extent,u=>{if(!u||u.length!==4)return;const h=u.join(",");if(h!==f){if(f=h,!m){m=!0;return}a==null||a([[u[0],u[1]],[u[2],u[3]]],{padding:40,maxZoom:17})}},{immediate:!0});const x=e.computed(()=>`${Math.round(i.value*100)}%`);return(u,h)=>(e.openBlock(),e.createElementBlock("div",x0,[e.createElementVNode("div",b0,[e.createElementVNode("div",k0,[h[2]||(h[2]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"1",step:"0.01","onUpdate:modelValue":h[0]||(h[0]=c=>i.value=c),class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(x.value),1)])]),e.createElementVNode("div",w0,[e.createElementVNode("label",_0,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:t.showRasterExtent,onChange:h[1]||(h[1]=c=>u.$emit("toggle-extent",c.target.checked))},null,40,E0),h[3]||(h[3]=e.createElementVNode("span",null,"Межі растру",-1))])])]))}}),gl=e.defineComponent({__name:"ExtentOutlineLayer",props:{extent:{},layerId:{},beforeId:{}},setup(t){const n=t,o=n.layerId||"extent-outline-layer",r=`${o}-source`,l=e.computed(()=>{const i=n.extent;if(!i||i.length!==4)return null;const[f,m,x,u]=i;return[f,m,x,u].some(h=>typeof h!="number"||Number.isNaN(h))?null:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[f,m],[x,m],[x,u],[f,u],[f,m]]]}}]}}),s=Re(),a=Se(o,{sourceId:r,source:{type:"geojson",data:l.value||{type:"FeatureCollection",features:[]}},layer:{id:o,type:"line",paint:{"line-color":"#ef4444","line-width":2}},beforeId:n.beforeId??null});return e.watch(()=>l.value,i=>{var m;if(!i){a.setVisible(!1),a.setData({type:"FeatureCollection",features:[]});return}a.setVisible(!0),a.setData(i);const f=(m=s.map)==null?void 0:m.value;f!=null&&f.moveLayer&&f.getLayer(o)&&f.moveLayer(o)},{immediate:!0}),(i,f)=>e.createCommentVNode("",!0)}}),C0={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},V0={class:"flex-1 relative overflow-hidden"},B0={class:"absolute top-0 left-0 w-full z-20"},$0={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},v0={class:"flex items-center gap-3 min-w-0"},S0={class:"flex flex-col min-w-0"},L0={class:"font-semibold text-lg text-gray-800 line-clamp-1"},A0={key:0,class:"text-xs text-gray-500 truncate"},M0={class:"flex items-center gap-4"},T0={class:"flex-1 min-w-0"},F0=["title"],D0={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},z0={class:"relative w-full h-full"},I0={class:"absolute top-4 left-4 z-20"},j0={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},P0={class:"flex-1 flex flex-col h-full"},R0={class:"px-3 pt-3 pb-2 border-b border-gray-100"},O0={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-3 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},U0=["aria-selected","onClick"],q0={class:"leading-none"},H0={class:"flex flex-col flex-1 overflow-y-hidden p-4"},W0={key:0,class:"mb-3 text-xs text-slate-500"},Y0={key:1,class:"mb-3 text-xs text-rose-600"},Z0="OpenGIS",yl=2,An=5,G0=e.defineComponent({__name:"raster",setup(t){const n=[{cardClass:"bg-gradient-to-br from-green-50 to-green-100/30 border-green-200",titleClass:"text-green-900"},{cardClass:"bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200",titleClass:"text-blue-900"},{cardClass:"bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200",titleClass:"text-purple-900"},{cardClass:"bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200",titleClass:"text-gray-900"}],o=Fe.useRouter(),r=Fe.useRoute(),l=e.ref(null),s=e.computed(()=>{var L;const v=(L=r.params)==null?void 0:L.id;return typeof v=="string"?v:void 0}),a=e.ref(null),i=e.ref(!1),f=e.ref(!1),m=e.ref(null),x=e.ref(!0);let u=null;const h=e.ref(!1);function c(v){if(Array.isArray(v))return c(v[0]);if(typeof v!="string"&&typeof v!="number")return null;const L=typeof v=="number"?v:Number(v.trim());return Number.isFinite(L)?L:null}function d(v,L){return v.toFixed(L)}function y(v,L,F){const oe=.5*10**-F;return Math.abs(v-L)>oe}function p(){var v;return(v=l.value)==null?void 0:v.ctx}function g(){var ge,De,ze,Ue;const v=(De=(ge=p())==null?void 0:ge.map)==null?void 0:De.value;if(!v)return;const L=c(r.query.z),F=c(r.query.x),oe=c(r.query.y);if(L==null||F==null||oe==null)return;const ue=(ze=v.getCenter)==null?void 0:ze.call(v),be=(Ue=v.getZoom)==null?void 0:Ue.call(v);(!ue||y(ue.lng,F,An)||y(ue.lat,oe,An)||y(be??0,L,yl))&&(h.value=!0,v.jumpTo({center:[F,oe],zoom:L}),h.value=!1)}function b(){var ue,be,Ve,ge;if(h.value)return;const v=(be=(ue=p())==null?void 0:ue.map)==null?void 0:be.value;if(!v)return;const L=(Ve=v.getCenter)==null?void 0:Ve.call(v),F=(ge=v.getZoom)==null?void 0:ge.call(v);if(!L||F==null)return;const oe={...r.query,z:d(F,yl),x:d(L.lng,An),y:d(L.lat,An)};r.query.z===oe.z&&r.query.x===oe.x&&r.query.y===oe.y||o.replace({query:oe})}function N(){var L;if(typeof document>"u")return;const v=(L=W.value)==null?void 0:L.name;document.title=v?`${v} — Растер`:Z0}const V=e.computed(()=>{var L;const v=(L=a.value)==null?void 0:L.url;return v?/^https?:\/\//i.test(v)||typeof window>"u"||typeof location>"u"?v:`${location.origin}${v}`:""}),k=e.computed(()=>{var v;return((v=a.value)==null?void 0:v.extent)??null}),E=e.computed(()=>s.value?`raster-${s.value}`:void 0),_=e.computed(()=>s.value?`raster-extent-${s.value}`:"raster-extent"),B=e.computed(()=>{const v=E.value??"raster",L=k.value&&k.value.length===4?k.value.join(","):"no-extent";return`${v}-${L}`}),M=e.computed(()=>!!V.value),z=e.computed(()=>{const v=k.value;if(!v||v.length!==4)return null;const[L,F,oe,ue]=v;return[L,F,oe,ue].some(be=>typeof be!="number"||Number.isNaN(be))?null:[(L+oe)/2,(F+ue)/2]}),W=e.computed(()=>{var ue,be;const v=a.value,L=v==null?void 0:v.extent;return{id:s.value??"—",name:(v==null?void 0:v.name)||((be=(ue=v==null?void 0:v.files)==null?void 0:ue[0])==null?void 0:be.name),description:v!=null&&v.extension?`Формат ${v.extension.toUpperCase()}`:"Попередній перегляд растрового шару. Реальні метадані підвантажуються.",coverage:L&&L.length===4?`${te(L[0])}, ${te(L[1])} → ${te(L[2])}, ${te(L[3])}`:"Покриття уточнюється",crs:v!=null&&v.srid?`EPSG:${v.srid}`:"EPSG:4326",source:v!=null&&v.proj4?v.proj4:"Джерело: Mapnik",updatedAt:v!=null&&v.cache?"Дані кешовано":"Нові дані"}}),K=e.computed(()=>{const v=a.value;return v?[v.source_path,v.description,v.is_public?"Публічна":"Не публічна",v.is_active?"Архівна":"Активна"].filter(L=>L).join(", "):""}),Q=[{key:"info",label:"Інформація",icon:h0},{key:"files",label:"Файли",icon:m0},{key:"metadata",label:"Метадані",icon:lo}],H=Q.map(v=>v.key),J=e.ref(H.includes(r.query.tab)?r.query.tab:"info"),O=e.ref(!0);e.watch(()=>r.query.tab,v=>{v&&H.includes(v)&&J.value!==v&&(J.value=v)}),e.watch(J,v=>{r.query.tab!==v&&o.replace({query:{...r.query,tab:v}})});const T=e.computed(()=>I(a.value)),D=e.computed(()=>Z(a.value));e.watch(()=>a.value,()=>{N()},{immediate:!0});async function X(){var oe;const v=p();if(!(v!=null&&v.ready))return;await v.ready(),g();const L=(oe=v.map)==null?void 0:oe.value;if(!L)return;const F=()=>b();L.on("moveend",F),L.on("zoomend",F),u=()=>{L.off("moveend",F),L.off("zoomend",F)}}e.watch(()=>[r.query.z,r.query.x,r.query.y],()=>{g()}),e.onMounted(()=>{X()}),e.onBeforeUnmount(()=>{u==null||u(),u=null}),e.watch(s,()=>{w()},{immediate:!0});async function $(v){var L;w(),((L=a.value)==null?void 0:L.srid)!==v.srid&&(he.notify({title:"XML start",type:"info",message:"зміна системи координат, оновлюємо карту ..."}),await S(`/api/gis-xml/${encodeURIComponent(s.value)}`),he.notify({title:"XML created",type:"info",message:"карта створена"}),location.reload())}async function w(){const v=s.value;if(!v){a.value=null,m.value=null;return}i.value=!0,m.value=null;try{const L=await fetch(`/api/gis-raster/${encodeURIComponent(v)}`);if(!L.ok)throw new Error(`HTTP ${L.status}`);const F=await L.json();F.xml&&(f.value=!0),a.value=F,F.xml||(he.notify({title:"XML not found",type:"info",message:"йде створення xml ... зачекайте"}),await S(`/api/gis-xml/${encodeURIComponent(v)}`),he.notify({title:"XML created",type:"info",message:"карта створена"}),fetch(`/api/gis-raster/${encodeURIComponent(v)}?nocache=1`),f.value=!0)}catch(L){console.error("Failed to load raster info",L),a.value=null,m.value=L instanceof Error?L.message:String(L)}finally{i.value=!1}}function S(v){return new Promise((L,F)=>{const oe=new EventSource(v),ue=[];oe.onmessage=be=>{ue.push(be.data),console.log("Received:",be.data)},oe.addEventListener("end",()=>{oe.close(),L(ue)}),oe.onerror=be=>{oe.close(),L(be)}})}function I(v){var L;return(L=v==null?void 0:v.files)!=null&&L.length?v.files.map(F=>({name:F.name,resolution:Y(F.name,v),size:F.size||"—",status:"Готово",statusClass:"bg-emerald-50 text-emerald-600 border border-emerald-100"})):[]}function Y(v,L){const F=v.toLowerCase();return F.endsWith(".tfw")?"Georeference":F.endsWith(".xml")?"Опис":F.endsWith(".tif")||F.endsWith(".tiff")?L!=null&&L.resolution?L.resolution:"Растер":(L==null?void 0:L.resolution)??"Файл"}function Z(v){return v?{baseParams:re(v),spatial:{crs:{code:v.srid?`EPSG:${v.srid}`:"EPSG:4326",description:v.proj4||"WGS 84 — World Geodetic System 1984"},bounds:ie(v.extent),resolution:se(v)},statistics:we(v),technical:P(v)}:null}function ee(v){return v!=null&&v.length?v.map(F=>{var ue;if(!F)return"";const oe=F.trim().split(/\s+/)[0];return((ue=oe==null?void 0:oe[0])==null?void 0:ue.toUpperCase())||""}).filter(Boolean).join(""):""}function re(v){var be,Ve;const L=v.bands_count??((be=v.bands)==null?void 0:be.length)??"—",F=ee(v.bands),oe=(v.bands??[]).map(ge=>ge.trim()).filter(ge=>ge.length>0),ue=oe.length?oe.join(", "):void 0;return[{label:"Розмір растру, px",value:v.width&&v.height?`${v.width}×${v.height}`:"—"},{label:"Формат файлу",value:((Ve=v.extension)==null?void 0:Ve.toUpperCase())??"—"},{label:"Розмір файлу, mb",value:v.total_size?`${v.total_size}`:"—"},{label:"Кількість каналів",value:typeof L=="number"?`${L}${F?` (${F})`:""}`:`${L}${F?` (${F})`:""}`,tooltip:ue},{label:"Глибина кольору",value:v.color_depth?`${v.color_depth} біт/канал`:"—"},{label:"Стиснення",value:v.compression||"—"}]}function ie(v){return!v||v.length!==4?[]:[{label:"Північ",value:te(v[3],"N")},{label:"Схід",value:te(v[2],"E")},{label:"Південь",value:te(v[1],"S")},{label:"Захід",value:te(v[0],"W")}]}function se(v){const L=[{label:"Роздільна здатність",value:v.resolution||"—"}];return v.width&&v.height&&L.push({label:"Розмір пікселя",value:`${v.width} × ${v.height} px`}),L}function we(v){var L;return(L=v.bands)!=null&&L.length?v.bands.map((F,oe)=>{const ue=n[oe%n.length];return{label:`Канал ${oe+1}${F?` (${F})`:""}`,cardClass:ue.cardClass,titleClass:ue.titleClass,metrics:[{label:"Назва",value:F||`Канал ${oe+1}`},{label:"Глибина",value:v.color_depth?`${v.color_depth} біт`:"—"},{label:"Статус",value:v.cache?"Кешовано":"Готово"}]}}):[]}function P(v){var L;return[{label:"Тип даних",value:v.color_depth?`Unsigned Integer ${v.color_depth}-bit`:"—"},{label:"Компресія",value:v.compression||"—"},{label:"Кольорова інтерпретація",value:((L=v.bands)==null?void 0:L.join(", "))||"—"},{label:"SRID",value:v.srid?`EPSG:${v.srid}`:"—"},{label:"Проекція (proj4)",value:v.proj4||"—"},{label:"URL тайла",value:v.url||"—"}]}function te(v,L){if(v==null||Number.isNaN(v))return"—";const F=`${v.toFixed(5)}°`;return L?`${F} ${L}`:F}return(v,L)=>(e.openBlock(),e.createElementBlock("div",C0,[e.createElementVNode("div",V0,[e.createElementVNode("div",B0,[e.createElementVNode("div",$0,[e.createElementVNode("div",v0,[e.createElementVNode("button",{type:"button",onClick:L[0]||(L[0]=F=>e.unref(o).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...L[3]||(L[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",S0,[e.createElementVNode("div",L0,e.toDisplayString(W.value.name),1),K.value?(e.openBlock(),e.createElementBlock("div",A0,e.toDisplayString(K.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",M0,[e.createElementVNode("div",T0,[e.createElementVNode("div",{class:"w-full text-xs text-gray-600 truncate",title:W.value.description},e.toDisplayString(W.value.description),9,F0)]),e.createVNode(so,{"entity-id":s.value||"","entity-info":{name:W.value.name},table:"gis.rasters.table","entity-label":"Растер","save-method":"put","edit-button-text":"Редагувати",onSaved:$},null,8,["entity-id","entity-info"])])])]),e.createElementVNode("div",D0,[e.createElementVNode("div",z0,[e.createVNode($n,{ref_key:"mapViewRef",ref:l},{default:e.withCtx(()=>[M.value&&f.value?(e.openBlock(),e.createBlock(N0,{key:B.value,"tile-url":V.value,extent:k.value,"layer-id":E.value,"show-raster-extent":x.value,onToggleExtent:L[1]||(L[1]=F=>x.value=F)},null,8,["tile-url","extent","layer-id","show-raster-extent"])):e.createCommentVNode("",!0),e.createVNode(gl,{extent:x.value?k.value:null,"layer-id":_.value},null,8,["extent","layer-id"]),e.createElementVNode("div",I0,[e.createVNode(Yt)]),e.createElementVNode("div",j0,[e.createVNode(Mt),z.value?(e.openBlock(),e.createBlock(Mt,{key:0,targetCenter:z.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)])]),_:1},512)])]),e.createVNode(ro,{open:O.value,"top-class":"top-3",onToggle:L[2]||(L[2]=F=>O.value=!O.value)},null,8,["open"])]),e.createElementVNode("div",{class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",O.value?"w-[520px]":"w-0"])},[e.createElementVNode("div",P0,[e.createElementVNode("div",R0,[e.createElementVNode("div",O0,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(Q,F=>e.createElementVNode("button",{key:F.key,type:"button",role:"tab","aria-selected":J.value===F.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",J.value===F.key?"bg-white shadow-sm text-gray-700":""]),onClick:oe=>J.value=F.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(F.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",q0,e.toDisplayString(F.label),1)],10,U0)),64))])]),e.createElementVNode("div",H0,[i.value?(e.openBlock(),e.createElementBlock("div",W0," Завантаження метаданих растру… ")):m.value?(e.openBlock(),e.createElementBlock("div",Y0," Не вдалося отримати дані: "+e.toDisplayString(m.value),1)):e.createCommentVNode("",!0),J.value==="files"?(e.openBlock(),e.createBlock(c0,{key:2,files:T.value},null,8,["files"])):J.value==="metadata"?(e.openBlock(),e.createBlock(ao,{key:3,data:a.value,"entity-id":s.value,"entity-type":"raster",onSaved:w},null,8,["data","entity-id"])):D.value?(e.openBlock(),e.createBlock(l0,{key:4,details:D.value},null,8,["details"])):e.createCommentVNode("",!0)])])],2)]))}}),K0={},X0={xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-table"};function Q0(t,n){return e.openBlock(),e.createElementBlock("svg",X0,[...n[0]||(n[0]=[e.createElementVNode("path",{d:"M12 3v18"},null,-1),e.createElementVNode("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"},null,-1),e.createElementVNode("path",{d:"M3 9h18"},null,-1),e.createElementVNode("path",{d:"M3 15h18"},null,-1)])])}const J0=xe(K0,[["render",Q0]]),ey={class:"flex flex-col h-full"},ty={class:"flex justify-end mb-3 gap-2"},ny=e.defineComponent({__name:"cartocss-css-tab",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.modelValue,set:s=>r("update:modelValue",s)});return(s,a)=>(e.openBlock(),e.createElementBlock("div",ey,[e.createElementVNode("div",ty,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:a[0]||(a[0]=i=>s.$emit("save"))},[...a[2]||(a[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти ",-1)])])]),e.createVNode(ln,{modelValue:l.value,"onUpdate:modelValue":a[1]||(a[1]=i=>l.value=i),language:"cartocss",class:"flex-1 rounded-lg overflow-hidden"},null,8,["modelValue"])]))}}),oy={class:"flex flex-col flex-1 min-h-0"},ry={class:"flex justify-between mb-3 gap-2"},ly={class:"text-left"},ay={class:"font-medium text-gray-900"},sy={class:"text-xs text-gray-500"},iy={class:"flex justify-center gap-2"},cy=["checked","onChange"],dy={class:"text-sm font-medium text-gray-900"},uy=e.defineComponent({__name:"cartocss-data-tab",props:{modelValue:{default:[]},modelModifiers:{}},emits:e.mergeModels(["save"],["update:modelValue"]),setup(t,{emit:n}){const o=[{key:"table",label:"Таблиця",slot:"datasetCell"},{key:"active",label:"Активний",slot:"activeCell",width:"140px"},{key:"zoom",label:"Min Зум",slot:"zoomCell",width:"140px"}],r=e.defineAsyncComponent(()=>import("@opengis/core").then(d=>d.VsModal)),l=e.defineAsyncComponent(()=>import("@opengis/form")),s=e.useModel(t,"modelValue"),a=n,i=e.ref(!1),f=e.ref({table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0}),m={table:{type:"text",label:"Таблиця",validators:["required"]},key:{type:"text",label:"Ключ",validators:["required"]},query:{type:"text",label:"Query"},columns:{type:"text",label:"Колонки"},srid:{type:"number",label:"SRID"},proj4text:{type:"text",label:"PROJ4"},active:{type:"switcher",label:"Активна"},minzoom:{type:"number",label:"Min Зум",col:6},maxzoom:{type:"number",label:"Max Зум",col:6}};function x(){f.value={table:"",query:"",srid:"",key:"",columns:"",minzoom:"",maxzoom:"",proj4text:"",active:!0},i.value=!0}function u(){i.value=!1}function h(){var p,g;const d=(p=f.value.table)==null?void 0:p.trim(),y=(g=f.value.key)==null?void 0:g.trim();if(!d||!y){he.notify({type:"warning",title:"Перевірка",message:"Вкажіть таблицю та підпис"});return}s.value=[...Array.isArray(s.value)?s.value:[],{...f.value,table:d,key:y}],i.value=!1}function c(d,y){var g;const p=((g=y==null?void 0:y.target)==null?void 0:g.checked)??!1;d.active=p,s.value=Array.isArray(s.value)?[...s.value]:[]}return(d,y)=>(e.openBlock(),e.createElementBlock("div",oy,[e.createElementVNode("div",ry,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium bg-gradient-to-r from-gray-500 to-gray-400 text-white h-9 px-4 py-2 hover:from-gray-600 hover:to-gray-500",onClick:x}," Додати таблицю "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:y[0]||(y[0]=p=>a("save"))}," Зберегти ")]),e.createVNode(Ct,{modelValue:s.value,"onUpdate:modelValue":y[1]||(y[1]=p=>s.value=p),"columns-scheme":o,"form-scheme":m,"add-button":!1,"main-col-width":"260px"},{datasetCell:e.withCtx(({row:p})=>[e.createElementVNode("div",ly,[e.createElementVNode("div",ay,e.toDisplayString(p.table),1),e.createElementVNode("div",sy,e.toDisplayString(p.key),1)])]),activeCell:e.withCtx(({row:p})=>[e.createElementVNode("label",iy,[e.createElementVNode("input",{type:"checkbox",class:"h-4 w-4 text-sky-500 border-gray-300 rounded focus:ring-sky-300",checked:p.active,onChange:g=>c(p,g)},null,40,cy)])]),zoomCell:e.withCtx(({row:p})=>[e.createElementVNode("div",dy,e.toDisplayString(p.zoom),1)]),_:1},8,["modelValue"]),e.createVNode(e.unref(r),{teleport:"#modal",visible:i.value,"onUpdate:visible":y[3]||(y[3]=p=>i.value=p),title:"Нова таблиця CartoCSS"},{footer:e.withCtx(()=>[e.createElementVNode("div",{class:"flex justify-end gap-2 p-4 border-т"},[e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-gray-100 text-gray-700",onClick:u}," Скасувати "),e.createElementVNode("button",{type:"button",class:"px-4 py-2 rounded bg-blue-600 text-white",onClick:h}," Додати ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(l),{values:f.value,"onUpdate:values":y[2]||(y[2]=p=>f.value=p),schema:m},null,8,["values"])]),_:1},8,["visible"])]))}}),py={class:"flex flex-col flex-1 min-h-0 gap-4"},my={class:"h-[calc(100vh-230px)] rounded-md border border-gray-200 bg-white"},fy=e.defineComponent({__name:"cartocss-card-tab",props:{card:{},table:{}},emits:["save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(o.table),s=e.ref(o.card),a=e.defineAsyncComponent(()=>import("@opengis/form").then(f=>f.VsInputText));function i(){r("save",{card_html:s.value,card_table:l.value})}return(f,m)=>(e.openBlock(),e.createElementBlock("div",py,[e.createElementVNode("div",{class:"flex items-center justify-end gap-3"},[e.createElementVNode("button",{type:"button",class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium bg-gradient-to-r from-sky-400 to-blue-400 hover:from-sky-500 hover:to-blue-500 text-white shadow-sm px-4 py-2 h-9 text-xs transition-all duration-300",onClick:i},[...m[2]||(m[2]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"h-3.5 w-3.5"},[e.createElementVNode("path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a 2 2 0 0 1-2-2V5a 2 2 0 0 1 2-2z"}),e.createElementVNode("path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a 1 1 0 0 0-1 1v7"}),e.createElementVNode("path",{d:"M7 3v4a1 1 0 0 0 1 1h7"})],-1),e.createTextVNode(" Зберегти картку ",-1)])])]),e.createElementVNode("div",null,[e.createVNode(e.unref(a),{modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=x=>l.value=x)},null,8,["modelValue"])]),e.createElementVNode("div",my,[e.createVNode(ln,{modelValue:s.value,"onUpdate:modelValue":m[1]||(m[1]=x=>s.value=x),language:"html",theme:"vs-light",class:"h-full w-full rounded-md"},null,8,["modelValue"])])]))}}),gy=e.defineComponent({__name:"CartocssLayerLoader",props:{layerId:{type:String,required:!0},tileUrl:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1},owner:{type:String,default:""},opacity:{type:Number,default:1}},setup(t){const n=t,o=Re(),{activateTemporaryLayer:r,deactivateTemporaryLayer:l,setTemporaryLayerOpacity:s}=xo(o.map),a=e.computed(()=>{var u;const x=`${(u=n==null?void 0:n.tileUrl)==null?void 0:u.trim()}`;return x?typeof window>"u"||typeof location>"u"||/^https?:\/\//i.test(x)?x:x.startsWith("//")?`${window.location.protocol}${x}`:x.startsWith("/")?`${location.origin}${x}`:`${location.origin}/${x}`:""});let i="",f="";function m(){const x=n.active&&!!a.value;i&&(!x||i!==n.layerId)&&(l(i,f||void 0),i="",f=""),x&&(r({id:n.layerId,title:n.title||n.layerId,url:a.value,opacity:n.opacity},{},n.owner),i=n.layerId,f=n.owner||"")}return e.watch(()=>[n.layerId,a.value,n.active,n.owner],m,{immediate:!0}),e.watch(()=>n.opacity,x=>{!i||!n.active||s(i,x,f||void 0)},{immediate:!0}),e.onUnmounted(()=>{i&&(l(i,f||void 0),i="",f="")}),(x,u)=>e.createCommentVNode("",!0)}}),yy=e.defineComponent({__name:"CartocssMapClickListener",props:{cartocssId:{},infoEnabled:{type:[Boolean,null]}},setup(t){const n=t,o=e.computed(()=>n.cartocssId??null),r=e.computed(()=>!!n.infoEnabled),{map:l,ready:s}=Re(),a=c=>{!c||typeof window>"u"||window.dispatchEvent(new CustomEvent(bo,{detail:c}))},i=async c=>{const d=await fetch(`/api/map-format?${c.toString()}`);if(!d.ok)throw new Error(`API returned ${d.status}`);return d.json()};let f=null,m=null;const x=c=>{if(!c)return null;if(typeof c=="string")try{return JSON.parse(c)}catch{return null}return c},u=async(c,d)=>{var p;const y=new URLSearchParams({layer:o.value??"",id:String(c)});try{const g=await i(y),b=typeof g.html=="string"?g.html:null,N=x(((p=g==null?void 0:g.data)==null?void 0:p.geom)??(g==null?void 0:g.geom)??null);(b||N)&&a({html:b,geometry:N??d})}catch(g){console.warn("CartoCSS map-format (id) error",g)}},h=async c=>{var g,b,N,V;if(!o.value)return;if(!r.value){he.notify({type:"error",title:"CartoCSS",message:"Картка не налаштована"});return}const d=(g=c==null?void 0:c.lngLat)==null?void 0:g.lng,y=(b=c==null?void 0:c.lngLat)==null?void 0:b.lat;if(typeof d!="number"||typeof y!="number")return;const p=new URLSearchParams({layer:o.value,lat:y.toFixed(6),lng:d.toFixed(6)});try{const k=await i(p),E=x(((N=k==null?void 0:k.data)==null?void 0:N.geom)??(k==null?void 0:k.geom)??null),_=((V=k==null?void 0:k.data)==null?void 0:V.id)??(k==null?void 0:k.id);if(_!=null){await u(_,E);return}Tf({html:k==null?void 0:k.html})&&a({html:k==null?void 0:k.html,geometry:E})}catch(k){console.warn("CartoCSS map-format error",k)}};return s().then(()=>{m=l.value,m&&(m.on("click",h),f=()=>m==null?void 0:m.off("click",h))}),e.onBeforeUnmount(()=>{f==null||f(),f=null,m=null}),()=>{}}}),hy={class:"flex h-full bg-gradient-to-br from-slate-50 to-white"},xy={class:"flex-1 relative overflow-hidden"},by={class:"absolute top-0 left-0 w-full z-20"},ky={class:"flex items-center justify-between bg-white/80 backdrop-blur border-b border-gray-200 px-6 py-3 shadow-sm gap-4"},wy={class:"flex items-center gap-3 min-w-0"},_y={class:"flex flex-col min-w-0"},Ey={class:"font-semibold text-lg text-gray-800 line-clamp-1"},Ny={key:0,class:"text-xs text-gray-500 truncate"},Cy={class:"w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[64px]"},Vy={class:"relative w-full h-full"},By={class:"absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2"},$y={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},vy={class:"flex items-center gap-2"},Sy={class:"rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur"},Ly={class:"inline-flex items-center gap-2 text-[11px] text-slate-600"},Ay=["checked"],My={class:"absolute top-4 left-4 z-20"},Ty={class:"absolute top-[6.5rem] right-2 space-y-1 z-20"},Fy={class:"flex-1 flex flex-col h-full"},Dy={key:0,class:"px-3 pt-3 pb-2 border-b border-gray-100"},zy={class:"items-center justify-center text-muted-foreground grid w-full grid-cols-4 h-12 p-1 bg-gray-50 rounded-xl shadow-sm"},Iy=["aria-selected","onClick"],jy={class:"leading-none"},Py={class:"flex flex-col flex-1 overflow-y-hidden p-4"},Ry={key:0,class:"flex-1 flex items-center justify-center text-sm text-gray-500"},Oy="cartocss-demo-001",Uy="OpenGIS",hl=2,Mn=5,qy=e.defineComponent({__name:"cartocss",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.ref(null),l=[{key:"css",label:"CSS",icon:Jr},{key:"data",label:"Дані",icon:J0},{key:"metadata",label:"Метадані",icon:lo},{key:"card",label:"Картка",icon:el}],s=l.map(P=>P.key),a=e.ref(s.includes(o.query.tab)?o.query.tab:"css"),i=e.ref(!0),f=e.ref(null),m=e.computed(()=>{var P;return(P=f.value)!=null&&P.source_path?l.filter(te=>te.key==="card"||te.key==="metadata"):l}),x=e.computed(()=>o.params.id||Oy),u=e.ref({id:x.value,name:"",description:""});let h=null;const c=e.ref(!1);function d(P){if(Array.isArray(P))return d(P[0]);if(typeof P!="string"&&typeof P!="number")return null;const te=typeof P=="number"?P:Number(P.trim());return Number.isFinite(te)?te:null}function y(P,te){return P.toFixed(te)}function p(P,te,v){const L=.5*10**-v;return Math.abs(P-te)>L}function g(){var P;return(P=r.value)==null?void 0:P.ctx}function b(){var be,Ve,ge,De;const P=(Ve=(be=g())==null?void 0:be.map)==null?void 0:Ve.value;if(!P)return;const te=d(o.query.z),v=d(o.query.x),L=d(o.query.y);if(te==null||v==null||L==null)return;const F=(ge=P.getCenter)==null?void 0:ge.call(P),oe=(De=P.getZoom)==null?void 0:De.call(P);(!F||p(F.lng,v,Mn)||p(F.lat,L,Mn)||p(oe??0,te,hl))&&(c.value=!0,P.jumpTo({center:[v,L],zoom:te}),c.value=!1)}function N(){var F,oe,ue,be;if(c.value)return;const P=(oe=(F=g())==null?void 0:F.map)==null?void 0:oe.value;if(!P)return;const te=(ue=P.getCenter)==null?void 0:ue.call(P),v=(be=P.getZoom)==null?void 0:be.call(P);if(!te||v==null)return;const L={...o.query,z:y(v,hl),x:y(te.lng,Mn),y:y(te.lat,Mn)};o.query.z===L.z&&o.query.x===L.x&&o.query.y===L.y||n.replace({query:L})}function V(P){typeof document>"u"||(document.title=P?`${P} — CartoCSS`:Uy)}const k=e.ref("");e.ref("");const E=e.ref([]),_=e.ref(!1),B=e.ref(!1),M=e.ref(""),z=e.ref(0),W=e.ref(!1),K=e.ref(1),Q=e.ref(!0),H=e.computed(()=>`cartocss-layer-${x.value}`),J=e.computed(()=>`${Math.round(K.value*100)}%`),O=e.computed(()=>`cartocss-extent-${x.value}`),T=e.computed(()=>{var F;const P=(F=M.value)==null?void 0:F.trim();if(!P)return"";const te=P.includes("?")?"&":"?",v=`${P}${te}nottl=1`,L=z.value;return L?`${P}${te}ts=${L}&nocache=1`:v});e.computed(()=>{const P=f.value;return P?P.cartocss_key||P.source_path||x.value||"":x.value||""});const D=e.ref(""),X=e.ref(""),$=e.computed(()=>{var oe;const P=(oe=f.value)==null?void 0:oe.bounds;if(!Array.isArray(P)||P.length<4)return null;const[te,v,L,F]=P;return[te,v,L,F].some(ue=>typeof ue!="number"||Number.isNaN(ue))?null:[(te+L)/2,(v+F)/2]}),w=e.computed(()=>{var oe;const P=(oe=f.value)==null?void 0:oe.bounds;if(!Array.isArray(P)||P.length<4)return null;const[te,v,L,F]=P;return[te,v,L,F].some(ue=>typeof ue!="number"||Number.isNaN(ue))?null:[te,v,L,F]}),S=e.computed(()=>{const P=f.value;return P?(E.value.map(v=>v==null?void 0:v.table).filter(Boolean),[P.description,P.group_id?`Група: ${P.group_id}`:null,P.source_path?`Шлях: ${P.source_path}`:null,P.is_public===!0?"Публічний":"Не публічний",P.enabled===!0?"Активний":"Неактивний"].filter(Boolean).join(", ")):""});e.watch(x,P=>{P&&ie(P)},{immediate:!0}),e.watch(()=>{var P;return(P=u.value)==null?void 0:P.name},P=>V(P),{immediate:!0});async function I(){var L;const P=g();if(!(P!=null&&P.ready))return;await P.ready(),b();const te=(L=P.map)==null?void 0:L.value;if(!te)return;const v=()=>N();te.on("moveend",v),te.on("zoomend",v),h=()=>{te.off("moveend",v),te.off("zoomend",v)}}e.watch(()=>[o.query.z,o.query.x,o.query.y],()=>{b()}),e.onMounted(()=>{I()}),e.onBeforeUnmount(()=>{h==null||h(),h=null}),e.watch(()=>o.query.tab,P=>{P&&m.value.some(te=>te.key===P)&&a.value!==P&&(a.value=P)}),e.watch(m,P=>{P.length&&!P.some(te=>te.key===a.value)&&(a.value=P[0].key)},{immediate:!0}),e.watch(a,P=>{o.query.tab!==P&&m.value.some(te=>te.key===P)&&n.replace({query:{...o.query,tab:P}})}),e.watch(()=>f.value,P=>{const te=P==null?void 0:P.card_html;D.value=te,X.value=P==null?void 0:P.card_table},{immediate:!0});function Y(){x.value&&ie(x.value,{bustCache:!0})}async function Z(P,te){if(x.value){B.value=!0;try{const v=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!v.ok)throw new Error(`Failed to save cartocss: ${v.status}`);he.notify({type:"success",title:"Збережено",message:te}),await ie(x.value,{bustCache:!0})}catch(v){console.error("Failed to save CartoCSS",v),he.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти CartoCSS"})}finally{B.value=!1}}}function ee(P){if(!P)return null;if(typeof P=="string")try{return JSON.parse(P)}catch(te){return console.warn("Failed to parse CartoCSS config",te),null}return typeof P=="object"?P:null}function re(P){const te=Array.isArray(P)?P:P==null?void 0:P.datasets;return Array.isArray(te)?te.map((v,L)=>({table:(v==null?void 0:v.table)||(v==null?void 0:v.id)||`dataset_${L+1}`,query:(v==null?void 0:v.query)||"",srid:(v==null?void 0:v.srid)||"",key:(v==null?void 0:v.key)||(v==null?void 0:v.label)||"Без підпису",active:typeof(v==null?void 0:v.active)=="boolean"?v.active:!0,minzoom:typeof(v==null?void 0:v.zoom)>"u"?"":String(v.zoom),maxzoom:typeof(v==null?void 0:v.maxzoom)>"u"?"":String(v.maxzoom),columns:(v==null?void 0:v.columns)||"",proj4text:(v==null?void 0:v.proj4text)||""})):[]}async function ie(P,te){_.value=!0;try{const v=await fetch(`/api/gis-css/${P}`);if(!v.ok)throw new Error(`Failed to load cartocss: ${v.status}`);const L=await v.json(),F=(L==null?void 0:L.message)||L||{};f.value=F,u.value={id:F.cartocss_key||P,name:F.name||u.value.name,description:F.description||u.value.description},k.value=typeof F.style=="string"?F.style:"";const oe=ee(F.config??[]);E.value=re(oe);const ue=typeof F.url=="string"?F.url:"";M.value=ue,W.value=!!(ue&&F.enabled!==!1),z.value=te!=null&&te.bustCache?Date.now():0}catch(v){console.error("Failed to fetch CartoCSS",v),W.value=!1,M.value="",z.value=0,f.value=null}finally{_.value=!1}}async function se(){await Z({style:k.value||"",config:E.value},"CartoCSS оновлено")}async function we(P){const te=await fetch(`/api/gis-css/${x.value}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!te.ok)throw new Error(`Failed to save cartocss: ${te.status}`);he.notify({type:"success",title:"Збережено",message:"Картка CartoCSS оновлена"})}return(P,te)=>(e.openBlock(),e.createElementBlock("div",hy,[e.createElementVNode("div",xy,[e.createElementVNode("div",by,[e.createElementVNode("div",ky,[e.createElementVNode("div",wy,[e.createElementVNode("button",{type:"button",onClick:te[0]||(te[0]=v=>e.unref(n).back()),class:"inline-flex items-center px-3 py-1.5 rounded-md bg-sky-100 hover:bg-sky-200 text-sky-700 font-medium text-sm transition"},[...te[6]||(te[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4 mr-1",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1),e.createTextVNode(" Назад ",-1)])]),e.createElementVNode("div",_y,[e.createElementVNode("div",Ey,e.toDisplayString(u.value.name),1),S.value?(e.openBlock(),e.createElementBlock("div",Ny,e.toDisplayString(S.value),1)):e.createCommentVNode("",!0)])]),e.createVNode(so,{"entity-id":x.value,"entity-info":u.value,"form-endpoint":v=>`/api/form/gis.cartocss.table/${v}`,"save-endpoint":v=>`/api/gis-css/${v}`,"entity-label":"CartoCSS","save-method":"post",onSaved:Y},null,8,["entity-id","entity-info","form-endpoint","save-endpoint"])])]),e.createElementVNode("div",Cy,[e.createElementVNode("div",Vy,[e.createVNode($n,{ref_key:"mapViewRef",ref:r},{default:e.withCtx(()=>{var v,L;return[e.createElementVNode("div",By,[e.createElementVNode("div",$y,[e.createElementVNode("div",vy,[te[7]||(te[7]=e.createElementVNode("span",null,"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":te[1]||(te[1]=F=>K.value=F),type:"range",min:"0",max:"1",step:"0.01",class:"h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",style:{"accent-color":"#3b82f6"}},null,512),[[e.vModelText,K.value,void 0,{number:!0}]]),e.createElementVNode("span",null,e.toDisplayString(J.value),1)])]),e.createElementVNode("div",Sy,[e.createElementVNode("label",Ly,[e.createElementVNode("input",{type:"checkbox",class:"h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",checked:Q.value,onChange:te[2]||(te[2]=F=>Q.value=F.target.checked)},null,40,Ay),te[8]||(te[8]=e.createElementVNode("span",null,"Межі css",-1))])])]),e.createElementVNode("div",My,[e.createVNode(Yt)]),e.createElementVNode("div",Ty,[e.createVNode(Mt),$.value?(e.openBlock(),e.createBlock(Mt,{key:0,targetCenter:$.value,targetLabel:"Центр даних",targetAriaLabel:"Перейти до центру даних"},null,8,["targetCenter"])):e.createCommentVNode("",!0)]),T.value?(e.openBlock(),e.createBlock(gy,{key:0,"layer-id":H.value,"tile-url":T.value,active:W.value,opacity:K.value,title:u.value.name,owner:x.value},null,8,["layer-id","tile-url","active","opacity","title","owner"])):e.createCommentVNode("",!0),e.createVNode(gl,{extent:Q.value?w.value:null,"layer-id":O.value},null,8,["extent","layer-id"]),e.createVNode(yy,{"cartocss-id":x.value,bounds:((v=f.value)==null?void 0:v.bounds)??null,active:W.value,"info-enabled":(L=f.value)==null?void 0:L.info},null,8,["cartocss-id","bounds","active","info-enabled"]),e.createVNode(ko,{"map-id":x.value},null,8,["map-id"])]}),_:1},512)])]),f.value?(e.openBlock(),e.createBlock(ro,{key:0,open:i.value,"top-class":"top-4",onToggle:te[3]||(te[3]=v=>i.value=!i.value)},null,8,["open"])):e.createCommentVNode("",!0)]),f.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out",i.value?"w-[650px]":"w-0"])},[e.createElementVNode("div",Fy,[m.value.length>1?(e.openBlock(),e.createElementBlock("div",Dy,[e.createElementVNode("div",zy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,v=>(e.openBlock(),e.createElementBlock("button",{key:v.key,type:"button",role:"tab","aria-selected":a.value===v.key,class:e.normalizeClass(["whitespace-nowrap flex flex-col items-center justify-center gap-0.5 py-1 px-1 text-[9px] font-medium transition-all duration-300 hover:bg-white/70 rounded-lg group",a.value===v.key?"bg-white shadow-sm text-gray-700":""]),onClick:L=>a.value=v.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(v.icon),{class:"h-3.5 w-3.5 mb-0.5"})),e.createElementVNode("span",jy,e.toDisplayString(v.label),1)],10,Iy))),128))])])):e.createCommentVNode("",!0),e.createElementVNode("div",Py,[_.value?(e.openBlock(),e.createElementBlock("div",Ry," Завантаження стилю… ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[a.value==="css"?(e.openBlock(),e.createBlock(ny,{key:0,modelValue:k.value,"onUpdate:modelValue":te[4]||(te[4]=v=>k.value=v),class:"flex-1 min-h-0",onSave:se},null,8,["modelValue"])):a.value==="data"?(e.openBlock(),e.createBlock(uy,{key:1,modelValue:E.value,"onUpdate:modelValue":te[5]||(te[5]=v=>E.value=v),class:"flex-1 min-h-0 flex flex-col",onSave:se},null,8,["modelValue"])):a.value==="card"?(e.openBlock(),e.createBlock(fy,{key:2,card:D.value,table:X.value,class:"flex-1 min-h-0",onSave:we},null,8,["card","table"])):a.value==="metadata"?(e.openBlock(),e.createBlock(ao,{key:3,data:f.value,"entity-id":x.value,"entity-type":"css",onSaved:Y},null,8,["data","entity-id"])):e.createCommentVNode("",!0)],64))])])],2)):e.createCommentVNode("",!0)]))}}),Hy={class:"w-full mb-6"},Wy={class:"flex items-center w-full h-10 max-w-md p-1 bg-white border border-gray-200 rounded-md"},Yy=["onClick"],Zy=e.defineComponent({__name:"MapSettingsTabs",props:{tabs:{},activeTab:{}},emits:["update:activeTab"],setup(t,{emit:n}){const o=n,r=l=>{o("update:activeTab",l)};return(l,s)=>(e.openBlock(),e.createElementBlock("div",Hy,[e.createElementVNode("div",Wy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.tabs,a=>(e.openBlock(),e.createElementBlock("button",{key:a.id,onClick:i=>r(a.id),class:e.normalizeClass(["inline-flex flex-1 items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium transition-all",a.id===t.activeTab?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50"])},e.toDisplayString(a.name),11,Yy))),128))])]))}}),Gy={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},Ky=e.defineComponent({__name:"GeneralSettings",props:{schema:{},modelValue:{},loading:{type:Boolean},form:{}},emits:["update:modelValue","update:form"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/form")),r=t,l=n,s=e.computed({get:()=>r.modelValue,set:i=>l("update:modelValue",i)}),a=e.computed({get:()=>r.form,set:i=>l("update:form",i)});return(i,f)=>(e.openBlock(),e.createElementBlock("section",Gy,[f[2]||(f[2]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Основна інформація ",-1)),t.loading?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(o),{key:0,schema:t.schema,values:s.value,"onUpdate:values":f[0]||(f[0]=m=>s.value=m),form:a.value,"onUpdate:form":f[1]||(f[1]=m=>a.value=m)},null,8,["schema","values","form"]))]))}}),Xy={class:"rounded-lg border border-gray-200 bg-[rgba(252,252,252,0.8)] p-6"},Qy=e.defineComponent({__name:"LayerSettings",props:{layerIDs:{},layerNames:{},options:{}},emits:["update:layerIDs","update:layerNames"],setup(t,{emit:n}){const o=t,r=n,l=e.computed({get:()=>o.layerIDs,set:s=>r("update:layerIDs",s)});return e.computed({get:()=>o.layerNames,set:s=>r("update:layerNames",s)}),(s,a)=>(e.openBlock(),e.createElementBlock("section",Xy,[a[1]||(a[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"},"Шари",-1)),a[2]||(a[2]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 mb-2"},"Доступні шари",-1)),e.createVNode(e.unref(Vo.VsInputArraySelect),{options:t.options,modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=i=>l.value=i),placeholder:"Шари"},null,8,["options","modelValue"])]))}}),Jy={class:"mapLayer-info__inner"},eh={class:"mapLayer-info__item-label"},wo=xe(e.defineComponent({__name:"MapLayerInfoPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let a=null;const i=e.computed(()=>r.open?{position:"absolute",width:"auto",maxWidth:`${Math.min(300,window.innerWidth-24)}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}:{display:"none"});function f(y){if(r.open){h();return}const p=y.currentTarget,g=p==null?void 0:p.closest(".mapLayer-info");if(!g){h();return}l.value=g,r.open=!0,e.nextTick(()=>{m(),c(),requestAnimationFrame(()=>{m()})})}function m(){if(!r.open||!l.value||!s.value)return;const y=l.value.getBoundingClientRect(),p=12,g=window.scrollX+p,b=window.scrollX+window.innerWidth-p,N=window.scrollY+p,V=window.scrollY+window.innerHeight-p,k=s.value.offsetWidth||Math.min(300,window.innerWidth-24),E=s.value.offsetHeight||0;let _=y.left+window.scrollX+(y.width-k)/2;_<g&&(_=g),_+k>b&&(_=Math.max(g,b-k)),r.left=_;let B=y.bottom+window.scrollY+p;B+E>V&&(B=y.top+window.scrollY-E-p,B<N&&(B=Math.max(N,V-E))),B<N&&(B=N),B+E>V&&(B=Math.max(N,V-E)),r.top=B,r.transform="none"}function x(y){var g,b;if(!r.open)return;const p=y.target;(g=l.value)!=null&&g.contains(p)||(b=s.value)!=null&&b.contains(p)||h()}function u(y){y.key==="Escape"&&h()}function h(){d(),r.open=!1,l.value=null,s.value=null}function c(){d(),s.value&&(a=new ResizeObserver(()=>{m()}),a.observe(s.value))}function d(){a&&(a.disconnect(),a=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),d()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>m())},{deep:!0}),n({close:h}),(y,p)=>(e.openBlock(),e.createElementBlock("div",{class:"mapLayer-info",ref_key:"anchorEl",ref:l},[e.createElementVNode("a",{class:"mapLayer-info__trigger",href:"#",onClick:e.withModifiers(f,["prevent","stop"])},[...p[1]||(p[1]=[e.createStaticVNode('<div class="mapLayer-info__icon" data-v-cc1cc7bf><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-cc1cc7bf><circle cx="12" cy="12" r="10" data-v-cc1cc7bf></circle><line x1="12" y1="16" x2="12" y2="12" data-v-cc1cc7bf></line><line x1="12" y1="8" x2="12.01" y2="8" data-v-cc1cc7bf></line></svg></div>',1)])]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[81] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom mapLayer-info__popover",style:e.normalizeStyle(i.value),ref_key:"popoverEl",ref:s,onClick:p[0]||(p[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Jy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,g=>(e.openBlock(),e.createElementBlock("div",{key:g.label,class:"mapLayer-info__item"},[e.createElementVNode("div",eh,e.toDisplayString(g.label),1),e.createElementVNode("div",{class:e.normalizeClass(["mapLayer-info__item-value",{"mapLayer-info__item-value--break-all":g.breakLine}])},e.toDisplayString(g.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-cc1cc7bf"]]),th={key:0,class:"map-info__title"},nh={class:"map-info__actions"},oh={key:0,class:"map-info__menu"},rh=["href"],lh=["innerHTML"],xl=xe(e.defineComponent({__name:"MapInfoWidget",props:{title:{},content:{},links:{},mapName:{},mapDescription:{}},setup(t){const n=t,o=e.ref(null),r=e.ref(!1),l=e.ref(null),s=e.ref(null),a=e.ref({top:0,left:0});Fe.useRouter();const i=e.ref(!0),f=e.ref(!1),m=e.computed(()=>Array.isArray(n.links)?n.links.filter(V=>(V==null?void 0:V.name)&&(V==null?void 0:V.slug)):[]),x=e.computed(()=>({top:`${a.value.top}px`,left:`${a.value.left}px`})),u=e.computed(()=>{const V=[];return n.mapName&&V.push({label:"Назва карти",value:n.mapName}),n.mapDescription&&V.push({label:"Опис",value:n.mapDescription,breakLine:!0}),V});function h(V){return V==null?!1:V.replace(/<[^>]*>/g,"").trim().length>0}const c=e.computed(()=>h(n.content)),d=e.computed(()=>c.value);function y(V){V.stopPropagation(),r.value=!r.value}function p(){const V=l.value;if(!V||!s.value)return;const k=V.getBoundingClientRect(),E=12,_=8,B=window.scrollX+E,M=window.scrollX+window.innerWidth-E,z=window.scrollY+E,W=window.scrollY+window.innerHeight-E,K=s.value.offsetWidth||160,Q=s.value.offsetHeight||0;let H=k.bottom+window.scrollY+_,J=k.left+window.scrollX;J+K>M&&(J=k.right+window.scrollX-K,J<B&&(J=B)),J<B&&(J=B),H+Q>W&&(H=k.top+window.scrollY-Q-_,H<z&&(H=Math.max(z,W-Q))),H<z&&(H=z),H+Q>W&&(H=Math.max(z,W-Q)),a.value={top:H,left:J}}function g(V){if(!r.value)return;const k=o.value;if(!k){r.value=!1;return}k.contains(V.target)||(r.value=!1)}e.watch(r,V=>{V?e.nextTick(()=>{p(),requestAnimationFrame(()=>{p()}),window.addEventListener("scroll",p,!0),window.addEventListener("resize",p)}):(window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p))});function b(){i.value=!i.value}function N(){f.value=window.innerWidth<=768}return e.onMounted(()=>{document.addEventListener("click",g,!0),N(),d.value?f.value&&(i.value=!1):i.value=!1,window.addEventListener("resize",N)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",g,!0),window.removeEventListener("scroll",p,!0),window.removeEventListener("resize",p),window.removeEventListener("resize",N)}),(V,k)=>(e.openBlock(),e.createElementBlock("div",{class:"map-info legend-widget flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget",ref_key:"container",ref:o},[t.title||m.value.length||u.value.length?(e.openBlock(),e.createElementBlock("div",{key:0,class:"map-info__header",style:e.normalizeStyle([c.value?"":"padding-bottom: 20px"])},[t.title?(e.openBlock(),e.createElementBlock("h2",th,e.toDisplayString(t.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",nh,[m.value.length?(e.openBlock(),e.createElementBlock("div",oh,[e.createElementVNode("button",{ref_key:"menuButton",ref:l,type:"button",class:"map-info__menu-button",onClick:y,"aria-label":"Показати посилання"},[...k[1]||(k[1]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M4 12H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 6H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"}),e.createElementVNode("path",{d:"M4 18H20",stroke:"#000000","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])],512),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuPopover",ref:s,class:"vsTailwind vs-popover__content right map-info__popover",style:e.normalizeStyle(x.value),onClick:k[0]||(k[0]=e.withModifiers(()=>{},["stop"]))},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,E=>(e.openBlock(),e.createElementBlock("a",{key:E.slug||E.name,href:`/maps/${E.slug}`,class:"map-info__popover-link"},e.toDisplayString(E.name),9,rh))),128))],4)):e.createCommentVNode("",!0)]))])):e.createCommentVNode("",!0),u.value.length?(e.openBlock(),e.createBlock(wo,{key:1,items:u.value},null,8,["items"])):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"map-info__toggle-button",onClick:b,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-info__toggle-icon--rotated":i.value})},[...k[2]||(k[2]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0)])],4)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["map-info__content",{"map-info__content--collapsed":!i.value}]),innerHTML:t.content},null,10,lh)):e.createCommentVNode("",!0)],512))}}),[["__scopeId","data-v-813e24fb"]]),ah={class:"opacity-popover__content"},sh={class:"opacity-popover__value"},bl=xe(e.defineComponent({__name:"LayerOpacityPopover",props:{layerId:{}},setup(t){const n=t,o=e.ref(!1),r=e.ref(100),l=e.ref(null),s=e.ref(null),a=e.reactive({top:0,left:0});function i(){var k;const u=(k=s.value)==null?void 0:k.querySelector("button");if(!u||!l.value)return;const h=u.getBoundingClientRect(),c=260,d=l.value.offsetHeight||60,y=8,p=12,g=window.innerWidth,b=window.innerHeight;let N=h.bottom+y+window.scrollY,V=h.left+window.scrollX;V+c>g-p&&(V=g-c-p+window.scrollX),V<p+window.scrollX&&(V=p+window.scrollX),N+d>b+window.scrollY-p&&(N=h.top-d-y+window.scrollY,N<p+window.scrollY&&(N=b-d-p+window.scrollY)),a.top=N,a.left=V}function f(){o.value=!o.value,o.value&&e.nextTick(i)}function m(){var d;const u=Se(n.layerId),h=(r.value??100)/100;if(u!=null&&u.setOpacity){u.setOpacity(h);return}const c=(d=u==null?void 0:u.getLayer)==null?void 0:d.call(u);if(c)switch(c.type){case"raster":u.updatePaint({"raster-opacity":h});break;case"fill":u.updatePaint({"fill-opacity":h});break;case"line":u.updatePaint({"line-opacity":h});break;case"circle":u.updatePaint({"circle-opacity":h});break;case"symbol":u.updatePaint({"icon-opacity":h});break}}function x(u){var c,d;if(!o.value)return;const h=u.target;(c=l.value)!=null&&c.contains(h)||(d=s.value)!=null&&d.contains(h)||(o.value=!1)}return e.onMounted(()=>{document.addEventListener("click",x),window.addEventListener("scroll",i,!0),window.addEventListener("resize",i)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x),window.removeEventListener("scroll",i,!0),window.removeEventListener("resize",i)}),(u,h)=>(e.openBlock(),e.createElementBlock("div",{class:"opacity-wrapper",ref_key:"wrapper",ref:s},[e.renderSlot(u.$slots,"trigger",{toggle:f,opacity:r.value},()=>[e.createElementVNode("button",{type:"button",class:"opacity-btn",onClick:e.withModifiers(f,["stop"])},e.toDisplayString(r.value)+"% ",1)],!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"popoverEl",ref:l,class:"opacity-popover",style:e.normalizeStyle({top:a.top+"px",left:a.left+"px"})},[e.createElementVNode("div",ah,[h[1]||(h[1]=e.createElementVNode("label",{class:"opacity-popover__label"},"Прозорість:",-1)),e.withDirectives(e.createElementVNode("input",{type:"range",min:"0",max:"100",step:"1","onUpdate:modelValue":h[0]||(h[0]=c=>r.value=c),class:"opacity-popover__range",onInput:m},null,544),[[e.vModelText,r.value]]),e.createElementVNode("span",sh,e.toDisplayString(r.value)+"%",1)])],4)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-b278347a"]]),ih={class:"layers-panel"},ch={class:"layers-panel__header"},dh={class:"layers-panel__heading"},uh={class:"layers-panel__heading-title"},ph={class:"layers-panel__count"},mh={class:"layers-panel__bulk-actions"},fh={class:"layers-panel__header-actions"},gh={class:"layers-panel__header-controls"},yh={class:"layers-panel__label"},hh={class:"layers-panel__label-row"},xh=["checked","onChange"],bh={class:"layers-panel__title-block"},kh={class:"layers-panel__name"},wh={class:"layers-panel__meta text-slate-500"},_h=["onClick"],Eh={class:"inline-flex items-center justify-center w-[18px] h-[18px] text-slate-500 transition-colors duration-200 hover:text-blue-700"},Nh={key:0,class:"layers-panel__actions"},Ch=["innerHTML","onClick"],kl="map:temporary-layer-request",Vh="#5763ba",wl=xe(e.defineComponent({__name:"MapDataLayersWidget",props:{layers:{},config:{}},emits:["action"],setup(t,{emit:n}){const o=t,r=e.ref({}),l=e.ref(!0),s=e.ref(!1),a=Re(),{temporaryLayers:i,activateTemporaryLayer:f,deactivateTemporaryLayer:m,clearTemporaryLayers:x}=xo(a.map),u=e.computed(()=>{const $=o.layers.map(S=>({...S,isTemporary:!1,owner:null,visible:S.visible!==!1})),w=i.value.map(S=>({id:S.id,name:S.title,visible:r.value[S.id]??!0,actions:[],filters:null,isTemporary:!0,owner:S.owner??null,handle:S.handle??null,card:S.card??null,popup:S.popup??null,style:S.style??null,group_name:null,count:null,holder:null}));return[...$,...w]}),h=e.computed(()=>u.value.length),c=e.computed(()=>u.value.filter($=>V($.id)).length),d=e.computed(()=>h.value>0&&c.value===h.value),y=e.computed(()=>i.value.length>0),p=n;function g(){var $;for(let w=0;w<o.layers.length;w++){const S=o.layers[w],I=b(S);if(!I)continue;const Y=Se(S.id,I),Z=S.visible!==!1;r.value[S.id]=Z,Z||($=Y==null?void 0:Y.setVisible)==null||$.call(Y,!1)}}function b($){const w=$.id;if(!w)return null;const S=($.type||$.service_type||$.service||"").toString().toLowerCase(),I=$.service_url||$.url||null;if(!!I&&(S==="tms"||S==="wmts"||S==="wms"||S==="ogc")){const ee=N(I);return ee?{sourceId:w,source:{type:"raster",tiles:[ee],tileSize:$.tileSize||256,minzoom:$.minzoom??0,maxzoom:$.maxzoom??22,scheme:$.scheme||"xyz"},layer:{id:w,type:"raster",source:w},card:$.card,popup:$.popup}:null}if(S==="cartocss"){const ee=$.url?N($.url):`${location.origin}/api/gis-rtile/${w}/{z}/{x}/{y}.png`;return ee?{sourceId:w,source:{type:"raster",tiles:[ee],tileSize:$.tileSize||256,minzoom:$.minzoom??0,maxzoom:$.maxzoom??22},layer:{id:w,type:"raster",source:w},card:$.card,popup:$.popup}:null}if(S==="raster"){const ee=$.url?N($.url):`${location.origin}/api/gis-rtile/${w}/{z}/{x}/{y}.png`;return ee?{sourceId:w,source:{type:"raster",tiles:[ee],tileSize:$.tileSize||256,minzoom:$.minzoom??0,maxzoom:$.maxzoom??22},layer:{id:w,type:"raster",source:w},card:$.card,popup:$.popup}:null}const Z=`${location.origin}/api/vtile/${w}/ua/{z}/{x}/{y}.vmt`;return{sourceId:w,source:{type:"vector",tiles:[Z],minZoom:4,maxZoom:14},layer:{id:w,source:w,"source-layer":w,style:$.style},card:$.card,popup:$.popup}}function N($){return $?/^https?:\/\//i.test($)?$:$.startsWith("//")?`${window.location.protocol}${$}`:$.startsWith("/")?`${location.origin}${$}`:`${location.origin}/${$}`:null}function V($){const w=r.value[$];return w??!0}function k($){var I,Y;if(!($!=null&&$.id))return null;const w=(I=$.title)==null?void 0:I.trim(),S=(Y=$.url)==null?void 0:Y.trim();return!w||!S?null:{id:$.id,title:w,url:S,tileSize:$.tileSize,minzoom:$.minzoom,maxzoom:$.maxzoom,opacity:$.opacity}}function E($){if(!$)return;const w=$.owner;if($.action==="clear"){const I=i.value.filter(Y=>!w||Y.owner===w).map(Y=>Y.id);x(w),I.forEach(Y=>{Y in r.value&&delete r.value[Y]});return}const S=k($.spec);if(S){if($.action==="activate"){f(S,$.context||{},w),r.value[S.id]=!0;return}$.action==="deactivate"&&(m(S.id,w),delete r.value[S.id])}}function _($){$ instanceof CustomEvent&&E($.detail)}e.watch(()=>i.value.map($=>$.id),($,w)=>{const S=new Set(w||[]),I=new Set($);$.forEach(Y=>{Y in r.value||(r.value[Y]=!0)}),S.forEach(Y=>{I.has(Y)||delete r.value[Y]})},{immediate:!0});function B($,w){var I,Y,Z;if($.isTemporary){if(!w){m($.id,$.owner||void 0),delete r.value[$.id];return}r.value[$.id]=!0;const ee=$.handle||((I=i.value.find(re=>re.id===$.id))==null?void 0:I.handle);(Y=ee==null?void 0:ee.setVisible)==null||Y.call(ee,!0);return}r.value[$.id]=w;const S=Se($.id);(Z=S==null?void 0:S.setVisible)==null||Z.call(S,w)}function M($,w){const S=w.target;B($,S.checked)}function z($){u.value.forEach(w=>B(w,$))}function W(){z(!d.value)}function K($){return $.isTemporary?[{label:"Назва",value:$.name??null},{label:"Тип",value:"Тимчасовий шар"},$.owner?{label:"Джерело",value:$.owner}:null].filter(Boolean):[{label:"Назва",value:$.name??null},{label:"Назва групи",value:$.group_name||null},{label:"Кількість",value:$.count??null},{label:"Балансоутримувач",value:$.holder??null}]}function Q($){const w=$.trim();return w?!!(/^#[\da-fA-F]{3,8}$/.test(w)||/^rgb\s*\(/.test(w)||/^rgba\s*\(/.test(w)||/^hsl\s*\(/.test(w)||/^hsla\s*\(/.test(w)||/^[a-zA-Z]+$/.test(w)&&w.length<25):!1}function H($){var w,S,I,Y,Z,ee;if(!$)return null;if(typeof $=="string"){const re=$.trim();return!re||!Q(re)?null:re}if(Array.isArray($)){for(const re of $){const ie=H(re);if(ie)return ie}return null}if(typeof $=="object"){const re=$;return H(re.color??re.fill??re.stroke??re.lineColor??re.fillColor??((w=re.paint)==null?void 0:w["fill-color"])??((S=re.paint)==null?void 0:S["line-color"])??((I=re.paint)==null?void 0:I["circle-color"])??((Y=re.paint)==null?void 0:Y.color)??((Z=re.paint)==null?void 0:Z.lineColor)??((ee=re.paint)==null?void 0:ee.fillColor)??re.paint??re.value)}return null}function J($){const w=Array.isArray($==null?void 0:$.legend)?$.legend[0]:$==null?void 0:$.legend,S=H(w);return S||H($==null?void 0:$.style)||Vh}function O($){return{"--layers-panel-checkbox-color":J($)}}function T(){if(!i.value.length)return;const $=i.value.map(w=>w.id);x(),$.forEach(w=>delete r.value[w])}function D(){l.value=!l.value}function X(){s.value=window.innerWidth<=768}return e.onMounted(()=>{g(),window.addEventListener(kl,_),X(),s.value&&(l.value=!1),window.addEventListener("resize",X)}),e.watch(()=>{var $;return(($=o.layers)==null?void 0:$.length)??0},($,w)=>{$>0&&w===0&&g()}),e.onBeforeUnmount(()=>{window.removeEventListener(kl,_),window.removeEventListener("resize",X)}),($,w)=>(e.openBlock(),e.createElementBlock("div",ih,[e.createElementVNode("div",ch,[e.createElementVNode("div",dh,[e.createElementVNode("div",uh,[w[0]||(w[0]=e.createElementVNode("h2",{class:"layers-panel__title"},"Шари",-1)),e.createElementVNode("span",ph," ("+e.toDisplayString(c.value)+" з "+e.toDisplayString(h.value)+") ",1),e.createElementVNode("div",mh,[u.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__header-link",onClick:W},e.toDisplayString(d.value?"Вимкнути всі":"Увімкнути всі"),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",fh,[e.createElementVNode("div",gh,[u.value.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"layers-panel__toggle-button",onClick:D,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"layers-panel__toggle-icon--rotated":l.value})},[...w[1]||(w[1]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])):e.createCommentVNode("",!0),y.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"layers-panel__clear",onClick:T}," Очистити тимчасові шари ")):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",{class:e.normalizeClass(["layers-panel__content",{"layers-panel__content--collapsed":!l.value}])},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,S=>{var I;return e.openBlock(),e.createElementBlock("div",{key:S.id,class:"layers-panel__item"},[e.createElementVNode("label",yh,[e.createElementVNode("div",hh,[e.createElementVNode("input",{type:"checkbox",class:"layers-panel__checkbox",checked:V(S.id),style:e.normalizeStyle(O(S)),onChange:Y=>M(S,Y)},null,44,xh),e.createElementVNode("div",bh,[e.createElementVNode("span",kh,e.toDisplayString(S.name),1)]),e.createElementVNode("div",wh,[V(S.id)&&!S.isTemporary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createVNode(bl,{"layer-id":S.id,class:"flex"},{trigger:e.withCtx(({toggle:Y})=>[e.createElementVNode("button",{class:"inline-flex items-center justify-center p-0 text-inherit no-underline cursor-pointer",onClick:e.withModifiers(Y,["prevent","stop"])},[e.createElementVNode("div",Eh,[e.createVNode(e.unref(ql))])],8,_h)]),_:1},8,["layer-id"]),e.createVNode(vn,{count:Array.isArray(S.filters)?S.filters.length:0,layer:S},null,8,["count","layer"])],64)):e.createCommentVNode("",!0),e.createVNode(wo,{items:K(S)},null,8,["items"])])])]),(I=S.actions)!=null&&I.length?(e.openBlock(),e.createElementBlock("div",Nh,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.actions,Y=>(e.openBlock(),e.createElementBlock("button",{key:Y.widget||Y.id||Y.icon,type:"button",class:"layers-panel__action",innerHTML:Y.icon,onClick:Z=>p("action",{layerId:Y.widget})},null,8,Ch))),128))])):e.createCommentVNode("",!0)])}),128))],2)]))}}),[["__scopeId","data-v-0636139f"]]),Bh={class:"catalog-tab__search relative mt-[10px]"},$h={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"absolute top-[40%] left-[8px] w-[16px] h-[16px]",style:{transform:"translate(0, -50%)"}},vh={class:"catalog-tab__list flex-1 overflow-y-auto mt-2"},Sh={key:0,class:"text-sm text-gray-400 text-center mt-6"},Lh=["onClick"],Ah={class:"flex items-center gap-x-3"},Mh={class:"max-w-[260px] text-[14px] text-[#4b5563]"},Th={class:"text-xs opacity-60 text-[#4b5563]"},Fh={class:"flex items-center cursor-pointer gap-2 flex-1"},Dh=["checked","onChange"],zh={class:"text-[13px] text-gray-600 max-w-[260px]"},Ih={class:"flex items-center gap-2"},jh=xe(e.defineComponent({__name:"LayersCatalogTab",props:{catalog:{},selected:{},search:{}},emits:["toggle-layer","update:search","open-filter"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),a=e.reactive({visible:!1,text:"Спочатку активуйте шар, щоб застосувати фільтр",top:0,left:0,layerId:null}),i=new Intl.Collator("uk",{sensitivity:"base"}),f=e.computed(()=>{const g=o.search.trim().toLowerCase();return o.catalog.groups.map(b=>{const N=b.layers.filter(V=>{const k=y(V);return k?g?k.toLowerCase().includes(g):!0:!1}).sort((V,k)=>i.compare(y(V),y(k)));return{...b,layers:N}}).filter(b=>b.layers.length>0).sort((b,N)=>i.compare(b.name,N.name))}),m=e.computed({get:()=>o.search,set:g=>r("update:search",g)});function x(g){l[g]=!l[g],uf()}function u(g){return!!l[g]}function h(g,b){if(o.selected.includes(b)){a.visible=!1,a.layerId=null;return}const N=g.currentTarget;if(!N)return;const V=N.getBoundingClientRect(),k=typeof window<"u"?window.scrollX:0,E=typeof window<"u"?window.scrollY:0;a.left=V.left+V.width/2+k,a.top=V.bottom+8+E,a.layerId=b,a.visible=!0}function c(){a.visible=!1,a.layerId=null}function d(g){return[{label:"Назва",value:p(g.name)},{label:"Сервіс",value:p(g.service)},{label:"Посилання",value:p(g.url),breakLine:!0}]}function y(g){return typeof(g==null?void 0:g.name)=="string"?g.name.trim():""}function p(g){return g==null||g===""?null:String(g)}return e.watch(()=>o.selected?o.selected.slice():[],g=>{!a.visible||!a.layerId||g.includes(a.layerId)&&(a.visible=!1,a.layerId=null)}),(g,b)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"catalogRef",ref:s,class:"catalog-tab"},[e.createElementVNode("div",Bh,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":b[0]||(b[0]=N=>m.value=N),type:"text",placeholder:"Введіть назву шару...",class:"py-[7px] pl-8 pe-8 block w-full bg-gray-100 border-transparent rounded-lg text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500"},null,512),[[e.vModelText,m.value]]),(e.openBlock(),e.createElementBlock("svg",$h,[...b[1]||(b[1]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.5817 15.4183 3 11 3C6.5817 3 3 6.5817 3 11C3 15.4183 6.5817 19 11 19Z",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.7 16.7",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])]))]),e.createElementVNode("div",vh,[f.value.length===0?(e.openBlock(),e.createElementBlock("div",Sh," Нічого не знайдено ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,N=>(e.openBlock(),e.createElementBlock("div",{key:N.id,class:"mt-2"},[e.createElementVNode("div",{class:"hover:bg-gray-100 cursor-pointer p-[8px] rounded-lg flex justify-between items-center",onClick:V=>x(N.id)},[e.createElementVNode("div",Ah,[(e.openBlock(),e.createElementBlock("svg",{width:"6",height:"10",viewBox:"0 0 6 10",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass(["transition-transform",u(N.id)?"rotate-90":""])},[...b[2]||(b[2]=[e.createElementVNode("path",{d:"M1 9L5 5L1 1",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2)),e.createElementVNode("div",Mh,e.toDisplayString(N.name),1)]),e.createElementVNode("div",Th,e.toDisplayString(N.layers.length),1)],8,Lh),e.createVNode(e.Transition,{name:"out-in"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.layers,V=>(e.openBlock(),e.createElementBlock("div",{key:V.id,class:"hover:bg-gray-100 rounded-lg flex items-center justify-between ml-[20px] py-[8px] px-[8px] gap-3"},[e.createElementVNode("label",Fh,[e.createElementVNode("input",{type:"checkbox",class:"peer hidden",checked:t.selected.includes(V.id),onChange:k=>g.$emit("toggle-layer",V.id,k.target.checked,V)},null,40,Dh),b[3]||(b[3]=e.createElementVNode("div",{class:"w-4 h-4 rounded border border-blue-800 flex items-center justify-center peer-checked:bg-blue-600 peer-checked:border-blue-600 shrink-0"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"8",viewBox:"0 0 12 8",fill:"none"},[e.createElementVNode("path",{d:"M10.6663 1L4.24967 7.41667L1.33301 4.5",stroke:"#fff","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),e.createElementVNode("span",zh,e.toDisplayString(V.name),1)]),e.createElementVNode("div",Ih,[Array.isArray(V.filters)&&V.filters.length?(e.openBlock(),e.createBlock(vn,{key:0,count:V.filters.length,layer:V,disabled:!t.selected.includes(V.id),onMouseenter:k=>h(k,V.id),onMouseleave:c,onFocus:k=>h(k,V.id),onBlur:c},null,8,["count","layer","disabled","onMouseenter","onFocus"])):e.createCommentVNode("",!0),e.createVNode(wo,{items:d(V)},null,8,["items"])])]))),128))],512),[[e.vShow,u(N.id)]])]),_:2},1024)]))),128))]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[a.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-badge__hint",style:e.normalizeStyle({top:`${a.top}px`,left:`${a.left}px`})},e.toDisplayString(a.text),5)):e.createCommentVNode("",!0)]))],512))}}),[["__scopeId","data-v-36ed2aad"]]),Ph={class:"flex flex-col gap-0"},Rh={class:"text-xs text-slate-600 font-semibold"},Oh=e.defineComponent({__name:"MapLayerPopover",props:{items:{}},setup(t,{expose:n}){const o=t,r=e.reactive({open:!1,top:0,left:0,transform:"translateX(-50%)"}),l=e.ref(null),s=e.ref(null);let a=null;const i=e.computed(()=>{if(!r.open)return{display:"none"};const y=Math.min(460,window.innerWidth-24);return{position:"absolute",width:`${y}px`,maxWidth:`${y}px`,top:`${r.top}px`,left:`${r.left}px`,transform:r.transform,display:"block"}});function f(){if(r.open){h();return}if(!l.value){h();return}r.open=!0,e.nextTick(()=>{m(),c(),requestAnimationFrame(()=>{m()})})}function m(){if(!r.open||!l.value||!s.value)return;const y=l.value.getBoundingClientRect(),p=12,g=window.scrollX+p,b=window.scrollX+window.innerWidth-p,N=window.scrollY+p,V=window.scrollY+window.innerHeight-p,k=s.value.offsetWidth||Math.min(460,window.innerWidth-24),E=s.value.offsetHeight||0;let _=y.left+window.scrollX+(y.width-k)/2;_<g&&(_=g),_+k>b&&(_=Math.max(g,b-k)),r.left=_;let B=y.bottom+window.scrollY+p;B+E>V&&(B=y.top+window.scrollY-E-p,B<N&&(B=Math.max(N,V-E))),B<N&&(B=N),B+E>V&&(B=Math.max(N,V-E)),r.top=B,r.transform="none"}function x(y){var g,b;if(!r.open)return;const p=y.target;(g=l.value)!=null&&g.contains(p)||(b=s.value)!=null&&b.contains(p)||h()}function u(y){y.key==="Escape"&&h()}function h(){d(),r.open=!1,l.value=null,s.value=null}function c(){d(),s.value&&(a=new ResizeObserver(()=>{m()}),a.observe(s.value))}function d(){a&&(a.disconnect(),a=null)}return e.onMounted(()=>{document.addEventListener("click",x,!0),document.addEventListener("keydown",u),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",x,!0),document.removeEventListener("keydown",u),window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m),d()}),e.watch(()=>o.items,()=>{r.open&&e.nextTick(()=>m())},{deep:!0}),n({close:h}),(y,p)=>(e.openBlock(),e.createElementBlock("div",{class:"inline-flex relative",ref_key:"anchorEl",ref:l},[e.createElementVNode("div",{onClick:e.withModifiers(f,["prevent","stop"])},[e.renderSlot(y.$slots,"default")]),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.open?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vst-popover__content inline-block z-[103] py-3 px-4 bg-white text-sm text-gray-500 rounded-md shadow-lg bottom absolute min-w-[200px]",style:e.normalizeStyle(i.value),ref_key:"popoverEl",ref:s,onClick:p[0]||(p[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ph,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,g=>(e.openBlock(),e.createElementBlock("div",{key:g.label,class:"grid grid-cols-[120px_1fr] gap-3 items-start py-1.5 border-b border-slate-200 last:border-b-0"},[e.createElementVNode("div",Rh,e.toDisplayString(g.label),1),e.createElementVNode("div",{class:e.normalizeClass(["text-sm text-gray-800",{"break-all":g.breakLine}])},e.toDisplayString(g.value??"—"),3)]))),128))])],4)):e.createCommentVNode("",!0)]))],512))}}),Uh={class:"selected-tab"},qh={class:"selected-tab__actions"},Hh={key:0,class:"selected-tab__scroll"},Wh=["onDragstart","onDragover","onDrop"],Yh={class:"selected-tab__item-header"},Zh={class:"selected-tab__item-info"},Gh=["checked","onChange"],Kh={class:"selected-tab__item-name"},Xh={class:"selected-tab__item-controls"},Qh=["onClick"],Jh={class:"selected-tab__menu-inner"},ex=xe(e.defineComponent({__name:"LayersSelectedTab",props:{catalog:{},selected:{}},emits:["select-layer","reorder","remove","toggle-layer"],setup(t,{emit:n}){const o=t,r=n,l=e.reactive({}),s=e.ref(null),a=e.ref(null),i=new Map,f=e.reactive({top:0,left:0}),m=e.ref(null),x=e.reactive({top:0,left:0}),u=e.ref(null),h=new Map,c=e.reactive({});function d($){var w;for(const S of((w=o.catalog)==null?void 0:w.groups)??[]){const I=S.layers.find(Y=>Y.id===$);if(I)return I}return null}const y=new Intl.Collator("uk",{sensitivity:"base"}),p=e.computed(()=>[...o.selected].sort(($,w)=>{var Y,Z;const S=((Y=d($))==null?void 0:Y.name)??"",I=((Z=d(w))==null?void 0:Z.name)??"";return y.compare(S,I)}));e.watch(()=>o.selected,$=>{$.forEach(w=>{l[w]==null&&(l[w]=100)})},{immediate:!0});function g(){if(!s.value)return;const $=i.get(s.value);if(!$)return;const w=$.getBoundingClientRect();f.top=w.bottom+8+window.scrollY,f.left=w.left+window.scrollX}e.watch(()=>o.selected,$=>{$.forEach(w=>{c[w]==null&&(c[w]=!0)})},{immediate:!0});function b($,w){c[$]=w;const S=Se($);S&&S.setVisible(w)}function N($,w){w?h.set($,w):h.delete($)}function V($){m.value=m.value===$?null:$,m.value&&e.nextTick(()=>{k($),requestAnimationFrame(()=>{k($)})})}function k($){const w=h.get($);if(!w||!u.value)return;const S=w.getBoundingClientRect(),I=12,Y=6,Z=window.scrollX+I,ee=window.scrollX+window.innerWidth-I,re=window.scrollY+I,ie=window.scrollY+window.innerHeight-I,se=u.value.offsetWidth||190,we=u.value.offsetHeight||0;let P=S.bottom+window.scrollY+Y,te=S.left+window.scrollX;te+se>ee&&(te=S.right+window.scrollX-se,te<Z&&(te=Z)),te<Z&&(te=Z),P+we>ie&&(P=S.top+window.scrollY-we-Y,P<re&&(P=Math.max(re,ie-we))),P<re&&(P=re),P+we>ie&&(P=Math.max(re,ie-we)),x.top=P,x.left=te}function E($){const w=Se($);w&&w.remove(),r("remove",$),m.value=null}function _($){const w=$.target,S=s.value,I=m.value;if(S){const Y=a.value,Z=i.get(S);if(Y&&Y.contains(w)||Z&&Z.contains(w))return;s.value=null}if(I){const Y=u.value,Z=h.get(I);if(Y&&Y.contains(w)||Z&&Z.contains(w))return;m.value=null}}function B(){s.value&&g(),m.value&&k(m.value)}e.onMounted(()=>{document.addEventListener("click",_),window.addEventListener("resize",B),window.addEventListener("scroll",B,!0)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",_),window.removeEventListener("resize",B),window.removeEventListener("scroll",B,!0)});const{map:M}=Re();function z($){var Y,Z,ee;if(!$)return;const w=Se($),S=d($);if(!w&&!S)return;if(((Y=S==null?void 0:S.extent)==null?void 0:Y.length)===4&&((Z=M.value)!=null&&Z.fitBounds)){const re=S.extent.map(ie=>Number(ie));if(re.every(ie=>Number.isFinite(ie))){const[ie,se,we,P]=re;M.value.fitBounds([[ie,se],[we,P]],{padding:40}),m.value=null;return}}(ee=w==null?void 0:w.getSource)!=null&&ee.call(w)&&(m.value=null)}const W=e.ref(null),K=e.ref(null);function Q($,w){W.value=w,K.value=w,$.dataTransfer&&($.dataTransfer.effectAllowed="move",$.dataTransfer.setData("text/plain",String(w)))}function H($){K.value=$}function J($,w){if($.preventDefault(),W.value===null||W.value===w){W.value=null,K.value=null;return}const I=[...p.value],[Y]=I.splice(W.value,1);I.splice(w,0,Y),r("reorder",I),W.value=null,K.value=null}function O(){W.value=null,K.value=null}function T($){return $==null||$===""?null:String($)}function D($,w){return!Array.isArray($)||$.length===0?null:`${$.length} ${w}`}function X($){var P,te,v,L,F,oe;const w=Se($),S=d($);if(!w&&!S)return[];const I=(S==null?void 0:S.name)||((te=(P=w==null?void 0:w.opts)==null?void 0:P.layer)==null?void 0:te.name)||null,Y=(S==null?void 0:S.service)||((v=w==null?void 0:w.opts)==null?void 0:v.service)||null,Z=(L=w==null?void 0:w.getSource)==null?void 0:L.call(w),ee=Z&&"tiles"in Z?(F=Z.tiles)==null?void 0:F[0]:(S==null?void 0:S.url)||null,re=(S==null?void 0:S.source_path)||null,ie=(w==null?void 0:w.popup)||(S==null?void 0:S.popup),se=(w==null?void 0:w.card)||(S==null?void 0:S.card),we=(S==null?void 0:S.filters)||((oe=w==null?void 0:w.opts)==null?void 0:oe.filters);return[{label:"Назва",value:T(I)},{label:"Сервіс",value:T(Y)},{label:"Посилання",value:T(ee),breakLine:!0},{label:"Джерело",value:T(re),breakLine:!0},{label:"Popup",value:D(ie,"полів")},{label:"Картка",value:D(se,"полів")},{label:"Фільтри",value:D(we,"фільтрів")}]}return($,w)=>(e.openBlock(),e.createElementBlock("div",Uh,[e.createElementVNode("div",qh,[e.createElementVNode("button",{class:"selected-tab__add",onClick:w[0]||(w[0]=S=>r("select-layer"))},[...w[3]||(w[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-plus"},[e.createElementVNode("path",{d:"M5 12h14"}),e.createElementVNode("path",{d:"M12 5v14"})],-1),e.createElementVNode("span",null,"Вибрати шар",-1)])])]),t.selected.length?(e.openBlock(),e.createElementBlock("div",Hh,[e.createElementVNode("div",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(S,I)=>{var Y;return e.openBlock(),e.createElementBlock("div",{key:S,class:e.normalizeClass(["selected-tab__item",{"selected-tab__item--dragging":W.value===I,"selected-tab__item--over":K.value===I}]),draggable:"true",onDragstart:Z=>Q(Z,I),onDragover:e.withModifiers(Z=>H(I),["prevent"]),onDrop:Z=>J(Z,I),onDragend:O},[e.createElementVNode("div",Yh,[e.createElementVNode("div",Zh,[w[4]||(w[4]=e.createElementVNode("span",{class:"selected-tab__item-handle"},"☰",-1)),e.createElementVNode("input",{type:"checkbox",class:"selected-tab__item-checkbox shrink-0",checked:c[S]??!0,onChange:Z=>b(S,Z.target.checked)},null,40,Gh),e.createElementVNode("span",Kh,e.toDisplayString(((Y=d(S))==null?void 0:Y.name)||"Шар"),1)]),e.createElementVNode("div",Xh,[e.createVNode(bl,{"layer-id":S},null,8,["layer-id"]),e.createElementVNode("button",{type:"button",class:"selected-tab__item-menu",ref_for:!0,ref:Z=>N(S,Z),onClick:e.withModifiers(Z=>V(S),["stop"])},[...w[5]||(w[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-more-vertical"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"5",r:"1"}),e.createElementVNode("circle",{cx:"12",cy:"19",r:"1"})],-1)])],8,Qh)])])],42,Wh)}),128))])])):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[m.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"menuEl",ref:u,class:"selected-tab__menu",style:e.normalizeStyle({top:x.top+"px",left:x.left+"px"})},[e.createElementVNode("div",Jh,[e.createElementVNode("button",{class:"selected-tab__menu-item",onClick:w[1]||(w[1]=S=>z(m.value))},[...w[6]||(w[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-zoom-in"},[e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"}),e.createElementVNode("line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65"}),e.createElementVNode("line",{x1:"11",x2:"11",y1:"8",y2:"14"}),e.createElementVNode("line",{x1:"8",x2:"14",y1:"11",y2:"11"})],-1),e.createTextVNode(" Збільшити до шару ",-1)])]),e.createVNode(Oh,{items:X(m.value)},{default:e.withCtx(()=>[...w[7]||(w[7]=[e.createElementVNode("button",{class:"selected-tab__menu-item"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-info"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("path",{d:"M12 16v-4"}),e.createElementVNode("path",{d:"M12 8h.01"})]),e.createTextVNode(" Інформація про шар ")],-1)])]),_:1},8,["items"]),w[9]||(w[9]=e.createElementVNode("hr",null,null,-1)),e.createElementVNode("button",{class:"selected-tab__menu-item selected-tab__menu-item--danger",onClick:w[2]||(w[2]=S=>E(m.value))},[...w[8]||(w[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-trash2"},[e.createElementVNode("path",{d:"M3 6h18"}),e.createElementVNode("path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}),e.createElementVNode("path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}),e.createElementVNode("line",{x1:"10",x2:"10",y1:"11",y2:"17"}),e.createElementVNode("line",{x1:"14",x2:"14",y1:"11",y2:"17"})],-1),e.createTextVNode(" Видалити шар ",-1)])])])],4)):e.createCommentVNode("",!0)]))]))}}),[["__scopeId","data-v-aabdc291"]]),tx={class:"filter-tab"},nx={key:0,class:"filter-tab__header"},ox={class:"filter-tab__title"},rx={key:1,class:"filter-tab__content rounded-md"},lx={class:"filter-tab__scroll"},ax={key:2,class:"filter-tab__empty"},sx=xe(e.defineComponent({__name:"LayersFilterTab",props:{layer:{},value:{}},emits:["change"],setup(t,{emit:n}){const o=e.defineAsyncComponent(()=>import("@opengis/filter")),r=t,l=n,s=e.computed(()=>{var f;return((f=r.layer)==null?void 0:f.filters)??[]}),a=e.computed(()=>s.value.length>0);function i(f){l("change",f.data)}return(f,m)=>(e.openBlock(),e.createElementBlock("div",tx,[t.layer&&a.value?(e.openBlock(),e.createElementBlock("div",nx,[e.createElementVNode("div",null,[e.createElementVNode("p",ox,e.toDisplayString(t.layer.name),1)])])):e.createCommentVNode("",!0),t.layer&&a.value?(e.openBlock(),e.createElementBlock("div",rx,[e.createElementVNode("div",lx,[e.createVNode(e.unref(o),{view:"vertical",schema:s.value,value:t.value,limit:5,class:"rounded-md pb-0",onChange:m[0]||(m[0]=x=>i(x))},null,8,["schema","value"])])])):(e.openBlock(),e.createElementBlock("div",ax,[...m[1]||(m[1]=[e.createElementVNode("p",{class:"filter-tab__empty-title"},"Немає доступних фільтрів",-1),e.createElementVNode("p",{class:"filter-tab__empty-text"}," Оберіть шар із фільтрами у каталозі, щоб налаштувати відбір даних. ",-1)])]))]))}}),[["__scopeId","data-v-c6632fbd"]]),ix={class:"flex items-center justify-between mb-1"},cx={class:"flex items-center gap-2"},dx={class:"text-lg font-semibold text-gray-800"},ux={key:0},px={key:1,class:"block text-sm font-normal text-gray-500"},mx={class:"flex items-center gap-2"},fx={class:"flex mb-4 border-b border-gray-200"},gx={class:"map-catalog-widget__body"},_l=xe(e.defineComponent({__name:"MapCatalogWidget",setup(t){const n=Fe.useRoute(),o=Fe.useRouter();function r(){const T=n.query["catalog-tab"];return(Array.isArray(T)?T[0]:T)==="selected"?"selected":"catalog"}const l=e.ref(r()),s=e.ref({groups:[]}),a=e.ref([]),i=e.ref(""),{map:f}=Re(),m=e.reactive({}),x=e.ref(null),u=e.ref(!0),h=e.ref(!1);function c(T){return s.value.groups.map(D=>D.layers.find(X=>X.id===T)).find(Boolean)||null}function d(T){return typeof(T==null?void 0:T.name)=="string"&&T.name.trim().length>0}function y(){const T=x.value;if(!T)return;delete m[T];const D=Se(T);D!=null&&D.setFilter&&D.setFilter("")}function p(T,D){const X=Se(T);if(m[T]={...D},!(X!=null&&X.setFilter))return;const $=Object.entries(D).filter(([,w])=>w!=null&&w!=="").map(([w,S])=>`${w}=${S}`);X.setFilter($.join("|"))}function g(T){const D=x.value;D&&p(D,T)}function b(T){const D=T.url;let X=null;if(D&&(X=D.startsWith("http")?D:`${window.location.origin}${D}`),!X)return null;const $=(T.service||"").toString().toLowerCase(),w=T.count??null;return $&&$!=="vtile"?{service:$,count:w,source:{type:"raster",tiles:[X],tileSize:256,minzoom:0,maxzoom:20}}:{service:$,count:w,source:{type:"vector",tiles:[X],minzoom:0,maxzoom:14},layer:{style:T.style},card:T.card,popup:T.popup}}function N(T,D,X){var I;const $=X??c(T);if(!$)return;const w=b($);if(!w)return;const S=Se($.id,w,f);if(S)if(S.setVisible(D),D){if(!a.value.includes(T)&&(a.value.push(T),(I=f.value)!=null&&I.getLayer(T)))try{f.value.moveLayer(T)}catch(Y){console.warn("Cannot move new layer",T,Y)}}else a.value=a.value.filter(Y=>Y!==T),x.value===T&&(y(),x.value=null)}function V(){a.value.forEach(T=>{const D=Se(T);D&&D.setVisible(!1)}),a.value=[]}function k(T){a.value=[...T],e.nextTick(()=>{var w;if(!f.value)return;const D=((w=f.value.getStyle())==null?void 0:w.layers)??[];let X;const $=S=>D.filter(I=>{var Y,Z;return(I==null?void 0:I.source)===S||(I==null?void 0:I.id)===S||((Z=(Y=I==null?void 0:I.id)==null?void 0:Y.startsWith)==null?void 0:Z.call(Y,`${S}`))}).map(I=>I.id);for(let S=T.length-1;S>=0;S-=1){const I=T[S],Y=$(I);Y.length&&(Y.forEach(Z=>{var ee;if((ee=f.value)!=null&&ee.getLayer(Z))try{f.value.moveLayer(Z,X)}catch(re){console.warn("Cannot move layer",Z,re)}}),X=Y[0])}})}function E(T){!T||!Array.isArray(T.filters)||T.filters.length===0||a.value.includes(T.id)&&(x.value=T.id,m[T.id]||(m[T.id]={}),l.value="filter")}function _(){l.value="catalog"}const B=e.computed(()=>x.value?c(x.value):null),M=e.computed(()=>{const T=x.value;return T?m[T]??{}:{}}),z=e.computed(()=>s.value.groups.reduce((T,D)=>T+D.layers.filter(d).length,0)),W=e.computed(()=>l.value==="selected"?"Вибрані шари":l.value==="filter"?"Фільтр шарів":"Каталог"),K=e.computed(()=>l.value==="selected"?a.value.length:l.value==="catalog"?z.value:null),Q=e.computed(()=>{var T;return l.value==="filter"?((T=B.value)==null?void 0:T.name)??"":""});async function H(){const D=await(await fetch("/api/gis-layer-list")).json(),X=new Map;D.forEach(S=>{const I=S.group_id??"other";X.has(I)||X.set(I,{id:I,name:S.group_name||"Інші шари",layers:[]}),X.get(I).layers.push(S)}),s.value={groups:Array.from(X.values())};const $=n.query.layers;if(!$)return;const w=Array.isArray($)?$[0]:$;typeof w=="string"&&w.split(",").forEach(S=>{const I=S.trim();if(!I)return;const Y=c(I);Y&&N(I,!0,Y)})}e.watch(x,T=>{!T&&l.value==="filter"&&(l.value="catalog")}),e.watch(B,T=>{!T&&x.value&&(x.value=null)}),e.watch(a,T=>{const D={...n.query};T.length?D.layers=T.join(","):delete D.layers,o.replace({query:D}).catch(()=>{})},{deep:!0});function J(){u.value=!u.value}function O(){h.value=window.innerWidth<=768}return e.onMounted(()=>{H(),O(),h.value&&(u.value=!1),window.addEventListener("resize",O)}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",O)}),(T,D)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["map-catalog-widget w-full max-w-md mx-auto p-4 bg-white border border-gray-200 rounded-lg shadow-sm widget",K.value>1?"min-h-[250px] md:min-h-[0px]":"min-h-[0px]"])},[e.createElementVNode("div",ix,[e.createElementVNode("div",cx,[D[5]||(D[5]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"lucide lucide-layers text-blue-600"},[e.createElementVNode("path",{d:"m12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83Z"}),e.createElementVNode("path",{d:"m22 17.65-9.17 4.16a2 2 0 0 1-1.66 0L2 17.65"}),e.createElementVNode("path",{d:"m22 12.65-9.17 4.16a2 2 0 0 1-1.66 0L2 12.65"})],-1)),e.createElementVNode("h2",dx,[e.createTextVNode(e.toDisplayString(W.value)+" ",1),K.value!==null?(e.openBlock(),e.createElementBlock("span",ux,"("+e.toDisplayString(K.value)+")",1)):e.createCommentVNode("",!0),Q.value?(e.openBlock(),e.createElementBlock("span",px,e.toDisplayString(Q.value),1)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",mx,[e.createElementVNode("button",{onClick:V,class:"p-1 rounded-full hover:bg-gray-200 transition-colors","aria-label":"Reset layers"},[...D[6]||(D[6]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-refresh-cw text-gray-600" data-v-99290304><path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" data-v-99290304></path><path d="M21 3v5h-5" data-v-99290304></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-99290304></path><path d="M8 16H3v5" data-v-99290304></path></svg>',1)])]),e.createElementVNode("button",{type:"button",class:"map-catalog-widget__toggle-button",onClick:J,"aria-label":"Розгорнути/згорнути"},[(e.openBlock(),e.createElementBlock("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:e.normalizeClass({"map-catalog-widget__toggle-icon--rotated":u.value})},[...D[7]||(D[7]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))])])]),e.createElementVNode("div",{class:e.normalizeClass(["map-catalog-widget__content",{"map-catalog-widget__content--collapsed":!u.value}])},[e.createElementVNode("div",fx,[e.createElementVNode("button",{onClick:D[0]||(D[0]=X=>l.value="catalog"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="catalog"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Каталог ",2),e.createElementVNode("button",{onClick:D[1]||(D[1]=X=>l.value="selected"),class:e.normalizeClass(["px-4 py-2 text-sm font-medium",l.value==="selected"?"text-blue-600 border-b-2 border-blue-600":"text-gray-600 hover:text-gray-800"])}," Вибрані шари ",2)]),e.createElementVNode("div",gx,[l.value==="catalog"?(e.openBlock(),e.createBlock(jh,{key:0,class:"map-catalog-widget__scroll",catalog:s.value,selected:a.value,search:i.value,"onUpdate:search":D[2]||(D[2]=X=>i.value=X),onToggleLayer:N,onOpenFilter:E},null,8,["catalog","selected","search"])):l.value==="selected"?(e.openBlock(),e.createBlock(ex,{key:1,catalog:s.value,selected:a.value,onToggleLayer:N,onSelectLayer:D[3]||(D[3]=X=>l.value="catalog"),onReorder:k,onRemove:D[4]||(D[4]=X=>a.value=a.value.filter($=>$!==X))},null,8,["catalog","selected"])):(e.openBlock(),e.createBlock(sx,{key:2,layer:B.value,value:M.value,onChange:g,onClose:_},null,8,["layer","value"]))])],2)],2))}}),[["__scopeId","data-v-99290304"]]),yx={key:1,class:"flex flex-col bg-white border border-stone-200 shadow-2xs rounded-xl z-10 relative widget"},hx={class:"flex items-start justify-between gap-3 p-5 pb-3"},xx={class:"inline-block text-xl font-semibold text-gray-800"},bx={key:0,class:"mt-1 text-sm text-gray-500"},kx={class:"flex items-center gap-[6px]"},wx={class:"px-5 pb-5 space-y-6"},_x={key:0,class:"space-y-2"},Ex={class:"flex flex-wrap gap-4"},Nx=["value"],Cx={key:1,class:"text-sm text-gray-500"},Vx={key:2,class:"text-sm text-gray-500"},Bx={class:"text-4xl font-medium text-gray-800"},$x={class:"space-y-[14px]"},vx={class:"flex items-center gap-[10px] text-gray-600"},Sx={class:"font-medium text-gray-700"},Lx={class:"flex items-center justify-end text-end gap-3"},Ax={class:"font-medium text-gray-800"},Mx={class:"min-w-[40px] font-medium text-[#3C3C4399]"},El=xe(e.defineComponent({__name:"MapAttributeWidget",props:{config:{}},setup(t){const n=["#3a7a57","#d970d5","#8e997b","#b4c039","#a855f7","#71823a","#f79d92","#8b5cf6","#a6514e","#6b7280"],o=t,r=e.ref(!0),l=e.ref(!1),s=e.ref([]),a=e.ref(null),i=e.ref(null),f=e.ref(null),m=e.ref(null),x=e.ref(null),u=e.ref({}),h=e.ref(null);function c(O){return O&&JSON.parse(JSON.stringify(O))}const d=e.computed(()=>{const O=o.config.layer;if(typeof O!="string")throw new Error("MapAttributeWidget: `layer` must be a string");const T=O.trim();if(!T)throw new Error("MapAttributeWidget: `layer` must be non-empty");return T}),y=e.computed(()=>{const{list:O,attribute:T}=o.config;if(Array.isArray(O)&&O.length)return O.map(D=>({id:(D==null?void 0:D.id)!=null?String(D.id).trim():"",text:(D==null?void 0:D.text)!=null&&String(D.text).trim()||null})).filter(D=>D.id.length);if(Array.isArray(T))return T.map(D=>D!=null?String(D).trim():"").filter(D=>D.length).map(D=>({id:D,text:null}));if(typeof T=="string"){const D=T.trim();if(!D)throw new Error("MapAttributeWidget: `attribute` must be non-empty");return[{id:D,text:null}]}throw new Error("MapAttributeWidget: `attribute` or `list` must be provided")}),p=e.computed(()=>y.value.map(O=>({id:O.id,label:O.text||u.value[O.id]||O.id})));e.watch(y,O=>{if(!O.length){h.value=null,s.value=[];return}(!h.value||!O.some(T=>T.id===h.value))&&(h.value=O[0].id)},{immediate:!0});const g=e.computed(()=>{var O;return h.value||((O=y.value[0])==null?void 0:O.id)||null});e.watch(d,()=>{var O,T;(T=(O=i.value)==null?void 0:O.remove)==null||T.call(O),i.value=null,f.value=null,m.value=null,x.value=null,u.value={}});const b=e.computed(()=>{var O;return(O=m.value)!=null&&O.length?{id:d.value,name:f.value,filters:m.value}:null}),N=e.computed(()=>{var O,T;return((T=(O=b.value)==null?void 0:O.filters)==null?void 0:T.length)||0});async function V(O){var X;const T=await fetch(`/api/gis-service/${encodeURIComponent(O)}`);if(!T.ok){let $="Не вдалося завантажити налаштування шару";try{const w=await T.json();$=((X=w==null?void 0:w.message)==null?void 0:X.error)||(w==null?void 0:w.message)||$}catch{}throw new Error($)}const D=await T.json();return f.value=(D==null?void 0:D.name)||null,m.value=Array.isArray(D==null?void 0:D.filters)?D.filters:null,x.value=c((D==null?void 0:D.style)||{}),u.value=((D==null?void 0:D.attributes)||[]).reduce(($,w)=>{const S=typeof(w==null?void 0:w.name)=="string"?w.name.trim():"",I=typeof(w==null?void 0:w.ua)=="string"?w.ua.trim():"";return S&&($[S]=I||S),$},{}),D}function k(O,T){let D=Se(O);if(!D){const X=`${location.origin}/api/vtile/${O}/ua/{z}/{x}/{y}.vmt`;D=Se(O,{source:{type:"vector",tiles:[X],minzoom:0,maxzoom:14},layer:{id:O,source:O,"source-layer":O,style:(T==null?void 0:T.style)||{}},card:T==null?void 0:T.card,popup:T==null?void 0:T.popup})}return i.value=D,D}async function E(O,T){var $;const D=`/api/gis-service/${encodeURIComponent(O)}/${encodeURIComponent(T)}`,X=await fetch(D);if(!X.ok){let w="Не вдалося отримати статистику";try{const S=await X.json();w=(($=S==null?void 0:S.message)==null?void 0:$.error)||(S==null?void 0:S.message)||w}catch{}throw new Error(w)}return X.json()}function _(O){const T=new Map;return O&&(O.rules||[]).forEach(X=>{const $=(X==null?void 0:X.value)??(X==null?void 0:X.id);$!=null&&T.set(String($),X)}),T}function B(O,T,D,X,$){if(typeof(T==null?void 0:T.color)=="string"&&T.color.trim())return T.color.trim();const w=o.config.colors||{};if(w[O])return w[O];const I=_(D==null?void 0:D.style).get(O);return typeof(I==null?void 0:I.color)=="string"&&I.color.trim()?I.color.trim():n[$%n.length]}function M(O,T,D,X){var $;return(T==null?void 0:T.text)||(T==null?void 0:T.label)||(T==null?void 0:T.name)||(T==null?void 0:T[`${X}_text`])||(($=_(D==null?void 0:D.style).get(O))==null?void 0:$.label)||O}function z(O,T,D,X){if(!O)return;const $=c((T==null?void 0:T.style)||x.value)||{},w=X.trim();if(!w)return;const S={...$.colors||{},...o.config.colors||{}};w===X&&D.forEach(I=>{I.color.trim()&&(S[I.id]=I.color)}),O.setStyle({...$,type:$.type||"polygon",colorAttr:w,opacity:.8,colors:S})}async function W(){var w,S;s.value=[],a.value=null;const O=d.value,T=g.value;if(!T)return;l.value=!0;const D=await V(O);k(O,D);const X=await E(O,T),$=Array.isArray(X==null?void 0:X.rows)?X.rows.map((I,Y)=>{const Z=(I==null?void 0:I.id)??(I==null?void 0:I.value),ee=Z!=null?String(Z):"";if(!ee)return null;const re=M(ee,I,D,T),ie=Number((I==null?void 0:I.count)??0)||0,se=B(ee,I,D,T,Y);return{id:ee,label:re,count:ie,color:se}}).filter(Boolean):[];s.value=$,a.value=((w=X==null?void 0:X.field)==null?void 0:w.label)||((S=X==null?void 0:X.field)==null?void 0:S.name)||null,z(i.value,D,$,T),l.value=!1}e.watch(()=>[d.value,g.value],()=>{W()},{immediate:!0});const K=e.computed(()=>"Набори даних"),Q=e.computed(()=>s.value.reduce((O,T)=>O+T.count,0)),H=e.computed(()=>{var D;const O=g.value;return((D=p.value.find(X=>X.id===O))==null?void 0:D.label)||null||a.value||O||null});function J(O){return Q.value?`${(O/Q.value*100).toFixed(2)}%`:"0.00%"}return e.onBeforeUnmount(()=>{var O,T;(T=(O=i.value)==null?void 0:O.remove)==null||T.call(O)}),(O,T)=>r.value?(e.openBlock(),e.createElementBlock("div",yx,[e.createElementVNode("div",hx,[e.createElementVNode("div",null,[e.createElementVNode("h2",xx,e.toDisplayString(K.value),1),H.value&&p.value.length===1?(e.openBlock(),e.createElementBlock("p",bx,e.toDisplayString(H.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",kx,[b.value?(e.openBlock(),e.createBlock(vn,{key:0,class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",count:N.value,layer:b.value},null,8,["count","layer"])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"flex justify-center items-center h-[36px] w-[36px] text-sm border border-gray-200 text-gray-600 hover:bg-gray-100 rounded-full",onClick:T[1]||(T[1]=D=>r.value=!1)},[...T[3]||(T[3]=[e.createElementVNode("svg",{class:"w-4 h-4",xmlns:"http://www.w3.org/2000/svg",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",viewBox:"0 0 24 24"},[e.createElementVNode("path",{d:"M18 6 6 18"}),e.createElementVNode("path",{d:"m6 6 12 12"})],-1)])])])]),e.createElementVNode("div",wx,[p.value.length>1?(e.openBlock(),e.createElementBlock("div",_x,[e.createElementVNode("div",Ex,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,D=>(e.openBlock(),e.createElementBlock("label",{key:D.id,class:"inline-flex items-center gap-2 text-sm text-gray-700"},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:"text-sky-600 focus:ring-sky-500",value:D.id,"onUpdate:modelValue":T[2]||(T[2]=X=>h.value=X)},null,8,Nx),[[e.vModelRadio,h.value]]),e.createElementVNode("span",null,e.toDisplayString(D.label),1)]))),128))])])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",Cx,"Завантаження…")):s.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("h4",Bx,e.toDisplayString(Q.value),1),e.createElementVNode("ul",$x,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,D=>(e.openBlock(),e.createElementBlock("li",{key:D.id,class:"flex flex-wrap items-center justify-between gap-x-2"},[e.createElementVNode("div",vx,[e.createElementVNode("span",{class:"block w-[16px] h-[16px] rounded",style:e.normalizeStyle({backgroundColor:D.color})},null,4),e.createElementVNode("span",Sx,e.toDisplayString(D.label),1)]),e.createElementVNode("div",Lx,[e.createElementVNode("span",Ax,e.toDisplayString(D.count),1),e.createElementVNode("span",Mx,e.toDisplayString(J(D.count)),1)])]))),128))])],64)):(e.openBlock(),e.createElementBlock("div",Vx,"Дані відсутні"))])])):(e.openBlock(),e.createElementBlock("button",{key:0,class:"py-2 px-2.5 max-h-[38px] inline-flex items-center gap-x-1.5 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50",onClick:T[0]||(T[0]=D=>r.value=!0)}," Набори даних "))}}),[["__scopeId","data-v-9686ce7b"]]),Tx=["title"],Fx={key:0,class:"vs-select__options absolute z-50 mt-1 w-auto min-w-full bg-white border border-gray-300 shadow-lg rounded-lg text-sm text-gray-900"},Dx=["onClick"],zx=["placeholder"],Ix={class:"absolute inset-y-0 right-2 flex items-center gap-1"},jx={class:"flex items-center justify-between gap-2 px-3 py-2 border-b border-gray-100"},Px={class:"text-xs font-semibold uppercase tracking-wide text-gray-500"},Rx={class:"max-h-[60vh] overflow-auto"},Ox={key:0,class:"divide-y divide-gray-100"},Ux=["onClick"],qx={key:1,class:"px-3 py-3 text-xs text-gray-500"},Nl="mapSearchAddressHistory",sn="search-geom-source",cn="search-geom-layer-fill",Tn="search-geom-layer-line",Hx=12,Wx="https://data.softpro.ua/api-user/gis-url-proxy",Yx="https://geo.rv.ua/api-user/dzk.api",Zx="https://nominatim.openstreetmap.org/search",Cl=xe(e.defineComponent({__name:"MapSearchWidget",props:{config:{}},setup(t){const n={mounted(j,G){if(typeof document>"u")return;let q=null;const ae=8,me=()=>{const Ce=String((G==null?void 0:G.value)??"");if(!Ce)return;q=document.createElement("div"),q.textContent=Ce,Object.assign(q.style,{position:"absolute",background:"#333",color:"#fff",padding:"4px 8px",borderRadius:"4px",fontSize:"12px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:"9999"}),document.body.appendChild(q);const Ee=j.getBoundingClientRect();q.style.left=`${Ee.right+window.scrollX+ae}px`,q.style.top=`${Ee.top+window.scrollY+(Ee.height-q.offsetHeight)/2}px`},ke=()=>{q!=null&&q.parentNode&&q.parentNode.removeChild(q),q=null};j.addEventListener("mouseenter",me),j.addEventListener("mouseleave",ke),Object.assign(j,{tooltipRightHandlers:{show:me,hide:ke}})},unmounted(j){if(typeof document>"u")return;const G=j.tooltipRightHandlers;G&&(j.removeEventListener("mouseenter",G.show),j.removeEventListener("mouseleave",G.hide))}},o=t,r=Re(),l=e.getCurrentInstance();function s(){return typeof globalThis<"u"&&globalThis.proxy?globalThis.proxy:typeof window<"u"&&window.proxy?window.proxy:null}function a(){var ae,me,ke;const j=(ae=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:ae.$settings,G=(me=j==null?void 0:j.map)==null?void 0:me.searchViewbox;if(G)return G;const q=s();return(ke=q==null?void 0:q.map)==null?void 0:ke.searchViewbox}function i(){var me,ke,Ce;const j=(me=l==null?void 0:l.appContext.config.globalProperties)==null?void 0:me.$settings,G=(ke=j==null?void 0:j.map)==null?void 0:ke.addressSuggest;if(typeof G=="string"&&G.trim())return G.trim();const q=s(),ae=(Ce=q==null?void 0:q.map)==null?void 0:Ce.addressSuggest;if(typeof ae=="string"&&ae.trim())return ae.trim()}const f=!!i(),m=!!a(),x=e.computed(()=>{const j=["xy","parcel"];return f&&j.push("address"),m&&j.push("nominatim"),j}),u=e.computed(()=>{var q,ae;const j=x.value,G=(ae=(q=o.config)==null?void 0:q.tools)==null?void 0:ae.filter(me=>j.includes(me));return G&&G.length?G:j}),h=e.computed(()=>{var j,G;return((G=(j=o.config)==null?void 0:j.placeholder)==null?void 0:G.trim())||"Пошук…"}),c=e.ref(u.value[0]);e.watch(u,j=>{j.includes(c.value)||(c.value=j[0])});const d=e.ref(""),y=e.ref(!1),p=e.ref(null),g=e.ref(null),b=e.ref(null),N=e.ref(null),V=e.ref([]),k=e.ref(null),E=e.ref(!1),_=e.ref([]),B=e.computed(()=>(c.value==="address"||c.value==="nominatim")&&E.value),M=e.computed(()=>{var j;return((j=o.config)==null?void 0:j.addressDebounceMs)??1e3});let z=null;const W=e.ref(!1),K=e.computed(()=>d.value.trim().length>0?V.value:_.value),Q=e.computed(()=>d.value.trim().length?`Знайдено ${V.value.length}`:"Історія пошуку"),H=e.computed(()=>d.value.trim().length?"Нічого не знайдено":"Історія порожня");function J(){var j,G;if(typeof window>"u")return[];try{const q=(G=(j=window.localStorage)==null?void 0:j.getItem)==null?void 0:G.call(j,Nl);if(!q)return[];const ae=JSON.parse(q);return Array.isArray(ae)?ae:[]}catch{return[]}}function O(j){var G,q;typeof window>"u"||(q=(G=window.localStorage)==null?void 0:G.setItem)==null||q.call(G,Nl,JSON.stringify(j))}function T(j){const q=[j,..._.value.filter(ae=>ae.id!==j.id)].slice(0,10);_.value=q,O(q)}let D=null;function X(){D&&(D.remove(),D=null)}function $(){var G;const j=(G=r.map)==null?void 0:G.value;j&&(j.getLayer(cn)&&j.removeLayer(cn),j.getLayer(Tn)&&j.removeLayer(Tn),j.getSource(sn)&&j.removeSource(sn))}function w(j){var me,ke,Ce,Ee;if(!((me=o.config)!=null&&me.showMarker)||!j)return;const G=(ke=r.map)==null?void 0:ke.value;if(!G)return;$(),I();const q={type:"Feature",geometry:j,properties:{}};G.addSource(sn,{type:"geojson",data:q});const ae=((Ce=o.config)==null?void 0:Ce.geometryColor)||((Ee=o.config)==null?void 0:Ee.markerColor)||"#3B82F6";G.addLayer({id:cn,type:"fill",source:sn,paint:{"fill-color":ae,"fill-opacity":.3}}),G.addLayer({id:Tn,type:"line",source:sn,paint:{"line-color":ae,"line-width":1,"line-opacity":1}}),Y(G)}let S=null;function I(){S&&(cancelAnimationFrame(S),S=null)}function Y(j){const q=performance.now();function ae(me){if(!j.getLayer(cn))return;const Ce=(me-q)%1200/1200,Ee=Math.sin(Ce*Math.PI),it=.2+Ee*.3,ot=1+Ee*1;j.setPaintProperty(cn,"fill-opacity",it),j.setPaintProperty(Tn,"line-width",ot),S=requestAnimationFrame(ae)}S=requestAnimationFrame(ae)}function Z(j,G){var me,ke,Ce;if(!((me=o.config)!=null&&me.showMarker))return;X(),$();const q=(ke=r.map)==null?void 0:ke.value;if(!q)return;if(G){w(G);return}const ae=((Ce=o.config)==null?void 0:Ce.markerColor)||"#3B82F6";D=new maplibregl.Marker({color:ae}).setLngLat([j.lng,j.lat]).addTo(q)}const ee=e.reactive({position:"absolute",left:"0px",top:"0px",width:"100%",display:"none"});function re(){var ke;if(!N.value)return;const j=N.value.getBoundingClientRect(),G=(ke=b.value)==null?void 0:ke.getBoundingClientRect(),q=(G==null?void 0:G.width)??j.width,ae=((G==null?void 0:G.left)??j.left)+window.scrollX,me=j.bottom+window.scrollY+Hx;ee.left=`${ae}px`,ee.top=`${me}px`,ee.width=`${q}px`,ee.display="block"}const ie=()=>{B.value&&re()};function se(){z&&(clearTimeout(z),z=null)}e.watch(c,()=>{d.value="",y.value=!1,V.value=[],E.value=!1,se(),W.value=!1,X(),$()}),e.watch(B,j=>{j?e.nextTick(()=>{re()}):ee.display="none"}),e.watch(d,j=>{if(c.value!=="address"&&c.value!=="nominatim"){V.value=[],se();return}if(!j.trim()){V.value=[],E.value=_.value.length>0,se();return}se(),E.value=!0,z=window.setTimeout(()=>{Ft(j).catch(G=>{const q=(G==null?void 0:G.message)||"Помилка пошуку адреси";he.notify({type:"error",title:"Пошук адреси",message:q})})},M.value)});function we(j){var ae;const G=[];g.value&&G.push(g.value),j instanceof HTMLElement&&G.push(j);const q=(ae=p.value)==null?void 0:ae.querySelectorAll("li");q==null||q.forEach(me=>{G.push(me)}),G.forEach(me=>{me.dispatchEvent(new MouseEvent("mouseleave",{bubbles:!0}))})}function P(j){y.value&&we(j.target),y.value=!y.value}function te(j,G){we(G==null?void 0:G.target),c.value=j}function v(){d.value="",V.value=[],E.value=!1,W.value=!1,X(),$()}function L(j){const G=j.target;if(y.value){const q=p.value;q&&!q.contains(G)&&(we(G),y.value=!1)}if(B.value){const q=k.value,ae=N.value;q&&!q.contains(G)&&(!ae||!ae.contains(G))&&(E.value=!1)}}e.onMounted(()=>{_.value=J(),window.addEventListener("click",L,!0),window.addEventListener("scroll",ie,!0),window.addEventListener("resize",ie)}),e.onBeforeUnmount(()=>{window.removeEventListener("click",L,!0),window.removeEventListener("scroll",ie,!0),window.removeEventListener("resize",ie),se(),X(),$()});function F(j){return j==="xy"?"Координати":j==="parcel"?"Кадастр":j==="nominatim"?"Nominatim":"Адресний"}function oe(j){switch(j){case"xy":return"Пошук за географічними координатами. Введіть широту і довготу через пробіл або кому (lat lng або lng lat).";case"parcel":return"Пошук земельної ділянки за кадастровим номером у форматі 0000000000:00:000:0000 з відображенням меж ділянки на карті.";case"nominatim":return"Пошук адрес та обʼєктів через Nominatim з обмеженням у межах карти.";case"address":return"Пошук адрес через локальний сервіс addressSuggest (швидкі підказки з вашого геопорталу).";default:return""}}function ue(j){const G=j.replace(/[,]+/g," ").trim();if(!G)return null;const q=G.split(/\s+/).filter(Boolean);if(q.length<2)return null;const ae=q.slice(0,2).map(Number);if(!ae.every(Ge=>Number.isFinite(Ge)))return null;let[me,ke]=ae,Ce=me,Ee=ke;const it=Ge=>Math.abs(Ge)<=90,ot=Ge=>Math.abs(Ge)<=180;if(!it(Ce)||!ot(Ee))if(it(Ee)&&ot(Ce))Ce=ke,Ee=me;else return null;return{lat:Ce,lng:Ee}}function be(j){return((j==null?void 0:j.items)||[]).map((q,ae)=>{var me,ke,Ce;return{id:String((q==null?void 0:q.id)??ae),title:(q==null?void 0:q.title)||((me=q==null?void 0:q.address)==null?void 0:me.label)||"Знайдений обʼєкт",lat:Number((ke=q==null?void 0:q.position)==null?void 0:ke.lat),lng:Number((Ce=q==null?void 0:q.position)==null?void 0:Ce.lng)}})}function Ve(j){const G=(j==null?void 0:j.result)||(j==null?void 0:j.data)||j;if(!G)return[];const q=G.geom_centroid;if(!q||!Array.isArray(q.coordinates))return[];const[ae,me]=q.coordinates;return!Number.isFinite(me)||!Number.isFinite(ae)?[]:[{id:"parcel",title:G.cadnum||G.cad_num||"Земельна ділянка",lat:me,lng:ae,geom:G.geom||null}]}function ge(j){return(Array.isArray(j==null?void 0:j.features)?j.features:[]).map((q,ae)=>{var Ge,ct,_t;const me=(Ge=q==null?void 0:q.geometry)==null?void 0:Ge.coordinates,ke=Number(me==null?void 0:me[0]),Ce=Number(me==null?void 0:me[1]);if(!Number.isFinite(Ce)||!Number.isFinite(ke))return null;const Ee=(q==null?void 0:q.properties)||{},it=((ct=Ee==null?void 0:Ee.geocoding)==null?void 0:ct.label)||(Ee==null?void 0:Ee.display_name)||(Ee==null?void 0:Ee.label)||"Адреса";return{id:String(((_t=Ee==null?void 0:Ee.geocoding)==null?void 0:_t.place_id)||(Ee==null?void 0:Ee.place_id)||ae),title:it,lat:Ce,lng:ke}}).filter(q=>!!q)}function De(j){return Number.isFinite(j.lat)&&Number.isFinite(j.lng)}function ze(j){const G=Number(j);return Number.isFinite(G)?G:null}function Ue(j){var me,ke,Ce,Ee,it,ot;const G=ze(j.lng)??ze(j.lon)??ze(j.longitude)??ze(j.x),q=ze(j.lat)??ze(j.latitude)??ze(j.y);if(G!=null&&q!=null)return{lat:q,lng:G};const ae=((me=j==null?void 0:j.geometry)==null?void 0:me.coordinates)??((ke=j==null?void 0:j.geom_centroid)==null?void 0:ke.coordinates)??((Ce=j==null?void 0:j.centroid)==null?void 0:Ce.coordinates)??((it=(Ee=j==null?void 0:j.geojson)==null?void 0:Ee.geometry)==null?void 0:it.coordinates)??((ot=j==null?void 0:j.geom)==null?void 0:ot.coordinates);if(Array.isArray(ae)&&ae.length>=2){const Ge=ze(ae[0]),ct=ze(ae[1]);if(Ge!=null&&ct!=null)return{lat:ct,lng:Ge}}return null}function Ze(j){return(Array.isArray(j==null?void 0:j.data)?j.data:[]).map((q,ae)=>{const me=Ue(q),ke=String(q.text??q.title??q.label??q.name??q.address??q.display_name??q.id??"Адреса"),Ce=String(q.id??q.code??q.value??ae);return me?{id:Ce,title:ke,...me}:{id:Ce,title:ke}}).filter(q=>!!(q!=null&&q.title))}function ft(j){const G=i();if(!G)return null;if(G.includes(":name"))return G.replace(":name",encodeURIComponent(j));try{const q=new URL(G,window.location.origin);return j.trim()&&q.searchParams.set("q",j),q.toString()}catch{return G}}async function gt(j){const G=ft(j);if(!G)return[];const q=await fetch(G);if(!q.ok)throw new Error(`HTTP ${q.status}`);const ae=await q.json();return Ze(ae)}async function Zt(j){const G=new URL(Zx);G.searchParams.set("format","geojson"),G.searchParams.set("q",j),G.searchParams.set("addressdetails","1"),G.searchParams.set("bounded","1");const q=a();q&&G.searchParams.set("viewbox",q);const ae=await fetch(G.toString());if(!ae.ok)throw new Error(`HTTP ${ae.status}`);const me=await ae.json();return ge(me)}async function Ft(j){if(V.value=[],se(),c.value==="address"){if(!i()){he.notify({type:"warning",title:"Пошук адреси",message:"Не налаштовано addressSuggest"});return}const ae=await gt(j);if(!ae.length){he.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}V.value=ae;return}const G=await Zt(j);if(!G.length){he.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено результатів"});return}V.value=G}async function ut(j){if(De(j)){vt(j),T(j);return}try{const q=(await Zt(j.title))[0];if(!q||!De(q)){he.notify({type:"warning",title:"Пошук адреси",message:"Не знайдено координати адреси"});return}vt(q),T(q)}catch(G){const q=(G==null?void 0:G.message)||"Помилка пошуку адреси";he.notify({type:"error",title:"Пошук адреси",message:q})}}function dn(){c.value!=="address"&&c.value!=="nominatim"||d.value.trim().length||_.value.length&&(E.value=!0,e.nextTick(()=>{re()}))}function un(j){const q=j.replace(/\s+/g,"").split(":");if(console.log(q),q.length!==4)return!1;const ae=[10,2,3,4];return q.every((me,ke)=>me.length===ae[ke]&&/^\d+$/.test(me))}function vt(j){var q,ae;const G=((q=o.config)==null?void 0:q.zoom)??17;(ae=r.flyTo)==null||ae.call(r,{center:[j.lng,j.lat],zoom:G}),Z(j,j.geom),W.value=!0}async function pn(){const j=d.value.trim();if(j){if(c.value==="xy"){const G=ue(j);if(!G){he.notify({type:"warning",title:"Пошук координат",message:"Не знайдено або невірний формат координат"});return}vt(G);return}if(c.value==="address"||c.value==="nominatim"){try{await Ft(j)}catch(G){const q=(G==null?void 0:G.message)||"Помилка пошуку адреси";he.notify({type:"error",title:"Пошук адреси",message:q})}return}try{const G=new URL(c.value==="here"?Wx:Yx);if(c.value==="here")G.searchParams.set("searchtext",j);else{if(!un(j)){he.notify({type:"warning",title:"Пошук кадастру",message:"Кадастровий номер має формат ХХХХХХХХХХ:ХХ:ХХХ:ХХХХ"});return}G.searchParams.set("cad_num",j)}const q=await fetch(G.toString());if(!q.ok)throw new Error(`HTTP ${q.status}`);const ae=await q.json(),me=c.value==="here"?be(ae):Ve(ae);if(!me.length)he.notify({type:"warning",title:"Пошук",message:"Не знайдено результатів"});else{const ke=me[0];vt(ke)}}catch(G){const q=(G==null?void 0:G.message)||"Помилка пошуку";he.notify({type:"error",title:"Пошук",message:q})}}}return(j,G)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"widgetRef",ref:b,class:"map-search-widget flex flex-col gap-2 bg-white border border-stone-200 shadow-2xs rounded-xl widget p-3 min-w-[200px]"},[e.createElementVNode("form",{class:"flex gap-2",onSubmit:e.withModifiers(pn,["prevent"])},[u.value.length>1?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"dropdownRef",ref:p,class:"relative search-type w-[100px]"},[e.createElementVNode("button",{type:"button",class:"vstSelect-input transition-all text-left bg-white border border-gray-200 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-100 block w-full py-1.5 px-3 text-sm cursor-pointer flex items-center justify-between gap-2",onClick:P},[e.withDirectives((e.openBlock(),e.createElementBlock("span",{ref_key:"selectedToolLabelRef",ref:g,class:"block w-full truncate",title:F(c.value)},[e.createTextVNode(e.toDisplayString(F(c.value)),1)],8,Tx)),[[n,oe(c.value)]]),(e.openBlock(),e.createElementBlock("svg",{class:e.normalizeClass(["w-4 h-4 text-gray-500 transition-transform",{"rotate-180":y.value}]),viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[...G[3]||(G[3]=[e.createElementVNode("path",{d:"M6 9l6 6 6-6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])],2))]),y.value?(e.openBlock(),e.createElementBlock("div",Fx,[e.createElementVNode("ul",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,q=>e.withDirectives((e.openBlock(),e.createElementBlock("li",{key:q,class:"px-3 py-2 cursor-pointer hover:bg-gray-100 text-gray-900",onClick:ae=>te(q,ae)},[e.createTextVNode(e.toDisplayString(F(q)),1)],8,Dx)),[[n,oe(q)]])),128))])])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0),e.createElementVNode("div",{ref_key:"searchWrapperRef",ref:N,class:"relative flex-1 min-w-[140px]"},[c.value==="parcel"?(e.openBlock(),e.createBlock(e.unref(Vo.VsInputMask),{key:0,modelValue:d.value,"onUpdate:modelValue":G[0]||(G[0]=q=>d.value=q),mask:"0000000000:00:000:0000",class:e.normalizeClass(["vs-input !h-[34px] transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",W.value?"!pr-14":"!pr-8"])},null,8,["modelValue","class"])):e.withDirectives((e.openBlock(),e.createElementBlock("input",{key:1,"onUpdate:modelValue":G[1]||(G[1]=q=>d.value=q),placeholder:h.value,type:"text",class:e.normalizeClass(["vs-input transition-all border block w-full border-gray-200 rounded-md focus:border-blue-100 border-solid py-1.5 pl-3 text-sm",W.value?"!pr-14":"!pr-8"]),onFocus:dn},null,42,zx)),[[e.vModelText,d.value,void 0,{trim:!0}]]),e.createElementVNode("div",Ix,[W.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Очистити",onClick:v},[...G[4]||(G[4]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})],-1)])])):e.createCommentVNode("",!0),G[5]||(G[5]=e.createElementVNode("button",{type:"submit",class:"flex items-center text-gray-400 hover:text-gray-600","aria-label":"Пошук"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",class:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor","stroke-width":"2"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m21 21-4.35-4.35m0 0A7.5 7.5 0 1 0 5 5a7.5 7.5 0 0 0 11.65 11.65Z"})])],-1))]),B.value?(e.openBlock(),e.createBlock(e.Teleport,{key:2,to:"body"},[e.createElementVNode("div",{ref_key:"addressResultsRef",ref:k,class:"vs-select__options mt-1 bg-white border border-gray-300 rounded-lg shadow-lg text-sm text-gray-900 z-50",style:e.normalizeStyle(ee)},[e.createElementVNode("div",jx,[e.createElementVNode("span",Px,e.toDisplayString(Q.value),1),e.createElementVNode("button",{type:"button",class:"text-gray-400 hover:text-gray-600","aria-label":"Закрити",onClick:G[2]||(G[2]=q=>E.value=!1)}," ✕ ")]),e.createElementVNode("div",Rx,[K.value.length?(e.openBlock(),e.createElementBlock("ul",Ox,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(K.value,q=>(e.openBlock(),e.createElementBlock("li",{key:q.id,class:"px-3 py-2 cursor-pointer hover:bg-gray-50",onClick:ae=>ut(q)},e.toDisplayString(q.title),9,Ux))),128))])):(e.openBlock(),e.createElementBlock("div",qx,e.toDisplayString(H.value),1))])],4)])):e.createCommentVNode("",!0)],512)],32)],512))}}),[["__scopeId","data-v-ba50488b"]]),Gx="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.css",Kx="https://watergis.github.io/mapbox-gl-export/mapbox-gl-export.js",Xx=xe(e.defineComponent({__name:"MapPrintControl",setup(t){const{map:n,ready:o,addControl:r,removeControl:l}=Re(),s=e.ref(null),a=e.ref(null),i=e.ref(null),f=e.ref(null);let m=null;function x(){!window.mapboxgl&&window.maplibregl&&(window.mapboxgl=window.maplibregl)}function u(E){if(Array.from(document.styleSheets).some(M=>{var z;return(z=M==null?void 0:M.href)==null?void 0:z.includes(E)}))return;const B=document.createElement("link");B.rel="stylesheet",B.href=E,document.head.appendChild(B)}function h(E){return new Promise((_,B)=>{const M=Array.from(document.scripts).find(W=>W.src===E);if(M){if(M._loaded)return _();M.addEventListener("load",()=>_()),M.addEventListener("error",()=>B(new Error(`Failed ${E}`)));return}const z=document.createElement("script");z.src=E,z.async=!0,z.onload=()=>{z._loaded=!0,_()},z.onerror=()=>B(new Error(`Failed ${E}`)),document.head.appendChild(z)})}function c(){var _,B,M;const E=window;return E.MapboxExportControl||((_=E.mapboxgl)==null?void 0:_.MapboxExportControl)||((B=E.mapboxglExport)==null?void 0:B.MapboxExportControl)||((M=E.mapboxglExport)==null?void 0:M.default)||null}function d(){const E=document.createElementNS("http://www.w3.org/2000/svg","svg");return E.setAttribute("xmlns","http://www.w3.org/2000/svg"),E.setAttribute("viewBox","0 0 24 24"),E.setAttribute("width","18"),E.setAttribute("height","18"),E.setAttribute("fill","none"),E.setAttribute("stroke","currentColor"),E.setAttribute("stroke-width","2"),E.setAttribute("stroke-linecap","round"),E.setAttribute("stroke-linejoin","round"),E.classList.add("map-control-button__icon"),[{d:"M0 0h24v24H0z",stroke:"none",fill:"none"},{d:"M17 17h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-14a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2"},{d:"M17 9v-4a2 2 0 0 0 -2 -2h-6a2 2 0 0 0 -2 2v4"},{d:"M7 13m0 2a2 2 0 0 1 2 -2h6a2 2 0 0 1 2 2v4a2 2 0 0 1 -2 2h-6a2 2 0 0 1 -2 -2z"}].forEach((B,M)=>{const z=document.createElementNS("http://www.w3.org/2000/svg","path");Object.entries(B).forEach(([W,K])=>{z.setAttribute(W,K)}),E.appendChild(z)}),E}function y(){const E=document.createElement("button");E.id="print-btn",E.type="button",E.className=["group relative flex items-center justify-center","w-9 h-9 rounded-xl shadow-lg transition-transform transition-shadow duration-200","bg-white text-gray-700 hover:bg-gray-50 hover:scale-105","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2"].join(" "),E.setAttribute("aria-label","Друк карти");const _=d(),B=document.createElement("span");return B.className=["absolute right-full mr-3 px-1.5 py-0.5","bg-gray-700 text-white text-[0.75rem] font-medium rounded-md","opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100","pointer-events-none transition-opacity duration-200 whitespace-nowrap"].join(" "),B.textContent="Друк карти",B.setAttribute("aria-hidden","true"),E.appendChild(_),E.appendChild(B),E.addEventListener("click",M=>{M.stopPropagation(),p()}),f.value=E,E}function p(){if(!i.value)return;i.value.style.display==="block"?b():g()}function g(){var E,_,B;i.value&&(i.value.style.display="block",(E=f.value)==null||E.classList.add("scale-105","shadow-xl"),(_=a.value)==null||_.toggleCrosshair(!0),(B=a.value)==null||B.togglePrintableArea(!0),document.addEventListener("click",N))}function b(){var E,_,B;i.value&&(i.value.style.display="none",(E=f.value)==null||E.classList.remove("scale-105","shadow-xl"),(_=a.value)==null||_.toggleCrosshair(!1),(B=a.value)==null||B.togglePrintableArea(!1),document.removeEventListener("click",N))}function N(E){const _=s.value;_&&(E.target&&_.contains(E.target)||b())}function V(E){const _={Size:"Розмір",Orientation:"Орієнтація",Format:"Формат",DPI:"DPI",Landscape:"Горизонтальна",Portrait:"Вертикальна",PNG:"PNG",JPEG:"JPEG",SVG:"SVG",PDF:"PDF","Page Size":"Розмір","Page Orientation":"Орієнтація"};E.querySelectorAll("label, option").forEach(M=>{var W;const z=(W=M.textContent)==null?void 0:W.trim();z&&_[z]&&(M.textContent=_[z])});const B=E.querySelector("button");B&&(B.textContent="Друкувати")}function k(E){const _=E.querySelector(".mapboxgl-export-list");if(!_||!s.value)return;i.value=_;const B=E.querySelector("button");if(B&&(B.style.display="none"),E.style.display="none",!f.value){const z=y();s.value.appendChild(z)}_.style.display="none";const M="_printControlBound";if(!_[M]){const z=W=>W.stopPropagation();_.addEventListener("click",z),_.addEventListener("mousedown",z),_[M]=!0}s.value.appendChild(_),V(_)}return e.onMounted(async()=>{await(o==null?void 0:o());const E=n.value;if(!E)return;u(Gx),x();try{await h(Kx)}catch(M){console.warn("[MapPrintControl] load error",M);return}const _=c();if(!_)return;const B=new _({PageSize:"A4",PageOrientation:"landscape",Format:"pdf",DPI:300,Crosshair:!0,PrintableArea:!0});if(a.value=B,typeof B.onAdd=="function"){const M=B.onAdd.bind(B);B.onAdd=z=>{const W=M(z);return setTimeout(()=>W&&k(W),50),W}}r?r(B,"top-right"):E.addControl(B,"top-right"),m=M=>{M.key==="Escape"&&b()},document.addEventListener("keyup",m)}),e.onBeforeUnmount(()=>{b(),m&&(document.removeEventListener("keyup",m),m=null);const E=n.value;if(a.value)try{l?l(a.value):E==null||E.removeControl(a.value)}catch{}a.value=null}),(E,_)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"root",ref:s,class:"map-print-control"},null,512))}}),[["__scopeId","data-v-4fae7635"]]),Qx={class:"cursor-coordinates"},Jx={class:"cursor-coordinates__text"},e1=xe(e.defineComponent({__name:"MapCursorCoordinates",props:{coordinates:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",Qx,[e.createElementVNode("span",Jx,e.toDisplayString(t.coordinates),1)]))}}),[["__scopeId","data-v-334315d9"]]),t1={class:"minimap__wrapper"},Fn="minimap-viewport",n1="minimap-viewport-layer",o1=xe(e.defineComponent({__name:"MapMiniMap",props:{mapContext:{},width:{},height:{},options:{}},setup(t){var N,V,k,E;const n=t,o=((V=(N=e.getCurrentInstance())==null?void 0:N.appContext.config.globalProperties)==null?void 0:V.$settings)||null,r=At((k=o==null?void 0:o.map)==null?void 0:k.center)||[30,50],l=e.ref(null),s=e.shallowRef(null),a=(E=n.options)==null?void 0:E.active,i=e.ref(a===void 0?!1:!!a);function f(_,B){return typeof _=="number"&&Number.isFinite(_)?_:B}const m=e.computed(()=>{var W,K;const _=(W=n.options)==null?void 0:W.width,B=(K=n.options)==null?void 0:K.height,M=f(n.width??_,210),z=f(n.height??B,150);return{width:`${M}px`,height:`${z}px`}});function x(){var B,M;const _=(M=(B=n.mapContext)==null?void 0:B.map)==null?void 0:M.value;if(!_||typeof _.getStyle!="function")return null;try{const z=_.getStyle();return z?JSON.parse(JSON.stringify(z)):null}catch{return null}}let u=null;function h(){var W;if(typeof window>"u"||s.value||!l.value)return;const _=x(),B=r,M={container:l.value,style:_??{version:8,sources:{voyager:{type:"raster",tiles:["https://tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"voyager",type:"raster",source:"voyager"}]},center:B,zoom:((W=n.options)==null?void 0:W.zoom)??3,interactive:!1,attributionControl:!1},z={...M,...n.options??{}};z.container=M.container,s.value=new maplibregl.Map(z),s.value.on("load",()=>{d(),p()})}function c(){if(!s.value)return;const _=x();_&&(s.value.once("styledata",()=>{d(),p()}),s.value.setStyle(_))}function d(){if(s.value){if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{d(),p()});return}s.value.getSource(Fn)||(s.value.addSource(Fn,{type:"geojson",data:{type:"Feature",geometry:{type:"Polygon",coordinates:[[[0,0],[0,0],[0,0],[0,0],[0,0]]]},properties:{}}}),s.value.addLayer({id:n1,type:"fill",source:Fn,paint:{"fill-color":"#3b82f6","fill-opacity":.2,"fill-outline-color":"#1d4ed8"}}))}}function y(){i.value=!i.value,i.value&&e.nextTick(()=>{var _;return(_=s.value)==null?void 0:_.resize()})}function p(){var Q,H;const _=(H=(Q=n.mapContext)==null?void 0:Q.map)==null?void 0:H.value;if(!s.value||!_||!_.getBounds)return;if(typeof s.value.isStyleLoaded=="function"&&!s.value.isStyleLoaded()){s.value.once("styledata",()=>{p()});return}const B=_.getBounds();if(!B)return;const M=B.getNorthEast(),z=B.getSouthWest();if(!M||!z)return;const W=[[z.lng,M.lat],[M.lng,M.lat],[M.lng,z.lat],[z.lng,z.lat],[z.lng,M.lat]],K=s.value.getSource(Fn);if(!K){d();return}K.setData({type:"Feature",geometry:{type:"Polygon",coordinates:[W]},properties:{}})}function g(){var M;const _=n.mapContext,B=(M=_==null?void 0:_.map)==null?void 0:M.value;!(_!=null&&_.on)||!B||(u==null||u(),u=_.on("move",p),p())}async function b(){const _=n.mapContext;if(_){if(typeof _.ready=="function")try{await _.ready()}catch{return}g()}}return e.onMounted(()=>{h(),b()}),e.watch(()=>n.mapContext,()=>{b(),p()}),e.watch(()=>{var _,B;return(B=(_=n.mapContext)==null?void 0:_.map)==null?void 0:B.value},()=>{s.value&&(c(),b())}),e.watch(m,()=>{s.value&&e.nextTick(()=>{var _;return(_=s.value)==null?void 0:_.resize()})}),e.watch(()=>n.options,()=>{var B;u==null||u(),u=null,s.value&&(s.value.remove(),s.value=null);const _=(B=n.options)==null?void 0:B.active;typeof _=="boolean"&&(i.value=_),e.nextTick(()=>{h(),b()})},{deep:!0}),e.onBeforeUnmount(()=>{u==null||u(),u=null,s.value&&(s.value.remove(),s.value=null)}),(_,B)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["minimap",{"minimap--open":i.value}])},[e.createElementVNode("button",{type:"button",class:"minimap__button",onClick:y},[e.createVNode(e.unref(Il))]),e.createVNode(e.Transition,{name:"minimap-slide"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",t1,[e.createElementVNode("div",{ref_key:"minimapRoot",ref:l,class:"mapboxgl-ctrl-minimap mapboxgl-ctrl mapboxgl-map",style:e.normalizeStyle(m.value),id:"mapboxgl-minimap"},null,4)],512),[[e.vShow,i.value]])]),_:1})],2))}}),[["__scopeId","data-v-bc754c89"]]),r1={class:"pt-1 border-t border-gray-100"},l1={class:"space-y-1"},a1=e.defineComponent({__name:"AddCoordinates",emits:["submit","cancel"],setup(t,{emit:n}){const o=n,r=e.ref(null),l=e.ref(null),s=(f,m,x)=>Math.min(Math.max(f,m),x),a=()=>{if(r.value===null||l.value===null||!Number.isFinite(r.value)||!Number.isFinite(l.value))return;const f=s(r.value,-90,90),m=s(l.value,-180,180);o("submit",{lat:f,lng:m}),r.value=null,l.value=null},i=()=>{r.value=null,l.value=null,o("cancel")};return(f,m)=>(e.openBlock(),e.createElementBlock("div",r1,[m[2]||(m[2]=e.createElementVNode("p",{class:"text-xs text-gray-600 mb-1"},"Додати точку за координатами:",-1)),e.createElementVNode("div",l1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=x=>r.value=x),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта (50.4501)"},null,512),[[e.vModelText,r.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[1]||(m[1]=x=>l.value=x),type:"number",step:"0.0001",class:"w-full px-2 py-1 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота (30.5234)"},null,512),[[e.vModelText,l.value,void 0,{number:!0}]]),e.createElementVNode("div",{class:"flex gap-1.5"},[e.createElementVNode("button",{class:"flex-1 px-2 py-1 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors",type:"button",onClick:a}," Додати "),e.createElementVNode("button",{class:"px-2 py-1 bg-gray-200 hover:bg-gray-300 text-gray-700 text-xs font-medium rounded transition-colors",type:"button",onClick:i}," Скасувати ")])])]))}}),s1=e.defineComponent({__name:"BtnAdd",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-blue-500 hover:bg-blue-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(wn),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Додати ",-1))]))}}),i1=e.defineComponent({__name:"BtnClear",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"w-full px-2 py-1.5 bg-rose-500 hover:bg-rose-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(On),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode(" Очистити ",-1))]))}}),c1=e.defineComponent({__name:"BtnComplete",emits:["click"],setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("button",{class:"flex-1 px-2 py-1.5 bg-emerald-500 hover:bg-emerald-600 text-white text-xs font-medium rounded transition-colors duration-150 flex items-center justify-center gap-1",onClick:o[0]||(o[0]=r=>n.$emit("click"))},[e.createVNode(e.unref(Mo),{size:12,"stroke-width":2}),o[1]||(o[1]=e.createTextVNode("Замкнути ",-1))]))}}),d1=new Intl.NumberFormat("uk-UA",{minimumFractionDigits:2,maximumFractionDigits:2});function Tt(t){return d1.format(t)}function Vl(t){return t>=1e3?`${Tt(t/1e3)} км`:`${Tt(t)} м`}const u1={class:"flex items-center gap-1.5 text-xs bg-gray-50 rounded p-1.5"},p1={key:0,class:"flex-1 flex gap-1"},m1={key:1,class:"flex-1 font-mono text-gray-700"},f1=e.defineComponent({__name:"DotListItem",props:{id:{},index:{},coords:{}},emits:["update","delete"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>`${o.coords.lat.toFixed(4)}°, ${o.coords.lng.toFixed(4)}°`),s=e.ref(!1),a=e.ref(o.coords.lat),i=e.ref(o.coords.lng);e.watch(()=>o.coords,h=>{a.value=h.lat,i.value=h.lng},{deep:!0,immediate:!0});const f=(h,c,d)=>Math.min(Math.max(h,c),d),m=()=>{s.value=!0},x=()=>{if(!Number.isFinite(a.value)||!Number.isFinite(i.value))return;const h=f(a.value,-90,90),c=f(i.value,-180,180);r("update",{id:o.id,coords:{lat:h,lng:c}}),s.value=!1},u=()=>{r("delete",o.id)};return(h,c)=>(e.openBlock(),e.createElementBlock("div",u1,[e.createVNode(e.unref(bn),{size:12,"stroke-width":2,class:"text-gray-400 flex-shrink-0"}),s.value?(e.openBlock(),e.createElementBlock("div",p1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=d=>a.value=d),type:"number",step:"0.0001",min:"-90",max:"90",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Широта"},null,512),[[e.vModelText,a.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[1]||(c[1]=d=>i.value=d),type:"number",step:"0.0001",min:"-180",max:"180",class:"flex-1 px-1.5 py-0.5 text-xs border border-gray-300 rounded focus:outline-none focus:border-blue-500",placeholder:"Довгота"},null,512),[[e.vModelText,i.value,void 0,{number:!0}]]),e.createElementVNode("button",{class:"px-1.5 py-0.5 bg-emerald-500 text-white rounded hover:bg-emerald-600 text-xs",type:"button",onClick:x}," ✓ ")])):(e.openBlock(),e.createElementBlock("span",m1,e.toDisplayString(l.value),1)),s.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"text-blue-500 hover:text-blue-600 px-0.5",type:"button",onClick:m}," ✎ ")),e.createElementVNode("button",{class:"text-rose-500 hover:text-rose-600 px-0.5",type:"button",onClick:u}," ✕ ")]))}}),g1={class:"ruler-control px-3 py-2.5 space-y-2"},y1={type:"button",class:"ruler-row w-full flex items-center gap-2 cursor-pointer group text-left"},h1={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Сумарна довжина всіх відрізків","aria-hidden":"true"},x1={class:"text-sm font-semibold text-slate-700"},b1={class:"ruler-row"},k1={type:"button",class:"w-full flex items-center gap-2 cursor-pointer group text-left"},w1={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Площа замкнутого контуру","aria-hidden":"true"},_1={class:"inline-flex rounded-md overflow-hidden border border-gray-200 bg-gray-100"},E1=["onClick"],N1={class:"flex items-center gap-2 mt-0.5 pl-7"},C1={key:0,class:"text-base font-semibold text-green-600"},V1={key:1,class:"text-xs text-gray-400"},B1={class:"ruler-row flex items-center gap-2 cursor-pointer"},$1={class:e.normalizeClass(["flex items-center justify-center w-5 h-5 rounded-full shrink-0 transition-colors pointer-events-none"]),title:"Список точок","aria-hidden":"true"},v1={class:"text-xs font-medium text-gray-600 flex-1"},S1={key:0,class:"pt-1.5 border-t border-gray-100 max-h-32 overflow-y-auto space-y-1"},L1=e.defineComponent({__name:"ControlPanel",props:{points:{},isShapeClosed:{type:Boolean}},emits:["update-point","delete-point"],setup(t){const n=t,o=e.ref(!1),r=e.ref("km2"),l=[{id:"km2",label:"км²"},{id:"ha",label:"га"},{id:"m2",label:"м²"}],s=()=>{o.value=!o.value},a=(d,y)=>{const p=M=>M*Math.PI/180,g=p(y.lat-d.lat),b=p(y.lng-d.lng),N=p(d.lat),V=p(y.lat),k=Math.sin(g/2),E=Math.sin(b/2);return 6371e3*(2*Math.asin(Math.sqrt(k*k+Math.cos(N)*Math.cos(V)*E*E)))},i=e.computed(()=>{if(n.points.length<2)return 0;let d=0;for(let y=1;y<n.points.length;y+=1)d+=a(n.points[y-1].coords,n.points[y].coords);return n.isShapeClosed&&n.points.length>=2&&(d+=a(n.points[n.points.length-1].coords,n.points[0].coords)),d}),f=e.computed(()=>i.value>=1e3?`${Tt(i.value/1e3)} км`:`${Tt(i.value)} м`);function m(d){if(d.length<3)return 0;const y=d[0].lat,p=d[0].lng,g=(N,V)=>{const k=(N-y)*110574;return{x:(V-p)*111320*Math.cos(y*Math.PI/180),y:k}};let b=0;for(let N=0;N<d.length;N++){const V=(N+1)%d.length,k=g(d[N].lat,d[N].lng),E=g(d[V].lat,d[V].lng);b+=k.x*E.y-k.y*E.x}return Math.abs(b)*.5}const x=e.computed(()=>{if(!n.isShapeClosed||n.points.length<3)return 0;const d=n.points.map(y=>y.coords);return m(d)}),u=e.computed(()=>x.value>0),h=e.computed(()=>{const d=x.value;if(d===0)return"—";if(r.value==="km2"){const p=d/1e6;return`${Tt(p)} км²`}if(r.value==="ha"){const p=d/1e4;return`${Tt(p)} га`}const y=d>=1?Math.round(d):d;return`${Tt(y)} м²`}),c=e.computed(()=>{const d=n.points.length;return d===1?"1 точка":d>=2&&d<=4?`${d} точки`:`${d} точок`});return e.watch(()=>n.points.length,()=>{n.points.length===0&&(o.value=!1)}),(d,y)=>(e.openBlock(),e.createElementBlock("div",g1,[e.createElementVNode("button",y1,[e.createElementVNode("span",h1,[e.createVNode(e.unref(xn),{size:12,"stroke-width":2.5})]),y[1]||(y[1]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Загальна відстань",-1)),e.createElementVNode("span",x1,e.toDisplayString(f.value),1)]),e.createElementVNode("div",b1,[e.createElementVNode("button",k1,[e.createElementVNode("span",w1,[e.createVNode(e.unref(xn),{size:12,"stroke-width":2.5})]),y[2]||(y[2]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 flex-1"},"Площа",-1)),e.createElementVNode("div",_1,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,(p,g)=>e.createElementVNode("button",{key:p.id,type:"button",class:e.normalizeClass(["px-2.5 py-1 text-xs font-medium transition-colors border-r border-gray-200 last:border-r-0",g===0&&"rounded-l-md",g===l.length-1&&"rounded-r-md",r.value===p.id?"bg-white text-green-600 font-semibold shadow-sm":"text-gray-600 hover:bg-gray-50"]),onClick:e.withModifiers(b=>r.value=p.id,["stop"])},e.toDisplayString(p.label),11,E1)),64))])]),e.createElementVNode("div",N1,[u.value?(e.openBlock(),e.createElementBlock("span",C1,e.toDisplayString(h.value),1)):(e.openBlock(),e.createElementBlock("span",V1,"—"))])]),e.createElementVNode("div",B1,[e.createElementVNode("span",$1,[e.createVNode(e.unref(xn),{size:12,"stroke-width":2.5})]),e.createElementVNode("span",v1,e.toDisplayString(c.value),1),e.createElementVNode("button",{type:"button",class:"text-xs text-blue-500 hover:text-blue-600 font-medium transition-colors",onClick:e.withModifiers(s,["stop"])}," Координати ")]),o.value?(e.openBlock(),e.createElementBlock("div",S1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.points,(p,g)=>(e.openBlock(),e.createBlock(f1,{key:p.id,id:p.id,index:g+1,coords:p.coords,onUpdate:y[0]||(y[0]=b=>d.$emit("update-point",b)),onDelete:b=>d.$emit("delete-point",p.id)},null,8,["id","index","coords","onDelete"]))),128))])):e.createCommentVNode("",!0)]))}}),A1={class:"px-3 py-3 bg-blue-50/50 border-b border-blue-100"},M1={class:"flex items-start gap-2"},T1=e.defineComponent({__name:"InfoHint",setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("div",A1,[e.createElementVNode("div",M1,[e.createVNode(e.unref(xn),{size:16,"stroke-width":2,class:"text-blue-600 flex-shrink-0 mt-0.5"}),o[0]||(o[0]=e.createElementVNode("div",{class:"space-y-1"},[e.createElementVNode("p",{class:"text-xs font-medium text-blue-900"}," Натискайте на карту, щоб додати точки вимірювання "),e.createElementVNode("p",{class:"text-[10px] text-blue-700"},' Або скористайтесь кнопкою "Додати" внизу для введення координат вручну ')],-1))])]))}}),F1={class:"space-y-1.5"},D1={class:"space-y-1 max-h-40 overflow-y-auto"},z1={class:"text-gray-700"},I1={class:"font-semibold text-slate-800"},j1=e.defineComponent({__name:"ToPointList",props:{points:{},isShapeClosed:{type:Boolean}},setup(t){const n=t;function o(s,a){const i=c=>c*Math.PI/180,f=i(a.lat-s.lat),m=i(a.lng-s.lng),x=i(s.lat),u=i(a.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(f/2)**2+Math.cos(x)*Math.cos(u)*Math.sin(m/2)**2)))}function r(s){return Vl(s)}const l=e.computed(()=>{const s=[],a=n.points;if(a.length<2)return s;for(let i=0;i<a.length;i++){const f=i===a.length-1&&n.isShapeClosed?0:i+1;if(f>=a.length)break;const m=o(a[i].coords,a[f].coords);s.push({from:i+1,to:f+1,label:r(m)})}return s});return(s,a)=>(e.openBlock(),e.createElementBlock("div",F1,[a[0]||(a[0]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-600 mb-1.5"},"Відстань між точками:",-1)),e.createElementVNode("div",D1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(i,f)=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"flex items-center justify-between text-xs py-1 px-2 rounded bg-gray-50"},[e.createElementVNode("span",z1,"Точка "+e.toDisplayString(i.from)+" → Точка "+e.toDisplayString(i.to),1),e.createElementVNode("span",I1,e.toDisplayString(i.label),1)]))),128))])]))}}),P1={class:"ruler-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up"},R1={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},O1={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},U1={class:"flex items-center gap-2"},q1={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},H1={class:"flex border-b border-gray-200"},W1={key:1,class:"px-3 py-2.5"},Y1={key:1,class:"text-xs text-gray-500"},Z1={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},G1={class:"flex gap-1.5"},K1=e.defineComponent({name:"RulerPanel",__name:"index",emits:["close","tab-change","points-change","add-request","complete","shape-closed-change"],setup(t,{expose:n,emit:o}){const r=o,l=e.ref([]),s=e.computed(()=>l.value.length>0),a=e.ref(!1),i=e.ref(!1),f=e.ref("general");function m(W){f.value=W,r("tab-change",W)}e.onMounted(()=>{r("tab-change",f.value)});const x=e.computed(()=>l.value.length>=3&&!i.value);let u=1;const h=()=>l.value.map(W=>({id:W.id,coords:{...W.coords}})),c=()=>{l.value.length<3&&i.value&&(i.value=!1,r("shape-closed-change",!1)),r("points-change",h())},d=()=>{const W=u;return u+=1,W},y=W=>{l.value=[...l.value,{id:d(),coords:{lat:W.lat,lng:W.lng}}],c()},p=({id:W,coords:K})=>{const Q=l.value.findIndex(J=>J.id===W);if(Q===-1)return;const H=[...l.value];H[Q]={id:W,coords:{...K}},l.value=H,c()},g=W=>{l.value=l.value.filter(K=>K.id!==W),c()},b=()=>{l.value=[],i.value&&(i.value=!1,r("shape-closed-change",!1)),c()},N=W=>{p(W)},V=W=>{g(W)},k=()=>{a.value=!0,r("add-request")},E=W=>{y(W),a.value=!1},_=()=>{a.value=!1},B=()=>{x.value&&(i.value=!0,r("complete"),r("shape-closed-change",!0))},M=W=>{const K=(W??[]).map(Q=>({id:Q.id??d(),coords:{...Q.coords}}));l.value=K,K.length===0?u=1:u=Math.max(...K.map(Q=>Q.id))+1,c()},z=()=>{b(),a.value=!1,r("close")};return n({addPoint:y,setPoints:M,clearPoints:b}),(W,K)=>(e.openBlock(),e.createElementBlock("div",P1,[e.createElementVNode("div",R1,[e.createElementVNode("div",O1,[e.createElementVNode("div",U1,[e.createElementVNode("div",q1,[e.createVNode(e.unref(Do),{size:14,"stroke-width":2,class:"text-white"})]),K[2]||(K[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Вимірювання",-1))]),e.createElementVNode("button",{class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:z},[e.createVNode(e.unref(Nt),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",H1,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",f.value==="general"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:K[0]||(K[0]=Q=>m("general"))}," Загальна ",2),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["flex-1 px-3 py-2 text-xs font-medium transition-colors",f.value==="topoint"?"text-blue-600 border-b-2 border-blue-500 bg-blue-50/50":"text-gray-500 hover:text-gray-700"]),onClick:K[1]||(K[1]=Q=>m("topoint"))}," До точки ",2)]),f.value==="general"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.value?(e.openBlock(),e.createBlock(L1,{key:1,points:l.value,"is-shape-closed":i.value,onUpdatePoint:N,onDeletePoint:V},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createBlock(T1,{key:0}))],64)):(e.openBlock(),e.createElementBlock("div",W1,[s.value?(e.openBlock(),e.createBlock(j1,{key:0,points:l.value,"is-shape-closed":i.value},null,8,["points","is-shape-closed"])):(e.openBlock(),e.createElementBlock("p",Y1,"Додайте точки на карті, щоб бачити відстані між ними."))])),e.createElementVNode("div",Z1,[e.createElementVNode("div",G1,[a.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(s1,{key:0,onClick:k})),x.value?(e.openBlock(),e.createBlock(c1,{key:1,onClick:B})):e.createCommentVNode("",!0)]),a.value?(e.openBlock(),e.createBlock(a1,{key:0,onSubmit:E,onCancel:_})):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createBlock(i1,{key:1,onClick:b})):e.createCommentVNode("",!0)])])]))}}),st="ruler-points",xt="ruler-line",bt="ruler-polygon",kt="ruler-segments",X1=e.defineComponent({__name:"RulerLayer",props:{points:{},isShapeClosed:{type:Boolean},labelMode:{}},setup(t){function n(p,g){const b=B=>B*Math.PI/180,N=b(g.lat-p.lat),V=b(g.lng-p.lng),k=b(p.lat),E=b(g.lat);return 6371e3*(2*Math.asin(Math.sqrt(Math.sin(N/2)**2+Math.cos(k)*Math.cos(E)*Math.sin(V/2)**2)))}function o(p){return Vl(p)}const r=t,{map:l,ready:s}=Re();function a(){return{type:"FeatureCollection",features:[]}}function i(p,g,b){const N=b??"general",V=[];let k=0;V.push(0);for(let E=1;E<p.length;E++)k+=n(p[E-1].coords,p[E].coords),V.push(k);return g&&p.length>=2&&(k+=n(p[p.length-1].coords,p[0].coords)),{type:"FeatureCollection",features:p.map((E,_)=>{const B=N==="general"?_===0?"0":o(V[_]):_===0?"0":o(n(p[_-1].coords,p[_].coords));return{type:"Feature",geometry:{type:"Point",coordinates:[E.coords.lng,E.coords.lat]},properties:{id:E.id,index:_+1,label:B}}})}}function f(p,g){if(p.length<2)return a();const b=[];for(let N=0;N<p.length;N++){const V=N===p.length-1&&g?0:N+1;if(V>=p.length)break;const k=p[N].coords,E=p[V].coords,_=n(k,E);b.push({type:"Feature",geometry:{type:"LineString",coordinates:[[k.lng,k.lat],[E.lng,E.lat]]},properties:{distance:o(_)}})}return{type:"FeatureCollection",features:b}}function m(p,g){if(p.length<2)return a();const b=p.map(N=>[N.coords.lng,N.coords.lat]);return g&&b.push(b[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"LineString",coordinates:b},properties:{}}]}}function x(p){if(p.length<3)return a();const g=p.map(b=>[b.coords.lng,b.coords.lat]);return g.push(g[0]),{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Polygon",coordinates:[g]},properties:{}}]}}let u=!1;function h(p){p.getSource(st)||(p.addSource(st,{type:"geojson",data:a()}),p.addLayer({id:`${st}-circle`,type:"circle",source:st,paint:{"circle-radius":5,"circle-color":"#1e293b","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),p.addLayer({id:`${st}-labels`,type:"symbol",source:st,layout:{"text-field":["get","label"],"text-size":14,"text-offset":[0,1.3]},paint:{"text-color":"#0f172a","text-halo-color":"#ffffff","text-halo-width":1}})),p.getSource(kt)||(p.addSource(kt,{type:"geojson",data:a()}),p.addLayer({id:`${kt}-labels`,type:"symbol",source:kt,layout:{"text-field":["get","distance"],"text-size":13,"symbol-placement":"line-center","text-rotation-alignment":"map","text-pitch-alignment":"map"},paint:{"text-color":"#1e293b","text-halo-color":"#ffffff","text-halo-width":1.5}})),p.getSource(xt)||(p.addSource(xt,{type:"geojson",data:a()}),p.addLayer({id:`${xt}-layer`,type:"line",source:xt,paint:{"line-color":"#3b82f6","line-width":2}})),p.getSource(bt)||(p.addSource(bt,{type:"geojson",data:a()}),p.addLayer({id:`${bt}-layer`,type:"fill",source:bt,paint:{"fill-color":"#93c5fd","fill-opacity":.25}})),u=!0}function c(p){if(p){try{p.getLayer(`${bt}-layer`)&&p.removeLayer(`${bt}-layer`),p.getSource(bt)&&p.removeSource(bt),p.getLayer(`${xt}-layer`)&&p.removeLayer(`${xt}-layer`),p.getSource(xt)&&p.removeSource(xt),p.getLayer(`${kt}-labels`)&&p.removeLayer(`${kt}-labels`),p.getSource(kt)&&p.removeSource(kt),p.getLayer(`${st}-labels`)&&p.removeLayer(`${st}-labels`),p.getLayer(`${st}-circle`)&&p.removeLayer(`${st}-circle`),p.getSource(st)&&p.removeSource(st)}catch{}u=!1}}function d(p){if(!p)return;const g=p.getSource(st),b=p.getSource(xt),N=p.getSource(bt),V=p.getSource(kt),k=r.points,E=r.labelMode??"general";g&&g.setData(i(k,r.isShapeClosed,E)),b&&b.setData(m(k,r.isShapeClosed)),N&&N.setData(x(k)),V&&V.setData(E==="topoint"?f(k,r.isShapeClosed):a())}function y(){s().then(()=>{const p=l.value;p&&(u||h(p),d(p))})}return e.watch(()=>[r.points,r.isShapeClosed,r.labelMode],()=>y(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{s().then(()=>c(l.value))}),(p,g)=>null}}),Q1={class:"geolocation-panel-wrap absolute bottom-12 right-0 z-20 animate-slide-up flex items-end gap-2"},J1={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},eb={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},tb={class:"flex items-center gap-2"},nb=["disabled"],ob={class:"px-3 py-3 border-t border-gray-100 flex items-center justify-between gap-3"},rb={class:"text-sm font-mono text-slate-700"},lb={class:"flex items-center gap-2 shrink-0"},ab={key:0,class:"text-xs font-[100] text-gray-500"},sb=e.defineComponent({name:"GeolocationPanel",__name:"index",props:{position:{}},emits:["close","recenter"],setup(t,{emit:n}){const o=t,r=n,l=e.computed(()=>o.position!=null?o.position.lng.toFixed(6):"—"),s=e.computed(()=>o.position!=null?o.position.lat.toFixed(6):"—"),a=e.ref(!1);let i=null;function f(){if(o.position==null)return;const u=`${o.position.lat.toFixed(6)}, ${o.position.lng.toFixed(6)}`;navigator.clipboard.writeText(u).then(()=>{a.value=!0,i&&clearTimeout(i),i=setTimeout(()=>{a.value=!1,i=null},600)})}function m(){r("close")}function x(){o.position!=null&&r("recenter")}return(u,h)=>(e.openBlock(),e.createElementBlock("div",Q1,[e.createElementVNode("div",J1,[e.createElementVNode("div",eb,[e.createElementVNode("div",tb,[e.createElementVNode("button",{type:"button",class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center hover:bg-white/30 transition-colors disabled:opacity-50 disabled:cursor-not-allowed","aria-label":"Центрувати на моєму місці",disabled:t.position==null,onClick:x},[e.createVNode(e.unref(bn),{size:14,"stroke-width":2,class:"text-white"})],8,nb),h[0]||(h[0]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Ваше розташування",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:m},[e.createVNode(e.unref(Nt),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("div",ob,[e.createElementVNode("div",null,[h[4]||(h[4]=e.createElementVNode("p",{class:"text-xs font-medium text-gray-500 mb-1"},"Координати",-1)),e.createElementVNode("p",rb,[h[1]||(h[1]=e.createElementVNode("span",{class:"text-gray-500"},"x:",-1)),e.createTextVNode(" "+e.toDisplayString(l.value)+" ",1),h[2]||(h[2]=e.createElementVNode("br",null,null,-1)),h[3]||(h[3]=e.createElementVNode("span",{class:"text-gray-500"},"y:",-1)),e.createTextVNode(" "+e.toDisplayString(s.value),1)])]),e.createElementVNode("div",lb,[a.value?(e.openBlock(),e.createElementBlock("span",ab," Скопійовано! ")):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"flex items-center justify-center w-9 h-9 rounded-xl border border-gray-200 text-gray-500 hover:bg-gray-50 hover:text-gray-700 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/50 focus-visible:ring-offset-1","aria-label":"Копіювати координати",onClick:f},[e.createVNode(e.unref(Ol),{size:18,"stroke-width":2})])])])])]))}}),wt="geolocation-marker",ib=e.defineComponent({__name:"GeolocationMarkerLayer",props:{position:{}},setup(t){const n=t,{map:o,ready:r}=Re();let l=!1;function s(){return{type:"FeatureCollection",features:[]}}function a(u){return{type:"Feature",geometry:{type:"Point",coordinates:[u.lng,u.lat]},properties:{}}}function i(u){u.getSource(wt)||(u.addSource(wt,{type:"geojson",data:s()}),u.addLayer({id:`${wt}-circle`,type:"circle",source:wt,paint:{"circle-radius":6,"circle-color":"#3b82f6","circle-stroke-width":2,"circle-stroke-color":"#dddddd"}}),l=!0)}function f(u){try{u.getLayer(`${wt}-circle`)&&u.removeLayer(`${wt}-circle`),u.getSource(wt)&&u.removeSource(wt)}catch{}l=!1}function m(u){const h=u.getSource(wt);if(h){if(n.position==null){h.setData(s());return}h.setData({type:"FeatureCollection",features:[a(n.position)]})}}function x(){r().then(()=>{const u=o.value;if(u){if(n.position==null){l&&f(u);return}l||i(u),m(u)}})}return e.watch(()=>n.position,()=>x(),{deep:!0,immediate:!0}),e.onBeforeUnmount(()=>{r().then(()=>f(o.value))}),(u,h)=>null}}),cb={class:"animate-slide-up"},db={class:"bg-white rounded-xl shadow-2xl border border-gray-200 overflow-hidden w-72"},ub={class:"bg-gradient-to-r from-blue-400 to-blue-500 px-3 py-2 flex items-center justify-between"},pb={class:"flex items-center gap-2"},mb={class:"w-6 h-6 bg-white/20 rounded-lg flex items-center justify-center"},fb={class:"px-3 py-2.5 border-b border-gray-200"},gb={class:"flex gap-1 flex-nowrap"},yb=["title","onClick"],hb={class:"px-3 py-2.5 border-b border-gray-200"},xb={class:"flex items-center gap-4"},bb={class:"flex items-center gap-2 cursor-pointer shrink-0"},kb={class:"flex items-center gap-2 cursor-pointer flex-1 min-w-0"},wb={class:"px-2.5 py-1.5 bg-gray-50 border-t border-gray-200 space-y-1.5"},_b={class:"flex items-center gap-1.5"},Eb=xe(e.defineComponent({name:"DrawingPanel",__name:"index",emits:["close","clear","download","finish-polygon","undo","update:tool","update:stroke-color","update:stroke-width"],setup(t,{expose:n,emit:o}){const r=o,l=[{id:"pen",icon:kn,title:"Олівець"},{id:"line",icon:Kl,title:"Лінія"},{id:"rect",icon:ta,title:"Прямокутник"},{id:"circle",icon:Mo,title:"Коло"},{id:"polygon",icon:Fo,title:"Полігон"},{id:"paint",icon:Xl,title:"Балончик"},{id:"eraser",icon:Wl,title:"Стирачка"}],s=e.ref("pen"),a=e.ref("#2563eb"),i=e.ref(3),f=()=>r("update:stroke-color",a.value),m=()=>r("update:stroke-width",i.value);e.watch(s,y=>r("update:tool",y)),e.watch(a,y=>r("update:stroke-color",y)),e.watch(i,y=>r("update:stroke-width",y));function x(){r("close")}function u(){r("undo")}function h(){r("finish-polygon")}function c(){r("clear")}function d(){r("download")}return n({tool:s,strokeColor:a,strokeWidth:i}),(y,p)=>(e.openBlock(),e.createElementBlock("div",cb,[e.createElementVNode("div",db,[e.createElementVNode("div",ub,[e.createElementVNode("div",pb,[e.createElementVNode("div",mb,[e.createVNode(e.unref(kn),{size:14,"stroke-width":2,class:"text-white"})]),p[2]||(p[2]=e.createElementVNode("h3",{class:"text-white font-semibold text-xs"},"Малювання",-1))]),e.createElementVNode("button",{type:"button",class:"w-5 h-5 flex items-center justify-center rounded hover:bg-white/20 transition-colors","aria-label":"Закрити",onClick:x},[e.createVNode(e.unref(Nt),{size:14,"stroke-width":2,class:"text-white"})])]),e.createElementVNode("section",fb,[p[3]||(p[3]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Інструмент ",-1)),e.createElementVNode("div",gb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,g=>e.createElementVNode("button",{key:g.id,type:"button",class:e.normalizeClass(["w-8 h-8 shrink-0 flex items-center justify-center rounded-lg border transition-all",s.value===g.id?"bg-blue-50 text-blue-600 border-blue-200 ring-2 ring-blue-200":"bg-gray-50 text-gray-500 border-gray-200 hover:bg-gray-100 hover:text-gray-700 hover:border-gray-300"]),title:g.title,onClick:b=>s.value=g.id},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(g.icon),{size:16,"stroke-width":2}))],10,yb)),64))])]),e.createElementVNode("section",hb,[p[6]||(p[6]=e.createElementVNode("span",{class:"block text-[11px] font-semibold text-gray-500 uppercase tracking-wider mb-2"}," Стиль ",-1)),e.createElementVNode("div",xb,[e.createElementVNode("label",bb,[p[4]||(p[4]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600"},"Колір",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[0]||(p[0]=g=>a.value=g),type:"color",class:"w-9 h-9 p-0.5 border-2 border-gray-200 rounded-lg cursor-pointer bg-white [&::-webkit-color-swatch-wrapper]:p-0 [&::-webkit-color-swatch]:border-none [&::-webkit-color-swatch]:rounded-md",onChange:f},null,544),[[e.vModelText,a.value]])]),e.createElementVNode("label",kb,[p[5]||(p[5]=e.createElementVNode("span",{class:"text-xs font-medium text-gray-600 shrink-0 w-14"},"Товщина",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":p[1]||(p[1]=g=>i.value=g),type:"range",min:"1",max:"12",class:"drawing-panel-range w-full min-w-[100px] h-2 bg-gray-200 rounded-full appearance-none cursor-pointer",onInput:m},null,544),[[e.vModelText,i.value,void 0,{number:!0}]])])])]),e.createElementVNode("footer",wb,[e.createElementVNode("div",_b,[e.createElementVNode("button",{type:"button",class:"w-9 h-9 shrink-0 flex items-center justify-center rounded-lg bg-gray-100 text-gray-700 hover:bg-gray-200 transition-colors",title:"Відкотити дію","aria-label":"Відкотити дію",onClick:u},[e.createVNode(e.unref(oa),{size:14,"stroke-width":2})]),e.createElementVNode("button",{type:"button",class:"flex-1 flex items-center justify-center gap-1.5 px-2 py-2 text-xs font-medium rounded-lg bg-red-50 text-red-600 hover:bg-red-100 hover:text-red-700 transition-colors",onClick:c},[e.createVNode(e.unref(On),{size:14,"stroke-width":2}),p[7]||(p[7]=e.createTextVNode(" Очистити ",-1))])]),s.value==="polygon"?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-blue-50 text-blue-600 hover:bg-blue-100 transition-colors",onClick:h},[e.createVNode(e.unref(Fo),{size:14,"stroke-width":2}),p[8]||(p[8]=e.createTextVNode(" Замкнути полігон ",-1))])):e.createCommentVNode("",!0),e.createElementVNode("button",{type:"button",class:"w-full flex items-center justify-center gap-2 px-3 py-2 text-xs font-medium rounded-lg bg-gradient-to-r from-blue-400 to-blue-500 text-white shadow-sm hover:brightness-105 transition-[filter]",onClick:d},[e.createVNode(e.unref(Hl),{size:14,"stroke-width":2}),p[9]||(p[9]=e.createTextVNode(" Завантажити як фото ",-1))])])])]))}}),[["__scopeId","data-v-4cee5a30"]]),Nb=xe(e.defineComponent({name:"DrawingCanvas",__name:"DrawingCanvas",props:{tool:{default:"pen"},strokeColor:{default:"#2563eb"},strokeWidth:{default:3}},setup(t,{expose:n}){const o=e.ref(null),r=e.ref(null),l=e.ref(null),s=e.ref({x:0,y:0}),a=e.ref(!1),i=t,f=e.computed(()=>Math.max(i.strokeWidth*3,12)),m=e.computed(()=>{const w=f.value*2;return{width:`${w}px`,height:`${w}px`,left:`${s.value.x}px`,top:`${s.value.y}px`,marginLeft:`-${f.value}px`,marginTop:`-${f.value}px`}}),{ready:x}=Re(),u=e.ref(!1),h=e.ref([]),c=e.ref([]);let d=0,y=0,p=0,g=0,b=null;function N(){const w=r.value,S=l.value,I=o.value;if(!w||!I)return;const Y=I.parentElement;if(!Y)return;const Z=Y.clientWidth,ee=Y.clientHeight;if(Z<=0||ee<=0)return;const re=window.devicePixelRatio||1;w.width=Z*re,w.height=ee*re,w.style.width=`${Z}px`,w.style.height=`${ee}px`;const ie=w.getContext("2d");if(ie&&ie.scale(re,re),S){S.width=Z*re,S.height=ee*re,S.style.width=`${Z}px`,S.style.height=`${ee}px`;const se=S.getContext("2d");se&&se.scale(re,re)}}function V(w){const S=r.value;if(!S)return{x:0,y:0};const I=S.getBoundingClientRect();return{x:w.clientX-I.left,y:w.clientY-I.top}}function k(){const w=r.value;return w?w.getContext("2d"):null}function E(){const w=l.value;return w?w.getContext("2d"):null}function _(){const w=l.value;if(!w)return;const S=window.devicePixelRatio||1,I=w.getContext("2d");I&&I.clearRect(0,0,w.width/S,w.height/S)}function B(){const w=E();if(w){if(_(),w.globalCompositeOperation="source-over",w.strokeStyle=i.strokeColor,w.lineWidth=i.strokeWidth,w.lineCap="round",w.lineJoin="round",i.tool==="line")w.beginPath(),w.moveTo(d,y),w.lineTo(p,g),w.stroke();else if(i.tool==="rect"){const S=Math.min(d,p),I=Math.min(y,g),Y=Math.abs(p-d),Z=Math.abs(g-y);w.strokeRect(S,I,Y,Z)}else if(i.tool==="circle"){const S=Math.sqrt((p-d)**2+(g-y)**2);w.beginPath(),w.arc(d,y,Math.max(S,1),0,2*Math.PI),w.stroke()}else if(i.tool==="polygon"&&h.value.length>0){const S=h.value;w.beginPath(),w.moveTo(S[0].x,S[0].y);for(let I=1;I<S.length;I++)w.lineTo(S[I].x,S[I].y);w.lineTo(p,g),w.stroke()}}}function M(w){w.strokeStyle=i.strokeColor,w.lineWidth=i.strokeWidth,w.lineCap="round",w.lineJoin="round"}function z(){const w=r.value;if(!w)return;const S=w.getContext("2d");if(!S)return;const I=S.getImageData(0,0,w.width,w.height);c.value=[...c.value.slice(-19),I]}function W(w){if(!r.value)return;const{x:S,y:I}=V(w);d=S,y=I,p=S,g=I;const Y=k();if(Y){if(i.tool==="pen"||i.tool==="eraser"){z(),u.value=!0,i.tool==="eraser"?(Y.globalCompositeOperation="destination-out",Y.lineWidth=Math.max(i.strokeWidth*3,12)):(Y.globalCompositeOperation="source-over",M(Y)),Y.beginPath(),Y.moveTo(S,I);return}if(i.tool==="paint"){z(),u.value=!0,Y.globalCompositeOperation="source-over",Y.fillStyle=i.strokeColor,J(Y,S,I);return}if(i.tool==="line"||i.tool==="rect"||i.tool==="circle"){z(),u.value=!0;return}if(i.tool==="polygon"){h.value=[...h.value,{x:S,y:I}],p=S,g=I,B();return}}}function K(w){const{x:S,y:I}=V(w);p=S,g=I,i.tool==="eraser"&&(s.value={x:w.clientX,y:w.clientY},a.value=!0);const Y=k();if(Y){if(i.tool==="pen"&&u.value){Y.globalCompositeOperation="source-over",M(Y),Y.lineTo(S,I),Y.stroke();return}if(i.tool==="eraser"&&u.value){Y.globalCompositeOperation="destination-out",Y.lineWidth=Math.max(i.strokeWidth*3,12),Y.lineTo(S,I),Y.stroke();return}if(i.tool==="paint"&&u.value){Y.globalCompositeOperation="source-over",Y.fillStyle=i.strokeColor,J(Y,S,I);return}u.value&&(i.tool==="line"||i.tool==="rect"||i.tool==="circle")&&B(),i.tool==="polygon"&&h.value.length>0&&B()}}function Q(){a.value=!1}function H(){i.tool==="polygon"&&T()}function J(w,S,I){const Y=Math.max(i.strokeWidth*2.5,8),Z=12+Math.floor(i.strokeWidth);for(let ee=0;ee<Z;ee++){const re=Math.random()*2*Math.PI,ie=Y*Math.random(),se=S+Math.cos(re)*ie,we=I+Math.sin(re)*ie,P=1+Math.random()*2;w.beginPath(),w.arc(se,we,P,0,2*Math.PI),w.fill()}}function O(){if(!u.value)return;const w=k();if(!w){u.value=!1;return}if(i.tool==="paint"){_(),u.value=!1,w.globalCompositeOperation="source-over";return}if(i.tool==="line")w.globalCompositeOperation="source-over",M(w),w.beginPath(),w.moveTo(d,y),w.lineTo(p,g),w.stroke();else if(i.tool==="rect"){w.globalCompositeOperation="source-over",M(w);const S=Math.min(d,p),I=Math.min(y,g),Y=Math.abs(p-d),Z=Math.abs(g-y);w.strokeRect(S,I,Y,Z)}else if(i.tool==="circle"){w.globalCompositeOperation="source-over",M(w);const S=Math.sqrt((p-d)**2+(g-y)**2);w.beginPath(),w.arc(d,y,Math.max(S,1),0,2*Math.PI),w.stroke()}_(),u.value=!1,w.globalCompositeOperation="source-over"}function T(){const w=k(),S=h.value;if(!w||S.length<2){h.value=[],_();return}z(),w.globalCompositeOperation="source-over",M(w),w.beginPath(),w.moveTo(S[0].x,S[0].y);for(let I=1;I<S.length;I++)w.lineTo(S[I].x,S[I].y);w.closePath(),w.stroke(),h.value=[],_(),w.globalCompositeOperation="source-over"}function D(){const w=r.value;if(!w||c.value.length===0)return;const S=w.getContext("2d");if(!S)return;const I=c.value[c.value.length-1];c.value=c.value.slice(0,-1),S.putImageData(I,0,0)}function X(){const w=r.value;if(!w)return;const S=w.getContext("2d");if(!S)return;const I=window.devicePixelRatio||1;S.clearRect(0,0,w.width/I,w.height/I),h.value=[],c.value=[],_()}function $(){return r.value}return e.watch(()=>i.tool,(w,S)=>{S==="polygon"&&w!=="polygon"&&(h.value=[],_())}),e.onMounted(()=>{x().then(()=>{var S;N();const w=(S=o.value)==null?void 0:S.parentElement;w&&typeof ResizeObserver<"u"&&(b=new ResizeObserver(N),b.observe(w))})}),e.onBeforeUnmount(()=>{b==null||b.disconnect(),b=null}),n({clear:X,getCanvas:$,finishPolygon:T,undo:D,canUndo:()=>c.value.length>0}),(w,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"wrapRef",ref:o,class:e.normalizeClass(["drawing-canvas-wrap",{"drawing-canvas-wrap--eraser":t.tool==="eraser"}]),onMousedown:W,onMousemove:K,onMouseup:O,onDblclick:H,onMouseleave:S[0]||(S[0]=()=>{Q(),O()})},[e.createElementVNode("canvas",{ref_key:"canvasRef",ref:r,class:"drawing-canvas"},null,512),e.createElementVNode("canvas",{ref_key:"previewRef",ref:l,class:"drawing-canvas drawing-canvas--preview"},null,512),e.withDirectives(e.createElementVNode("div",{class:"drawing-canvas__eraser-cursor",style:e.normalizeStyle(m.value)},null,4),[[e.vShow,t.tool==="eraser"&&a.value]])],34))}}),[["__scopeId","data-v-ed2688bc"]]),Cb={key:2,class:"absolute bottom-16 right-4 z-[100] pointer-events-auto"},Vb={key:3,class:"absolute bottom-4 right-4 z-[80] flex items-end gap-2"},Bb={class:"absolute top-[103px] right-[6.5px] z-[80] flex flex-col items-end gap-1"},$b=["aria-label","disabled"],vb={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Sb=["aria-label"],Lb={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Ab=["aria-label"],Mb={class:"absolute right-full mr-3 px-1.5 py-0.5 bg-gray-700 text-white text-[0.75rem] font-medium rounded-md opacity-0 group-hover:opacity-100 group-focus-visible:opacity-100 pointer-events-none transition-opacity duration-200 whitespace-nowrap","aria-hidden":"true"},Tb={class:"map-widget__overlay-grid"},Fb={key:0,id:"map-filter-popover-host",class:"map-widget__filter-host"},Db={key:1,class:"map-widget__stack-wrapper map-widget__stack-wrapper--top"},zb={class:"map-widget__stack"},Ib={key:2,class:"map-widget__stack-wrapper map-widget__stack-wrapper--bottom xl:mb-5 mb-2"},jb={class:"map-widget__stack map-widget__stack--bottom"},Pb={key:0,class:"map-widget__state"},Rb={key:1,class:"map-widget__state map-widget__state--error"},Dn=xe(e.defineComponent({__name:"MapWidget",props:{id:{},height:{},minZoom:{},maxZoom:{},data:{}},setup(t){var In,Gt,mn,fn;const n=t,o=Fe.useRoute(),r=Fe.useRouter(),l=e.ref(null),s=e.ref({}),a=e.ref(null),i=e.ref(!1),f=e.ref(null),m=e.ref(!1),x=e.ref([]),u=e.ref(null),h=e.computed(()=>u.value==="ruler"),c=e.computed(()=>u.value==="draw"),d=e.computed(()=>u.value==="geolocation"),y=e.ref("general"),p=e.ref(null),g=e.ref(null),b=e.ref(null),N=e.ref("pen"),V=e.ref("#2563eb"),k=e.ref(3),E=e.ref([]),_=e.ref(!1),B=e.ref(null),M=e.ref(!1),z=e.ref(null),W=e.computed(()=>n.id||"main"),K=e.computed(()=>{var R,ne;return{height:((R=n.height)==null?void 0:R.trim())||((ne=s.value)==null?void 0:ne.height)||"calc(100vh - 65px)"}}),Q=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.name)??null}),H=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.description)??null}),J=e.computed(()=>{var R;return se((R=s.value)==null?void 0:R.maps)}),O=e.computed(()=>{var ne,ye;const R=((ne=s.value)==null?void 0:ne.minZoom)??((ye=s.value)==null?void 0:ye.minzoom)??null;return typeof R=="number"?R:null}),T=e.computed(()=>{var ne,ye;const R=((ne=s.value)==null?void 0:ne.maxZoom)??((ye=s.value)==null?void 0:ye.maxzoom)??null;return typeof R=="number"?R:typeof n.maxZoom=="number"?n.maxZoom:20}),D=e.ref(null),X=e.computed(()=>{if(!D.value)return null;const{lng:R,lat:ne}=D.value;return`${ne.toFixed(6)}, ${R.toFixed(6)}`}),$=e.computed(()=>{var R;return((R=l.value)==null?void 0:R.ctx)??null}),w=e.computed(()=>{var R;return((R=s.value)==null?void 0:R.minimap)??null});function S(R){if(!R||typeof R!="object")return R;const ne=At(R.center);return ne?{...R,center:ne}:R}const I=((Gt=(In=e.getCurrentInstance())==null?void 0:In.appContext.config.globalProperties)==null?void 0:Gt.$settings)||null;function Y(R){if(R==null)return null;const ne=Number(typeof R=="string"?R.trim():R);return Number.isFinite(ne)?ne:null}const Z=At((mn=I==null?void 0:I.map)==null?void 0:mn.center),ee=Y((fn=I==null?void 0:I.map)==null?void 0:fn.zoom),re=e.computed(()=>{const R=(I==null?void 0:I.map)||null,ne=(R==null?void 0:R.boundary)??null,ye=(R==null?void 0:R.katottg)??null;return!ne&&!ye?null:{boundary:ne,katottg:ye}});function ie(R){return typeof R=="string"&&R.trim()?R.trim().toLowerCase():"top-left"}function se(R){return Array.isArray(R)?R:R&&typeof R=="object"?Object.values(R).filter(Boolean):[]}const we=e.computed(()=>{var R;return se((R=s.value)==null?void 0:R.widgets)}),P=e.computed(()=>we.value.some(R=>(R==null?void 0:R.type)==="basemaps")),te=["left","right"],v=e.computed(()=>{const R={left:{top:[],bottom:[]},right:{top:[],bottom:[]}},ne={"top-left":{side:"left",align:"top"},"bottom-left":{side:"left",align:"bottom"},"top-right":{side:"right",align:"top"},"bottom-right":{side:"right",align:"bottom"}};return we.value.forEach(ye=>{const Be=ie(ye.position),pe=ne[Be]??{side:"left",align:"top"};R[pe.side][pe.align].push(ye)}),R});function L(R){return Array.isArray(R)?R[0]??null:typeof R=="string"?R:null}async function F(){var ne;await e.nextTick();const R=(ne=l.value)==null?void 0:ne.ctx;return R?(R.ready&&await R.ready(),R):null}function oe(){var R,ne,ye;return((ye=(ne=(R=l.value)==null?void 0:R.ctx)==null?void 0:ne.map)==null?void 0:ye.value)??null}function ue(){const R=oe();if(!R)return null;const ne=R.getCenter();return{z:R.getZoom().toFixed(2),x:ne.lng.toFixed(5),y:ne.lat.toFixed(5)}}async function be(){var ye;const R=await F(),ne=(ye=R==null?void 0:R.map)==null?void 0:ye.value;ne&&(typeof O.value=="number"&&ne.setMinZoom(O.value),typeof T.value=="number"&&ne.setMaxZoom(T.value))}async function Ve(){var pe;if(a.value)return;const R=await F(),ne=(pe=R==null?void 0:R.map)==null?void 0:pe.value;if(!ne)return;const ye=ne.getCenter(),Be=ne.getZoom();a.value={center:[ye.lng,ye.lat],zoom:Be}}function ge(){if(ft.value)return;const R=ue();if(!R)return;const ne=L(o.query.x),ye=L(o.query.y),Be=L(o.query.z);ne===R.x&&ye===R.y&&Be===R.z||(gt.value=R,r.replace({query:{...o.query,...R}}).catch(()=>{}))}function De(R,ne,ye=1e-6){return Math.abs(R-ne)<=ye}async function ze(){var Ae;if(Zt())return;const R=await F(),ne=(Ae=R==null?void 0:R.map)==null?void 0:Ae.value;if(!R||!ne)return;const ye=parseFloat(L(o.query.x)??""),Be=parseFloat(L(o.query.y)??""),pe=parseFloat(L(o.query.z)??""),Le=!Number.isNaN(ye),$e=!Number.isNaN(Be),ce=!Number.isNaN(pe);let ve=!1;ft.value=!0;try{if(Le&&$e){const Ie=ne.getCenter();(!De(Ie.lng,ye)||!De(Ie.lat,Be))&&(ne.setCenter([ye,Be]),ve=!0)}if(ce){const Ie=ne.getZoom();De(Ie,pe,.001)||(ne.setZoom(pe),ve=!0)}(!Le||!$e||!ce||ve)&&ge()}finally{ft.value=!1}}let Ue=null,Ze=null;const ft=e.ref(!1),gt=e.ref(null);function Zt(){const R=gt.value;if(!R)return!1;const ne=L(o.query.x),ye=L(o.query.y),Be=L(o.query.z);return ne===R.x&&ye===R.y&&Be===R.z?(gt.value=null,!0):!1}function Ft(R){const ne=R==null?void 0:R.lngLat;ne&&(D.value={lng:ne.lng,lat:ne.lat})}let ut=null;function dn(R){var ye;if(!x.value.includes("ruler")||!h.value)return;const ne=R==null?void 0:R.lngLat;ne&&((ye=p.value)==null||ye.addPoint({lat:ne.lat,lng:ne.lng}))}function un(){var R;u.value==="ruler"?(E.value=[],_.value=!1,(R=p.value)==null||R.clearPoints(),u.value=null):(B.value=null,z.value=null,u.value="ruler")}function vt(){u.value=null,E.value=[],_.value=!1}function pn(){u.value==="draw"?u.value=null:(B.value=null,z.value=null,u.value="draw")}function j(){if(u.value==="geolocation"&&B.value!=null){q();return}if(z.value=null,M.value=!0,!navigator.geolocation){z.value="Геолокація не підтримується браузером",M.value=!1;return}navigator.geolocation.getCurrentPosition(R=>{const ne=R.coords.latitude,ye=R.coords.longitude;B.value={lat:ne,lng:ye},z.value=null,M.value=!1,u.value="geolocation",F().then(Be=>{Be!=null&&Be.flyTo&&Be.flyTo({center:[ye,ne],zoom:15})})},()=>{z.value="Не вдалося визначити місце розташування",M.value=!1},{enableHighAccuracy:!0})}function G(){u.value=null,B.value=null,z.value=null}function q(){const R=B.value;R!=null&&F().then(ne=>{ne!=null&&ne.flyTo&&ne.flyTo({center:[R.lng,R.lat],zoom:15})})}function ae(R){E.value=R}function me(){var R;(R=b.value)==null||R.clear()}function ke(){var R;(R=b.value)==null||R.finishPolygon()}function Ce(){var R;(R=b.value)==null||R.undo()}function Ee(){var pe,Le,$e,ce;const R=($e=(Le=(pe=l.value)==null?void 0:pe.ctx)==null?void 0:Le.map)==null?void 0:$e.value,ne=(ce=b.value)==null?void 0:ce.getCanvas();if(!R||!ne)return;const ye=(ve,Ae)=>{const Ie=document.createElement("a");Ie.download=Ae,Ie.rel="noopener",typeof ve=="string"?Ie.href=ve:(Ie.href=URL.createObjectURL(ve),setTimeout(()=>URL.revokeObjectURL(Ie.href),100)),document.body.appendChild(Ie),Ie.click(),document.body.removeChild(Ie)},Be=()=>{const ve=R.getCanvas();if(!ve)return;const Ae=ve.width,Ie=ve.height;if(Ae<=0||Ie<=0)return;const rt=document.createElement("canvas");rt.width=Ae,rt.height=Ie;const pt=rt.getContext("2d");if(!pt)return;pt.drawImage(ve,0,0),pt.drawImage(ne,0,0,ne.width,ne.height,0,0,Ae,Ie);const Pe=`map-drawing-${Date.now()}.png`;rt.toBlob(yt=>{if(yt){ye(yt,Pe);return}try{const Qe=rt.toDataURL("image/png");ye(Qe,Pe)}catch{const Qe=document.createElement("canvas");Qe.width=ne.width,Qe.height=ne.height;const Et=Qe.getContext("2d");Et&&(Et.drawImage(ne,0,0),Qe.toBlob(jn=>jn&&ye(jn,Pe),"image/png"))}},"image/png")};requestAnimationFrame(()=>requestAnimationFrame(Be))}async function it(){const R=await F();R!=null&&R.on&&(Ue==null||Ue(),Ue=R.on("moveend",ge),Ze==null||Ze(),Ze=R.on("mousemove",Ft),ut==null||ut(),ut=R.on("click",dn))}e.onUnmounted(()=>{Ue==null||Ue(),Ue=null,Ze==null||Ze(),Ze=null,ut==null||ut(),ut=null});async function ot(R=!1){var ye,Be;m.value=!1,f.value=null,D.value=null;const ne=R||!n.data;i.value=ne;try{const pe=ne?await(async()=>{const Ae=await fetch(`/api/gis-map/${encodeURIComponent(W.value)}`);if(!Ae.ok)throw new Error(`Помилка завантаження (${Ae.status})`);return Ae.json()})():n.data;ne||(m.value=!0);const Le=At(pe.center)??Z,$e=se(pe.layers).map(Ae=>S(Ae)),ce=Y(pe.zoom)??ee;s.value={...pe,center:Le??null,zoom:ce??pe.zoom??null,layers:$e,widgets:pe.widgets},x.value=pe.tools||["home","print","ruler","draw"];const ve=await F();ve&&(Le&&((ye=ve.setCenter)==null||ye.call(ve,Le)),ce!=null&&((Be=ve.setZoom)==null||Be.call(ve,ce)),a.value||await Ve()),await be(),await ze(),await it(),m.value=!0}catch(pe){f.value=(pe==null?void 0:pe.message)||"Не вдалося завантажити карту"}finally{ne&&(i.value=!1)}}const Ge=e.computed(()=>{var Be;const R=new Map;return se((Be=s.value)==null?void 0:Be.layers).forEach(pe=>{if(!(pe!=null&&pe.id))return;const Le=S(pe)||pe;R.set(pe.id,{...Le})}),we.value.filter(pe=>(pe==null?void 0:pe.type)==="layers").flatMap(pe=>{var Le;return se((Le=pe==null?void 0:pe.config)==null?void 0:Le.layers)}).forEach(pe=>{if(!(pe!=null&&pe.id))return;const Le=R.get(pe.id)||{},$e=S(pe)||pe;R.set(pe.id,{...Le,...$e,actions:pe.actions||Le.actions||null,name:Le.name||pe.name||pe.title||Le.title||pe.id,title:Le.title||pe.title||Le.name||null,visible:Le.visible??pe.visible??!0})}),Array.from(R.values())}),ct=e.ref([]);function _t(R){ct.value.includes(R)?ct.value=ct.value.filter(ne=>ne!==R):ct.value.push(R)}const zn=e.computed(()=>R=>ct.value.includes(R.id));return e.watch([O,T],()=>{be()},{immediate:!0}),e.watch(W,()=>{ot(!0)}),e.watch(()=>n.data,R=>{R&&ot()}),e.onMounted(()=>{ot()}),e.watch(()=>[o.query.x,o.query.y,o.query.z],()=>{ze()}),(R,ne)=>(e.openBlock(),e.createElementBlock("div",{class:"map-widget",style:e.normalizeStyle(K.value)},[ne[8]||(ne[8]=e.createElementVNode("div",{id:"map-filter-popover-host",class:"map-widget__filter-host"},null,-1)),e.createVNode($n,{ref_key:"mapViewRef",ref:l,class:"map-widget__view"},{default:e.withCtx(()=>{var ye,Be,pe,Le;return[P.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(Yt,{key:0,class:"hidden"})),re.value?(e.openBlock(),e.createBlock(ml,{key:1,"layer-id":"app-boundary",boundary:re.value.boundary,katottg:re.value.katottg},null,8,["boundary","katottg"])):e.createCommentVNode("",!0),$.value&&x.value.includes("draw")&&c.value?(e.openBlock(),e.createElementBlock("div",Cb,[e.createVNode(Eb,{ref_key:"drawingPanelRef",ref:g,onClose:ne[0]||(ne[0]=$e=>u.value=null),onClear:me,onDownload:Ee,onFinishPolygon:ke,onUndo:Ce,"onUpdate:tool":ne[1]||(ne[1]=$e=>N.value=$e),"onUpdate:strokeColor":ne[2]||(ne[2]=$e=>V.value=$e),"onUpdate:strokeWidth":ne[3]||(ne[3]=$e=>k.value=$e)},null,512)])):e.createCommentVNode("",!0),$.value?(e.openBlock(),e.createElementBlock("div",Vb,[X.value?(e.openBlock(),e.createBlock(e1,{key:0,coordinates:X.value},null,8,["coordinates"])):e.createCommentVNode("",!0),e.createVNode(o1,{"map-context":$.value,options:w.value},null,8,["map-context","options"]),x.value.includes("ruler")&&h.value?(e.openBlock(),e.createBlock(K1,{key:1,ref_key:"rulerPanelRef",ref:p,onClose:vt,onTabChange:ne[4]||(ne[4]=$e=>y.value=$e),onPointsChange:ae,onShapeClosedChange:ne[5]||(ne[5]=$e=>_.value=$e)},null,512)):e.createCommentVNode("",!0),x.value.includes("geolocation")&&d.value?(e.openBlock(),e.createBlock(sb,{key:2,position:B.value,onClose:G,onRecenter:q},null,8,["position"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Bb,[x.value.includes("home")?(e.openBlock(),e.createBlock(Mt,{key:0,center:((ye=s.value)==null?void 0:ye.center)||((Be=a.value)==null?void 0:Be.center)||null,zoom:((pe=s.value)==null?void 0:pe.zoom)??((Le=a.value)==null?void 0:Le.zoom)??null},null,8,["center","zoom"])):e.createCommentVNode("",!0),x.value.includes("print")?(e.openBlock(),e.createBlock(Xx,{key:1})):e.createCommentVNode("",!0),x.value.includes("geolocation")?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",d.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":d.value?"Вимкнути геолокацію":"Ваше розташування",disabled:M.value,onClick:e.withModifiers(j,["stop"])},[e.createElementVNode("span",vb,e.toDisplayString(d.value?"Вимкнути геолокацію":"Ваше розташування"),1),e.createVNode(e.unref(bn),{class:"w-4 h-4"})],10,$b)):e.createCommentVNode("",!0),x.value.includes("ruler")?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",h.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":h.value?"Вимкнути вимірювання":"Вимірювання",onClick:e.withModifiers(un,["stop"])},[e.createElementVNode("span",Lb,e.toDisplayString(h.value?"Вимкнути вимірювання":"Вимірювання"),1),e.createVNode(e.unref(Do),{class:"w-4 h-4"})],10,Sb)):e.createCommentVNode("",!0),x.value.includes("draw")?(e.openBlock(),e.createElementBlock("button",{key:4,type:"button",class:e.normalizeClass(["group relative flex items-center justify-center w-9 h-9 rounded-xl shadow-lg transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-400/60 focus-visible:ring-offset-2",c.value?"bg-blue-500 text-white hover:bg-blue-600":"bg-white text-gray-700 hover:bg-gray-50 hover:scale-105"]),"aria-label":c.value?"Вимкнути малювання":"Малювання",onClick:e.withModifiers(pn,["stop"])},[e.createElementVNode("span",Mb,e.toDisplayString(c.value?"Вимкнути малювання":"Малювання"),1),e.createVNode(e.unref(kn),{class:"w-4 h-4"})],10,Ab)):e.createCommentVNode("",!0)]),m.value&&h.value&&E.value.length>0?(e.openBlock(),e.createBlock(X1,{key:4,points:E.value,"is-shape-closed":_.value,"label-mode":y.value},null,8,["points","is-shape-closed","label-mode"])):e.createCommentVNode("",!0),m.value&&B.value!=null?(e.openBlock(),e.createBlock(ib,{key:5,position:B.value},null,8,["position"])):e.createCommentVNode("",!0),m.value&&c.value?(e.openBlock(),e.createBlock(Nb,{key:6,ref_key:"drawingCanvasRef",ref:b,tool:N.value,"stroke-color":V.value,"stroke-width":k.value},null,8,["tool","stroke-color","stroke-width"])):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createElementVNode("div",Tb,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(te,$e=>e.createElementVNode("div",{key:$e,class:e.normalizeClass(["map-widget__side",`map-widget__side--${$e}`])},[$e==="left"?(e.openBlock(),e.createElementBlock("div",Fb)):e.createCommentVNode("",!0),v.value[$e].top.length?(e.openBlock(),e.createElementBlock("div",Db,[e.createElementVNode("div",zb,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value[$e].top,ce=>{var ve,Ae,Ie,rt,pt,Pe,yt,Qe;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ce.id||ce.type,class:"map-overlay__item"},[ce.type==="info"?(e.openBlock(),e.createBlock(xl,{key:0,title:((ve=ce.config)==null?void 0:ve.title)||ce.title||null,content:((Ae=ce.config)==null?void 0:Ae.content)||"",links:J.value,"map-name":Q.value,"map-description":H.value},null,8,["title","content","links","map-name","map-description"])):ce.type==="catalog"?(e.openBlock(),e.createBlock(_l,{key:1,api:((Ie=ce.config)==null?void 0:Ie.api)||null},null,8,["api"])):ce.type==="layers"?(e.openBlock(),e.createBlock(wl,{key:2,layers:Ge.value,onAction:ne[6]||(ne[6]=Et=>_t(Et.layerId)),config:ce.config},null,8,["layers","config"])):ce.type==="basemaps"?(e.openBlock(),e.createBlock(Yt,{key:3,layers:((rt=ce.config)==null?void 0:rt.layers)||null,"default-layer":((pt=ce.config)==null?void 0:pt.default)||null,title:ce.title||((Pe=ce.config)==null?void 0:Pe.title)||null},null,8,["layers","default-layer","title"])):ce.type==="legend"?(e.openBlock(),e.createBlock(yo,{key:4,items:((yt=ce.config)==null?void 0:yt.items)||[]},null,8,["items"])):ce.type==="filters"&&zn.value(ce)?(e.openBlock(),e.createBlock(go,{key:5,"layer-id":(Qe=ce.config)==null?void 0:Qe.layer,onClose:_t},null,8,["layer-id"])):ce.type==="dataset"||ce.type==="attribute"?(e.openBlock(),e.createBlock(El,{key:6,config:ce.config},null,8,["config"])):ce.type==="search"?(e.openBlock(),e.createBlock(Cl,{key:7,config:ce.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ce.visible!==!1]])}),128))])])):e.createCommentVNode("",!0),v.value[$e].bottom.length?(e.openBlock(),e.createElementBlock("div",Ib,[e.createElementVNode("div",jb,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value[$e].bottom,ce=>{var ve,Ae,Ie,rt,pt,Pe,yt,Qe;return e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:ce.id||ce.type,class:"map-overlay__item"},[ce.type==="info"?(e.openBlock(),e.createBlock(xl,{key:0,title:((ve=ce.config)==null?void 0:ve.title)||ce.title||null,content:((Ae=ce.config)==null?void 0:Ae.content)||"",links:J.value,"map-name":Q.value,"map-description":H.value},null,8,["title","content","links","map-name","map-description"])):ce.type==="catalog"?(e.openBlock(),e.createBlock(_l,{key:1,api:((Ie=ce.config)==null?void 0:Ie.api)||null},null,8,["api"])):ce.type==="layers"?(e.openBlock(),e.createBlock(wl,{key:2,layers:Ge.value,onAction:ne[7]||(ne[7]=Et=>_t(Et.layerId)),config:ce.config},null,8,["layers","config"])):ce.type==="basemaps"?(e.openBlock(),e.createBlock(Yt,{key:3,layers:((rt=ce.config)==null?void 0:rt.layers)||null,"default-layer":((pt=ce.config)==null?void 0:pt.default)||null,title:ce.title||((Pe=ce.config)==null?void 0:Pe.title)||null},null,8,["layers","default-layer","title"])):ce.type==="legend"?(e.openBlock(),e.createBlock(yo,{key:4,items:((yt=ce.config)==null?void 0:yt.items)||[]},null,8,["items"])):ce.type==="filters"&&zn.value(ce)?(e.openBlock(),e.createBlock(go,{key:5,"layer-id":(Qe=ce.config)==null?void 0:Qe.layer,onClose:_t},null,8,["layer-id"])):ce.type==="dataset"||ce.type==="attribute"?(e.openBlock(),e.createBlock(El,{key:6,config:ce.config},null,8,["config"])):ce.type==="search"?(e.openBlock(),e.createBlock(Cl,{key:7,config:ce.config},null,8,["config"])):e.createCommentVNode("",!0)])),[[e.vShow,ce.visible!==!1]])}),128))])])):e.createCommentVNode("",!0)],2)),64))]),e.createVNode(dl),e.createVNode(ko,{"map-id":W.value},null,8,["map-id"])],64)):e.createCommentVNode("",!0)]}),_:1},512),i.value?(e.openBlock(),e.createElementBlock("div",Pb,"Завантаження карти…")):f.value?(e.openBlock(),e.createElementBlock("div",Rb,e.toDisplayString(f.value),1)):e.createCommentVNode("",!0)],4))}}),[["__scopeId","data-v-524cd6dd"]]),Ob={class:"rounded-lg border border-gray-200 bg-gray-50 p-6"},Ub={class:"rounded-xl border border-gray-200 overflow-hidden bg-white"},qb=e.defineComponent({__name:"MapPreview",props:{id:{}},setup(t){return(n,o)=>(e.openBlock(),e.createElementBlock("section",Ob,[o[0]||(o[0]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800 mb-4"}," Попередній перегляд карти ",-1)),e.createElementVNode("div",Ub,[e.createVNode(Dn,{class:"w-full h-[360px]",id:t.id},null,8,["id"])])]))}}),Hb={class:"bg-white rounded-lg shadow-xl w-full max-w-4xl flex flex-col h-[80vh] m-4"},Wb={class:"flex items-center justify-between px-6 py-4 border-b border-gray-200"},Yb={key:0,class:"absolute top-0 left-0 right-0 bg-red-100 text-red-700 text-sm px-4 py-2 z-10 border-b border-red-200"},Zb={class:"flex-1 overflow-hidden relative bg-[#fffffe]"},Gb={class:"px-6 py-4 border-t border-gray-200 flex justify-end gap-3"},Kb=["disabled"],Xb=e.defineComponent({__name:"ConfigEditor",props:{modelValue:{}},emits:["update:modelValue","save"],setup(t,{emit:n}){const o=t,r=n,l=e.ref(""),s=e.ref(null);e.watch(()=>o.modelValue,f=>{if(f){try{l.value=JSON.stringify(f,null,2)}catch{l.value="{}"}s.value=null}},{immediate:!0}),e.watch(l,f=>{if(!f.trim()){s.value=null;return}try{JSON.parse(f),s.value=null}catch(m){s.value=m.message}}),e.watch(()=>o.modelValue,()=>{setTimeout(()=>{const{monaco:f}=window;if(f&&f.editor){const m=f.editor.getEditors();m.length>0&&m[m.length-1].updateOptions({wordWrap:"on"})}},300)},{immediate:!0});function a(){r("update:modelValue",null),l.value="",s.value=null}function i(){if(!s.value)try{const f=JSON.parse(l.value);r("save",f),a()}catch(f){console.error("Failed to parse JSON",f)}}return(f,m)=>t.modelValue!==null?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 flex items-center justify-center bg-black/50 backdrop-blur-sm",onClick:e.withModifiers(a,["self"])},[e.createElementVNode("div",Hb,[e.createElementVNode("div",Wb,[m[1]||(m[1]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-800"}," Редагування конфігурації (JSON) ",-1)),e.createElementVNode("button",{onClick:a,class:"text-gray-500 hover:text-gray-700 transition-colors"},[e.createVNode(e.unref(Nt),{size:20})])]),s.value?(e.openBlock(),e.createElementBlock("div",Yb," Помилка JSON: "+e.toDisplayString(s.value),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Zb,[e.createVNode(ln,{modelValue:l.value,"onUpdate:modelValue":m[0]||(m[0]=x=>l.value=x),language:"json",theme:"vs-light",class:"w-full h-full"},null,8,["modelValue"])]),e.createElementVNode("div",Gb,[e.createElementVNode("button",{onClick:a,class:"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors"}," Скасувати "),e.createElementVNode("button",{onClick:i,disabled:!!s.value,class:"px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed"}," Зберегти ",8,Kb)])])])):e.createCommentVNode("",!0)}}),Qb={key:0,class:"text-center py-8 text-gray-500 border rounded-lg bg-[rgba(252,252,252,0.8)]"},Jb={key:1,class:"rounded-lg border border-gray-200 overflow-hidden"},ek={class:"w-full text-sm"},tk={class:"divide-y divide-gray-200"},nk={class:"px-4 py-3"},ok=["onUpdate:modelValue","onChange"],rk=["value"],lk={class:"px-4 py-3"},ak=["onUpdate:modelValue","onChange"],sk=["value"],ik={class:"px-4 py-3 text-center"},ck=["checked","onChange"],dk={class:"px-4 py-3"},uk={key:0,class:"flex items-center gap-2"},pk=["onClick"],mk=["onClick"],fk={key:1},gk=["onClick"],yk={class:"px-4 py-3 text-right"},hk=["onClick"],xk=e.defineComponent({__name:"WidgetSettings",props:{modelValue:{}},emits:["update:modelValue"],setup(t,{emit:n}){const o=t,r=n,l=["catalog","legend","basemaps","info","layers","dataset","filters","search"],s=["top-left","top-right","bottom-left","bottom-right"],a=e.ref(null),i=e.ref(-1),f=e.computed(()=>o.modelValue||[]);function m(){const g=[...f.value,{type:"info",position:"top-left",visible:!0,config:{}}];r("update:modelValue",g)}function x(g){he.confirm({title:"Видалити віджет?",message:"Ви впевнені, що хочете видалити цей віджет?",type:"warning",onConfirm:()=>{const b=f.value.filter((N,V)=>V!==g);r("update:modelValue",b)}})}function u(g,b,N){const V=[...f.value];V[g]={...V[g],[b]:N},r("update:modelValue",V)}function h(g){return!!g&&Object.keys(g).length>0}function c(g,b){i.value=g,a.value=b||{}}function d(g){c(g,{})}function y(g){he.confirm({title:"Видалити конфігурацію?",message:"Ви впевнені, що хочете видалити конфігурацію цього віджета?",type:"warning",onConfirm:()=>{u(g,"config",void 0)}})}function p(g){i.value>-1&&u(i.value,"config",g),a.value=null,i.value=-1}return(g,b)=>{var N;return e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("div",{class:"flex items-center justify-between mb-4"},[b[1]||(b[1]=e.createElementVNode("h2",{class:"text-lg font-semibold text-gray-800"},"Віджети",-1)),e.createElementVNode("button",{onClick:m,class:"px-3 py-1.5 text-sm bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors"}," + Додати віджет ")]),(N=f.value)!=null&&N.length?(e.openBlock(),e.createElementBlock("div",Jb,[e.createElementVNode("table",ek,[b[2]||(b[2]=e.createElementVNode("thead",{class:"bg-[rgba(252,252,252,0.8)] border-b border-gray-200"},[e.createElementVNode("tr",null,[e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Тип"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700 w-1/4"},"Розташування"),e.createElementVNode("th",{class:"px-4 py-3 text-center font-medium text-gray-700 w-24"},"Видимість"),e.createElementVNode("th",{class:"px-4 py-3 text-left font-medium text-gray-700"},"Конфігурація"),e.createElementVNode("th",{class:"px-4 py-3 text-right font-medium text-gray-700 w-24"},"Дії")])],-1)),e.createElementVNode("tbody",tk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,(V,k)=>(e.openBlock(),e.createElementBlock("tr",{key:k,class:"hover:bg-gray-50"},[e.createElementVNode("td",nk,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>V.type=E,onChange:E=>u(k,"type",V.type),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(l,E=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,rk)),64))],40,ok),[[e.vModelSelect,V.type]])]),e.createElementVNode("td",lk,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":E=>V.position=E,onChange:E=>u(k,"position",V.position),class:"w-full px-2 py-1.5 bg-white border border-gray-300 rounded focus:outline-none focus:ring-1 focus:ring-blue-500 text-gray-700"},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(s,E=>e.createElementVNode("option",{key:E,value:E},e.toDisplayString(E),9,sk)),64))],40,ak),[[e.vModelSelect,V.position]])]),e.createElementVNode("td",ik,[e.createElementVNode("input",{type:"checkbox",checked:V.visible!==!1,onChange:E=>u(k,"visible",E.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"},null,40,ck)]),e.createElementVNode("td",dk,[h(V.config)?(e.openBlock(),e.createElementBlock("div",uk,[e.createElementVNode("button",{onClick:E=>c(k,V.config),class:"p-1 text-blue-600 hover:text-blue-800 hover:bg-blue-50 rounded transition-colors",title:"Редагувати конфігурацію"},[e.createVNode(e.unref(kn),{size:16})],8,pk),e.createElementVNode("button",{onClick:E=>y(k),class:"p-1 text-red-500 hover:text-red-700 hover:bg-red-50 rounded transition-colors",title:"Видалити конфігурацію"},[e.createVNode(e.unref(Nt),{size:16})],8,mk)])):(e.openBlock(),e.createElementBlock("div",fk,[e.createElementVNode("button",{onClick:E=>d(k),class:"p-1 text-green-600 hover:text-green-800 hover:bg-green-50 rounded transition-colors",title:"Додати конфігурацію"},[e.createVNode(e.unref(wn),{size:16})],8,gk)]))]),e.createElementVNode("td",yk,[e.createElementVNode("button",{onClick:E=>x(k),class:"p-1 text-gray-400 hover:text-red-500 transition-colors",title:"Видалити віджет"},[e.createVNode(e.unref(On),{size:16})],8,hk)])]))),128))])])])):(e.openBlock(),e.createElementBlock("div",Qb," Немає віджетів. Додайте перший віджет. ")),e.createVNode(Xb,{teleport:"#modal",modelValue:a.value,"onUpdate:modelValue":b[0]||(b[0]=V=>a.value=V),onSave:p},null,8,["modelValue"])])}}}),bk={class:"relative h-full flex flex-col flex-1 min-h-0 overflow-hidden mx-auto w-full"},kk={class:"mx-1"},wk={class:"text-gray-900 font-semibold"},_k=["disabled"],Ek={key:0,class:"text-center py-12 mt-6 px-[24px]"},Nk={key:1,class:"px-[24px] overflow-y-auto"},Ck={class:"space-y-6"},Vk={class:"space-y-6"},Bk={class:"space-y-6"},$k=xe(e.defineComponent({__name:"MapSettings",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.computed(()=>{var _;return((_=n.resolve("/maps").meta)==null?void 0:_.title)??"Карти"}),l=e.ref(!0),s=e.ref(!1),a=e.ref([]),i=e.ref({}),f=[{name:"Загальна",id:"general"},{name:"Шари",id:"layers"},{name:"Віджети",id:"widgets"},{name:"Карта",id:"map"}],m=f.map(_=>_.id),x=_=>_?Array.isArray(_)?_[0]:_:null,u=(()=>{const _=x(o.query.tab);return _&&m.includes(_)?_:"general"})(),h=e.ref(u);e.watch(()=>o.query.tab,_=>{const B=x(_);B&&m.includes(B)&&h.value!==B&&(h.value=B)}),e.watch(h,_=>{o.query.tab!==_&&n.replace({query:{...o.query,tab:_}})});const c=e.ref({name:"",map_key:"",description:"",holder:"",image:"",keywords:[],center:null,zoom:11,widgets:[],layers:[]}),d=e.computed({get:()=>(c.value.layers||[]).map(_=>_.id||_),set:_=>{c.value.layers=_}}),y=e.computed(()=>{var B;return(Array.isArray(a.value)?a.value:((B=a.value)==null?void 0:B.data)||[]).map(M=>({id:M.id,text:M.text||M.name||M.id}))}),p=e.computed({get:()=>d.value.map(_=>{const B=y.value.find(M=>M.id===_);return B?B.text:_}),set:_=>{const B=_.map(M=>{const z=y.value.find(W=>W.text===M);return z?z.id:null}).filter(M=>M!==null);d.value=B}}),g=e.computed(()=>{const _=c.value.center;if(!Array.isArray(_)||_.length<2)return"Не задано";const[B,M]=_;return B===void 0||M===void 0||B===null||M===null||Number.isNaN(Number(B))||Number.isNaN(Number(M))?"Не задано":`Lng ${Number(B).toFixed(6)}, Lat ${Number(M).toFixed(6)}`}),b=e.computed(()=>{const _=c.value.zoom;if(_==null||_==="")return"Не задано";const B=Number(_);return Number.isNaN(B)?"Не задано":B.toFixed(2)}),N=[{name:"name",type:"text",label:"Назва",col:6,validators:["required"]},{name:"map_key",type:"text",label:"Унікальний ключ",col:6,validators:["required"]},{name:"description",type:"textarea",label:"Опис",col:12},{name:"holder",type:"text",label:"Власник/Утримувач/Відповідальний",col:6},{name:"keywords",type:"Tags",label:"Ключові слова",placeholder:"Введіть тег та натисніть Enter",col:6},{name:"center",type:"array",label:"Центр",inputType:"number",limit:2,count:2,col:6},{name:"zoom",type:"number",label:"Зум",col:6,validators:["required"]},{name:"is_public",type:"switcher",label:"Чи публічна карта?",col:6,data:"yes_no"},{name:"is_active",type:"switcher",label:"Чи активна?",col:6,data:"yes_no"},{name:"image",type:"File",label:"Фото",col:12}];async function V(){try{const _=await fetch("/api/suggest/layer_list");_.ok&&(a.value=await _.json())}catch(_){console.error("Failed to load available layers:",_)}}async function k(){try{const B=await(await fetch(`/api/gis-map/${o.params.id}?original=1`)).json();c.value={...B,keywords:B.keywords||[],center:B.center??null,widgets:Array.isArray(B.widgets)?B.widgets:[],layers:(B.layers||[]).map(M=>M.id||M)}}catch(_){console.error("Failed to load map:",_),he.notify({type:"error",title:"Помилка",message:"Не вдалося завантажити карту"})}finally{l.value=!1}}async function E(){var B,M;const _=(M=(B=i.value)==null?void 0:B.validate)==null?void 0:M.call(B);if(_){he.notify({type:"warning",title:"Валідація",message:Object.entries(_).map(([z,W])=>`${z}: ${W}`).join(`
|
|
247
|
+
`)});return}s.value=!0;try{const z=JSON.parse(JSON.stringify(c.value));if(z.zoom=Number(z.zoom),Array.isArray(z.center)&&(z.center.every(Q=>Q==null||Q===""||Q===0)||z.center.length===0)&&(z.center=null),delete z.created_at,delete z.updated_at,delete z.created_by,delete z.updated_by,delete z.history,delete z.maps,!(await fetch(`/api/gis-map/${o.params.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(z)})).ok)throw new Error("Save failed");he.notify({type:"success",title:"Успіх",message:"Збережено!"})}catch(z){console.error("Save error:",z),he.notify({type:"error",title:"Помилка",message:"Не вдалося зберегти"})}finally{s.value=!1}}return e.onMounted(async()=>{await V(),k()}),(_,B)=>{const M=e.resolveComponent("router-link");return e.openBlock(),e.createElementBlock("div",bk,[e.createVNode(Bo,{variant:"form",title:c.value.name||"Налаштування карти"},{breadcrumbs:e.withCtx(()=>[e.createVNode(M,{to:"/maps",class:"text-gray-500 hover:text-gray-700"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r.value),1)]),_:1}),e.createElementVNode("span",kk,[e.createVNode(e.unref(Rn),{size:16,class:"shrink-0"})]),e.createElementVNode("span",wk,e.toDisplayString(c.value.name||"Налаштування карти"),1)]),description:e.withCtx(()=>[...B[7]||(B[7]=[e.createTextVNode("Редагування параметрів карти",-1)])]),actions:e.withCtx(()=>[e.createElementVNode("button",{onClick:B[0]||(B[0]=z=>e.unref(n).back()),class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"}," Повернутися "),e.createElementVNode("button",{onClick:E,disabled:s.value,class:"inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-blue-600 rounded-md hover:bg-blue-700 disabled:opacity-50"},e.toDisplayString(s.value?"Збереження...":"Зберегти"),9,_k)]),_:1},8,["title"]),l.value?(e.openBlock(),e.createElementBlock("div",Ek,[...B[8]||(B[8]=[e.createElementVNode("p",{class:"text-gray-500"},"Завантаження...",-1)])])):(e.openBlock(),e.createElementBlock("div",Nk,[e.createVNode(Zy,{tabs:f,activeTab:h.value,"onUpdate:activeTab":B[1]||(B[1]=z=>h.value=z)},null,8,["activeTab"]),e.withDirectives(e.createElementVNode("div",Ck,[e.createVNode(Ky,{schema:N,loading:l.value,modelValue:c.value,"onUpdate:modelValue":B[2]||(B[2]=z=>c.value=z),form:i.value,"onUpdate:form":B[3]||(B[3]=z=>i.value=z)},null,8,["loading","modelValue","form"])],512),[[e.vShow,h.value==="general"]]),e.withDirectives(e.createElementVNode("div",Vk,[e.createVNode(Qy,{options:y.value,layerIDs:d.value,"onUpdate:layerIDs":B[4]||(B[4]=z=>d.value=z),layerNames:p.value,"onUpdate:layerNames":B[5]||(B[5]=z=>p.value=z)},null,8,["options","layerIDs","layerNames"])],512),[[e.vShow,h.value==="layers"]]),e.withDirectives(e.createVNode(xk,{modelValue:c.value.widgets,"onUpdate:modelValue":B[6]||(B[6]=z=>c.value.widgets=z)},null,8,["modelValue"]),[[e.vShow,h.value==="widgets"]]),e.withDirectives(e.createElementVNode("div",Bk,[e.createVNode(qb,{"center-display":g.value,"zoom-display":b.value,"layer-names":p.value,id:e.unref(o).params.id},null,8,["center-display","zoom-display","layer-names","id"])],512),[[e.vShow,h.value==="map"]])]))])}}}),[["__scopeId","data-v-54593f35"]]),vk={class:"flex-1 overflow-y-auto p-0 overflow-x-hidden max-h-[70%] lg:max-h-[80%] xl:max-h-[83%] 2xl:max-h-[95%]"},Sk={class:"pt-0 mt-0"},Lk={key:0,class:"flex items-center justify-center py-12"},Ak={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm"},Mk={key:2,class:"text-center py-12 text-gray-500"},Tk={key:3,class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6"},Fk=["onClick"],Dk={class:"flex items-start justify-between"},zk={class:"flex items-start gap-3"},Ik={class:"flex-1 min-w-0"},jk={class:"flex items-center gap-2 mb-[-0.2rem] -mt-1"},Pk=["onClick"],Rk={class:"relative"},Ok=["onClick"],Uk={key:0,class:"absolute left-full top-1/2 -translate-y-1/2 ml-2 px-2 py-1 bg-white text-gray-600 text-xs rounded shadow-sm z-10 whitespace-nowrap animate-fade-in-out border border-gray-200/70"},qk={class:"text-xs text-gray-600 line-clamp-2"},Hk={class:"flex items-center gap-2 shrink-0"},Wk={key:0,class:"text-xs text-gray-500 whitespace-nowrap"},Yk={class:"px-6 py-3 border-t border-gray-200 custom-pagination bg-gray-100"},_o=30,Zk=xe(e.defineComponent({__name:"DictionariesGrid",props:{search:{},type:{}},emits:["update:counts"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=Fe.useRouter(),a=Fe.useRoute(),i=e.ref(Number(a.query.page)||1),f=e.ref(!1),m=e.ref(0),x=e.ref([]),u=e.computed(()=>{const _=(i.value-1)*_o,B=_+_o;return x.value.slice(_,B)}),h=e.ref(!0),c=e.ref(null),d=e.ref(null);let y=null,p=null;const g=(_="",B="")=>{const M=new URLSearchParams,z=_.trim();z&&M.set("search",z);const W=(B||"").trim();W&&M.set("type",W);const K=M.toString();return K?`/api/user-cls?${K}`:"/api/user-cls"},b=async(_="",B="")=>{try{h.value=!0,c.value=null;const M=g(_,B),z=await fetch(M);if(!z.ok)throw new Error(`HTTP error: ${z.status}`);const W=await z.json();if(x.value=W.data,!_.trim())m.value=W.data.length;else if(m.value===0){const K=await fetch(g("",B));if(K.ok){const Q=await K.json();m.value=Q.data.length}}l("update:counts",{filtered:x.value.length,total:m.value})}catch(M){c.value=M instanceof Error?M.message:"Failed to load classifiers",console.error("Error fetching classifiers:",M)}finally{h.value=!1}};e.onMounted(()=>{f.value=!0,b(r.search,r.type??"")}),e.watch(()=>[r.search,r.type],([_,B])=>{y&&clearTimeout(y),y=setTimeout(()=>{b(_,B??""),i.value=1},300)});const N=_=>{s.push({name:"classifier-detail",params:{name:_.name}})},V=()=>{b(r.search,r.type??"")},k=async _=>{try{await navigator.clipboard.writeText(_),d.value=_,p&&clearTimeout(p),p=setTimeout(()=>{d.value=null},500)}catch(B){console.error("Failed to copy text: ",B)}};n({refetch:V});const E=_=>{i.value=_,s.replace({query:{...a.query,page:String(_)}})};return(_,B)=>(e.openBlock(),e.createElementBlock("div",vk,[e.createElementVNode("div",Sk,[h.value?(e.openBlock(),e.createElementBlock("div",Lk,[e.createVNode(e.unref(To),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):c.value?(e.openBlock(),e.createElementBlock("div",Ak,e.toDisplayString(c.value),1)):x.value.length===0?(e.openBlock(),e.createElementBlock("div",Mk," Нічого не знайдено ")):e.createCommentVNode("",!0),x.value.length>0?(e.openBlock(),e.createElementBlock("div",Tk,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,(M,z)=>(e.openBlock(),e.createElementBlock("div",{key:z,class:"w-full border border-gray-200 bg-white rounded-lg p-4 text-left hover:shadow-md transition-all hover:border-gray-300 cursor-pointer",onClick:W=>N(M)},[e.createElementVNode("div",Dk,[e.createElementVNode("div",zk,[M.type==="sql"?(e.openBlock(),e.createBlock(e.unref(Ul),{key:0,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})):(e.openBlock(),e.createBlock(e.unref(Gl),{key:1,width:20,height:20,"stroke-width":2,class:"shrink-0 w-5 h-5 text-blue-600"})),e.createElementVNode("div",Ik,[e.createElementVNode("div",jk,[e.createElementVNode("h4",{onClick:e.withModifiers(W=>k(M.name),["stop"]),class:"text-sm font-semibold text-gray-800 mb-0 hover:border-b hover:border-gray-300 cursor-pointer"},e.toDisplayString(M.name),9,Pk),e.createElementVNode("div",Rk,[e.createElementVNode("button",{onClick:e.withModifiers(W=>k(M.name),["stop"]),class:"pt-1 mt-0.5 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded transition-colors"},[e.createVNode(e.unref(Rl),{width:14,height:14,"stroke-width":2})],8,Ok),d.value===M.name?(e.openBlock(),e.createElementBlock("div",Uk," Copied ")):e.createCommentVNode("",!0)])]),e.createElementVNode("p",qk,e.toDisplayString(M.description||"Опис відсутній"),1)])]),e.createElementVNode("div",Hk,[M.type!="sql"?(e.openBlock(),e.createElementBlock("span",Wk,e.toDisplayString(M.count)+" записів ",1)):e.createCommentVNode("",!0),e.createVNode(e.unref(Rn),{width:16,height:16,"stroke-width":2,class:"w-4 h-4 text-gray-400"})])])],8,Fk))),128))])):e.createCommentVNode("",!0)]),f.value?(e.openBlock(),e.createBlock(e.Teleport,{key:0,to:"#pagination"},[e.createElementVNode("div",Yk,[e.createVNode(e.unref(he.VsPagination),{total:x.value.length,page:i.value,"page-size":_o,showPageSizes:!1,pageRange:10,view:"button",color:"gray","onUpdate:page":E,onPageChange:E},null,8,["total","page"])])])):e.createCommentVNode("",!0)]))}}),[["__scopeId","data-v-e728e68b"]]),Gk={class:"flex flex-col 2xl:flex-row 2xl:items-center 2xl:justify-between"},Kk={class:""},Xk={class:"text-2xl font-bold mb-2 flex items-center gap-2"},Qk={key:0,class:"text-sm font-normal text-gray-500 mt-2 ml-1"},Jk={class:"flex flex-col gap-3 mt-4 lg:mt-5 lg:flex-row lg:items-center"},e2={class:"w-full md:w-auto"},t2=["value"],n2={class:"relative w-full lg:w-[16rem]"},o2={class:"bg-white focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-lg"},r2={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},l2=["value"],a2=e.defineComponent({__name:"DictionariesHeader",props:{modelValue:{},filter:{default:""},counts:{}},emits:["update:modelValue","update:filter","refresh"],setup(t,{emit:n}){const o=t,r=n,l=a=>{const i=a.target.value;r("update:filter",i)},s=e.ref(!1);return(a,i)=>(e.openBlock(),e.createElementBlock("div",Gk,[e.createElementVNode("div",Kk,[e.createElementVNode("h1",Xk,[i[3]||(i[3]=e.createTextVNode(" Довідники ",-1)),t.counts&&t.counts.total>0?(e.openBlock(),e.createElementBlock("span",Qk,e.toDisplayString(t.counts.filtered)+" / "+e.toDisplayString(t.counts.total),1)):e.createCommentVNode("",!0)]),i[4]||(i[4]=e.createElementVNode("p",{class:"text-sm opacity-60"}," Редагуйте довідники класифікаторів, що використовуються у вашій системі ",-1))]),e.createElementVNode("div",Jk,[e.createElementVNode("div",e2,[i[6]||(i[6]=e.createElementVNode("label",{class:"sr-only",for:"dictionary-filter"},"Фільтр типу",-1)),e.createElementVNode("select",{id:"dictionary-filter",class:"w-full md:w-[140px] h-[38px] rounded-lg border border-stone-300 bg-white px-3 text-sm text-stone-800 focus:border-blue-500 focus:ring-blue-500 selection:border-blue-500 selection:text-white active:border-blue-500 active:text-white",value:o.filter,onChange:l},[...i[5]||(i[5]=[e.createElementVNode("option",{value:""},"Всі",-1),e.createElementVNode("option",{value:"cls"},"Довідники",-1),e.createElementVNode("option",{value:"select"},"Вибірки з БД",-1)])],40,t2)]),e.createElementVNode("div",n2,[e.createElementVNode("div",o2,[e.createElementVNode("div",r2,[e.createVNode(e.unref(zo),{width:14,height:14,"stroke-width":2,class:"stroke-gray-500 transition-all"})]),e.createElementVNode("input",{type:"text",value:t.modelValue,placeholder:"Пошук за назвою довідника",class:"pl-9 pr-8 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-300 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg",onInput:i[0]||(i[0]=f=>a.$emit("update:modelValue",f.target.value))},null,40,l2),t.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:"absolute top-1/2 -translate-y-1/2 right-3 cursor-pointer text-gray-400 hover:text-gray-600",onClick:i[1]||(i[1]=f=>a.$emit("update:modelValue",""))},[e.createVNode(e.unref(Nt),{width:14,height:14,"stroke-width":2})])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{onClick:i[2]||(i[2]=f=>s.value=!0),class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(wn),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),i[7]||(i[7]=e.createTextVNode(" Додати ",-1))])])]))}}),s2={class:"bg-white rounded-lg shadow-sm border border-gray-200 overflow-x-auto"},i2={key:0,class:"flex items-center justify-center py-12"},c2={key:1,class:"bg-red-50 border border-red-200 text-red-700 rounded-lg p-4 text-sm m-4"},d2={key:2,class:"text-center py-12 text-gray-500"},u2={key:3,class:"w-full min-w-[640px] divide-y divide-gray-200"},p2={class:"bg-gray-50 border-b border-gray-200"},m2={class:"divide-y divide-gray-200"},f2={class:"px-4 py-3 w-1/12"},g2={class:"px-4 py-3 text-sm font-medium text-gray-900 w-2/12"},y2={class:"px-4 py-3 text-sm text-gray-600 font-mono"},h2=e.defineComponent({__name:"DetailsTable",props:{classifierName:{},search:{}},setup(t,{expose:n}){const o=t,r=[{key:"color",label:"Колір",width:"w-2/12",align:"text-left"},{key:"text",label:"Назва",width:"w-6/12",align:"text-left"},{key:"id",label:"Код",width:"w-4/12",align:"text-left"}],l=e.ref([]),s=e.ref(!0),a=e.ref(null),i=e.computed(()=>{var u;if(!((u=o.search)!=null&&u.trim()))return l.value;const x=o.search.toLowerCase().trim();return l.value.filter(h=>{var c,d;return((c=h.text)==null?void 0:c.toLowerCase().includes(x))||((d=h.id)==null?void 0:d.toLowerCase().includes(x))})}),f=async x=>{try{s.value=!0,a.value=null;const u=await fetch(`/api/suggest/${encodeURIComponent(x)}`);if(!u.ok)throw new Error(`HTTP error: ${u.status}`);const h=await u.json();l.value=h.data}catch(u){a.value=u instanceof Error?u.message:"Failed to load items",console.error("Error fetching suggest items:",u)}finally{s.value=!1}};return e.onMounted(()=>{o.classifierName&&f(o.classifierName)}),e.watch(()=>o.classifierName,x=>{x&&f(x)}),n({refetch:()=>{f(o.classifierName)}}),(x,u)=>(e.openBlock(),e.createElementBlock("div",s2,[s.value?(e.openBlock(),e.createElementBlock("div",i2,[e.createVNode(e.unref(To),{width:32,height:32,"stroke-width":2,class:"text-sky-600 animate-spin"})])):a.value?(e.openBlock(),e.createElementBlock("div",c2,e.toDisplayString(a.value),1)):l.value.length===0?(e.openBlock(),e.createElementBlock("div",d2," Записи відсутні ")):(e.openBlock(),e.createElementBlock("table",u2,[e.createElementVNode("thead",p2,[e.createElementVNode("tr",null,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,h=>e.createElementVNode("th",{key:h.key,class:e.normalizeClass(["px-4 py-3 text-xs font-semibold text-gray-900",[h.width,h.align]])},e.toDisplayString(h.label),3)),64))])]),e.createElementVNode("tbody",m2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,h=>(e.openBlock(),e.createElementBlock("tr",{key:h.id,class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",f2,[e.createElementVNode("div",{class:"w-6 h-6 rounded border border-gray-300",style:e.normalizeStyle({backgroundColor:h.color})},null,4)]),e.createElementVNode("td",g2,e.toDisplayString(h.text),1),e.createElementVNode("td",y2,e.toDisplayString(h.id),1)]))),128))])]))]))}}),x2={class:"space-y-6 flex-1 overflow-y-auto p-0"},b2={class:"flex items-center gap-2 text-sm text-gray-600 mb-4"},k2={class:"text-gray-900"},w2={class:"flex items-start justify-between mb-6"},_2={class:"flex-1 mr-4"},E2={class:"text-2xl font-bold text-gray-900"},N2={key:0,class:"flex items-center gap-2 group mt-1"},C2={class:"text-sm text-gray-500"},V2={key:1,class:"flex items-center gap-2 mt-1"},B2=["disabled"],$2=["disabled"],v2={class:"flex items-center gap-3"},S2={class:"bg-white rounded-lg shadow-sm border border-gray-200 p-4 mb-4"},L2={class:"relative max-w-md"},A2={class:"vs-form-text relative w-full border-transparent text-sm focus:bg-white focus:border-blue-500 focus:ring-blue-500 rounded-sm"},M2={class:"absolute bottom-2/4 translate-y-2/4 cursor-pointer left-3"},T2=e.defineComponent({__name:"DictionaryDetails",setup(t){const n=Fe.useRouter(),o=Fe.useRoute(),r=e.computed(()=>o.params.name),l=e.ref(!1),s=e.ref(null),a=e.ref(null),i=e.ref(""),f=e.ref(""),m=e.ref(""),x=e.ref(!1),u=e.ref(!1),h=e.ref(null),c=async()=>{var N;try{const V=await fetch(`/api/user-cls?name=${encodeURIComponent(r.value)}`);if(!V.ok)return;const E=(N=(await V.json()).data)==null?void 0:N[0];E&&(f.value=E.description||"")}catch(V){console.error("Error fetching classifier details:",V)}},d=()=>{m.value=f.value,x.value=!0,e.nextTick(()=>{var N;(N=h.value)==null||N.focus()})},y=()=>{x.value=!1,m.value=""},p=async()=>{try{u.value=!0;const k=(await(await fetch(`/api/suggest/${encodeURIComponent(r.value)}`)).json()).data||[],E={name:r.value,description:m.value.trim()||null,data:k},_=await fetch(`/api/user-cls/${encodeURIComponent(r.value)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(E)});if(!_.ok)throw new Error(`HTTP error: ${_.status}`);f.value=m.value,x.value=!1}catch(N){console.error("Error saving description:",N)}finally{u.value=!1}};e.onMounted(()=>{c()}),e.watch(r,()=>{c()});const g=()=>{s.value=null,l.value=!0},b=N=>{s.value=N,l.value=!0};return(N,V)=>(e.openBlock(),e.createElementBlock("div",x2,[e.createElementVNode("div",null,[e.createElementVNode("div",b2,[e.createElementVNode("button",{onClick:V[0]||(V[0]=k=>e.unref(n).back()),class:"text-blue-600 hover:text-blue-500 transition-colors"}," Довідники "),V[4]||(V[4]=e.createElementVNode("span",{class:"text-gray-400"},"/",-1)),e.createElementVNode("span",k2,e.toDisplayString(r.value),1)]),e.createElementVNode("div",w2,[e.createElementVNode("div",_2,[e.createElementVNode("h1",E2,e.toDisplayString(r.value),1),x.value?(e.openBlock(),e.createElementBlock("div",V2,[e.withDirectives(e.createElementVNode("input",{ref_key:"editInputRef",ref:h,"onUpdate:modelValue":V[1]||(V[1]=k=>m.value=k),type:"text",class:"text-sm text-gray-600 border-b-2 border-sky-500 focus:outline-none bg-transparent w-full py-0.5",onKeydown:[e.withKeys(p,["enter"]),e.withKeys(y,["esc"])],placeholder:"Введіть опис"},null,544),[[e.vModelText,m.value]]),e.createElementVNode("button",{onClick:p,disabled:u.value,class:"p-1.5 text-green-600 hover:bg-green-50 rounded transition-colors disabled:opacity-50"},[e.createVNode(e.unref(jl),{width:18,height:18,"stroke-width":2})],8,B2),e.createElementVNode("button",{onClick:y,disabled:u.value,class:"p-1.5 text-gray-400 hover:text-red-500 hover:bg-red-50 rounded transition-colors"},[e.createVNode(e.unref(Nt),{width:18,height:18,"stroke-width":2})],8,$2)])):(e.openBlock(),e.createElementBlock("div",N2,[e.createElementVNode("p",C2,e.toDisplayString(f.value||"Опис відсутній"),1),e.createElementVNode("button",{onClick:d,class:"p-1 text-gray-400 hover:text-sky-600 transition-all rounded hover:bg-sky-50",title:"Редагувати опис"},[e.createVNode(e.unref(Io),{width:16,height:16,"stroke-width":2})])]))]),e.createElementVNode("div",v2,[e.createElementVNode("button",{onClick:g,class:"w-full md:w-auto flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-200 transform hover:scale-105 text-sm font-medium"},[e.createVNode(e.unref(wn),{width:16,height:16,"stroke-width":2,class:"shrink-0"}),V[5]||(V[5]=e.createTextVNode(" Додати запис ",-1))]),e.createElementVNode("button",{onClick:V[2]||(V[2]=k=>e.unref(n).back()),class:"px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-50 transition-colors text-gray-700 text-sm font-medium"}," Назад ")])])]),e.createElementVNode("div",S2,[e.createElementVNode("div",L2,[e.createElementVNode("div",A2,[e.createElementVNode("div",M2,[e.createVNode(e.unref(zo),{width:18,height:18,"stroke-width":2,class:"stroke-gray-400 transition-all"})]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":V[3]||(V[3]=k=>i.value=k),type:"text",placeholder:"Пошук за назвою або описом...",class:"pl-9 bg-white h-[38px] min-w-[100px] py-2 px-3 block w-full border border-solid placeholder:text-nowrap border-stone-200 text-sm text-stone-800 placeholder:text-stone-400 focus:border-2 focus:z-10 focus:border-blue-500 focus:ring-blue-500 focus:outline-blue-500 rounded-lg"},null,512),[[e.vModelText,i.value]])])])]),e.createVNode(h2,{ref_key:"detailsTableRef",ref:a,"classifier-name":r.value,search:i.value,onEdit:b},null,8,["classifier-name","search"])]))}}),F2={class:"flex-col justify-between h-full"},D2={class:"classifiers-component space-y-6 p-8 pt-2 max-w-[90%] mx-auto h-[calc(100vh-95px)]"},z2=e.defineComponent({__name:"index",setup(t){const n=Fe.useRoute(),o=e.ref(""),r=e.ref(""),l=e.ref(null),s=e.ref({filtered:0,total:0}),a=f=>{s.value=f},i=()=>{var f;(f=l.value)==null||f.refetch()};return(f,m)=>(e.openBlock(),e.createElementBlock("div",F2,[e.createElementVNode("div",D2,[e.unref(n).params.name?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(a2,{key:0,modelValue:o.value,"onUpdate:modelValue":m[0]||(m[0]=x=>o.value=x),filter:r.value,"onUpdate:filter":m[1]||(m[1]=x=>r.value=x),counts:s.value,onRefresh:i},null,8,["modelValue","filter","counts"])),e.unref(n).params.name?(e.openBlock(),e.createBlock(T2,{key:2})):(e.openBlock(),e.createBlock(Zk,{key:1,ref_key:"gridRef",ref:l,search:o.value,type:r.value,"onUpdate:counts":a},null,8,["search","type"]))]),m[2]||(m[2]=e.createElementVNode("div",{id:"pagination",class:"bg-gray-100"},null,-1))]))}}),I2={class:"border border-gray-300 rounded-lg shadow-sm overflow-auto max-h-[calc(100vh-10rem)]"},j2={class:"w-full bg-white relative"},P2={class:"bg-gradient-to-b from-gray-50 to-gray-100 border-b border-gray-300 sticky top-0 z-10"},R2={key:0,class:"bg-white divide-y divide-gray-200"},O2={class:"bg-gradient-to-r from-gray-50 to-gray-100 border-t-2 border-gray-300"},U2=["onClick"],q2={class:"flex items-center gap-2 text-sm font-semibold text-gray-900 hover:text-blue-600 transition-colors"},H2={key:1,class:"px-6 py-3.5"},W2={class:"text-sm font-semibold text-gray-900"},Y2={class:"text-xs text-gray-400 mt-0.5"},Z2={key:0,class:"inline-flex items-center cursor-pointer"},G2={class:"relative"},K2=["checked","onChange"],X2=["checked","onChange"],Q2={class:"px-6 py-3"},J2={class:"ml-6"},ew={class:"text-sm text-black font-medium"},tw={class:"text-xs text-gray-400 mt-0.5"},nw=["checked","onChange"],ow={key:1},rw=e.defineComponent({__name:"permissions",props:{data:{},modelValue:{},actions:{}},emits:["update:modelValue"],setup(t,{expose:n,emit:o}){const r=t,l=o,s=e.computed(()=>r.actions&&r.actions.length?r.actions:["view"]),a=e.ref({}),i=e.ref({}),f=e.computed(()=>{var N;return((N=r.data)==null?void 0:N.routers)||[]});e.watch(()=>r.modelValue,N=>{const V={};(N||[]).forEach(k=>{V[k.id]=new Set(k.actions||[])}),i.value=V},{immediate:!0});function m(){const N=Object.entries(i.value).map(([V,k])=>({id:V,actions:Array.from(k)}));l("update:modelValue",N)}function x(N){return N?N.id||N.path||N.table||N.ua||JSON.stringify(N):""}function u(N){return N?N.id||N.ua||N.name:""}function h(N){return{view:"Перегляд",edit:"Редагування",add:"Додавання",del:"Видалення"}[N]||N}function c(N,V){var E;const k=x(N);return((E=i.value[k])==null?void 0:E.has(V))||!1}function d(N){const V=u(N);return a.value[V]===!0}function y(N){const V=u(N);a.value[V]=!d(N)}function p(N,V){var k;return(k=N.menu)!=null&&k.length?N.menu.every(E=>c(E,V)):c(N,V)}function g(N,V,k){var E;if((E=N.menu)!=null&&E.length){const _={...i.value};N.menu.forEach(B=>{const M=x(B),z=new Set(_[M]||[]);k?z.add(V):z.delete(V),_[M]=z}),i.value=_,m()}}function b(N,V,k){const E=x(N),_=new Set(i.value[E]||[]);k?_.add(V):_.delete(V),i.value={...i.value,[E]:_},m()}return n({getSelected:()=>r.modelValue}),(N,V)=>{var k;return e.openBlock(),e.createElementBlock("div",I2,[e.createElementVNode("table",j2,[e.createElementVNode("thead",P2,[e.createElementVNode("tr",null,[V[0]||(V[0]=e.createElementVNode("th",{class:"px-6 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-32 text-left"},"Групи",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,E=>(e.openBlock(),e.createElementBlock("th",{key:E,class:"px-4 py-4 text-xs font-semibold text-gray-800 uppercase tracking-wider w-20 text-center"},e.toDisplayString(h(E)),1))),128))])]),(k=f.value)!=null&&k.length?(e.openBlock(),e.createElementBlock("tbody",R2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,E=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:x(E)},[e.createElementVNode("tr",O2,[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("td",{key:0,class:"px-6 py-3.5 cursor-pointer",onClick:_=>y(E)},[e.createElementVNode("button",q2,[e.createVNode(e.unref(Ao),{class:e.normalizeClass(["text-gray-600 w-4 h-4 transition-transform duration-200",{"rotate-180":d(E)}])},null,8,["class"]),e.createTextVNode(" "+e.toDisplayString(E.ua),1)])],8,U2)):(e.openBlock(),e.createElementBlock("td",H2,[e.createElementVNode("div",W2,e.toDisplayString(E.ua),1),e.createElementVNode("div",Y2,e.toDisplayString(E.path||E.table),1)])),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,_=>(e.openBlock(),e.createElementBlock("td",{key:_,class:"px-4 py-3.5 text-center"},[E!=null&&E.menu?(e.openBlock(),e.createElementBlock("label",Z2,[e.createElementVNode("div",G2,[e.createElementVNode("input",{type:"checkbox",class:"sr-only peer",checked:p(E,_),onChange:B=>g(E,_,B.target.checked)},null,40,K2),V[1]||(V[1]=e.createElementVNode("div",{class:"w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600"},null,-1))])])):(e.openBlock(),e.createElementBlock("input",{key:1,type:"checkbox",checked:c(E,_),onChange:B=>b(E,_,B.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,X2))]))),128))]),E!=null&&E.menu&&d(E)?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(E.menu,_=>(e.openBlock(),e.createElementBlock("tr",{key:x(_),class:"hover:bg-gray-50 transition-colors"},[e.createElementVNode("td",Q2,[e.createElementVNode("div",J2,[e.createElementVNode("div",ew,e.toDisplayString(_.ua),1),e.createElementVNode("div",tw,e.toDisplayString(_.path||_.table),1)])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,B=>(e.openBlock(),e.createElementBlock("td",{key:B,class:"px-5 py-3 text-center"},[e.createElementVNode("input",{type:"checkbox",checked:c(_,B),onChange:M=>b(_,B,M.target.checked),class:"w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500 cursor-pointer"},null,40,nw)]))),128))]))),128)):e.createCommentVNode("",!0)],64))),128))])):(e.openBlock(),e.createElementBlock("tfoot",ow,[...V[2]||(V[2]=[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:"100%",class:"text-center py-4"}," Немає доступних шарів ")],-1)])]))])])}}}),lw={class:"flex flex-col gap-4 mt-2 mx-2"},aw={class:"flex items-center gap-3"},sw={class:"flex-1 relative"},iw=e.defineComponent({__name:"VsPermissions",setup(t){const n=Fe.useRoute(),o=e.ref(""),r=e.ref(null),l=e.ref({categories:[],layers:[]}),s=e.ref([]),a=e.ref(["edit"]),i=e.computed(()=>m(l.value)),f=e.computed(()=>{const h=o.value.toLowerCase().trim();return h?i.value.map(c=>{const d=String(c.ua||"").toLowerCase().includes(h),y=(c.menu||[]).filter(p=>String(p.ua||"").toLowerCase().includes(h));return d?{...c,menu:c.menu}:y.length?{...c,menu:y}:null}).filter(Boolean):i.value}),m=h=>{const c=h.categories||[],d=h.layers||[],y=c.map(g=>{const b=d.filter(N=>N.category_id===g.category_id).map(N=>({id:String(N.layer_id),ua:N.name,path:String(N.layer_id)}));return b.length?{ua:g.name,menu:b,id:String(g.category_id)}:null}).filter(Boolean),p=d.filter(g=>!g.category_id).map(g=>({ua:g.name,id:String(g.layer_id),path:String(g.layer_id)}));return p.length&&y.push({ua:"Без категорії",menu:p,id:"noCategory"}),y},x=async()=>{const[h,c]=await Promise.all([fetch("/api/catalog").then(d=>d.json()),fetch(`/api/catalog-permissions/${n.params.id}`).then(d=>d.json())]);l.value=h,s.value=((c==null?void 0:c.layer_list)||[]).filter(d=>d.service_id).map(d=>({id:String(d.service_id),actions:d.actions||[]}))},u=async()=>{var d,y;const c=(((y=(d=r.value)==null?void 0:d.getSelected)==null?void 0:y.call(d))||s.value).filter(p=>{var g;return(g=p.actions)==null?void 0:g.length}).map(p=>({service_id:p.id,actions:p.actions}));await fetch(`/api/catalog-permissions/${n.params.id}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)}).then(p=>p.json()).then(p=>{he.notify({title:"Успіх",message:"Доступ успішно збережено",type:"success"})}).catch(p=>{he.notify({title:"Помилка",message:p.message,type:"error"})})};return e.onMounted(x),(h,c)=>(e.openBlock(),e.createElementBlock("div",lw,[e.createElementVNode("div",aw,[e.createElementVNode("div",sw,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":c[0]||(c[0]=d=>o.value=d),type:"text",placeholder:"Пошук...",class:"w-full pl-3 pr-4 py-2 text-sm border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"},null,512),[[e.vModelText,o.value]])]),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border bg-background hover:text-accent-foreground h-10 px-4 py-2 border-gray-300 text-gray-700 hover:bg-gray-50",onClick:c[1]||(c[1]=d=>h.$router.back())}," Повернутися "),e.createElementVNode("button",{class:"inline-flex items-center justify-center gap-2 whitespace-nowrap text-white rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-primary-foreground h-10 px-4 py-2 bg-blue-600 hover:bg-blue-700",onClick:u}," Зберегти ")]),e.createVNode(rw,{ref_key:"accessRef",ref:r,data:{routers:f.value},modelValue:s.value,"onUpdate:modelValue":c[2]||(c[2]=d=>s.value=d),actions:a.value},null,8,["data","modelValue","actions"])]))}});function cw(t){t.component("MapCustom",Dn)}je.CartoCSS=qy,je.Classifiers=z2,je.MapSettings=$k,je.MapWidget=Dn,je.Permissions=iw,je.Raster=G0,je.Register=nd,je.Service=jg,je.default=Dn,je.install=cw,je.template1=Oo,je.template2=Uo,je.template3=qo,je.template4=Ho,je.template5=Wo,Object.defineProperties(je,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
|