@opengis/gis 0.2.178 → 0.2.179

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/{CardIcon-CMRD1LLh.js → CardIcon-DXkwtXRm.js} +1 -1
  2. package/dist/{EntityTablePage-XNNCltAN.js → EntityTablePage-VVLGYH2c.js} +1 -1
  3. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BqUjKTDY.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-Dm5Fyjh9.js} +1 -1
  4. package/dist/{MapSettings-P3h-vHn3.js → MapSettings-CqgwRydf.js} +1 -1
  5. package/dist/MapToolbarRight.vue_vue_type_script_setup_true_lang-k3Zo1Hqm.js +1230 -0
  6. package/dist/{RastersTablePage-DnhGZLiH.js → RastersTablePage-Br_0QBMH.js} +1 -1
  7. package/dist/cartocss-C9OJk3VI.js +1460 -0
  8. package/dist/{import-utils-BCATsbB5.js → import-utils-DV6Yls6G.js} +1 -1
  9. package/dist/{index-cUagVqgA.js → index-hX98i4hU.js} +11 -11
  10. package/dist/index.css +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.umd.cjs +29 -29
  13. package/dist/{raster-CP0tUp3j.js → raster-NZ1TCJvt.js} +225 -219
  14. package/dist/{register-Cr-uQcby.js → register-BcPTINMn.js} +3 -3
  15. package/dist/{service-DwJaKrOd.js → service-NBe9fmay.js} +603 -597
  16. package/dist/{vs-datatable-B9WoVk-b.js → vs-datatable-CyjZaDoO.js} +3 -2
  17. package/module/gis/card/gis.metadata.table/index.yml +22 -22
  18. package/module/gis/card/gis.rasters.table/index.yml +11 -11
  19. package/module/gis/card/gis.registers.table/index.yml +23 -23
  20. package/module/gis/card/gis.services.table/index.yml +25 -25
  21. package/module/gis/cls/bool.yes_no.json +12 -12
  22. package/module/gis/cls/encoding.json +14 -14
  23. package/module/gis/cls/geom_type.json +14 -14
  24. package/module/gis/cls/gis.column_type.json +34 -34
  25. package/module/gis/cls/gis.column_view_type.json +26 -26
  26. package/module/gis/cls/gis.filter_type.json +22 -22
  27. package/module/gis/cls/language.json +10 -10
  28. package/module/gis/cls/meta.service_type.json +42 -42
  29. package/module/gis/cls/ogc.service.json +21 -21
  30. package/module/gis/cls/source_type.json +10 -10
  31. package/module/gis/cls/standarts.json +6 -6
  32. package/module/gis/cls/topic_category.json +106 -106
  33. package/module/gis/cls/update_frequency.json +29 -29
  34. package/module/gis/cls/view.json +21 -21
  35. package/module/gis/form/feedback.answer.form.json +10 -10
  36. package/module/gis/form/gis.cartocss.form.json +64 -64
  37. package/module/gis/form/gis.group_list.form.json +17 -17
  38. package/module/gis/form/gis.maps.form.json +61 -61
  39. package/module/gis/form/gis.metadata.form.json +240 -240
  40. package/module/gis/form/gis.metadata_new.form.json +195 -195
  41. package/module/gis/form/gis.ogc_service.form.json +51 -51
  42. package/module/gis/form/gis.rasters.form.json +76 -76
  43. package/module/gis/form/gis.registers_column.form.json +84 -84
  44. package/module/gis/form/gis.registers_filter.form.json +65 -65
  45. package/module/gis/form/gis.services.form.json +111 -111
  46. package/module/gis/form/gis.services_attributes.form.json +75 -75
  47. package/module/gis/form/gis.services_filter.form.json +65 -65
  48. package/module/gis/menu.json +43 -43
  49. package/module/gis/select/admin.cls.name.sql +9 -9
  50. package/module/gis/select/layer_list.sql +7 -7
  51. package/module/gis/select/layer_list_text.sql +7 -7
  52. package/module/gis/select/pg.column_name.geometry.sql +12 -12
  53. package/module/gis/select/pg.columns.parent.sql +6 -6
  54. package/module/gis/select/pg.table_name.sql +17 -17
  55. package/module/gis/select/service_id.sql +1 -1
  56. package/module/gis/select/srid.sql +7 -7
  57. package/module/gis/table/gis.cartocss.table.json +74 -74
  58. package/module/gis/table/gis.group_list.table.json +58 -58
  59. package/module/gis/table/gis.maps.table.json +110 -110
  60. package/module/gis/table/gis.metadata.table.json +70 -70
  61. package/module/gis/table/gis.metadata_new.table.json +137 -137
  62. package/module/gis/table/gis.ogc_service.table.json +100 -100
  63. package/module/gis/table/gis.rasters.table.json +113 -113
  64. package/module/gis/table/gis.registers.table.json +143 -143
  65. package/module/gis/table/gis.services.table.json +120 -120
  66. package/module/gis/table/site.gis.registers.table.json +88 -88
  67. package/module/gis/table/site.gis.services.table.json +106 -106
  68. package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
  69. package/module/gis/tokens.yml +5 -5
  70. package/module/permissions/form/permissions.users.form.json +151 -151
  71. package/module/permissions/table/gis.permissions.table.json +97 -97
  72. package/package.json +1 -1
  73. package/server/routes/registers/functions/gis.suggest.js +1 -1
  74. package/dist/HeaderActions.vue_vue_type_script_setup_true_lang-BXQ3hKwa.js +0 -1099
  75. package/dist/cartocss-BkrOeQg4.js +0 -1586
@@ -1,16 +1,16 @@
1
- import { defineComponent as te, resolveDirective as We, openBlock as u, createElementBlock as m, createElementVNode as n, Fragment as W, renderList as X, toDisplayString as d, withDirectives as we, createTextVNode as Xe, normalizeClass as ae, ref as $, watch as S, computed as h, vModelText as Ke, onMounted as Ye, onBeforeUnmount as Ze, createCommentVNode as q, createVNode as B, withCtx as He, createBlock as F, resolveDynamicComponent as Je } from "vue";
1
+ import { defineComponent as te, resolveDirective as Xe, openBlock as u, createElementBlock as m, createElementVNode as n, Fragment as W, renderList as X, toDisplayString as d, withDirectives as $e, createTextVNode as Ke, normalizeClass as ae, ref as $, watch as I, computed as h, vModelText as Ye, onMounted as Ze, onBeforeUnmount as He, createCommentVNode as q, createVNode as k, withCtx as be, createBlock as F, resolveDynamicComponent as Je } from "vue";
2
2
  import { useRouter as et, useRoute as tt } from "vue-router";
3
- import { TooltipDirective as st, notify as M } from "@opengis/core";
4
- import { _ as nt, u as lt, f as rt, M as ot, i as it, j as be, F as at } from "./index-cUagVqgA.js";
5
- import { _ as ut, a as ct, b as dt, c as ft } from "./HeaderActions.vue_vue_type_script_setup_true_lang-BXQ3hKwa.js";
6
- import { _ as he } from "./ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BqUjKTDY.js";
7
- const mt = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, pt = { class: "space-y-3" }, gt = { class: "bg-white p-3 rounded-xl border border-gray-200 shadow-sm" }, yt = { class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2" }, vt = { class: "text-xs text-gray-500 mb-1" }, xt = {
3
+ import { TooltipDirective as st, notify as S } from "@opengis/core";
4
+ import { _ as nt, u as lt, f as rt, M as ot, i as it, j as he, F as at } from "./index-hX98i4hU.js";
5
+ import { _ as ut, a as ct, b as dt, c as ft, d as mt, e as pt, f as gt, g as yt } from "./MapToolbarRight.vue_vue_type_script_setup_true_lang-k3Zo1Hqm.js";
6
+ import { _ as _e } from "./ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-Dm5Fyjh9.js";
7
+ const xt = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, vt = { class: "space-y-3" }, bt = { class: "bg-white p-3 rounded-xl border border-gray-200 shadow-sm" }, ht = { class: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2" }, _t = { class: "text-xs text-gray-500 mb-1" }, wt = {
8
8
  key: 0,
9
9
  class: "text-base text-md font-semibold text-gray-900"
10
- }, bt = {
10
+ }, $t = {
11
11
  key: 1,
12
12
  class: "text-base text-md font-semibold text-gray-900"
13
- }, ht = { class: "bg-white p-3 rounded-xl border border-gray-200 shadow-sm" }, _t = { class: "space-y-2" }, wt = { class: "bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200" }, $t = { class: "text-sm font-semibold text-gray-900" }, kt = { class: "text-xs text-gray-600 mt-1" }, Ct = { class: "grid grid-cols-2 gap-3" }, Et = { class: "text-xs text-gray-500 mb-1" }, Lt = { class: "text-sm font-semibold text-gray-900" }, Rt = { class: "bg-gray-50 p-4 rounded-lg" }, Mt = { class: "grid grid-cols-2 gap-4" }, St = { class: "text-xs text-gray-500 mb-1" }, It = { class: "text-sm font-semibold text-gray-900" }, jt = /* @__PURE__ */ te({
13
+ }, kt = { class: "bg-white p-3 rounded-xl border border-gray-200 shadow-sm" }, Ct = { class: "space-y-2" }, Et = { class: "bg-gradient-to-br from-blue-50 to-blue-100/30 p-4 rounded-lg border border-blue-200" }, Lt = { class: "text-sm font-semibold text-gray-900" }, Rt = { class: "text-xs text-gray-600 mt-1" }, Mt = { class: "grid grid-cols-2 gap-3" }, St = { class: "text-xs text-gray-500 mb-1" }, It = { class: "text-sm font-semibold text-gray-900" }, jt = { class: "bg-gray-50 p-4 rounded-lg" }, zt = { class: "grid grid-cols-2 gap-4" }, Bt = { class: "text-xs text-gray-500 mb-1" }, Pt = { class: "text-sm font-semibold text-gray-900" }, Nt = /* @__PURE__ */ te({
14
14
  directives: {
15
15
  tooltip: st
16
16
  },
@@ -19,59 +19,59 @@ const mt = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, pt = { class: "space-
19
19
  details: {}
20
20
  },
21
21
  setup(_) {
22
- return (y, v) => {
23
- const o = We("tooltip");
24
- return u(), m("div", mt, [
25
- n("div", pt, [
26
- n("div", gt, [
27
- v[0] || (v[0] = n("div", { class: "mb-4" }, [
22
+ return (y, x) => {
23
+ const o = Xe("tooltip");
24
+ return u(), m("div", xt, [
25
+ n("div", vt, [
26
+ n("div", bt, [
27
+ x[0] || (x[0] = n("div", { class: "mb-4" }, [
28
28
  n("h4", { class: "text-sm font-semibold text-gray-900 uppercase tracking-wide" }, "Основні параметри")
29
29
  ], -1)),
30
- n("div", yt, [
30
+ n("div", ht, [
31
31
  (u(!0), m(W, null, X(_.details.baseParams, (f) => (u(), m("div", {
32
32
  key: f.label,
33
33
  class: "bg-gray-50 p-2 rounded-lg"
34
34
  }, [
35
- n("p", vt, d(f.label), 1),
36
- f.tooltip ? we((u(), m("p", xt, [
37
- Xe(d(f.value), 1)
35
+ n("p", _t, d(f.label), 1),
36
+ f.tooltip ? $e((u(), m("p", wt, [
37
+ Ke(d(f.value), 1)
38
38
  ])), [
39
39
  [o, f.tooltip]
40
- ]) : (u(), m("p", bt, d(f.value), 1))
40
+ ]) : (u(), m("p", $t, d(f.value), 1))
41
41
  ]))), 128))
42
42
  ])
43
43
  ]),
44
- n("div", ht, [
45
- v[3] || (v[3] = n("div", { class: "mb-2" }, [
44
+ n("div", kt, [
45
+ x[3] || (x[3] = n("div", { class: "mb-2" }, [
46
46
  n("h4", { class: "text-sm font-semibold text-gray-900 uppercase tracking-wide" }, "Просторова інформація")
47
47
  ], -1)),
48
- n("div", _t, [
48
+ n("div", Ct, [
49
49
  n("div", null, [
50
- v[1] || (v[1] = n("p", { class: "text-xs text-gray-500 mb-2" }, "Система координат", -1)),
51
- n("div", wt, [
52
- n("p", $t, d(_.details.spatial.crs.code), 1),
53
- n("p", kt, d(_.details.spatial.crs.description), 1)
50
+ x[1] || (x[1] = n("p", { class: "text-xs text-gray-500 mb-2" }, "Система координат", -1)),
51
+ n("div", Et, [
52
+ n("p", Lt, d(_.details.spatial.crs.code), 1),
53
+ n("p", Rt, d(_.details.spatial.crs.description), 1)
54
54
  ])
55
55
  ]),
56
56
  n("div", null, [
57
- v[2] || (v[2] = n("p", { class: "text-xs text-gray-500 mb-2" }, "Межі покриття", -1)),
58
- n("div", Ct, [
57
+ x[2] || (x[2] = n("p", { class: "text-xs text-gray-500 mb-2" }, "Межі покриття", -1)),
58
+ n("div", Mt, [
59
59
  (u(!0), m(W, null, X(_.details.spatial.bounds, (f) => (u(), m("div", {
60
60
  key: f.label,
61
61
  class: "bg-gray-50 p-2 rounded-lg border border-gray-200"
62
62
  }, [
63
- n("p", Et, d(f.label), 1),
64
- n("p", Lt, d(f.value), 1)
63
+ n("p", St, d(f.label), 1),
64
+ n("p", It, d(f.value), 1)
65
65
  ]))), 128))
66
66
  ])
67
67
  ]),
68
- n("div", Rt, [
69
- n("div", Mt, [
68
+ n("div", jt, [
69
+ n("div", zt, [
70
70
  (u(!0), m(W, null, X(_.details.spatial.resolution, (f) => (u(), m("div", {
71
71
  key: f.label
72
72
  }, [
73
- n("p", St, d(f.label), 1),
74
- n("p", It, d(f.value), 1)
73
+ n("p", Bt, d(f.label), 1),
74
+ n("p", Pt, d(f.value), 1)
75
75
  ]))), 128))
76
76
  ])
77
77
  ])
@@ -81,20 +81,20 @@ const mt = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, pt = { class: "space-
81
81
  ]);
82
82
  };
83
83
  }
84
- }), zt = { class: "flex-1 overflow-y-auto space-y-3 pr-1" }, Bt = { class: "font-medium text-sm text-gray-800" }, Pt = { class: "text-xs text-gray-500" }, Nt = /* @__PURE__ */ te({
84
+ }), Dt = { class: "flex-1 overflow-y-auto space-y-3 pr-1" }, Ut = { class: "font-medium text-sm text-gray-800" }, Tt = { class: "text-xs text-gray-500" }, qt = /* @__PURE__ */ te({
85
85
  __name: "raster-files-tab",
86
86
  props: {
87
87
  files: {}
88
88
  },
89
89
  setup(_) {
90
- return (y, v) => (u(), m("div", zt, [
90
+ return (y, x) => (u(), m("div", Dt, [
91
91
  (u(!0), m(W, null, X(_.files, (o) => (u(), m("div", {
92
92
  key: o.name,
93
93
  class: "border border-gray-100 rounded-xl p-4 shadow-sm bg-white flex items-start justify-between"
94
94
  }, [
95
95
  n("div", null, [
96
- n("p", Bt, d(o.name), 1),
97
- n("p", Pt, d(o.resolution) + " • " + d(o.size) + "MB", 1)
96
+ n("p", Ut, d(o.name), 1),
97
+ n("p", Tt, d(o.resolution) + " • " + d(o.size) + "MB", 1)
98
98
  ]),
99
99
  n("span", {
100
100
  class: ae(["text-[11px] font-semibold px-2 py-0.5 rounded-full", o.statusClass])
@@ -102,7 +102,7 @@ const mt = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, pt = { class: "space-
102
102
  ]))), 128))
103
103
  ]));
104
104
  }
105
- }), Dt = {}, Ut = {
105
+ }), Ft = {}, Vt = {
106
106
  xmlns: "http://www.w3.org/2000/svg",
107
107
  width: "24",
108
108
  height: "24",
@@ -113,8 +113,8 @@ const mt = { class: "flex-1 overflow-y-auto p-4 sm:p-6" }, pt = { class: "space-
113
113
  "stroke-linecap": "round",
114
114
  "stroke-linejoin": "round"
115
115
  };
116
- function Tt(_, y) {
117
- return u(), m("svg", Ut, [...y[0] || (y[0] = [
116
+ function At(_, y) {
117
+ return u(), m("svg", Vt, [...y[0] || (y[0] = [
118
118
  n("circle", {
119
119
  cx: "12",
120
120
  cy: "12",
@@ -129,7 +129,7 @@ function Tt(_, y) {
129
129
  n("path", { d: "M11 12h1v4h1" }, null, -1)
130
130
  ])]);
131
131
  }
132
- const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2" }, Vt = { class: "rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur" }, At = { class: "flex items-center gap-2" }, Ot = { class: "rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur" }, Gt = { class: "inline-flex items-center gap-2 text-[11px] text-slate-600" }, Qt = ["checked"], Wt = /* @__PURE__ */ te({
132
+ const Ot = /* @__PURE__ */ nt(Ft, [["render", At]]), Gt = { class: "absolute top-[5.5rem] left-4 z-30 flex flex-col items-start gap-2" }, Qt = { class: "rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur" }, Wt = { class: "flex items-center gap-2" }, Xt = { class: "rounded-2xl bg-white/90 px-3 py-2 text-xs font-medium text-slate-600 shadow-sm backdrop-blur" }, Kt = { class: "inline-flex items-center gap-2 text-[11px] text-slate-600" }, Yt = ["checked"], Zt = /* @__PURE__ */ te({
133
133
  __name: "RasterLayer",
134
134
  props: {
135
135
  tileUrl: {},
@@ -140,7 +140,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
140
140
  },
141
141
  emits: ["toggle-extent"],
142
142
  setup(_) {
143
- const y = _, v = y.layerId || "raster-preview-layer", o = `${v}-source`, f = y.extent && y.extent.length === 4 ? [...y.extent] : void 0, P = lt(v, {
143
+ const y = _, x = y.layerId || "raster-preview-layer", o = `${x}-source`, f = y.extent && y.extent.length === 4 ? [...y.extent] : void 0, P = lt(x, {
144
144
  sourceId: o,
145
145
  source: {
146
146
  type: "raster",
@@ -149,13 +149,13 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
149
149
  ...f ? { bounds: f } : {}
150
150
  },
151
151
  layer: {
152
- id: `${v}-raster`,
152
+ id: `${x}-raster`,
153
153
  type: "raster",
154
154
  paint: { "raster-opacity": 1 }
155
155
  },
156
156
  beforeId: y.beforeId ?? null
157
157
  }), { fitBounds: V } = rt(), N = $(1);
158
- S(
158
+ I(
159
159
  () => y.tileUrl,
160
160
  (p) => {
161
161
  if (!p) {
@@ -165,21 +165,21 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
165
165
  P.setVisible(!0), P.setTiles([p]);
166
166
  },
167
167
  { immediate: !0 }
168
- ), S(
168
+ ), I(
169
169
  () => N.value,
170
170
  (p) => {
171
171
  P.setOpacity(p);
172
172
  },
173
173
  { immediate: !0 }
174
174
  );
175
- let x = null, c = !1;
176
- S(
175
+ let v = null, c = !1;
176
+ I(
177
177
  () => y.extent,
178
178
  (p) => {
179
179
  if (!p || p.length !== 4) return;
180
180
  const b = p.join(",");
181
- if (b !== x) {
182
- if (x = b, !c) {
181
+ if (b !== v) {
182
+ if (v = b, !c) {
183
183
  c = !0;
184
184
  return;
185
185
  }
@@ -192,21 +192,21 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
192
192
  { immediate: !0 }
193
193
  );
194
194
  const A = h(() => `${Math.round(N.value * 100)}%`);
195
- return (p, b) => (u(), m("div", Ft, [
196
- n("div", Vt, [
197
- n("div", At, [
195
+ return (p, b) => (u(), m("div", Gt, [
196
+ n("div", Qt, [
197
+ n("div", Wt, [
198
198
  b[2] || (b[2] = n("span", null, "Прозорість:", -1)),
199
- we(n("input", {
199
+ $e(n("input", {
200
200
  type: "range",
201
201
  min: "0",
202
202
  max: "1",
203
203
  step: "0.01",
204
- "onUpdate:modelValue": b[0] || (b[0] = (I) => N.value = I),
204
+ "onUpdate:modelValue": b[0] || (b[0] = (j) => N.value = j),
205
205
  class: "h-1 w-28 cursor-pointer appearance-none rounded-full bg-slate-300 focus:outline-none",
206
206
  style: { "accent-color": "#3b82f6" }
207
207
  }, null, 512), [
208
208
  [
209
- Ke,
209
+ Ye,
210
210
  N.value,
211
211
  void 0,
212
212
  { number: !0 }
@@ -215,29 +215,29 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
215
215
  n("span", null, d(A.value), 1)
216
216
  ])
217
217
  ]),
218
- n("div", Ot, [
219
- n("label", Gt, [
218
+ n("div", Xt, [
219
+ n("label", Kt, [
220
220
  n("input", {
221
221
  type: "checkbox",
222
222
  class: "h-3.5 w-3.5 rounded border-slate-300 text-blue-600 focus:ring-blue-200",
223
223
  checked: _.showRasterExtent,
224
- onChange: b[1] || (b[1] = (I) => p.$emit("toggle-extent", I.target.checked))
225
- }, null, 40, Qt),
224
+ onChange: b[1] || (b[1] = (j) => p.$emit("toggle-extent", j.target.checked))
225
+ }, null, 40, Yt),
226
226
  b[3] || (b[3] = n("span", null, "Межі растру", -1))
227
227
  ])
228
228
  ])
229
229
  ]));
230
230
  }
231
- }), Xt = { class: "flex h-full bg-gradient-to-br from-slate-50 to-white" }, Kt = { class: "flex-1 relative overflow-hidden" }, Yt = { class: "absolute top-0 left-0 w-full z-20" }, Zt = { class: "px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm" }, Ht = { class: "flex items-start justify-between gap-4" }, Jt = { class: "flex-1 min-w-0" }, es = { class: "flex items-center text-sm text-gray-500 mb-3" }, ts = { class: "text-gray-900 font-medium truncate max-w-xs" }, ss = { class: "flex items-center justify-between gap-4" }, ns = { class: "flex-1 min-w-0" }, ls = { class: "flex items-center gap-3 mb-1" }, rs = { class: "text-base font-semibold text-gray-900 truncate" }, os = ["title"], is = { class: "flex items-center gap-4 min-w-0" }, as = { class: "flex-1 min-w-0" }, us = ["title"], cs = { class: "w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[105px]" }, ds = { class: "relative w-full h-full" }, fs = { class: "absolute top-4 left-4 z-20" }, ms = {
231
+ }), Ht = { class: "flex h-full bg-gradient-to-br from-slate-50 to-white" }, Jt = { class: "flex-1 relative overflow-hidden" }, es = { class: "absolute top-0 left-0 w-full z-20" }, ts = { class: "px-4 sm:px-6 py-4 border-b border-gray-200 bg-white shadow-sm" }, ss = { class: "flex items-start justify-between gap-4" }, ns = { class: "flex-1 min-w-0" }, ls = { class: "flex items-center text-sm text-gray-500 mb-3" }, rs = { class: "text-gray-900 font-medium truncate max-w-xs" }, os = { class: "flex items-center justify-between gap-4" }, is = { class: "flex-1 min-w-0" }, as = { class: "flex items-center gap-3 mb-1" }, us = { class: "text-base font-semibold text-gray-900 truncate" }, cs = ["title"], ds = { class: "flex items-center gap-4 min-w-0" }, fs = { class: "flex-1 min-w-0" }, ms = ["title"], ps = { class: "w-full h-full bg-gradient-to-br from-sky-50 via-white to-blue-50 flex items-center justify-center relative pt-[105px]" }, gs = { class: "relative w-full h-full" }, ys = { class: "absolute top-4 left-4 z-20" }, xs = {
232
232
  key: 1,
233
233
  class: "absolute bottom-4 left-1/2 z-30 -translate-x-1/2 rounded-2xl border border-sky-200 bg-white/95 px-4 py-2 text-xs font-medium text-slate-700 shadow-lg backdrop-blur"
234
- }, ps = { class: "absolute top-[6.5rem] right-2 space-y-1 z-20" }, gs = { class: "flex-1 flex flex-col h-full" }, ys = { class: "px-3 pt-3 pb-2 border-b border-gray-100" }, vs = { 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" }, xs = ["aria-selected", "onClick"], bs = { class: "leading-none" }, hs = { class: "flex flex-col flex-1 overflow-y-hidden p-3" }, _s = {
234
+ }, vs = { class: "flex-1 flex flex-col h-full" }, bs = { class: "px-3 pt-3 pb-2 border-b border-gray-100" }, hs = { 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" }, _s = ["aria-selected", "onClick"], ws = { class: "leading-none" }, $s = { class: "flex flex-col flex-1 overflow-y-hidden p-3" }, ks = {
235
235
  key: 0,
236
236
  class: "mb-3 text-xs text-slate-500"
237
- }, ws = {
237
+ }, Cs = {
238
238
  key: 1,
239
239
  class: "mb-3 text-xs text-rose-600"
240
- }, $s = "OpenGIS", _e = 2, ee = 5, ks = 5, js = /* @__PURE__ */ te({
240
+ }, Es = "OpenGIS", we = 2, ee = 5, Ls = 5, Ps = /* @__PURE__ */ te({
241
241
  __name: "raster",
242
242
  setup(_) {
243
243
  const y = [
@@ -245,7 +245,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
245
245
  { cardClass: "bg-gradient-to-br from-blue-50 to-blue-100/30 border-blue-200", titleClass: "text-blue-900" },
246
246
  { cardClass: "bg-gradient-to-br from-purple-50 to-purple-100/30 border-purple-200", titleClass: "text-purple-900" },
247
247
  { cardClass: "bg-gradient-to-br from-gray-50 to-gray-100/30 border-gray-200", titleClass: "text-gray-900" }
248
- ], v = et(), o = tt(), f = $(null), P = h(() => {
248
+ ], x = et(), o = tt(), f = $(null), P = h(() => {
249
249
  var s;
250
250
  const e = (s = o.matched[o.matched.length - 1]) == null ? void 0 : s.path;
251
251
  return (typeof e == "string" && e ? e : o.path).replace(/\/:id\??$/, "") || "/";
@@ -255,16 +255,16 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
255
255
  return typeof e == "string" && e.trim() ? e : "Растри";
256
256
  });
257
257
  function N() {
258
- v.push(P.value);
258
+ x.push(P.value);
259
259
  }
260
- const x = h(() => {
260
+ const v = h(() => {
261
261
  var t;
262
262
  const e = (t = o.params) == null ? void 0 : t.id;
263
263
  return typeof e == "string" ? e : void 0;
264
- }), c = $(null), A = $(!1), p = $(!1), b = $(null), I = $(!0), C = $(!1), O = $(null);
264
+ }), c = $(null), A = $(!1), p = $(!1), b = $(null), j = $(!0), E = $(!1), O = $(null);
265
265
  let G = null, D = null;
266
266
  const se = $(!1);
267
- let j = null, Q = !1;
267
+ let z = null, Q = !1;
268
268
  function K(e) {
269
269
  if (Array.isArray(e)) return K(e[0]);
270
270
  if (typeof e != "string" && typeof e != "number") return null;
@@ -278,42 +278,42 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
278
278
  const l = 0.5 * 10 ** -s;
279
279
  return Math.abs(e - t) > l;
280
280
  }
281
- function z() {
281
+ function B() {
282
282
  var e;
283
283
  return (e = f.value) == null ? void 0 : e.ctx;
284
284
  }
285
285
  function ue() {
286
- var a, g, R, k;
287
- const e = (g = (a = z()) == null ? void 0 : a.map) == null ? void 0 : g.value;
286
+ var a, g, M, C;
287
+ const e = (g = (a = B()) == null ? void 0 : a.map) == null ? void 0 : g.value;
288
288
  if (!e) return;
289
289
  const t = K(o.query.z), s = K(o.query.x), l = K(o.query.y);
290
290
  if (t == null || s == null || l == null) return;
291
- const r = (R = e.getCenter) == null ? void 0 : R.call(e), i = (k = e.getZoom) == null ? void 0 : k.call(e);
292
- (!r || le(r.lng, s, ee) || le(r.lat, l, ee) || le(i ?? 0, t, _e)) && (se.value = !0, e.jumpTo({ center: [s, l], zoom: t }), se.value = !1);
291
+ const r = (M = e.getCenter) == null ? void 0 : M.call(e), i = (C = e.getZoom) == null ? void 0 : C.call(e);
292
+ (!r || le(r.lng, s, ee) || le(r.lat, l, ee) || le(i ?? 0, t, we)) && (se.value = !0, e.jumpTo({ center: [s, l], zoom: t }), se.value = !1);
293
293
  }
294
- function $e() {
294
+ function ke() {
295
295
  var r, i, w, a;
296
296
  if (se.value) return;
297
- const e = (i = (r = z()) == null ? void 0 : r.map) == null ? void 0 : i.value;
297
+ const e = (i = (r = B()) == null ? void 0 : r.map) == null ? void 0 : i.value;
298
298
  if (!e) return;
299
299
  const t = (w = e.getCenter) == null ? void 0 : w.call(e), s = (a = e.getZoom) == null ? void 0 : a.call(e);
300
300
  if (!t || s == null) return;
301
301
  const l = {
302
302
  ...o.query,
303
- z: ne(s, _e),
303
+ z: ne(s, we),
304
304
  x: ne(t.lng, ee),
305
305
  y: ne(t.lat, ee)
306
306
  };
307
- o.query.z === l.z && o.query.x === l.x && o.query.y === l.y || v.replace({ query: l });
307
+ o.query.z === l.z && o.query.x === l.x && o.query.y === l.y || x.replace({ query: l });
308
308
  }
309
- function ke() {
309
+ function Ce() {
310
310
  var t;
311
311
  if (typeof document > "u") return;
312
312
  const e = (t = T.value) == null ? void 0 : t.name;
313
- document.title = e ? `${e} — Растер` : $s;
313
+ document.title = e ? `${e} — Растер` : Es;
314
314
  }
315
315
  function Y(e) {
316
- return Number(e.toFixed(ks));
316
+ return Number(e.toFixed(Ls));
317
317
  }
318
318
  function ce(e, t) {
319
319
  const [s, l] = e, [r, i] = t;
@@ -324,7 +324,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
324
324
  Y(Math.max(l, i))
325
325
  ];
326
326
  }
327
- function Ce(e) {
327
+ function Ee(e) {
328
328
  const [t, s, l, r] = e;
329
329
  return {
330
330
  type: "Polygon",
@@ -339,19 +339,19 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
339
339
  }
340
340
  function re(e) {
341
341
  var l, r, i;
342
- const t = (r = (l = z()) == null ? void 0 : l.map) == null ? void 0 : r.value, s = (i = t == null ? void 0 : t.getCanvas) == null ? void 0 : i.call(t);
342
+ const t = (r = (l = B()) == null ? void 0 : l.map) == null ? void 0 : r.value, s = (i = t == null ? void 0 : t.getCanvas) == null ? void 0 : i.call(t);
343
343
  s != null && s.style && (s.style.cursor = e);
344
344
  }
345
- async function Ee(e, t) {
346
- if (!(!x.value || !c.value))
345
+ async function Le(e, t) {
346
+ if (!(!v.value || !c.value))
347
347
  try {
348
- const s = Ce(e), l = await fetch(`/api/gis-metadata/raster/${encodeURIComponent(x.value)}`, {
348
+ const s = Ee(e), l = await fetch(`/api/gis-metadata/raster/${encodeURIComponent(v.value)}`, {
349
349
  method: "POST",
350
350
  headers: { "Content-Type": "application/json" },
351
351
  body: JSON.stringify({ geom: s })
352
352
  });
353
353
  if (!l.ok) throw new Error(`Failed to save raster metadata geom: ${l.status}`);
354
- M({
354
+ S({
355
355
  type: "success",
356
356
  title: "Extent збережено",
357
357
  message: "Нові межі успішно збережено."
@@ -360,7 +360,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
360
360
  console.error("Failed to save raster extent", s), c.value && (c.value = {
361
361
  ...c.value,
362
362
  extent: t ? [...t] : void 0
363
- }), M({
363
+ }), S({
364
364
  type: "error",
365
365
  title: "Помилка",
366
366
  message: "Не вдалося зберегти Extent"
@@ -369,61 +369,61 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
369
369
  }
370
370
  function de(e) {
371
371
  var s, l, r;
372
- const t = (l = (s = z()) == null ? void 0 : s.map) == null ? void 0 : l.value;
372
+ const t = (l = (s = B()) == null ? void 0 : s.map) == null ? void 0 : l.value;
373
373
  if ((r = t == null ? void 0 : t.dragPan) != null && r.enable && t.dragPan.enable(), (e == null ? void 0 : e.length) === 4 && c.value) {
374
374
  const i = Array.isArray(c.value.extent) ? [...c.value.extent] : null;
375
375
  c.value = {
376
376
  ...c.value,
377
377
  extent: [...e]
378
- }, Ee(e, i);
378
+ }, Le(e, i);
379
379
  }
380
- j = null, Q = !1, O.value = null, C.value = !1, re("");
380
+ z = null, Q = !1, O.value = null, E.value = !1, re("");
381
381
  }
382
382
  function oe() {
383
383
  de(null);
384
384
  }
385
- function Le() {
385
+ function Re() {
386
386
  var i, w;
387
- const e = (w = (i = z()) == null ? void 0 : i.map) == null ? void 0 : w.value;
387
+ const e = (w = (i = B()) == null ? void 0 : i.map) == null ? void 0 : w.value;
388
388
  if (!e) return;
389
389
  const t = (a) => {
390
- var R, k, J;
391
- if (!C.value || ((R = a == null ? void 0 : a.originalEvent) == null ? void 0 : R.button) != null && a.originalEvent.button !== 0) return;
390
+ var M, C, J;
391
+ if (!E.value || ((M = a == null ? void 0 : a.originalEvent) == null ? void 0 : M.button) != null && a.originalEvent.button !== 0) return;
392
392
  const g = a == null ? void 0 : a.lngLat;
393
- g && (j = [g.lng, g.lat], Q = !0, O.value = [g.lng, g.lat, g.lng, g.lat], (J = (k = e.dragPan) == null ? void 0 : k.disable) == null || J.call(k));
393
+ g && (z = [g.lng, g.lat], Q = !0, O.value = [g.lng, g.lat, g.lng, g.lat], (J = (C = e.dragPan) == null ? void 0 : C.disable) == null || J.call(C));
394
394
  }, s = (a) => {
395
- if (!C.value || !Q || !j) return;
395
+ if (!E.value || !Q || !z) return;
396
396
  const g = a == null ? void 0 : a.lngLat;
397
- g && (O.value = ce(j, [g.lng, g.lat]));
397
+ g && (O.value = ce(z, [g.lng, g.lat]));
398
398
  }, l = (a) => {
399
- if (!C.value || !Q || !j) return;
399
+ if (!E.value || !Q || !z) return;
400
400
  const g = a == null ? void 0 : a.lngLat;
401
401
  if (!g) {
402
402
  oe();
403
403
  return;
404
404
  }
405
- const R = ce(j, [g.lng, g.lat]), [k, J, Ge, Qe] = R;
406
- if (!(Math.abs(Ge - k) > 0 && Math.abs(Qe - J) > 0)) {
407
- M({
405
+ const M = ce(z, [g.lng, g.lat]), [C, J, Qe, We] = M;
406
+ if (!(Math.abs(Qe - C) > 0 && Math.abs(We - J) > 0)) {
407
+ S({
408
408
  type: "warning",
409
409
  title: "Bounds не змінено",
410
410
  message: "Потрібно протягнути прямокутник з ненульовою площею."
411
411
  }), oe();
412
412
  return;
413
413
  }
414
- de(R);
414
+ de(M);
415
415
  }, r = (a) => {
416
- C.value && a.key === "Escape" && (a.preventDefault(), oe());
416
+ E.value && a.key === "Escape" && (a.preventDefault(), oe());
417
417
  };
418
418
  e.on("mousedown", t), e.on("mousemove", s), e.on("mouseup", l), window.addEventListener("keydown", r), D = () => {
419
419
  e.off("mousedown", t), e.off("mousemove", s), e.off("mouseup", l), window.removeEventListener("keydown", r);
420
420
  };
421
421
  }
422
- async function Re() {
422
+ async function Me() {
423
423
  var s;
424
- if (C.value) return;
425
- const e = z();
426
- !(e != null && e.ready) || (await e.ready(), !((s = e.map) == null ? void 0 : s.value)) || (D || Le(), C.value = !0, Q = !1, j = null, O.value = null, re("crosshair"), M({
424
+ if (E.value) return;
425
+ const e = B();
426
+ !(e != null && e.ready) || (await e.ready(), !((s = e.map) == null ? void 0 : s.value)) || (D || Re(), E.value = !0, Q = !1, z = null, O.value = null, re("crosshair"), S({
427
427
  type: "info",
428
428
  title: "Редагування Bounds",
429
429
  message: "Протягніть прямокутник на карті, щоб задати нові межі."
@@ -436,10 +436,10 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
436
436
  }), U = h(() => {
437
437
  var e;
438
438
  return ((e = c.value) == null ? void 0 : e.extent) ?? null;
439
- }), me = h(() => x.value ? `raster-${x.value}` : void 0), Me = h(() => x.value ? `raster-extent-${x.value}` : "raster-extent"), Se = h(() => x.value ? `raster-extent-draft-${x.value}` : "raster-extent-draft"), Ie = h(() => {
439
+ }), me = h(() => v.value ? `raster-${v.value}` : void 0), Se = h(() => v.value ? `raster-extent-${v.value}` : "raster-extent"), Ie = h(() => v.value ? `raster-extent-draft-${v.value}` : "raster-extent-draft"), je = h(() => {
440
440
  const e = me.value ?? "raster", t = U.value && U.value.length === 4 ? U.value.join(",") : "no-extent";
441
441
  return `${e}-${t}`;
442
- }), je = h(() => !!fe.value), pe = h(() => {
442
+ }), ze = h(() => !!fe.value), pe = h(() => {
443
443
  const e = U.value;
444
444
  if (!e || e.length !== 4) return null;
445
445
  const [t, s, l, r] = e;
@@ -448,7 +448,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
448
448
  ) ? null : [(t + l) / 2, (s + r) / 2];
449
449
  }), T = h(() => {
450
450
  var i, w;
451
- const e = c.value, t = e == null ? void 0 : e.extent, l = x.value ?? "—", r = [
451
+ const e = c.value, t = e == null ? void 0 : e.extent, l = v.value ?? "—", r = [
452
452
  e != null && e.extension ? `Формат ${String(e.extension).toUpperCase()}` : null,
453
453
  (e == null ? void 0 : e.resolution) || null
454
454
  ].filter(Boolean).join(", ");
@@ -456,7 +456,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
456
456
  id: l,
457
457
  name: (e == null ? void 0 : e.name) || ((w = (i = e == null ? void 0 : e.files) == null ? void 0 : i[0]) == null ? void 0 : w.name),
458
458
  description: (e == null ? void 0 : e.description) || r || "Попередній перегляд растрового шару.",
459
- coverage: t && t.length === 4 ? `${L(t[0])}, ${L(t[1])} → ${L(t[2])}, ${L(t[3])}` : "Покриття уточнюється",
459
+ coverage: t && t.length === 4 ? `${R(t[0])}, ${R(t[1])} → ${R(t[2])}, ${R(t[3])}` : "Покриття уточнюється",
460
460
  crs: e != null && e.srid ? `EPSG:${e.srid}` : "EPSG:4326",
461
461
  source: e != null && e.proj4 ? e.proj4 : "Джерело: Mapnik",
462
462
  updatedAt: e != null && e.cache ? "Дані кешовано" : "Нові дані"
@@ -471,53 +471,53 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
471
471
  e.cache ? "Кешовано" : null
472
472
  ].filter((t) => t).join(", ") : "";
473
473
  }), ge = [
474
- { key: "info", label: "Інформація", icon: qt },
474
+ { key: "info", label: "Інформація", icon: Ot },
475
475
  { key: "files", label: "Файли", icon: at },
476
- { key: "metadata", label: "Метадані", icon: ft }
477
- ], ye = ge.map((e) => e.key), E = $(ye.includes(o.query.tab) ? o.query.tab : "info"), Z = $(!0);
478
- S(() => o.query.tab, (e) => {
479
- e && ye.includes(e) && E.value !== e && (E.value = e);
480
- }), S(E, (e) => {
481
- o.query.tab !== e && v.replace({ query: { ...o.query, tab: e } });
476
+ { key: "metadata", label: "Метадані", icon: yt }
477
+ ], ye = ge.map((e) => e.key), L = $(ye.includes(o.query.tab) ? o.query.tab : "info"), Z = $(!0);
478
+ I(() => o.query.tab, (e) => {
479
+ e && ye.includes(e) && L.value !== e && (L.value = e);
480
+ }), I(L, (e) => {
481
+ o.query.tab !== e && x.replace({ query: { ...o.query, tab: e } });
482
482
  });
483
- const ze = h(() => Ne(c.value)), ve = h(() => Ue(c.value));
484
- S(
483
+ const Be = h(() => De(c.value)), xe = h(() => Te(c.value));
484
+ I(
485
485
  () => c.value,
486
486
  () => {
487
- ke();
487
+ Ce();
488
488
  },
489
489
  { immediate: !0 }
490
490
  );
491
- async function Be() {
491
+ async function Pe() {
492
492
  var l;
493
- const e = z();
493
+ const e = B();
494
494
  if (!(e != null && e.ready)) return;
495
495
  await e.ready(), ue();
496
496
  const t = (l = e.map) == null ? void 0 : l.value;
497
497
  if (!t) return;
498
- const s = () => $e();
498
+ const s = () => ke();
499
499
  t.on("moveend", s), t.on("zoomend", s), G = () => {
500
500
  t.off("moveend", s), t.off("zoomend", s);
501
501
  };
502
502
  }
503
- S(
503
+ I(
504
504
  () => [o.query.z, o.query.x, o.query.y],
505
505
  () => {
506
506
  ue();
507
507
  }
508
- ), Ye(() => {
509
- Be();
510
- }), Ze(() => {
508
+ ), Ze(() => {
509
+ Pe();
510
+ }), He(() => {
511
511
  G == null || G(), G = null, D == null || D(), D = null, re("");
512
- }), S(x, () => {
512
+ }), I(v, () => {
513
513
  H();
514
514
  }, { immediate: !0 });
515
- async function Pe(e) {
515
+ async function Ne(e) {
516
516
  var t;
517
- H(), ((t = c.value) == null ? void 0 : t.srid) !== e.srid && (M({ title: "XML start", type: "info", message: "зміна системи координат, оновлюємо карту ..." }), await xe(`/api/gis-xml/${encodeURIComponent(x.value)}`), M({ title: "XML created", type: "info", message: "карта створена" }), location.reload());
517
+ H(), ((t = c.value) == null ? void 0 : t.srid) !== e.srid && (S({ title: "XML start", type: "info", message: "зміна системи координат, оновлюємо карту ..." }), await ve(`/api/gis-xml/${encodeURIComponent(v.value)}`), S({ title: "XML created", type: "info", message: "карта створена" }), location.reload());
518
518
  }
519
519
  async function H() {
520
- const e = x.value;
520
+ const e = v.value;
521
521
  if (!e) {
522
522
  c.value = null, b.value = null;
523
523
  return;
@@ -528,14 +528,14 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
528
528
  if (!t.ok)
529
529
  throw new Error(`HTTP ${t.status}`);
530
530
  const s = await t.json();
531
- s.xml && (p.value = !0), c.value = s, s.xml || (M({ title: "XML not found", type: "info", message: "йде створення xml ... зачекайте" }), await xe(`/api/gis-xml/${encodeURIComponent(e)}`), M({ title: "XML created", type: "info", message: "карта створена" }), fetch(`/api/gis-raster/${encodeURIComponent(e)}?nocache=1`), p.value = !0);
531
+ s.xml && (p.value = !0), c.value = s, s.xml || (S({ title: "XML not found", type: "info", message: "йде створення xml ... зачекайте" }), await ve(`/api/gis-xml/${encodeURIComponent(e)}`), S({ title: "XML created", type: "info", message: "карта створена" }), fetch(`/api/gis-raster/${encodeURIComponent(e)}?nocache=1`), p.value = !0);
532
532
  } catch (t) {
533
533
  console.error("Failed to load raster info", t), c.value = null, b.value = t instanceof Error ? t.message : String(t);
534
534
  } finally {
535
535
  A.value = !1;
536
536
  }
537
537
  }
538
- function xe(e) {
538
+ function ve(e) {
539
539
  return new Promise((t, s) => {
540
540
  const l = new EventSource(e), r = [];
541
541
  l.onmessage = (i) => {
@@ -547,36 +547,36 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
547
547
  };
548
548
  });
549
549
  }
550
- function Ne(e) {
550
+ function De(e) {
551
551
  var t;
552
552
  return (t = e == null ? void 0 : e.files) != null && t.length ? e.files.map((s) => ({
553
553
  name: s.name,
554
- resolution: De(s.name, e),
554
+ resolution: Ue(s.name, e),
555
555
  size: s.size || "—",
556
556
  status: "Готово",
557
557
  statusClass: "bg-emerald-50 text-emerald-600 border border-emerald-100"
558
558
  })) : [];
559
559
  }
560
- function De(e, t) {
560
+ function Ue(e, t) {
561
561
  const s = e.toLowerCase();
562
562
  return s.endsWith(".tfw") ? "Georeference" : s.endsWith(".xml") ? "Опис" : s.endsWith(".tif") || s.endsWith(".tiff") ? t != null && t.resolution ? t.resolution : "Растер" : (t == null ? void 0 : t.resolution) ?? "Файл";
563
563
  }
564
- function Ue(e) {
564
+ function Te(e) {
565
565
  return e ? {
566
- baseParams: qe(e),
566
+ baseParams: Fe(e),
567
567
  spatial: {
568
568
  crs: {
569
569
  code: e.srid ? `EPSG:${e.srid}` : "EPSG:4326",
570
570
  description: e.proj4 || "WGS 84 — World Geodetic System 1984"
571
571
  },
572
- bounds: Fe(e.extent),
573
- resolution: Ve(e)
572
+ bounds: Ve(e.extent),
573
+ resolution: Ae(e)
574
574
  },
575
- statistics: Ae(e),
576
- technical: Oe(e)
575
+ statistics: Oe(e),
576
+ technical: Ge(e)
577
577
  } : null;
578
578
  }
579
- function Te(e) {
579
+ function qe(e) {
580
580
  return e != null && e.length ? e.map((s) => {
581
581
  var r;
582
582
  if (!s) return "";
@@ -584,9 +584,9 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
584
584
  return ((r = l == null ? void 0 : l[0]) == null ? void 0 : r.toUpperCase()) || "";
585
585
  }).filter(Boolean).join("") : "";
586
586
  }
587
- function qe(e) {
587
+ function Fe(e) {
588
588
  var i, w;
589
- const t = e.bands_count ?? ((i = e.bands) == null ? void 0 : i.length) ?? "—", s = Te(e.bands), l = (e.bands ?? []).map((a) => a.trim()).filter((a) => a.length > 0), r = l.length ? l.join(", ") : void 0;
589
+ const t = e.bands_count ?? ((i = e.bands) == null ? void 0 : i.length) ?? "—", s = qe(e.bands), l = (e.bands ?? []).map((a) => a.trim()).filter((a) => a.length > 0), r = l.length ? l.join(", ") : void 0;
590
590
  return [
591
591
  {
592
592
  label: "Розмір растру, px",
@@ -603,21 +603,21 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
603
603
  { label: "Стиснення", value: e.compression || "—" }
604
604
  ];
605
605
  }
606
- function Fe(e) {
606
+ function Ve(e) {
607
607
  return !e || e.length !== 4 ? [] : [
608
- { label: "Північ", value: L(e[3], "N") },
609
- { label: "Схід", value: L(e[2], "E") },
610
- { label: "Південь", value: L(e[1], "S") },
611
- { label: "Захід", value: L(e[0], "W") }
608
+ { label: "Північ", value: R(e[3], "N") },
609
+ { label: "Схід", value: R(e[2], "E") },
610
+ { label: "Південь", value: R(e[1], "S") },
611
+ { label: "Захід", value: R(e[0], "W") }
612
612
  ];
613
613
  }
614
- function Ve(e) {
614
+ function Ae(e) {
615
615
  const t = [
616
616
  { label: "Роздільна здатність", value: e.resolution || "—" }
617
617
  ];
618
618
  return e.width && e.height && t.push({ label: "Розмір пікселя", value: `${e.width} × ${e.height} px` }), t;
619
619
  }
620
- function Ae(e) {
620
+ function Oe(e) {
621
621
  var t;
622
622
  return (t = e.bands) != null && t.length ? e.bands.map((s, l) => {
623
623
  const r = y[l % y.length];
@@ -633,7 +633,7 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
633
633
  };
634
634
  }) : [];
635
635
  }
636
- function Oe(e) {
636
+ function Ge(e) {
637
637
  var t;
638
638
  return [
639
639
  { label: "Тип даних", value: e.color_depth ? `Unsigned Integer ${e.color_depth}-bit` : "—" },
@@ -644,18 +644,18 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
644
644
  { label: "URL тайла", value: e.url || "—" }
645
645
  ];
646
646
  }
647
- function L(e, t) {
647
+ function R(e, t) {
648
648
  if (e == null || Number.isNaN(e)) return "—";
649
649
  const s = `${e.toFixed(5)}°`;
650
650
  return t ? `${s} ${t}` : s;
651
651
  }
652
- return (e, t) => (u(), m("div", Xt, [
653
- n("div", Kt, [
654
- n("div", Yt, [
655
- n("div", Zt, [
656
- n("div", Ht, [
657
- n("div", Jt, [
658
- n("div", es, [
652
+ return (e, t) => (u(), m("div", Ht, [
653
+ n("div", Jt, [
654
+ n("div", es, [
655
+ n("div", ts, [
656
+ n("div", ss, [
657
+ n("div", ns, [
658
+ n("div", ls, [
659
659
  n("button", {
660
660
  type: "button",
661
661
  class: "hover:text-gray-700 cursor-pointer transition-colors",
@@ -675,85 +675,91 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
675
675
  }, [
676
676
  n("path", { d: "m9 18 6-6-6-6" })
677
677
  ], -1)),
678
- n("span", ts, d(T.value.name || "Растер"), 1)
678
+ n("span", rs, d(T.value.name || "Растер"), 1)
679
679
  ]),
680
- n("div", ss, [
681
- n("div", ns, [
682
- n("div", ls, [
683
- n("h1", rs, d(T.value.name || "Растер"), 1)
680
+ n("div", os, [
681
+ n("div", is, [
682
+ n("div", as, [
683
+ n("h1", us, d(T.value.name || "Растер"), 1)
684
684
  ]),
685
685
  ie.value ? (u(), m("p", {
686
686
  key: 0,
687
687
  class: "text-xs text-gray-500 truncate",
688
688
  title: ie.value
689
- }, d(ie.value), 9, os)) : q("", !0)
689
+ }, d(ie.value), 9, cs)) : q("", !0)
690
690
  ])
691
691
  ])
692
692
  ]),
693
- n("div", is, [
694
- n("div", as, [
693
+ n("div", ds, [
694
+ n("div", fs, [
695
695
  n("div", {
696
696
  class: "w-full text-xs text-gray-600 truncate",
697
697
  title: T.value.description
698
- }, d(T.value.description), 9, us)
698
+ }, d(T.value.description), 9, ms)
699
699
  ]),
700
- B(ut, {
701
- "entity-id": x.value || "",
700
+ k(ut, {
701
+ "entity-id": v.value || "",
702
702
  "entity-info": { name: T.value.name },
703
703
  table: "gis.rasters.table",
704
704
  "entity-label": "Растер",
705
705
  "save-method": "put",
706
706
  "edit-button-text": "Редагувати",
707
- onSaved: Pe
707
+ onSaved: Ne
708
708
  }, null, 8, ["entity-id", "entity-info"])
709
709
  ])
710
710
  ])
711
711
  ])
712
712
  ]),
713
- n("div", cs, [
714
- n("div", ds, [
715
- B(ot, {
713
+ n("div", ps, [
714
+ n("div", gs, [
715
+ k(ot, {
716
716
  ref_key: "mapViewRef",
717
717
  ref: f
718
718
  }, {
719
- default: He(() => [
720
- je.value && p.value ? (u(), F(Wt, {
721
- key: Ie.value,
719
+ default: be(() => [
720
+ ze.value && p.value ? (u(), F(Zt, {
721
+ key: je.value,
722
722
  "tile-url": fe.value,
723
723
  extent: U.value,
724
724
  "layer-id": me.value,
725
- "show-raster-extent": I.value,
726
- onToggleExtent: t[0] || (t[0] = (s) => I.value = s)
725
+ "show-raster-extent": j.value,
726
+ onToggleExtent: t[0] || (t[0] = (s) => j.value = s)
727
727
  }, null, 8, ["tile-url", "extent", "layer-id", "show-raster-extent"])) : q("", !0),
728
- B(he, {
729
- extent: I.value ? U.value : null,
730
- "layer-id": Me.value
728
+ k(_e, {
729
+ extent: j.value ? U.value : null,
730
+ "layer-id": Se.value
731
731
  }, null, 8, ["extent", "layer-id"]),
732
- B(he, {
732
+ k(_e, {
733
733
  extent: O.value,
734
- "layer-id": Se.value,
734
+ "layer-id": Ie.value,
735
735
  "line-color": "#0ea5e9",
736
736
  "line-width": 3
737
737
  }, null, 8, ["extent", "layer-id"]),
738
- n("div", fs, [
739
- B(it)
738
+ n("div", ys, [
739
+ k(it)
740
740
  ]),
741
- C.value ? (u(), m("div", ms, " Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")) : q("", !0),
742
- n("div", ps, [
743
- B(be),
744
- pe.value ? (u(), F(be, {
745
- key: 0,
746
- targetCenter: pe.value,
747
- targetLabel: "Центр даних",
748
- targetAriaLabel: "Перейти до центру даних"
749
- }, null, 8, ["targetCenter"])) : q("", !0)
750
- ])
741
+ E.value ? (u(), m("div", xs, " Потягніть на карті, щоб намалювати нові Bounds. Esc скасовує редагування. ")) : q("", !0),
742
+ k(ct, null, {
743
+ default: be(() => [
744
+ k(dt),
745
+ k(ft),
746
+ k(mt),
747
+ k(he),
748
+ pe.value ? (u(), F(he, {
749
+ key: 0,
750
+ targetCenter: pe.value,
751
+ targetLabel: "Центр даних",
752
+ targetAriaLabel: "Перейти до центру даних"
753
+ }, null, 8, ["targetCenter"])) : q("", !0)
754
+ ]),
755
+ _: 1
756
+ })
751
757
  ]),
752
758
  _: 1
753
759
  }, 512)
754
760
  ])
755
761
  ]),
756
- B(ct, {
762
+ k(pt, {
757
763
  open: Z.value,
758
764
  onToggle: t[1] || (t[1] = (s) => Z.value = !Z.value)
759
765
  }, null, 8, ["open"])
@@ -761,37 +767,37 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
761
767
  n("div", {
762
768
  class: ae(["bg-white border-l border-gray-100 flex flex-col overflow-hidden shadow-lg flex-shrink-0 transition-[width] duration-100 ease-in-out", Z.value ? "w-[650px]" : "w-0"])
763
769
  }, [
764
- n("div", gs, [
765
- n("div", ys, [
766
- n("div", vs, [
770
+ n("div", vs, [
771
+ n("div", bs, [
772
+ n("div", hs, [
767
773
  (u(), m(W, null, X(ge, (s) => n("button", {
768
774
  key: s.key,
769
775
  type: "button",
770
776
  role: "tab",
771
- "aria-selected": E.value === s.key,
772
- class: ae(["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", E.value === s.key ? "bg-white shadow-sm text-gray-700" : ""]),
773
- onClick: (l) => E.value = s.key
777
+ "aria-selected": L.value === s.key,
778
+ class: ae(["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", L.value === s.key ? "bg-white shadow-sm text-gray-700" : ""]),
779
+ onClick: (l) => L.value = s.key
774
780
  }, [
775
781
  (u(), F(Je(s.icon), { class: "h-3.5 w-3.5 mb-0.5" })),
776
- n("span", bs, d(s.label), 1)
777
- ], 10, xs)), 64))
782
+ n("span", ws, d(s.label), 1)
783
+ ], 10, _s)), 64))
778
784
  ])
779
785
  ]),
780
- n("div", hs, [
781
- A.value ? (u(), m("div", _s, " Завантаження метаданих растру… ")) : b.value ? (u(), m("div", ws, " Не вдалося отримати дані: " + d(b.value), 1)) : q("", !0),
782
- E.value === "files" ? (u(), F(Nt, {
786
+ n("div", $s, [
787
+ A.value ? (u(), m("div", ks, " Завантаження метаданих растру… ")) : b.value ? (u(), m("div", Cs, " Не вдалося отримати дані: " + d(b.value), 1)) : q("", !0),
788
+ L.value === "files" ? (u(), F(qt, {
783
789
  key: 2,
784
- files: ze.value
785
- }, null, 8, ["files"])) : E.value === "metadata" ? (u(), F(dt, {
790
+ files: Be.value
791
+ }, null, 8, ["files"])) : L.value === "metadata" ? (u(), F(gt, {
786
792
  key: 3,
787
793
  data: c.value,
788
- "entity-id": x.value,
794
+ "entity-id": v.value,
789
795
  "entity-type": "raster",
790
796
  onSaved: H,
791
- onEditCssBounds: Re
792
- }, null, 8, ["data", "entity-id"])) : ve.value ? (u(), F(jt, {
797
+ onEditCssBounds: Me
798
+ }, null, 8, ["data", "entity-id"])) : xe.value ? (u(), F(Nt, {
793
799
  key: 4,
794
- details: ve.value
800
+ details: xe.value
795
801
  }, null, 8, ["details"])) : q("", !0)
796
802
  ])
797
803
  ])
@@ -800,5 +806,5 @@ const qt = /* @__PURE__ */ nt(Dt, [["render", Tt]]), Ft = { class: "absolute top
800
806
  }
801
807
  });
802
808
  export {
803
- js as default
809
+ Ps as default
804
810
  };