@opengis/admin 0.1.70 → 0.1.72

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.
@@ -0,0 +1,1517 @@
1
+ import { _, b as pe, a as T, c as be, d as fe, e as me, f as ge, I as xe, u as re } from "./import-file-DsHdUJ7C.js";
2
+ import { openBlock as s, createElementBlock as a, createTextVNode as D, toDisplayString as S, createCommentVNode as C, createStaticVNode as j, Fragment as $, createElementVNode as l, resolveComponent as d, createVNode as f, withCtx as w, createBlock as v, withModifiers as ye, renderList as I, normalizeClass as A, withDirectives as q, vModelCheckbox as _e, resolveDynamicComponent as ke, Transition as z, renderSlot as ve, vShow as se, normalizeStyle as le } from "vue";
3
+ import { I as we } from "./IconChevronDown-C5bX-n6U.js";
4
+ const Ce = {
5
+ data() {
6
+ return {
7
+ currentSort: ""
8
+ };
9
+ },
10
+ props: {
11
+ data: {
12
+ type: Object,
13
+ default: () => null
14
+ },
15
+ activeColumn: { type: String }
16
+ },
17
+ computed: {
18
+ label() {
19
+ var t, e;
20
+ return ((t = this.data) == null ? void 0 : t.ua) || ((e = this.data) == null ? void 0 : e.label) || this.data.title || "null";
21
+ },
22
+ selectedSortParam() {
23
+ var t, e;
24
+ return (e = (t = this.$route) == null ? void 0 : t.query) == null ? void 0 : e.sort;
25
+ },
26
+ getVisibleIcon() {
27
+ return this.data.format !== "image" && this.data.format !== "verify";
28
+ }
29
+ },
30
+ watch: {
31
+ activeColumn(t) {
32
+ t !== this.data.name && (this.currentSort = "");
33
+ }
34
+ },
35
+ methods: {
36
+ changeCurrentSort(t) {
37
+ switch (t) {
38
+ case "":
39
+ return "asc";
40
+ case "asc":
41
+ return "desc";
42
+ case "desc":
43
+ return "";
44
+ default:
45
+ return "";
46
+ }
47
+ },
48
+ handleClickSortBtn(t) {
49
+ this.$emit("change-active", this.data.name), this.currentSort = this.changeCurrentSort(t);
50
+ const e = this.$route.query, { sort: n, ...i } = e, r = this.currentSort ? `${this.data.name}-${this.currentSort}` : "";
51
+ this.$router.replace({
52
+ query: {
53
+ ...i,
54
+ ...r && { sort: r }
55
+ }
56
+ });
57
+ },
58
+ isValueEqualToSelected(t) {
59
+ return `${this.data.name}-${t}` === this.selectedSortParam;
60
+ }
61
+ }
62
+ }, $e = {
63
+ scope: "col",
64
+ class: "text-start px-2 py-1"
65
+ }, Se = {
66
+ class: "flex-shrink-0 size-3.5",
67
+ xmlns: "http://www.w3.org/2000/svg",
68
+ width: "24",
69
+ height: "24",
70
+ viewBox: "0 0 24 24",
71
+ fill: "none",
72
+ stroke: "currentColor",
73
+ "stroke-width": "2",
74
+ "stroke-linecap": "round",
75
+ "stroke-linejoin": "round"
76
+ }, Ie = {
77
+ key: 0,
78
+ d: "m7 15 5 5 5-5"
79
+ }, Ae = {
80
+ key: 1,
81
+ d: "m7 9 5-5 5 5"
82
+ }, Te = {
83
+ key: 1,
84
+ class: "text-sm text-stone-500 px-[4px] py-2.5 text-start font-normal text-gray-500"
85
+ };
86
+ function Ve(t, e, n, i, r, o) {
87
+ return s(), a("th", $e, [
88
+ o.getVisibleIcon ? (s(), a("button", {
89
+ key: 0,
90
+ type: "button",
91
+ class: "text-sm text-stone-500 px-[4px] py-2.5 text-start font-normal text-gray-500 flex items-center gap-[6px]",
92
+ onClick: e[0] || (e[0] = (u) => o.handleClickSortBtn(r.currentSort))
93
+ }, [
94
+ D(S(o.label) + " ", 1),
95
+ (s(), a("svg", Se, [
96
+ r.currentSort === "asc" || r.currentSort === "" ? (s(), a("path", Ie)) : C("", !0),
97
+ r.currentSort === "desc" || r.currentSort === "" ? (s(), a("path", Ae)) : C("", !0)
98
+ ]))
99
+ ])) : (s(), a("p", Te, S(o.label), 1))
100
+ ]);
101
+ }
102
+ const De = /* @__PURE__ */ _(Ce, [["render", Ve]]), Fe = {}, Me = {
103
+ class: "flex-shrink-0 size-3.5",
104
+ xmlns: "http://www.w3.org/2000/svg",
105
+ viewBox: "0 0 24 24",
106
+ fill: "none",
107
+ stroke: "currentColor",
108
+ "stroke-width": "2",
109
+ "stroke-linecap": "round",
110
+ "stroke-linejoin": "round"
111
+ };
112
+ function je(t, e, n, i, r, o) {
113
+ return s(), a("svg", Me, e[0] || (e[0] = [
114
+ j('<path d="M3 6h18"></path><path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"></path><path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"></path><line x1="10" x2="10" y1="11" y2="17"></line><line x1="14" x2="14" y1="11" y2="17"></line>', 5)
115
+ ]));
116
+ }
117
+ const qe = /* @__PURE__ */ _(Fe, [["render", je]]), ze = {
118
+ props: {
119
+ height: { type: String, default: "16" },
120
+ width: { type: String, default: "12" },
121
+ color: { type: String, default: "black" }
122
+ }
123
+ }, Be = { style: { display: "none" } }, Pe = ["height", "width", "fill"];
124
+ function Le(t, e, n, i, r, o) {
125
+ return s(), a($, null, [
126
+ (s(), a("svg", Be, e[0] || (e[0] = [
127
+ l("symbol", {
128
+ id: "icon-pencil",
129
+ viewBox: "0 0 32 32"
130
+ }, [
131
+ l("path", { d: "M27 0c2.761 0 5 2.239 5 5 0 1.126-0.372 2.164-1 3l-2 2-7-7 2-2c0.836-0.628 1.874-1 3-1zM2 23l-2 9 9-2 18.5-18.5-7-7-18.5 18.5zM22.362 11.362l-14 14-1.724-1.724 14-14 1.724 1.724z" })
132
+ ], -1)
133
+ ]))),
134
+ (s(), a("svg", {
135
+ height: n.height,
136
+ width: n.width,
137
+ fill: n.color
138
+ }, e[1] || (e[1] = [
139
+ l("use", { "xlink:href": "#icon-pencil" }, null, -1)
140
+ ]), 8, Pe))
141
+ ], 64);
142
+ }
143
+ const Ue = /* @__PURE__ */ _(ze, [["render", Le]]), Oe = {
144
+ components: {
145
+ IconMore: pe,
146
+ IconDelete: qe,
147
+ IconEdit: Ue
148
+ },
149
+ emits: ["updateTable"],
150
+ props: {
151
+ item: Object,
152
+ table: String,
153
+ isForm: null,
154
+ actions: Array,
155
+ default: () => []
156
+ },
157
+ data() {
158
+ return {
159
+ formVisible: !1,
160
+ isDeleteConfirm: !1,
161
+ formValue: {},
162
+ top: 0,
163
+ left: 0
164
+ };
165
+ },
166
+ methods: {
167
+ openConfirm() {
168
+ this.isDeleteConfirm = !0, document.querySelector("body").click();
169
+ },
170
+ async getData() {
171
+ var t;
172
+ try {
173
+ const { data: e } = await T.get(
174
+ `/api/table/${this.table}/${(t = this.item) == null ? void 0 : t.id}`
175
+ );
176
+ this.formValue = e;
177
+ } catch (e) {
178
+ console.error(e);
179
+ }
180
+ },
181
+ doSomethingOnCancel() {
182
+ this.formVisible = !1;
183
+ },
184
+ async deleteElement() {
185
+ var t;
186
+ try {
187
+ const { data: e } = await T.get(
188
+ `/api/table/${this.table}/${(t = this.item) == null ? void 0 : t.id}`
189
+ );
190
+ await T.delete(`/api/table/${e == null ? void 0 : e.token}`), await this.$notify({
191
+ title: "Успішно!",
192
+ message: "Об`єкт успішно видалeно",
193
+ type: "success"
194
+ }), await this.$emit("update-table");
195
+ } catch {
196
+ this.$notify({
197
+ title: "Помилка!",
198
+ message: "Сталася помилка",
199
+ type: "error"
200
+ });
201
+ } finally {
202
+ this.isDeleteConfirm = !1;
203
+ }
204
+ }
205
+ }
206
+ }, Ee = { class: "hs-dropdown [--placement:bottom-right] inline-flex" }, He = { class: "inline-flex items-center justify-center bg-white border rounded-lg shadow-sm size-7 gap-x-2 border-stone-200 text-stone-800 hover:bg-stone-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-stone-50" }, Ne = { class: "flex flex-col items-start" }, We = {
207
+ key: 1,
208
+ class: "h-[1px] w-[80%] bg-gray-200 ml-auto mr-auto"
209
+ }, Re = { class: "p-4" }, Ge = { class: "flex justify-end mt-4 gap-x-3" };
210
+ function Ze(t, e, n, i, r, o) {
211
+ const u = d("IconMore"), b = d("IconEdit"), p = d("router-link"), m = d("IconDelete"), k = d("VsPopover"), c = d("VsDialog");
212
+ return s(), a($, null, [
213
+ l("div", Ee, [
214
+ f(k, {
215
+ trigger: "click",
216
+ placement: "bottom-left"
217
+ }, {
218
+ reference: w(() => [
219
+ l("button", He, [
220
+ f(u, {
221
+ height: "16",
222
+ width: "16"
223
+ })
224
+ ])
225
+ ]),
226
+ default: w(() => {
227
+ var x, h, y, V, F;
228
+ return [
229
+ l("div", Ne, [
230
+ (x = n.actions) != null && x.includes("edit") && n.isForm ? (s(), v(p, {
231
+ key: 0,
232
+ to: `/edit?table=${(y = (h = t.$route) == null ? void 0 : h.params) == null ? void 0 : y.catchAll}&id=${(V = n.item) == null ? void 0 : V.id}`,
233
+ class: "w-full flex items-center gap-x-3 py-1.5 px-2 rounded-lg text-[13px] text-stone-800 hover:bg-stone-100 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-stone-100"
234
+ }, {
235
+ default: w(() => [
236
+ f(b, { color: "#000" }),
237
+ e[4] || (e[4] = D(" Редагувати "))
238
+ ]),
239
+ _: 1
240
+ }, 8, ["to"])) : C("", !0),
241
+ n.isForm ? (s(), a("div", We)) : C("", !0),
242
+ (F = n.actions) != null && F.includes("del") ? (s(), a("button", {
243
+ key: 2,
244
+ onClick: e[0] || (e[0] = ye((...M) => o.openConfirm && o.openConfirm(...M), ["stop"])),
245
+ class: "w-full flex items-center gap-x-3 py-1.5 px-2 rounded-lg text-[13px] text-stone-800 hover:bg-stone-100 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-stone-100"
246
+ }, [
247
+ f(m),
248
+ e[5] || (e[5] = l("span", { class: "text-gray-800" }, "Видалити", -1))
249
+ ])) : C("", !0)
250
+ ])
251
+ ];
252
+ }),
253
+ _: 1
254
+ })
255
+ ]),
256
+ f(c, {
257
+ visible: r.isDeleteConfirm,
258
+ "onUpdate:visible": e[3] || (e[3] = (x) => r.isDeleteConfirm = x),
259
+ size: "small",
260
+ title: "Ви впевнені?"
261
+ }, {
262
+ default: w(() => [
263
+ l("div", Re, [
264
+ e[6] || (e[6] = l("p", { class: "mt-1 text-gray-500 dark:text-neutral-500" }, " Ви впевнені, що хочете видалити цей об'єкт? ", -1)),
265
+ l("div", Ge, [
266
+ l("button", {
267
+ type: "button",
268
+ class: "inline-flex items-center px-3 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-200 rounded-lg shadow-sm gap-x-2 hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",
269
+ onClick: e[1] || (e[1] = (x) => r.isDeleteConfirm = !1)
270
+ }, " Скасувати "),
271
+ l("button", {
272
+ type: "button",
273
+ class: "inline-flex items-center px-3 py-2 text-sm font-semibold text-white bg-red-500 border border-transparent rounded-lg gap-x-2 hover:bg-red-600 disabled:opacity-50 disabled:pointer-events-none",
274
+ onClick: e[2] || (e[2] = (...x) => o.deleteElement && o.deleteElement(...x))
275
+ }, " Так, я впевнена/ий ")
276
+ ])
277
+ ])
278
+ ]),
279
+ _: 1
280
+ }, 8, ["visible"])
281
+ ], 64);
282
+ }
283
+ const Je = /* @__PURE__ */ _(Oe, [["render", Ze]]), Ke = {}, Qe = {
284
+ class: "flex-shrink-0 mt-0.5 size-3.5",
285
+ xmlns: "http://www.w3.org/2000/svg",
286
+ viewBox: "0 0 24 24",
287
+ fill: "none",
288
+ stroke: "currentColor",
289
+ "stroke-width": "2",
290
+ "stroke-linecap": "round",
291
+ "stroke-linejoin": "round"
292
+ };
293
+ function Xe(t, e, n, i, r, o) {
294
+ return s(), a("svg", Qe, e[0] || (e[0] = [
295
+ l("path", { d: "m3 16 4 4 4-4" }, null, -1),
296
+ l("path", { d: "M7 20V4" }, null, -1),
297
+ l("path", { d: "m21 8-4-4-4 4" }, null, -1),
298
+ l("path", { d: "M17 4v16" }, null, -1)
299
+ ]));
300
+ }
301
+ const Ye = /* @__PURE__ */ _(Ke, [["render", Xe]]), et = {}, tt = {
302
+ xmlns: "http://www.w3.org/2000/svg",
303
+ width: "24",
304
+ height: "24",
305
+ viewBox: "0 0 24 24",
306
+ fill: "none",
307
+ stroke: "currentColor",
308
+ "stroke-width": "2",
309
+ "stroke-linecap": "round",
310
+ "stroke-linejoin": "round",
311
+ class: "icon icon-tabler icons-tabler-outline icon-tabler-rosette-discount-check"
312
+ };
313
+ function nt(t, e, n, i, r, o) {
314
+ return s(), a("svg", tt, e[0] || (e[0] = [
315
+ l("path", {
316
+ stroke: "none",
317
+ d: "M0 0h24v24H0z",
318
+ fill: "none"
319
+ }, null, -1),
320
+ l("path", { d: "M5 7.2a2.2 2.2 0 0 1 2.2 -2.2h1a2.2 2.2 0 0 0 1.55 -.64l.7 -.7a2.2 2.2 0 0 1 3.12 0l.7 .7c.412 .41 .97 .64 1.55 .64h1a2.2 2.2 0 0 1 2.2 2.2v1c0 .58 .23 1.138 .64 1.55l.7 .7a2.2 2.2 0 0 1 0 3.12l-.7 .7a2.2 2.2 0 0 0 -.64 1.55v1a2.2 2.2 0 0 1 -2.2 2.2h-1a2.2 2.2 0 0 0 -1.55 .64l-.7 .7a2.2 2.2 0 0 1 -3.12 0l-.7 -.7a2.2 2.2 0 0 0 -1.55 -.64h-1a2.2 2.2 0 0 1 -2.2 -2.2v-1a2.2 2.2 0 0 0 -.64 -1.55l-.7 -.7a2.2 2.2 0 0 1 0 -3.12l.7 -.7a2.2 2.2 0 0 0 .64 -1.55v-1" }, null, -1),
321
+ l("path", { d: "M9 12l2 2l4 -4" }, null, -1)
322
+ ]));
323
+ }
324
+ const rt = /* @__PURE__ */ _(et, [["render", nt]]), lt = {
325
+ components: { IconExport: Ye, IconChevronDown: we, IconSuccess: rt },
326
+ props: {
327
+ table: String,
328
+ columns: Array,
329
+ page: [String, Number],
330
+ filterCustom: String,
331
+ filterState: String,
332
+ filters: String
333
+ },
334
+ data() {
335
+ return {
336
+ isOpen: !1,
337
+ tableFormats: ["json", "csv", "xlsx"],
338
+ format: "",
339
+ cols: [],
340
+ activeAction: "",
341
+ isSuccessTemplate: !1,
342
+ actions: [
343
+ { name: "choceAll", function: this.choceAll, label: "Вибрати усі" },
344
+ {
345
+ name: "choceVisible",
346
+ function: this.choceVisible,
347
+ label: "Вибрати поточні"
348
+ },
349
+ { name: "clearAll", function: this.clearAll, label: "Жодного" }
350
+ ]
351
+ };
352
+ },
353
+ watch: {
354
+ isOpen(t) {
355
+ t || (this.format = "", this.cols = [], this.activeAction = "", this.isSuccessTemplate = !1);
356
+ }
357
+ },
358
+ methods: {
359
+ async exportTable() {
360
+ var t;
361
+ if (!((t = this.cols) != null && t.length)) {
362
+ this.$notify({
363
+ type: "error",
364
+ title: "Помилка",
365
+ message: "Оберіть колонки для експорту!"
366
+ });
367
+ return;
368
+ }
369
+ if (!this.format) {
370
+ this.$notify({
371
+ type: "error",
372
+ title: "Помилка",
373
+ message: "Оберіть формат!"
374
+ });
375
+ return;
376
+ }
377
+ try {
378
+ const e = await T.get("/api/export", {
379
+ params: {
380
+ table: this.table,
381
+ format: this.format,
382
+ cols: this.cols.join(","),
383
+ page: this.page,
384
+ filter: this.filters || null,
385
+ state: this.filterState || null,
386
+ custom: this.filterCustom || null
387
+ },
388
+ responseType: "blob"
389
+ }), n = new Blob([e.data], {
390
+ type: "application/octet-stream"
391
+ }), i = window.URL.createObjectURL(n), r = document.createElement("a");
392
+ r.href = i, r.setAttribute(
393
+ "download",
394
+ `${this.table.split(".")[0]}.${this.format}`
395
+ ), document.body.appendChild(r), r.click(), document.body.removeChild(r), window.URL.revokeObjectURL(i), this.$notify({
396
+ type: "success",
397
+ title: "Експорт",
398
+ message: "Файл успішно експортовано!"
399
+ }), this.isSuccessTemplate = !0;
400
+ } catch (e) {
401
+ console.error("Ошибка при экспорте файла:", e), this.$notify({
402
+ type: "error",
403
+ title: "Помилка",
404
+ message: "Не вдалося експортувати файл."
405
+ });
406
+ }
407
+ },
408
+ selectFormat(t) {
409
+ this.format = t;
410
+ },
411
+ choceAll() {
412
+ var t;
413
+ this.cols = (t = this.columns) == null ? void 0 : t.map((e) => e == null ? void 0 : e.name), this.activeAction = "choceAll";
414
+ },
415
+ clearAll() {
416
+ this.cols = [], this.activeAction = "clearAll";
417
+ },
418
+ choceVisible() {
419
+ var t, e;
420
+ this.cols = (e = (t = this.columns) == null ? void 0 : t.filter((n) => (n == null ? void 0 : n.hidden) !== !0)) == null ? void 0 : e.map((n) => n == null ? void 0 : n.name), this.activeAction = "choceVisible";
421
+ }
422
+ }
423
+ }, st = {
424
+ key: 0,
425
+ class: "flex flex-col items-center"
426
+ }, ot = {
427
+ key: 1,
428
+ class: "p-4"
429
+ }, at = { class: "pb-5 mb-5 border-b border-gray-200 last:pb-0 last:mb-0 last:border-b-0 dark:border-neutral-700" }, it = { class: "flex items-center" }, ct = { class: "flex items-center gap-[10px] ml-auto" }, ut = ["onClick"], dt = {
430
+ key: 0,
431
+ class: "block h-[8px] w-[8px] rounded-full bg-blue-500"
432
+ }, ht = { class: "mt-2 flex row flex-wrap gap-y-[5px] gap-x-[10px]" }, pt = { class: "pb-5 mb-5 border-b border-gray-200 last:pb-0 last:mb-0 last:border-b-0 dark:border-neutral-700" }, bt = { class: "mt-2 space-y-2" }, ft = ["id", "onChange"], mt = ["for"], gt = {
433
+ key: 0,
434
+ class: "flex w-full justify-end p-[20px] gap-[6px] border-t"
435
+ }, xt = {
436
+ key: 1,
437
+ class: "flex w-full justify-end p-[20px] gap-[6px] border-t"
438
+ };
439
+ function yt(t, e, n, i, r, o) {
440
+ const u = d("IconExport"), b = d("IconChevronDown"), p = d("IconSuccess"), m = d("VsCheckbox"), k = d("VsDialog");
441
+ return s(), a($, null, [
442
+ l("button", {
443
+ onClick: e[0] || (e[0] = (c) => r.isOpen = !0),
444
+ class: "py-2 px-2.5 inline-flex items-center gap-x-1.5 text-xs font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700"
445
+ }, [
446
+ f(u, {
447
+ height: "16",
448
+ width: "16"
449
+ }),
450
+ e[7] || (e[7] = D(" Експорт ")),
451
+ f(b, {
452
+ height: "12",
453
+ width: "16"
454
+ })
455
+ ]),
456
+ f(k, {
457
+ visible: r.isOpen,
458
+ "onUpdate:visible": e[6] || (e[6] = (c) => r.isOpen = c),
459
+ title: "Експорт таблиці",
460
+ size: "small",
461
+ closeClickBack: !0
462
+ }, {
463
+ footer: w(() => [
464
+ r.isSuccessTemplate ? (s(), a("div", gt, [
465
+ l("button", {
466
+ type: "button",
467
+ class: "inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-gray-800 align-middle bg-white border border-gray-200 rounded-lg shadow-sm text-nowrap text-start hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",
468
+ onClick: e[2] || (e[2] = (c) => r.isOpen = !1)
469
+ }, " Закрити "),
470
+ l("button", {
471
+ type: "button",
472
+ class: "inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-white align-middle bg-blue-600 border border-blue-600 rounded-lg shadow-sm text-nowrap gap-x-2 text-start hover:bg-blue-700 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-500",
473
+ onClick: e[3] || (e[3] = (c) => r.isSuccessTemplate = !1)
474
+ }, " Вигрузити ще ")
475
+ ])) : (s(), a("div", xt, [
476
+ l("button", {
477
+ type: "button",
478
+ class: "inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-gray-800 align-middle bg-white border border-gray-200 rounded-lg shadow-sm text-nowrap text-start hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",
479
+ onClick: e[4] || (e[4] = (c) => r.isOpen = !1)
480
+ }, " Скасувати "),
481
+ l("button", {
482
+ type: "button",
483
+ class: "inline-flex items-center justify-center px-3 py-2 text-sm font-medium text-white align-middle bg-blue-600 border border-blue-600 rounded-lg shadow-sm text-nowrap gap-x-2 text-start hover:bg-blue-700 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:ring-1 focus:ring-blue-300 dark:focus:ring-blue-500",
484
+ onClick: e[5] || (e[5] = (...c) => o.exportTable && o.exportTable(...c))
485
+ }, " Завантажити таблицю ")
486
+ ]))
487
+ ]),
488
+ default: w(() => [
489
+ r.isSuccessTemplate ? (s(), a("div", st, [
490
+ f(p, {
491
+ height: "100",
492
+ width: "100",
493
+ class: "text-green-200 mb-[20px]"
494
+ }),
495
+ e[8] || (e[8] = l("h2", null, "Звіт сформовано і збережено", -1))
496
+ ])) : (s(), a("div", ot, [
497
+ l("div", at, [
498
+ l("div", it, [
499
+ e[9] || (e[9] = l("h2", { class: "text-sm text-gray-500" }, " Виберіть стовпці таблиці для експорту: ", -1)),
500
+ l("div", ct, [
501
+ (s(!0), a($, null, I(r.actions, (c) => (s(), a("button", {
502
+ key: c == null ? void 0 : c.name,
503
+ onClick: c == null ? void 0 : c.function,
504
+ class: "inline-flex items-center gap-[8px] justify-center px-3 py-2 text-sm font-medium text-gray-800 align-middle bg-white border-gray-200 text-nowrap text-start"
505
+ }, [
506
+ l("span", {
507
+ class: A(["h-[14px] w-[14px] border rounded-full flex items-center justify-center", { "border-blue-500": (c == null ? void 0 : c.name) === r.activeAction }])
508
+ }, [
509
+ (c == null ? void 0 : c.name) === r.activeAction ? (s(), a("span", dt)) : C("", !0)
510
+ ], 2),
511
+ D(" " + S(c == null ? void 0 : c.label), 1)
512
+ ], 8, ut))), 128))
513
+ ])
514
+ ]),
515
+ l("div", ht, [
516
+ (s(!0), a($, null, I(n.columns, (c, x) => (s(), a("div", {
517
+ class: "flex items-center",
518
+ key: x,
519
+ style: { width: "calc((100% - 10px) / 2)" }
520
+ }, [
521
+ f(m, {
522
+ class: "[&>label]:text-sm [&>label]:text-gray-800 [&>label]:ms-3 !gap-x-[1px] !p-0",
523
+ modelValue: r.cols,
524
+ "onUpdate:modelValue": e[1] || (e[1] = (h) => r.cols = h),
525
+ value: c == null ? void 0 : c.name,
526
+ label: c == null ? void 0 : c.ua
527
+ }, null, 8, ["modelValue", "value", "label"])
528
+ ]))), 128))
529
+ ])
530
+ ]),
531
+ l("div", pt, [
532
+ e[10] || (e[10] = l("h2", { class: "text-sm text-gray-500" }, "Виберіть формат таблиці:", -1)),
533
+ l("div", bt, [
534
+ (s(!0), a($, null, I(r.tableFormats, (c, x) => (s(), a("div", {
535
+ class: "flex items-center",
536
+ key: x
537
+ }, [
538
+ l("input", {
539
+ type: "radio",
540
+ name: "hs-pro-duecmfm",
541
+ class: "text-blue-600 border-gray-300 rounded-full shrink-0 focus:ring-blue-500 disabled:opacity-50 disabled:pointer-events-none dark:bg-neutral-800 dark:border-neutral-500 dark:checked:bg-blue-500 dark:checked:border-blue-500 dark:focus:ring-offset-gray-800",
542
+ id: c,
543
+ onChange: (h) => o.selectFormat(c)
544
+ }, null, 40, ft),
545
+ l("label", {
546
+ for: c,
547
+ class: "text-sm text-gray-800 ms-3 dark:text-neutral-400"
548
+ }, " Формат " + S(c), 9, mt)
549
+ ]))), 128))
550
+ ])
551
+ ])
552
+ ]))
553
+ ]),
554
+ _: 1
555
+ }, 8, ["visible"])
556
+ ], 64);
557
+ }
558
+ const _t = /* @__PURE__ */ _(lt, [["render", yt]]), kt = {}, vt = {
559
+ xmlns: "http://www.w3.org/2000/svg",
560
+ viewBox: "0 0 24 24",
561
+ fill: "none",
562
+ stroke: "currentColor",
563
+ "stroke-width": "2",
564
+ "stroke-linecap": "round",
565
+ "stroke-linejoin": "round",
566
+ class: "icon icon-tabler icons-tabler-outline icon-tabler-columns"
567
+ };
568
+ function wt(t, e, n, i, r, o) {
569
+ return s(), a("svg", vt, e[0] || (e[0] = [
570
+ j('<path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M4 6l5.5 0"></path><path d="M4 10l5.5 0"></path><path d="M4 14l5.5 0"></path><path d="M4 18l5.5 0"></path><path d="M14.5 6l5.5 0"></path><path d="M14.5 10l5.5 0"></path><path d="M14.5 14l5.5 0"></path><path d="M14.5 18l5.5 0"></path>', 9)
571
+ ]));
572
+ }
573
+ const Ct = /* @__PURE__ */ _(kt, [["render", wt]]), $t = {
574
+ props: { column: Object },
575
+ emits: ["update-column"],
576
+ data() {
577
+ return {
578
+ value: !1
579
+ };
580
+ },
581
+ watch: {
582
+ value(t) {
583
+ this.$emit("update-column", { ...this.column, hidden: !t });
584
+ }
585
+ },
586
+ mounted() {
587
+ var t;
588
+ ((t = this.column) == null ? void 0 : t.hidden) !== !0 && (this.value = !0);
589
+ }
590
+ }, St = { class: "flex w-full gap-[8px] items-centr" };
591
+ function It(t, e, n, i, r, o) {
592
+ var u, b;
593
+ return s(), a("label", St, [
594
+ q(l("input", {
595
+ "onUpdate:modelValue": e[0] || (e[0] = (p) => r.value = p),
596
+ type: "checkbox"
597
+ }, null, 512), [
598
+ [_e, r.value]
599
+ ]),
600
+ D(" " + S(((u = n.column) == null ? void 0 : u.ua) || ((b = n.column) == null ? void 0 : b.title)), 1)
601
+ ]);
602
+ }
603
+ const At = /* @__PURE__ */ _($t, [["render", It]]), Tt = {
604
+ components: { IconColumns: Ct, AdminTableColumnsHiddenItem: At },
605
+ emits: ["update-columns"],
606
+ props: { columns: Array },
607
+ methods: {
608
+ updateColumn(t) {
609
+ const e = this.columns.findIndex((i) => (i == null ? void 0 : i.name) === (t == null ? void 0 : t.name)), n = this.columns;
610
+ n[e] = t, this.$emit("update-columns", [...n]);
611
+ }
612
+ }
613
+ }, Vt = { class: "py-2 px-2.5 inline-flex items-center gap-x-1.5 text-xs font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700" }, Dt = { class: "py-[10px] px-[10px] w-[260px]" }, Ft = { class: "flex flex-col gap-[3px] max-h-[400px] w-full overflow-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500" };
614
+ function Mt(t, e, n, i, r, o) {
615
+ const u = d("IconColumns"), b = d("AdminTableColumnsHiddenItem"), p = d("VsPopover");
616
+ return s(), v(p, {
617
+ trigger: "click",
618
+ placement: "bottom"
619
+ }, {
620
+ reference: w(() => [
621
+ l("button", Vt, [
622
+ f(u, {
623
+ height: "20",
624
+ width: "16"
625
+ })
626
+ ])
627
+ ]),
628
+ default: w(() => [
629
+ l("div", Dt, [
630
+ e[0] || (e[0] = l("h2", { class: "text-sm mb-[8px]" }, "Оберіть колонки, щоб приховати", -1)),
631
+ l("ul", Ft, [
632
+ (s(!0), a($, null, I(n.columns, (m, k) => (s(), a("li", { key: k }, [
633
+ f(b, {
634
+ column: m,
635
+ onUpdateColumn: o.updateColumn
636
+ }, null, 8, ["column", "onUpdateColumn"])
637
+ ]))), 128))
638
+ ])
639
+ ])
640
+ ]),
641
+ _: 1
642
+ });
643
+ }
644
+ const jt = /* @__PURE__ */ _(Tt, [["render", Mt]]), qt = {}, zt = {
645
+ class: "hidden sm:block shrink-0 size-3",
646
+ xmlns: "http://www.w3.org/2000/svg",
647
+ fill: "currentColor",
648
+ viewBox: "0 0 16 16"
649
+ };
650
+ function Bt(t, e, n, i, r, o) {
651
+ return s(), a("svg", zt, e[0] || (e[0] = [
652
+ l("path", {
653
+ "fill-rule": "evenodd",
654
+ "clip-rule": "evenodd",
655
+ d: "M8 1C8.55228 1 9 1.44772 9 2V7L14 7C14.5523 7 15 7.44771 15 8C15 8.55228 14.5523 9 14 9L9 9V14C9 14.5523 8.55228 15 8 15C7.44772 15 7 14.5523 7 14V9.00001L2 9.00001C1.44772 9.00001 1 8.5523 1 8.00001C0.999999 7.44773 1.44771 7.00001 2 7.00001L7 7.00001V2C7 1.44772 7.44772 1 8 1Z"
656
+ }, null, -1)
657
+ ]));
658
+ }
659
+ const oe = /* @__PURE__ */ _(qt, [["render", Bt]]), Pt = {}, Lt = { class: "vs-table-interface__table-wrp w-full rounded h-fit overflow-hidden" };
660
+ function Ut(t, e, n, i, r, o) {
661
+ return s(), a("div", Lt, e[0] || (e[0] = [
662
+ j('<div><div class="p-5 min-h-[500px] flex flex-col justify-center items-center text-center"><svg class="w-48 mx-auto" viewBox="0 0 178 90" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="27" y="50.5" width="124" height="39" rx="7.5" fill="currentColor" class="fill-white dark:fill-neutral-800"></rect><rect x="27" y="50.5" width="124" height="39" rx="7.5" stroke="currentColor" class="stroke-gray-50 dark:stroke-neutral-700/10"></rect><rect x="34.5" y="58" width="24" height="24" rx="4" fill="currentColor" class="fill-gray-50 dark:fill-neutral-700/30"></rect><rect x="66.5" y="61" width="60" height="6" rx="3" fill="currentColor" class="fill-gray-50 dark:fill-neutral-700/30"></rect><rect x="66.5" y="73" width="77" height="6" rx="3" fill="currentColor" class="fill-gray-50 dark:fill-neutral-700/30"></rect><rect x="19.5" y="28.5" width="139" height="39" rx="7.5" fill="currentColor" class="fill-white dark:fill-neutral-800"></rect><rect x="19.5" y="28.5" width="139" height="39" rx="7.5" stroke="currentColor" class="stroke-gray-100 dark:stroke-neutral-700/30"></rect><rect x="27" y="36" width="24" height="24" rx="4" fill="currentColor" class="fill-gray-100 dark:fill-neutral-700/70"></rect><rect x="59" y="39" width="60" height="6" rx="3" fill="currentColor" class="fill-gray-100 dark:fill-neutral-700/70"></rect><rect x="59" y="51" width="92" height="6" rx="3" fill="currentColor" class="fill-gray-100 dark:fill-neutral-700/70"></rect><g filter="url(#filter1)"><rect x="12" y="6" width="154" height="40" rx="8" fill="currentColor" class="fill-white dark:fill-neutral-800" shape-rendering="crispEdges"></rect><rect x="12.5" y="6.5" width="153" height="39" rx="7.5" stroke="currentColor" class="stroke-gray-100 dark:stroke-neutral-700/60" shape-rendering="crispEdges"></rect><rect x="20" y="14" width="24" height="24" rx="4" fill="currentColor" class="fill-gray-200 dark:fill-neutral-700"></rect><rect x="52" y="17" width="60" height="6" rx="3" fill="currentColor" class="fill-gray-200 dark:fill-neutral-700"></rect><rect x="52" y="29" width="106" height="6" rx="3" fill="currentColor" class="fill-gray-200 dark:fill-neutral-700"></rect></g><defs><filter id="filter1" x="0" y="0" width="178" height="64" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"><feFlood flood-opacity="0" result="BackgroundImageFix"></feFlood><feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"></feColorMatrix><feOffset dy="6"></feOffset><feGaussianBlur stdDeviation="6"></feGaussianBlur><feComposite in2="hardAlpha" operator="out"></feComposite><feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.03 0"></feColorMatrix><feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_1187_14810"></feBlend><feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_1187_14810" result="shape"></feBlend></filter></defs></svg><div class="max-w-sm mx-auto mt-6"><p class="font-medium text-gray-800 dark:text-neutral-200"> Дані для відображення відсутні </p><p class="mt-2 text-sm text-gray-500 dark:text-neutral-500"> Змініть параметри пошуку або спробуйте пізніше </p></div></div></div>', 1)
663
+ ]));
664
+ }
665
+ const Ot = /* @__PURE__ */ _(Pt, [["render", Ut]]), Et = {
666
+ props: { row: Object, column: Object, table: String }
667
+ };
668
+ function Ht(t, e, n, i, r, o) {
669
+ var u, b, p, m, k, c, x, h;
670
+ return s(), v(ke(
671
+ ((u = n.column) == null ? void 0 : u.format) === "custom" ? (b = n.column) == null ? void 0 : b.component : `table-format-${((m = (p = n.column) == null ? void 0 : p.format) == null ? void 0 : m.toLowerCase()) || "text"}`
672
+ ), {
673
+ onUpdateTable: e[0] || (e[0] = (y) => t.$emit("update-table")),
674
+ name: (k = n.column) == null ? void 0 : k.name,
675
+ data: n.row,
676
+ value: (x = n.row) == null ? void 0 : x[(c = n.column) == null ? void 0 : c.name],
677
+ table: n.table,
678
+ column: n.column,
679
+ edit: (h = n.column) == null ? void 0 : h.edit
680
+ }, null, 40, ["name", "data", "value", "table", "column", "edit"]);
681
+ }
682
+ const ae = /* @__PURE__ */ _(Et, [["render", Ht]]), Nt = {}, Wt = {
683
+ xmlns: "http://www.w3.org/2000/svg",
684
+ viewBox: "0 0 24 24",
685
+ fill: "none",
686
+ stroke: "currentColor",
687
+ "stroke-width": "2",
688
+ "stroke-linecap": "round",
689
+ "stroke-linejoin": "round",
690
+ class: "icon icon-tabler icons-tabler-outline icon-tabler-minus"
691
+ };
692
+ function Rt(t, e, n, i, r, o) {
693
+ return s(), a("svg", Wt, e[0] || (e[0] = [
694
+ l("path", {
695
+ stroke: "none",
696
+ d: "M0 0h24v24H0z",
697
+ fill: "none"
698
+ }, null, -1),
699
+ l("path", { d: "M5 12l14 0" }, null, -1)
700
+ ]));
701
+ }
702
+ const Gt = /* @__PURE__ */ _(Nt, [["render", Rt]]), Zt = {
703
+ components: { IconPlus: oe, IconMinus: Gt },
704
+ props: { title: String },
705
+ data() {
706
+ return { expanded: !1 };
707
+ }
708
+ }, Jt = { class: "hs-accordion" }, Kt = { class: "py-0.5 flex items-center gap-x-0.5 w-full" }, Qt = { class: "text-sm font-medium" }, Xt = { class: "w-full duration-150 before:block before:absolute relative inline-block b cursor-pointer" };
709
+ function Yt(t, e, n, i, r, o) {
710
+ const u = d("IconPlus"), b = d("IconMinus");
711
+ return s(), a("div", null, [
712
+ l("div", null, [
713
+ l("div", Jt, [
714
+ l("div", Kt, [
715
+ l("div", {
716
+ onClick: e[0] || (e[0] = (p) => r.expanded = !r.expanded),
717
+ class: "grow rounded-md cursor-pointer"
718
+ }, [
719
+ l("span", Qt, S(n.title), 1)
720
+ ]),
721
+ l("button", {
722
+ class: "size-6 flex justify-center items-center hover:bg-gray-100 rounded-md",
723
+ onClick: e[1] || (e[1] = (p) => r.expanded = !r.expanded)
724
+ }, [
725
+ r.expanded ? (s(), v(b, {
726
+ key: 1,
727
+ width: "14"
728
+ })) : (s(), v(u, { key: 0 }))
729
+ ])
730
+ ]),
731
+ f(z, { name: "fade" }, {
732
+ default: w(() => [
733
+ q(l("div", Xt, [
734
+ ve(t.$slots, "default", {}, void 0, !0)
735
+ ], 512), [
736
+ [se, r.expanded]
737
+ ])
738
+ ]),
739
+ _: 3
740
+ })
741
+ ])
742
+ ])
743
+ ]);
744
+ }
745
+ const en = /* @__PURE__ */ _(Zt, [["render", Yt], ["__scopeId", "data-v-4139bc00"]]), tn = {
746
+ components: {
747
+ AdminComponentIs: ae,
748
+ AdminTree: en,
749
+ VsNoData: be,
750
+ VsWidgetComments: fe,
751
+ VsWidgetMap: me,
752
+ VsWidgetFileList: ge
753
+ },
754
+ props: { table: String, columns: Array, row: Object }
755
+ }, nn = {
756
+ class: "hs-accordion border-gray-100 w-[360px] shrink-0 overflow-auto [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500",
757
+ style: { height: "calc(100vh - 310px)" }
758
+ }, rn = {
759
+ class: "border-l",
760
+ style: { height: "calc(100vh - 360px)" }
761
+ }, ln = { class: "flex items-center justify-between py-1 gap-x-4" }, sn = { class: "col-span-1" }, on = { class: "inline-flex items-center gap-x-2 text-[13px] text-gray-500 dark:text-neutral-500" }, an = { class: "col-span-2" }, cn = { class: "font-medium text-[13px] text-gray-800 dark:text-neutral-200" }, un = { class: "table-info-card" }, dn = { class: "table-info-card" };
762
+ function hn(t, e, n, i, r, o) {
763
+ var x, h;
764
+ const u = d("AdminComponentIs"), b = d("AdminTree"), p = d("VsWidgetMap"), m = d("VsNoData"), k = d("VsWidgetComments"), c = d("VsWidgetFileList");
765
+ return s(), a("div", nn, [
766
+ e[0] || (e[0] = l("div", { class: "p-[10px] pl-[18px] pb-[18px] border-b" }, [
767
+ l("h2", { class: "text-sm font-medium" }, "Інформація про об'єкт")
768
+ ], -1)),
769
+ l("div", rn, [
770
+ (h = (x = t.$route) == null ? void 0 : x.query) != null && h.card ? (s(), a($, { key: 0 }, [
771
+ n.row ? (s(), v(b, {
772
+ key: 0,
773
+ title: "Основна інформація",
774
+ class: "border-b p-[10px] py-[16px]"
775
+ }, {
776
+ default: w(() => [
777
+ (s(!0), a($, null, I(n.columns, (y) => (s(), a("dl", ln, [
778
+ l("dt", sn, [
779
+ l("p", on, S((y == null ? void 0 : y.ua) || (y == null ? void 0 : y.title)) + ": ", 1)
780
+ ]),
781
+ l("dd", an, [
782
+ l("p", cn, [
783
+ f(u, {
784
+ row: n.row,
785
+ column: y,
786
+ table: n.table
787
+ }, null, 8, ["row", "column", "table"])
788
+ ])
789
+ ])
790
+ ]))), 256))
791
+ ]),
792
+ _: 1
793
+ })) : C("", !0),
794
+ f(b, {
795
+ title: "Карта",
796
+ class: "border-b p-[10px] py-[16px]"
797
+ }, {
798
+ default: w(() => {
799
+ var y, V;
800
+ return [
801
+ (y = n.row) != null && y.geom ? (s(), v(p, {
802
+ key: 0,
803
+ geometry: (V = n.row) == null ? void 0 : V.geom,
804
+ zoom: 14
805
+ }, null, 8, ["geometry"])) : (s(), v(m, {
806
+ key: 1,
807
+ title: "У об'єкта відсутня геометрія",
808
+ text: "",
809
+ class: "[&>div]:h-[200px] [&>div]:min-h-[400px] h-[400px]"
810
+ }))
811
+ ];
812
+ }),
813
+ _: 1
814
+ }),
815
+ f(b, {
816
+ title: "Коментарі",
817
+ class: "border-b p-[10px] py-[16px]"
818
+ }, {
819
+ default: w(() => {
820
+ var y;
821
+ return [
822
+ l("div", un, [
823
+ f(k, {
824
+ id: (y = n.row) == null ? void 0 : y.id
825
+ }, null, 8, ["id"])
826
+ ])
827
+ ];
828
+ }),
829
+ _: 1
830
+ }),
831
+ f(b, {
832
+ title: "Файли",
833
+ class: "border-b p-[10px] py-[16px]"
834
+ }, {
835
+ default: w(() => {
836
+ var y;
837
+ return [
838
+ l("div", dn, [
839
+ f(c, {
840
+ id: (y = n.row) == null ? void 0 : y.id
841
+ }, null, 8, ["id"])
842
+ ])
843
+ ];
844
+ }),
845
+ _: 1
846
+ })
847
+ ], 64)) : (s(), v(m, {
848
+ key: 1,
849
+ text: "Оберіть один з об'єктів в таблиці для відображення інформаціі про нього"
850
+ }))
851
+ ])
852
+ ]);
853
+ }
854
+ const pn = /* @__PURE__ */ _(tn, [["render", hn]]), bn = {}, fn = {
855
+ class: "hidden xl:block shrink-0 size-4",
856
+ xmlns: "http://www.w3.org/2000/svg",
857
+ viewBox: "0 0 24 24",
858
+ fill: "none",
859
+ stroke: "currentColor",
860
+ "stroke-width": "2",
861
+ "stroke-linecap": "round",
862
+ "stroke-linejoin": "round"
863
+ };
864
+ function mn(t, e, n, i, r, o) {
865
+ return s(), a("svg", fn, e[0] || (e[0] = [
866
+ l("rect", {
867
+ width: "18",
868
+ height: "18",
869
+ x: "3",
870
+ y: "3",
871
+ rx: "2"
872
+ }, null, -1),
873
+ l("path", { d: "M15 3v18" }, null, -1),
874
+ l("path", { d: "m8 9 3 3-3 3" }, null, -1)
875
+ ]));
876
+ }
877
+ const gn = /* @__PURE__ */ _(bn, [["render", mn]]), xn = {}, yn = {
878
+ class: "h21yx vs0hq",
879
+ xmlns: "http://www.w3.org/2000/svg",
880
+ width: "24",
881
+ height: "24",
882
+ viewBox: "0 0 24 24",
883
+ fill: "none",
884
+ stroke: "currentColor",
885
+ "stroke-width": "2",
886
+ "stroke-linecap": "round",
887
+ "stroke-linejoin": "round"
888
+ };
889
+ function _n(t, e, n, i, r, o) {
890
+ return s(), a("svg", yn, e[0] || (e[0] = [
891
+ j('<line x1="21" x2="14" y1="4" y2="4"></line><line x1="10" x2="3" y1="4" y2="4"></line><line x1="21" x2="12" y1="12" y2="12"></line><line x1="8" x2="3" y1="12" y2="12"></line><line x1="21" x2="16" y1="20" y2="20"></line><line x1="12" x2="3" y1="20" y2="20"></line><line x1="14" x2="14" y1="2" y2="6"></line><line x1="8" x2="8" y1="10" y2="14"></line><line x1="16" x2="16" y1="18" y2="22"></line>', 9)
892
+ ]));
893
+ }
894
+ const kn = /* @__PURE__ */ _(xn, [["render", _n]]), vn = {
895
+ emits: ["filterChange"],
896
+ props: { scheme: { type: Object }, onFilters: { type: Number } },
897
+ components: { IconFilter: kn },
898
+ data() {
899
+ return {
900
+ isFilters: !1
901
+ };
902
+ },
903
+ methods: {
904
+ closeFilter({ target: t }) {
905
+ this.isFilters && t.classList.contains("filter-container") && (this.isFilters = !1);
906
+ }
907
+ }
908
+ }, wn = {
909
+ key: 0,
910
+ class: "font-medium text-[10px] py-0.5 px-[5px] bg-gray-800 text-white leading-3 rounded-full dark:bg-neutral-500"
911
+ }, Cn = { class: "filter-content h-screen bg-white w-[400px] p-[20px] pt-[10px] overflow-x-auto bg-white [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar:horizontal]:h-[8px] [&::-webkit-scrollbar-track]:bg-gray-100 [&::-webkit-scrollbar-thumb]:bg-gray-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500" };
912
+ function $n(t, e, n, i, r, o) {
913
+ const u = d("IconFilter"), b = d("VsFilter");
914
+ return s(), a($, null, [
915
+ l("button", {
916
+ onClick: e[0] || (e[0] = (p) => r.isFilters = !r.isFilters),
917
+ class: "py-2 px-2.5 inline-flex items-center gap-x-1.5 text-xs font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700"
918
+ }, [
919
+ f(u, {
920
+ height: "16",
921
+ width: "16"
922
+ }),
923
+ e[4] || (e[4] = D(" Фільтри ")),
924
+ n.onFilters ? (s(), a("span", wn, S(n.onFilters), 1)) : C("", !0)
925
+ ]),
926
+ f(z, { name: "fade" }, {
927
+ default: w(() => {
928
+ var p;
929
+ return [
930
+ q(l("div", {
931
+ onClick: e[3] || (e[3] = (...m) => o.closeFilter && o.closeFilter(...m)),
932
+ style: { height: "100vh" },
933
+ class: "fixed filter-container top-0 flex justify-end items-center z-[2] right-0 left-0 bottom-0 bg-[rgba(0,0,0,0.5)]"
934
+ }, [
935
+ l("div", Cn, [
936
+ (p = n.scheme) != null && p.length ? (s(), v(b, {
937
+ key: 0,
938
+ ref: "filter",
939
+ scheme: n.scheme,
940
+ layout: "default",
941
+ "apply-vue-router": "",
942
+ history: "",
943
+ name: "filter",
944
+ onFilterChange: e[1] || (e[1] = (m) => t.$emit("filterChange", m)),
945
+ closeFilterBtn: !0,
946
+ onFilterClose: e[2] || (e[2] = (m) => r.isFilters = !1)
947
+ }, null, 8, ["scheme"])) : C("", !0)
948
+ ])
949
+ ], 512), [
950
+ [se, r.isFilters]
951
+ ])
952
+ ];
953
+ }),
954
+ _: 1
955
+ })
956
+ ], 64);
957
+ }
958
+ const Sn = /* @__PURE__ */ _(vn, [["render", $n]]), In = {
959
+ props: { tabsList: { type: Array, default: () => [] }, filterState: String }
960
+ }, An = {
961
+ class: "relative flex space-x-1 mb-[20px] after:absolute after:w-[99%] after:bottom-0 after:inset-x-0 after:border-b-2 after:border-gray-200 dark:after:border-neutral-700",
962
+ "aria-label": "Tabs",
963
+ role: "tablist",
964
+ "aria-orientation": "horizontal"
965
+ }, Tn = ["onClick"];
966
+ function Vn(t, e, n, i, r, o) {
967
+ return s(), a("nav", An, [
968
+ (s(!0), a($, null, I(n.tabsList, (u) => (s(), a("button", {
969
+ onClick: (b) => t.$emit("update:filterState", u == null ? void 0 : u.name),
970
+ class: A(["hs-tab-active:after:bg-gray-800 hs-tab-active:text-gray-800 px-2.5 py-1.5 mb-2 relative inline-flex justify-center items-center gap-x-2 hover:bg-gray-100 text-gray-500 hover:text-gray-800 text-sm rounded-lg disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-100 after:absolute after:-bottom-2 after:inset-x-0 after:z-10 after:h-0.5 after:pointer-events-none dark:hs-tab-active:text-neutral-200 dark:hs-tab-active:after:bg-neutral-400 dark:text-neutral-500 dark:hover:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700 active", {
971
+ " font-semibold after:absolute after:bottom-[-8px] after:left-2.5 after:right-2.5 after:z-10 after:h-0.5 after:bg-gray-800": (u == null ? void 0 : u.name) === n.filterState
972
+ }])
973
+ }, S(u == null ? void 0 : u.label), 11, Tn))), 256))
974
+ ]);
975
+ }
976
+ const Dn = /* @__PURE__ */ _(In, [["render", Vn]]), Fn = {}, Mn = {
977
+ xmlns: "http://www.w3.org/2000/svg",
978
+ viewBox: "0 0 24 24",
979
+ fill: "none",
980
+ stroke: "currentColor",
981
+ "stroke-width": "2",
982
+ "stroke-linecap": "round",
983
+ "stroke-linejoin": "round",
984
+ class: "icon icon-tabler icons-tabler-outline icon-tabler-filter"
985
+ };
986
+ function jn(t, e, n, i, r, o) {
987
+ return s(), a("svg", Mn, e[0] || (e[0] = [
988
+ l("path", {
989
+ stroke: "none",
990
+ d: "M0 0h24v24H0z",
991
+ fill: "none"
992
+ }, null, -1),
993
+ l("path", { d: "M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z" }, null, -1)
994
+ ]));
995
+ }
996
+ const qn = /* @__PURE__ */ _(Fn, [["render", jn]]), zn = {
997
+ components: { IconFilter2: qn },
998
+ props: { filterCustom: String, customList: Array }
999
+ }, Bn = { class: "py-2 px-2.5 inline-flex items-center gap-x-1.5 text-xs font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700" }, Pn = { class: "flex flex-col gap-[4px]" }, Ln = ["onClick"];
1000
+ function Un(t, e, n, i, r, o) {
1001
+ const u = d("IconFilter2"), b = d("VsPopover");
1002
+ return s(), v(b, {
1003
+ ref: "popover",
1004
+ placement: "bottom"
1005
+ }, {
1006
+ reference: w(() => [
1007
+ l("button", Bn, [
1008
+ f(u, {
1009
+ height: "20",
1010
+ width: "20"
1011
+ })
1012
+ ])
1013
+ ]),
1014
+ default: w(() => [
1015
+ l("div", Pn, [
1016
+ (s(!0), a($, null, I(n.customList, (p, m) => (s(), a("button", {
1017
+ onClick: (k) => {
1018
+ var c;
1019
+ t.$emit("update:filterCustom", p == null ? void 0 : p.name), (c = t.$refs) == null || c.popover.togglePopover();
1020
+ },
1021
+ key: m,
1022
+ class: A(["p-[8px] block rounded-lg w-[140px] text-start hover:bg-gray-100 !duration-300", { "bg-gray-100": n.filterCustom === (p == null ? void 0 : p.name) }])
1023
+ }, S(p == null ? void 0 : p.label), 11, Ln))), 128)),
1024
+ l("button", {
1025
+ class: "p-[8px] block rounded-lg w-[140px] text-start hover:bg-gray-100 !duration-300",
1026
+ onClick: e[0] || (e[0] = (p) => {
1027
+ var m;
1028
+ t.$emit("update:filterCustom", void 0), (m = t.$refs) == null || m.popover.togglePopover();
1029
+ })
1030
+ }, " Скинути фільтри ")
1031
+ ])
1032
+ ]),
1033
+ _: 1
1034
+ }, 512);
1035
+ }
1036
+ const On = /* @__PURE__ */ _(zn, [["render", Un]]), En = (t, e = 300) => {
1037
+ let n;
1038
+ return function(...i) {
1039
+ clearTimeout(n), n = setTimeout(() => {
1040
+ t.apply(this, i);
1041
+ }, e);
1042
+ };
1043
+ }, Hn = {
1044
+ props: { table: String, title: String },
1045
+ components: {
1046
+ AdminTableControl: Je,
1047
+ AdminTableExport: _t,
1048
+ AdminTableColumnsHidden: jt,
1049
+ AdminTableColumn: De,
1050
+ AdminNodata: Ot,
1051
+ IconPlus: oe,
1052
+ IconSearch: xe,
1053
+ AdminTableCardInfo: pn,
1054
+ IconOpenCard: gn,
1055
+ AdminComponentIs: ae,
1056
+ AdminTableFilters: Sn,
1057
+ AdminTableTabs: Dn,
1058
+ AdminTableCustomFilters: On
1059
+ },
1060
+ data() {
1061
+ return {
1062
+ tableData: {},
1063
+ filterScheme: [],
1064
+ page: 1,
1065
+ searchValue: "",
1066
+ limit: 0,
1067
+ filters: null,
1068
+ activeColumn: "",
1069
+ isVisibleCardInfo: !1,
1070
+ onFilters: 0,
1071
+ filterState: null,
1072
+ filterCustom: null,
1073
+ visibleColumns: [],
1074
+ initialHiddenColumns: ""
1075
+ };
1076
+ },
1077
+ async mounted() {
1078
+ await this.checkUrlMounted(), await this.getTableData(), await this.getFilters();
1079
+ },
1080
+ computed: {
1081
+ defaultPage() {
1082
+ var t, e;
1083
+ return ((e = (t = this.$route) == null ? void 0 : t.query) == null ? void 0 : e.page) || 1;
1084
+ },
1085
+ columns() {
1086
+ var t, e;
1087
+ return (e = (t = this.tableData) == null ? void 0 : t.columns) == null ? void 0 : e.filter((n) => (n == null ? void 0 : n.hidden) !== !0);
1088
+ },
1089
+ isForm() {
1090
+ var t;
1091
+ return (t = this.tableData) == null ? void 0 : t.form;
1092
+ },
1093
+ isNoData() {
1094
+ var t, e;
1095
+ return !((t = this.tableData) != null && t.rows) || !((e = this.columns) != null && e.length);
1096
+ },
1097
+ activeCardRow() {
1098
+ var t, e;
1099
+ return ((e = (t = this.tableData) == null ? void 0 : t.rows) == null ? void 0 : e.find((n) => {
1100
+ var i, r;
1101
+ return (n == null ? void 0 : n.id) === ((r = (i = this.$route) == null ? void 0 : i.query) == null ? void 0 : r.card);
1102
+ })) || {};
1103
+ },
1104
+ getActions() {
1105
+ var t;
1106
+ return (t = this.tableData) == null ? void 0 : t.actions;
1107
+ }
1108
+ },
1109
+ watch: {
1110
+ async table() {
1111
+ this.tableData = null, await this.getTableData();
1112
+ },
1113
+ searchValue: {
1114
+ handler: En(async function(t) {
1115
+ var e;
1116
+ await this.getTableData(), this.$router.push({
1117
+ ...this.$route,
1118
+ query: { ...(e = this.$route) == null ? void 0 : e.query, search: t || void 0 }
1119
+ });
1120
+ }, 500),
1121
+ immediate: !0
1122
+ },
1123
+ $route: {
1124
+ handler(t, e) {
1125
+ var n, i;
1126
+ ((n = t == null ? void 0 : t.params) == null ? void 0 : n.catchAll) !== ((i = e == null ? void 0 : e.params) == null ? void 0 : i.catchAll) && (this.visibleColumns = [], this.unmountedData(), this.getFilters());
1127
+ },
1128
+ deep: !0
1129
+ },
1130
+ limit(t) {
1131
+ var e;
1132
+ this.$router.replace({ query: { ...(e = this.$route) == null ? void 0 : e.query, limit: t } });
1133
+ },
1134
+ filterState(t) {
1135
+ var e;
1136
+ t && (this.$router.replace({
1137
+ ...this.$route,
1138
+ query: { ...(e = this.$route) == null ? void 0 : e.query, filterState: t }
1139
+ }), this.getTableData());
1140
+ },
1141
+ filterCustom(t) {
1142
+ var e;
1143
+ this.$router.replace({
1144
+ ...this.$route,
1145
+ query: { ...(e = this.$route) == null ? void 0 : e.query, filterCustom: t }
1146
+ }), this.getTableData();
1147
+ },
1148
+ columns(t) {
1149
+ var e, n, i, r;
1150
+ this.visibleColumns = t == null ? void 0 : t.map((o) => o == null ? void 0 : o.name), this.initialHiddenColumns === ((e = this.visibleColumns) == null ? void 0 : e.join(",")) && (this.visibleColumns = []), this.$router.replace({
1151
+ ...this.$route,
1152
+ query: {
1153
+ ...(n = this.$route) == null ? void 0 : n.query,
1154
+ columns: (i = this.visibleColumns) != null && i.length ? (r = this.visibleColumns) == null ? void 0 : r.join(",") : void 0
1155
+ }
1156
+ });
1157
+ }
1158
+ },
1159
+ methods: {
1160
+ async checkUrlMounted() {
1161
+ var t, e, n, i, r, o, u, b, p, m, k, c, x, h;
1162
+ this.page = ((e = (t = this.$route) == null ? void 0 : t.query) == null ? void 0 : e.page) || 1, this.limit = ((i = (n = this.$route) == null ? void 0 : n.query) == null ? void 0 : i.limit) || 20, this.filterState = ((o = (r = this.$route) == null ? void 0 : r.query) == null ? void 0 : o.filterState) || null, this.filterCustom = ((b = (u = this.$route) == null ? void 0 : u.query) == null ? void 0 : b.filterCustom) || null, this.searchValue = ((m = (p = this.$route) == null ? void 0 : p.query) == null ? void 0 : m.search) || null, this.visibleColumns = ((x = (c = (k = this.$route) == null ? void 0 : k.query) == null ? void 0 : c.columns) == null ? void 0 : x.split(",")) || [], (h = this.$route) != null && h.query.card && (this.isVisibleCardInfo = !0);
1163
+ },
1164
+ rowWidth(t) {
1165
+ var n, i;
1166
+ const e = (i = (n = this.tableData) == null ? void 0 : n.columns) == null ? void 0 : i.find((r) => r.name === t);
1167
+ if (e) {
1168
+ const r = e == null ? void 0 : e.width;
1169
+ return r != null && r.includes("px") ? r : `${r}px`;
1170
+ }
1171
+ },
1172
+ unmountedData() {
1173
+ this.page = 1, this.visibleColumns = [], this.filterCustom = null, this.filterState = null, this.isVisibleCardInfo = !1, this.filterScheme = null, this.filters = null, this.onFilters = 0, this.searchValue = "";
1174
+ },
1175
+ async getTableData() {
1176
+ var t, e, n, i, r, o, u, b, p, m, k;
1177
+ try {
1178
+ const { data: c } = await T.get(`/api/template/table/${this.table}`), x = await T.get(`/api/table-data/${this.table}`, {
1179
+ params: {
1180
+ page: this.page,
1181
+ search: this.searchValue || null,
1182
+ limit: this.limit,
1183
+ filter: this.filters || null,
1184
+ order: ((e = (t = this.$route) == null ? void 0 : t.query) == null ? void 0 : e.sort) || null,
1185
+ state: this.filterState || null,
1186
+ custom: this.filterCustom || null
1187
+ }
1188
+ });
1189
+ this.tableData = {
1190
+ ...c,
1191
+ ...(x == null ? void 0 : x.data) || {}
1192
+ }, this.initialHiddenColumns = (o = (r = (i = (n = this.tableData) == null ? void 0 : n.columns) == null ? void 0 : i.filter((h) => (h == null ? void 0 : h.hidden) !== !0)) == null ? void 0 : r.map((h) => h == null ? void 0 : h.name)) == null ? void 0 : o.join(","), (u = this.visibleColumns) != null && u.length ? (b = this.tableData) == null || b.columns.forEach((h) => {
1193
+ var y;
1194
+ (y = this.visibleColumns) != null && y.includes(h == null ? void 0 : h.name) ? h.hidden = !1 : h.hidden = !0;
1195
+ }) : this.visibleColumns = (k = (m = (p = this.tableData) == null ? void 0 : p.columns) == null ? void 0 : m.filter((h) => (h == null ? void 0 : h.hidden) !== !0)) == null ? void 0 : k.map((h) => h == null ? void 0 : h.name);
1196
+ } catch {
1197
+ }
1198
+ },
1199
+ async getFilters() {
1200
+ var t;
1201
+ try {
1202
+ const { data: e } = await T.get(`/api/table-filter/${this.table}`);
1203
+ this.filterScheme = (t = e == null ? void 0 : e.list) == null ? void 0 : t.map((n) => ({
1204
+ ...n,
1205
+ label: (n == null ? void 0 : n.label) || (n == null ? void 0 : n.ua)
1206
+ }));
1207
+ } catch {
1208
+ }
1209
+ },
1210
+ async handlePageChange(t) {
1211
+ const e = this.$route.query;
1212
+ this.page = t, !(!(e != null && e.page) && t === 1 || e.page === t) && (await this.$router.replace({ query: { ...e, page: t } }), await this.getTableData());
1213
+ },
1214
+ async changeLimit(t) {
1215
+ this.limit = await t, this.defaultPage = 1, await this.getTableData();
1216
+ },
1217
+ async filterChange({ url: t, state: e }) {
1218
+ var n;
1219
+ this.filters = t !== "no-url" ? t : null, this.onFilters = (n = Object.entries(e)) == null ? void 0 : n.length, this.page = 1, await this.getTableData();
1220
+ },
1221
+ changeActiveColumn(t) {
1222
+ this.activeColumn = t, this.getTableData();
1223
+ },
1224
+ pushToCard(t) {
1225
+ var e;
1226
+ ((e = this.tableData) == null ? void 0 : e.card) === !1 || this.$router.push(`/card/${this.table}/${t}`);
1227
+ },
1228
+ changeActiveCardInfo(t) {
1229
+ var e;
1230
+ this.isVisibleCardInfo && this.$router.push({
1231
+ ...this.$route,
1232
+ query: { ...(e = this.$route) == null ? void 0 : e.query, card: t }
1233
+ });
1234
+ },
1235
+ toggleCardInfo() {
1236
+ var t;
1237
+ this.isVisibleCardInfo = !this.isVisibleCardInfo, this.isVisibleCardInfo || this.$router.push({
1238
+ ...this.$route,
1239
+ query: { ...(t = this.$route) == null ? void 0 : t.query, card: void 0 }
1240
+ });
1241
+ }
1242
+ }
1243
+ }, Nn = { class: "w-[calc(100vw - 320px)] bg-gray-50" }, Wn = { class: "h-[76px] mt-[15px] flex items-center justify-between mx-[20px] px-[20px] bg-white border rounded-xl" }, Rn = { class: "text-xl font-medium" }, Gn = {
1244
+ style: { height: "calc(100vh - 155px)", width: "calc(100vw - 260px)" },
1245
+ class: "bg-gray-50 p-[20px] flex pt-[10px]"
1246
+ }, Zn = { class: "bg-white w-full rounded-xl border p-[20px] pr-0" }, Jn = { class: "flex" }, Kn = { class: "flex gap-[6px] ml-auto" }, Qn = { class: "inline-block w-full align-middle" }, Xn = {
1247
+ key: 0,
1248
+ class: "relative min-w-full divide-y divide-gray-200 table-fixed dark:divide-neutral-700"
1249
+ }, Yn = { class: "sticky top-[-1px] bg-white w-full after:absolute after:content-[''] after:block after:w-full after:h-px after:bg-stone-200" }, er = { class: "right-0 border-t border-stone-200" }, tr = { class: "divide-y divide-gray-200" }, nr = { class: "px-4 py-3 text-sm text-gray-600" }, rr = ["onClick"], lr = ["onClick"], sr = {
1250
+ key: 0,
1251
+ class: "text-center sticky right-0 bg-white w-[80px] px-[10px]"
1252
+ }, or = { class: "p-[20px] flex justify-start items-center w-full" }, ar = { class: "w-[200px]" }, ir = { class: "text-sm text-gray-600 dark:text-neutral-400" }, cr = { class: "font-semibold text-gray-800 dark:text-neutral-200" }, ur = { class: "font-semibold text-gray-800 dark:text-neutral-200" };
1253
+ function dr(t, e, n, i, r, o) {
1254
+ var B, P, L, U, O, E, H, N, W, R, G, Z, J, K, Q, X;
1255
+ const u = d("IconPlus"), b = d("router-link"), p = d("AdminTableTabs"), m = d("IconSearch"), k = d("VsText"), c = d("AdminTableCustomFilters"), x = d("AdminTableColumnsHidden"), h = d("AdminTableExport"), y = d("AdminTableFilters"), V = d("IconOpenCard"), F = d("AdminTableColumn"), M = d("AdminComponentIs"), ie = d("AdminTableControl"), ce = d("AdminNodata"), ue = d("VsPagination"), de = d("AdminTableCardInfo");
1256
+ return s(), a("div", Nn, [
1257
+ l("div", Wn, [
1258
+ l("h2", Rn, S(n.title), 1),
1259
+ o.isForm ? (s(), v(b, {
1260
+ key: 0,
1261
+ to: `/add?table=${(P = (B = t.$route) == null ? void 0 : B.params) == null ? void 0 : P.catchAll}`,
1262
+ class: "inline-flex items-center px-3 py-2 text-sm font-medium text-white duration-300 bg-blue-600 border border-transparent rounded-lg gap-x-2 hover:bg-blue-700 hover:text-white"
1263
+ }, {
1264
+ default: w(() => [
1265
+ f(u, {
1266
+ height: "16",
1267
+ width: "16"
1268
+ }),
1269
+ e[5] || (e[5] = D(" Додати "))
1270
+ ]),
1271
+ _: 1
1272
+ }, 8, ["to"])) : C("", !0)
1273
+ ]),
1274
+ l("div", Gn, [
1275
+ l("div", Zn, [
1276
+ (U = (L = r.tableData) == null ? void 0 : L.filterState) != null && U.length ? (s(), v(p, {
1277
+ key: 0,
1278
+ tabsList: (O = r.tableData) == null ? void 0 : O.filterState,
1279
+ filterState: r.filterState,
1280
+ "onUpdate:filterState": e[0] || (e[0] = (g) => r.filterState = g)
1281
+ }, null, 8, ["tabsList", "filterState"])) : C("", !0),
1282
+ l("div", Jn, [
1283
+ l("div", {
1284
+ class: A([r.isVisibleCardInfo ? "w-[calc(100%-360px)]" : "w-full"])
1285
+ }, [
1286
+ l("div", {
1287
+ class: A(["flex sm:grid sm:grid-cols-2 gap-x-2 sm:gap-x-5 mb-[10px] relative", { "pr-[20px]": !r.isVisibleCardInfo }])
1288
+ }, [
1289
+ f(m, {
1290
+ height: "14",
1291
+ width: "14",
1292
+ class: "absolute top-[10px] left-[14px] text-gray-500 z-[1]"
1293
+ }),
1294
+ f(k, {
1295
+ modelValue: r.searchValue,
1296
+ "onUpdate:modelValue": e[1] || (e[1] = (g) => r.searchValue = g),
1297
+ placeholder: "Пошук...",
1298
+ clearable: !0,
1299
+ class: "[&>input]:py-[7px] [&>input]:ps-10 [&>input]:pe-8 [&>input]:block [&>input]:w-full [&>input]:bg-gray-100 [&>input]:border-transparent [&>input]:rounded-lg [&>input]:text-sm [&>input]:focus:bg-white [&>input]:focus:border-blue-500 [&>input]:focus:ring-blue-500 [&>input]:disabled:opacity-50 [&>input]:disabled:pointer-events-none [&>input]:dark:bg-neutral-700 [&>input]:dark:border-transparent [&>input]:dark:text-neutral-400 [&>input]:dark:placeholder:text-neutral-400 dark:focus:bg-neutral-800 dark:focus:ring-neutral-600"
1300
+ }, null, 8, ["modelValue"]),
1301
+ l("div", Kn, [
1302
+ (H = (E = r.tableData) == null ? void 0 : E.filterCustom) != null && H.length ? (s(), v(c, {
1303
+ key: 0,
1304
+ customList: (N = r.tableData) == null ? void 0 : N.filterCustom,
1305
+ filterCustom: r.filterCustom,
1306
+ "onUpdate:filterCustom": e[2] || (e[2] = (g) => r.filterCustom = g)
1307
+ }, null, 8, ["customList", "filterCustom"])) : C("", !0),
1308
+ f(x, {
1309
+ columns: (W = r.tableData) == null ? void 0 : W.columns,
1310
+ onUpdateColumns: e[3] || (e[3] = (g) => r.tableData.columns = g)
1311
+ }, null, 8, ["columns"]),
1312
+ f(h, {
1313
+ table: n.table,
1314
+ columns: (R = r.tableData) == null ? void 0 : R.columns,
1315
+ page: r.page,
1316
+ "filter-state": r.filterState,
1317
+ "filter-custom": r.filterCustom,
1318
+ filters: r.filters
1319
+ }, null, 8, ["table", "columns", "page", "filter-state", "filter-custom", "filters"]),
1320
+ f(y, {
1321
+ scheme: r.filterScheme,
1322
+ onFilters: r.onFilters,
1323
+ onFilterChange: o.filterChange
1324
+ }, null, 8, ["scheme", "onFilters", "onFilterChange"]),
1325
+ l("button", {
1326
+ onClick: e[4] || (e[4] = (...g) => o.toggleCardInfo && o.toggleCardInfo(...g)),
1327
+ class: "py-2 px-2.5 inline-flex items-center gap-x-1.5 text-xs font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700"
1328
+ }, [
1329
+ f(V, {
1330
+ class: A({ "rotate-180 duration-300": !r.isVisibleCardInfo })
1331
+ }, null, 8, ["class"])
1332
+ ])
1333
+ ])
1334
+ ], 2),
1335
+ l("div", {
1336
+ class: A(["flex items-start justify-start w-full space-y-5", { "pr-[20px]": !r.isVisibleCardInfo }])
1337
+ }, [
1338
+ l("div", {
1339
+ style: le({
1340
+ height: (Z = (G = r.tableData) == null ? void 0 : G.filterState) != null && Z.length ? "calc(100vh - 370px)" : "calc(100vh - 330px)"
1341
+ }),
1342
+ class: "overflow-x-auto w-full [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-stone-100 [&::-webkit-scrollbar-thumb]:bg-stone-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"
1343
+ }, [
1344
+ l("div", Qn, [
1345
+ o.isNoData ? (s(), v(ce, { key: 1 })) : (s(), a("table", Xn, [
1346
+ l("thead", Yn, [
1347
+ l("tr", er, [
1348
+ (s(!0), a($, null, I(o.columns, (g) => (s(), v(F, {
1349
+ key: g.name,
1350
+ style: le({
1351
+ width: o.rowWidth(g == null ? void 0 : g.name),
1352
+ textAlign: g == null ? void 0 : g.align,
1353
+ wordBreak: g.wrap
1354
+ }),
1355
+ data: g,
1356
+ activeColumn: r.activeColumn,
1357
+ onChangeActive: o.changeActiveColumn
1358
+ }, null, 8, ["style", "data", "activeColumn", "onChangeActive"]))), 128)),
1359
+ e[6] || (e[6] = l("th", { class: "w-[70px] sticky right-0 top-0" }, null, -1))
1360
+ ])
1361
+ ]),
1362
+ l("tbody", tr, [
1363
+ (s(!0), a($, null, I((J = r.tableData) == null ? void 0 : J.rows, (g, he) => {
1364
+ var Y, ee, te;
1365
+ return s(), a("tr", { key: he }, [
1366
+ l("td", nr, [
1367
+ l("button", {
1368
+ onClick: () => o.pushToCard(g == null ? void 0 : g.id),
1369
+ class: A(["text-sm font-medium", [
1370
+ ((Y = r.tableData) == null ? void 0 : Y.card) === !1 ? "" : "text-blue-600 decoration-2 focus:outline-none focus:underline hover:text-blue-600 hover:underline"
1371
+ ]])
1372
+ }, [
1373
+ f(M, {
1374
+ row: g,
1375
+ column: o.columns[0],
1376
+ table: n.table,
1377
+ onUpdateTable: o.getTableData
1378
+ }, null, 8, ["row", "column", "table", "onUpdateTable"])
1379
+ ], 10, rr)
1380
+ ]),
1381
+ (s(!0), a($, null, I((ee = o.columns) == null ? void 0 : ee.slice(1), (ne) => (s(), a("td", {
1382
+ onClick: (mr) => o.changeActiveCardInfo(g == null ? void 0 : g.id),
1383
+ class: A(["px-3 py-3 text-sm text-gray-600 text-start whitespace-nowrap", { "cursor-pointer": r.isVisibleCardInfo }]),
1384
+ key: ne.name
1385
+ }, [
1386
+ f(M, {
1387
+ row: g,
1388
+ column: ne,
1389
+ table: n.table,
1390
+ onUpdateTable: o.getTableData
1391
+ }, null, 8, ["row", "column", "table", "onUpdateTable"])
1392
+ ], 10, lr))), 128)),
1393
+ (te = o.getActions) != null && te.length ? (s(), a("td", sr, [
1394
+ f(ie, {
1395
+ actions: o.getActions,
1396
+ isForm: o.isForm,
1397
+ item: g,
1398
+ table: n.table,
1399
+ onUpdateTable: o.getTableData
1400
+ }, null, 8, ["actions", "isForm", "item", "table", "onUpdateTable"])
1401
+ ])) : C("", !0)
1402
+ ]);
1403
+ }), 128))
1404
+ ])
1405
+ ]))
1406
+ ])
1407
+ ], 4)
1408
+ ], 2),
1409
+ l("div", or, [
1410
+ l("div", ar, [
1411
+ l("p", ir, [
1412
+ l("span", cr, S(r.filters || r.searchValue ? "Знайдено" : "Об'єктів") + " " + S(((K = r.tableData) == null ? void 0 : K.count) || 0) + " з ", 1),
1413
+ l("span", ur, S(((Q = r.tableData) == null ? void 0 : Q.total) || 0), 1)
1414
+ ])
1415
+ ]),
1416
+ r.limit ? (s(), v(ue, {
1417
+ key: 0,
1418
+ goTo: !1,
1419
+ class: "justify-end",
1420
+ "default-page": parseInt(o.defaultPage),
1421
+ total: ((X = r.tableData) == null ? void 0 : X.total) || 0,
1422
+ pageSize: parseInt(r.limit),
1423
+ onPageChange: o.handlePageChange,
1424
+ pageSizes: [10, 16, 20],
1425
+ onPageSizeChange: o.changeLimit
1426
+ }, null, 8, ["default-page", "total", "pageSize", "onPageChange", "onPageSizeChange"])) : C("", !0)
1427
+ ])
1428
+ ], 2),
1429
+ f(z, { name: "slide-fade" }, {
1430
+ default: w(() => [
1431
+ r.isVisibleCardInfo ? (s(), v(de, {
1432
+ key: 0,
1433
+ table: n.table,
1434
+ columns: o.columns,
1435
+ row: o.activeCardRow
1436
+ }, null, 8, ["table", "columns", "row"])) : C("", !0)
1437
+ ]),
1438
+ _: 1
1439
+ })
1440
+ ])
1441
+ ])
1442
+ ])
1443
+ ]);
1444
+ }
1445
+ const hr = /* @__PURE__ */ _(Hn, [["render", dr], ["__scopeId", "data-v-9bc6aceb"]]), pr = {
1446
+ components: { AdminTable: hr },
1447
+ data() {
1448
+ return {
1449
+ table: !1,
1450
+ interface: "",
1451
+ title: ""
1452
+ };
1453
+ },
1454
+ watch: {
1455
+ $route: {
1456
+ async handler() {
1457
+ var t;
1458
+ (t = re) != null && t.value || await this.getMenu(), await this.checkPageType();
1459
+ },
1460
+ deep: !0
1461
+ },
1462
+ title(t) {
1463
+ t && (document.title = t);
1464
+ }
1465
+ },
1466
+ async mounted() {
1467
+ await this.checkPageType();
1468
+ },
1469
+ methods: {
1470
+ flattenMenu(t) {
1471
+ const e = [];
1472
+ return t.forEach((n) => {
1473
+ n.menu ? e.push(...this.flattenMenu(n.menu)) : e.push(n);
1474
+ }), e;
1475
+ },
1476
+ async checkPageType() {
1477
+ var i, r;
1478
+ const t = this.flattenMenu(re.value);
1479
+ t != null && t.length || this.$router.replace("/404");
1480
+ const e = t == null ? void 0 : t.find((o) => {
1481
+ var u, b;
1482
+ return (o == null ? void 0 : o.path) == ((b = (u = this.$route) == null ? void 0 : u.params) == null ? void 0 : b.catchAll);
1483
+ });
1484
+ this.title = e == null ? void 0 : e.ua, e || this.$router.replace("/404"), e != null && e.component && this.$router.replace((r = (i = this.$route) == null ? void 0 : i.params) == null ? void 0 : r.catchAll);
1485
+ const n = e == null ? void 0 : e.table;
1486
+ this.table = n || !1, !n && this.getInterface();
1487
+ },
1488
+ async getInterface() {
1489
+ var t, e;
1490
+ try {
1491
+ const { data: n } = await T.get(
1492
+ `/api/template/interface/${((e = (t = this.$route) == null ? void 0 : t.params) == null ? void 0 : e.catchAll) || ""}`
1493
+ );
1494
+ this.interface = n || "";
1495
+ } catch {
1496
+ this.interface = "";
1497
+ }
1498
+ }
1499
+ }
1500
+ }, br = ["innerHTML"];
1501
+ function fr(t, e, n, i, r, o) {
1502
+ const u = d("AdminTable");
1503
+ return r.table ? (s(), v(u, {
1504
+ key: 0,
1505
+ table: r.table,
1506
+ title: r.title
1507
+ }, null, 8, ["table", "title"])) : (s(), a("div", {
1508
+ key: 1,
1509
+ class: "w-full bg-gray-50",
1510
+ style: { height: "calc(100vh - 120px)" },
1511
+ innerHTML: r.interface
1512
+ }, null, 8, br));
1513
+ }
1514
+ const _r = /* @__PURE__ */ _(pr, [["render", fr]]);
1515
+ export {
1516
+ _r as default
1517
+ };