@opengis/admin 0.1.70 → 0.1.71

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+ };