@opengis/cms 0.0.57 → 0.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/AddNewItemInTree-05PSSEFi.js +76 -0
- package/dist/ArticlesPage-BjYzvTWM.js +298 -0
- package/dist/CollectionsBreadcrumb-HePNJb-d.js +4 -0
- package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-BJh-tjam.js +53 -0
- package/dist/CollectionsPage-DHfPNql6.js +124 -0
- package/dist/{CreateForm-BMOBeP4G.js → CreateForm-5FvT45vH.js} +1 -1
- package/dist/Dashboard-CXkg_pk8.js +358 -0
- package/dist/EditCollectionPage-CqYHpEON.js +187 -0
- package/dist/{EmptyData-DaZt_nAm.js → EmptyData-DxPrSXhV.js} +1 -1
- package/dist/{MenuAddPage-Bf48Z-ah.js → MenuAddPage-QTnwCoGh.js} +40 -35
- package/dist/MenuBody-Bi0ONVZf.js +125 -0
- package/dist/MenuItemPage-B7Y9KFyb.js +1027 -0
- package/dist/MenuList-BLIpeqSd.js +172 -0
- package/dist/MenuPage-3W6jZ15H.js +107 -0
- package/dist/MenuWrapper-OrOv6sOb.js +12 -0
- package/dist/MonacoEditor-ByPT8pnv.js +4 -0
- package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-C8cip9Ci.js +84 -0
- package/dist/{UniversalTable.vue_vue_type_script_setup_true_lang-CJGTsd1V.js → UniversalTable-GBd_pStq.js} +81 -81
- package/dist/{UniversalTablePagination.vue_vue_type_script_setup_true_lang-GYZd_gkA.js → UniversalTablePagination-Dw2hc0nc.js} +47 -47
- package/dist/VsFormTags-CMjiu9sY.js +114 -0
- package/dist/VsPreview-DwETkOpb.js +63 -0
- package/dist/contentForm-Buku-lel.js +489 -0
- package/dist/getField-CpwVE28P.js +179 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +72 -71
- package/dist/style.css +1 -1
- package/dist/vs-builder-edit-D-q1o8tF.js +604 -0
- package/dist/vs-builder-monaco-Cw-f19gc.js +33 -0
- package/dist/vs-builder-preview-BH4VAM3a.js +44 -0
- package/dist/vs-form-custom-datatable-BDZo48w3.js +317 -0
- package/dist/vs-form-integer-BZ855R3g.js +61 -0
- package/dist/vs-form-media-select-NY27EaG1.js +837 -0
- package/dist/vs-form-reference-list-Dtv8fJJU.js +1536 -0
- package/dist/vs-form-reletion-link-BhzNQszm.js +34 -0
- package/dist/vs-form-tiptap-DDFQjRjY.js +4 -0
- package/dist/vs-form-tiptap.vue_vue_type_script_setup_true_lang-DGgsqXwg.js +11 -0
- package/dist/vs-richtext-md-C098v_6Q.js +4 -0
- package/dist/vs-richtext-md.vue_vue_type_script_setup_true_lang-Ct8uTV-J.js +14 -0
- package/locales/en.json +1 -0
- package/locales/uk.json +1 -0
- package/package.json +69 -68
- package/server/functions/utils/mock.reply.js +7 -7
- package/server/routes/cms/controllers/getPermissions.js +15 -15
- package/server/routes/cms/controllers/setPermissions.js +49 -49
- package/server/templates/select/core.user_mentioned.sql +1 -1
- package/dist/ArticlesPage-BcR1hbds.js +0 -286
- package/dist/BuilderPage-CK_osM89.js +0 -386
- package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-CnOe9ORD.js +0 -45
- package/dist/CollectionsPage-JfmrHNR_.js +0 -110
- package/dist/EditCollectionPage-Cw3GQYRe.js +0 -809
- package/dist/MenuItemPage-CXn5HC8j.js +0 -1366
- package/dist/MenuPage-tJZtK46W.js +0 -106
- package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-B1DrxmQX.js +0 -84
- package/dist/contentForm-B6gHgGkz.js +0 -586
- package/dist/getField-Y5WXnRR0.js +0 -2948
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineComponent as f, mergeModels as
|
|
2
|
-
import { ChevronLeft as
|
|
3
|
-
const
|
|
1
|
+
import { defineComponent as f, mergeModels as x, useModel as w, computed as h, openBlock as r, createElementBlock as d, createElementVNode as t, toDisplayString as n, createTextVNode as u, createVNode as b, unref as p, Fragment as g, renderList as k, normalizeClass as y } from "vue";
|
|
2
|
+
import { ChevronLeft as _, ChevronRight as $ } from "lucide-vue-next";
|
|
3
|
+
const M = { class: "flex items-center justify-between px-6 py-4 border-t border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-800" }, C = { class: "flex justify-between flex-1 sm:hidden" }, j = { class: "relative inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50" }, P = { class: "relative inline-flex items-center px-4 py-2 ml-3 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50" }, N = { class: "hidden sm:flex-1 sm:flex sm:items-center sm:justify-between" }, T = { class: "text-sm text-slate-600 dark:text-slate-400" }, V = { class: "font-medium text-slate-800 dark:text-slate-100" }, z = { class: "font-medium text-slate-800 dark:text-slate-100" }, B = {
|
|
4
4
|
class: "relative z-0 inline-flex space-x-2 rounded-md shadow-sm",
|
|
5
5
|
"aria-label": "Pagination"
|
|
6
6
|
}, E = ["disabled"], L = { class: "sr-only" }, S = { class: "space-x-1" }, D = {
|
|
@@ -8,7 +8,7 @@ const C = { class: "flex items-center justify-between px-6 py-4 border-t border-
|
|
|
8
8
|
class: "px-2 py-2 text-gray-400"
|
|
9
9
|
}, F = ["onClick"], R = ["disabled"], U = { class: "sr-only" }, G = /* @__PURE__ */ f({
|
|
10
10
|
__name: "UniversalTablePagination",
|
|
11
|
-
props: /* @__PURE__ */
|
|
11
|
+
props: /* @__PURE__ */ x({
|
|
12
12
|
total: {},
|
|
13
13
|
count: {},
|
|
14
14
|
limit: {}
|
|
@@ -17,66 +17,66 @@ const C = { class: "flex items-center justify-between px-6 py-4 border-t border-
|
|
|
17
17
|
pageModifiers: {}
|
|
18
18
|
}),
|
|
19
19
|
emits: ["update:page"],
|
|
20
|
-
setup(
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
-
for (let
|
|
25
|
-
|
|
26
|
-
return
|
|
20
|
+
setup(c) {
|
|
21
|
+
const s = w(c, "page"), i = h(() => Math.ceil(c.total / c.limit)), v = h(() => {
|
|
22
|
+
const a = [];
|
|
23
|
+
if (i.value <= 4) {
|
|
24
|
+
for (let l = 1; l <= i.value; l++)
|
|
25
|
+
a.push(l);
|
|
26
|
+
return a;
|
|
27
27
|
}
|
|
28
|
-
const o = Math.max(2,
|
|
29
|
-
|
|
30
|
-
for (let
|
|
31
|
-
|
|
32
|
-
return m <
|
|
28
|
+
const o = Math.max(2, s.value - 2), m = Math.min(i.value - 1, s.value + 2);
|
|
29
|
+
a.push(1), o > 2 && a.push("ellipsis");
|
|
30
|
+
for (let l = o; l <= m; l++)
|
|
31
|
+
a.push(l);
|
|
32
|
+
return m < i.value - 1 && a.push("ellipsis"), a.push(i.value), a;
|
|
33
33
|
});
|
|
34
|
-
return (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return (e, a) => (r(), d("div", M, [
|
|
35
|
+
t("div", C, [
|
|
36
|
+
t("button", j, n(e.$t("cms.common.pagination.previous")), 1),
|
|
37
|
+
t("button", P, n(e.$t("cms.common.pagination.next")), 1)
|
|
38
38
|
]),
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
u(n(
|
|
43
|
-
|
|
44
|
-
u(" " + n(
|
|
45
|
-
|
|
46
|
-
u(" " + n(
|
|
39
|
+
t("div", N, [
|
|
40
|
+
t("div", null, [
|
|
41
|
+
t("p", T, [
|
|
42
|
+
u(n(e.$t("cms.common.pagination.showing")) + " ", 1),
|
|
43
|
+
t("span", V, n(e.count), 1),
|
|
44
|
+
u(" " + n(e.$t("cms.common.pagination.of")) + " ", 1),
|
|
45
|
+
t("span", z, n(e.total), 1),
|
|
46
|
+
u(" " + n(e.$t("cms.common.pagination.results")), 1)
|
|
47
47
|
])
|
|
48
48
|
]),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
onClick:
|
|
53
|
-
disabled:
|
|
49
|
+
t("div", null, [
|
|
50
|
+
t("nav", B, [
|
|
51
|
+
t("button", {
|
|
52
|
+
onClick: a[0] || (a[0] = (o) => s.value = s.value > 1 ? s.value - 1 : 1),
|
|
53
|
+
disabled: s.value === 1,
|
|
54
54
|
class: "inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors border shadow-sm rounded-md text-xs h-8 w-8 p-0 bg-white border-slate-300 text-slate-600 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed hover:text-accent-foreground hover:bg-slate-50 dark:bg-slate-700 dark:border-slate-600 dark:text-slate-300 dark:hover:bg-slate-600"
|
|
55
55
|
}, [
|
|
56
|
-
|
|
57
|
-
b(
|
|
56
|
+
t("span", L, n(e.$t("cms.common.pagination.previous")), 1),
|
|
57
|
+
b(p(_), { class: "w-5 h-5" })
|
|
58
58
|
], 8, E),
|
|
59
|
-
|
|
60
|
-
(
|
|
59
|
+
t("div", S, [
|
|
60
|
+
(r(!0), d(g, null, k(v.value, (o, m) => (r(), d(g, {
|
|
61
61
|
key: o + "-" + m
|
|
62
62
|
}, [
|
|
63
|
-
o === "ellipsis" ? (
|
|
63
|
+
o === "ellipsis" ? (r(), d("span", D, "...")) : (r(), d("button", {
|
|
64
64
|
key: 1,
|
|
65
|
-
onClick: (
|
|
65
|
+
onClick: (l) => s.value = o,
|
|
66
66
|
class: y(["inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors h-8 w-8 p-0 text-sm rounded-md", {
|
|
67
|
-
"border shadow-sm hover:text-accent-foreground bg-white dark:bg-slate-700 border-slate-300 dark:border-slate-600 text-slate-600 dark:text-slate-300 hover:border-blue-600 hover:bg-slate-50 dark:hover:bg-slate-600": o !==
|
|
68
|
-
"shadow bg-blue-600 hover:bg-blue-700 text-white border-blue-600": o ===
|
|
67
|
+
"border shadow-sm hover:text-accent-foreground bg-white dark:bg-slate-700 border-slate-300 dark:border-slate-600 text-slate-600 dark:text-slate-300 hover:border-blue-600 hover:bg-slate-50 dark:hover:bg-slate-600": o !== s.value,
|
|
68
|
+
"shadow bg-blue-600 hover:bg-blue-700 text-white border-blue-600": o === s.value
|
|
69
69
|
}])
|
|
70
70
|
}, n(o), 11, F))
|
|
71
71
|
], 64))), 128))
|
|
72
72
|
]),
|
|
73
|
-
|
|
74
|
-
onClick:
|
|
75
|
-
disabled:
|
|
73
|
+
t("button", {
|
|
74
|
+
onClick: a[1] || (a[1] = (o) => s.value = s.value < Math.ceil(e.total / e.limit) ? s.value + 1 : Math.ceil(e.total / e.limit)),
|
|
75
|
+
disabled: s.value === Math.ceil(e.total / e.limit),
|
|
76
76
|
class: "inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors border shadow-sm rounded-md text-xs h-8 w-8 p-0 bg-white border-slate-300 text-slate-600 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed hover:text-accent-foreground hover:bg-slate-50 dark:bg-slate-700 dark:border-slate-600 dark:text-slate-300 dark:hover:bg-slate-600"
|
|
77
77
|
}, [
|
|
78
|
-
|
|
79
|
-
b(
|
|
78
|
+
t("span", U, n(e.$t("cms.common.pagination.next")), 1),
|
|
79
|
+
b(p($), { class: "w-5 h-5" })
|
|
80
80
|
], 8, R)
|
|
81
81
|
])
|
|
82
82
|
])
|
|
@@ -85,5 +85,5 @@ const C = { class: "flex items-center justify-between px-6 py-4 border-t border-
|
|
|
85
85
|
}
|
|
86
86
|
});
|
|
87
87
|
export {
|
|
88
|
-
G as
|
|
88
|
+
G as default
|
|
89
89
|
};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { defineAsyncComponent as V, useModel as h, ref as f, provide as S, onMounted as x, nextTick as n, watch as c, computed as N, openBlock as O, createBlock as T, unref as J, createCommentVNode as k } from "vue";
|
|
2
|
+
import { useI18n as z } from "vue-i18n";
|
|
3
|
+
import { notify as B } from "@opengis/core";
|
|
4
|
+
const U = {
|
|
5
|
+
__name: "VsFormTags",
|
|
6
|
+
props: {
|
|
7
|
+
modelValue: { default: () => [] },
|
|
8
|
+
modelModifiers: {}
|
|
9
|
+
},
|
|
10
|
+
emits: ["update:modelValue"],
|
|
11
|
+
setup(g, { expose: d }) {
|
|
12
|
+
const y = V(() => import("@opengis/form")), { t: u } = z(), a = h(g, "modelValue"), i = f({}), s = f(!1);
|
|
13
|
+
S("metaParentValue", a);
|
|
14
|
+
const l = (e) => Array.isArray(e) ? e.map((t) => typeof t == "object" && t !== null && t.id ? t.id : t) : [], p = async (e) => {
|
|
15
|
+
if (!Array.isArray(e) || e.length === 0)
|
|
16
|
+
return [];
|
|
17
|
+
try {
|
|
18
|
+
const r = await (await fetch("/api/tags")).json(), A = (r == null ? void 0 : r.rows) || [];
|
|
19
|
+
return e.map((m) => {
|
|
20
|
+
const o = A.find((b) => b.tag_id === m);
|
|
21
|
+
return o ? { id: o.tag_id, text: o.value, color: o.color } : { id: m, text: "", color: "#ababab" };
|
|
22
|
+
});
|
|
23
|
+
} catch (t) {
|
|
24
|
+
return console.error("Error fetching tags:", t), e.map((r) => ({ id: r, text: "", color: "#ababab" }));
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
x(async () => {
|
|
28
|
+
await n(), await n(), setTimeout(() => {
|
|
29
|
+
var e;
|
|
30
|
+
if (Array.isArray((e = a.value) == null ? void 0 : e.tag_list)) {
|
|
31
|
+
const t = l(a.value.tag_list);
|
|
32
|
+
JSON.stringify(t) !== JSON.stringify(a.value.tag_list) && (a.value.tag_list = t);
|
|
33
|
+
}
|
|
34
|
+
}, 100);
|
|
35
|
+
}), c(
|
|
36
|
+
() => a.value.tag_list,
|
|
37
|
+
(e) => {
|
|
38
|
+
if (Array.isArray(e) && !s.value) {
|
|
39
|
+
const t = l(e);
|
|
40
|
+
JSON.stringify(t) !== JSON.stringify(e) && (a.value.tag_list = t);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{ deep: !0 }
|
|
44
|
+
), c(
|
|
45
|
+
() => a.value,
|
|
46
|
+
(e) => {
|
|
47
|
+
if (e && Array.isArray(e.tag_list) && !s.value) {
|
|
48
|
+
const t = l(e.tag_list);
|
|
49
|
+
JSON.stringify(t) !== JSON.stringify(e.tag_list) && (e.tag_list = t);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{ deep: !0, immediate: !0 }
|
|
53
|
+
), c(
|
|
54
|
+
() => {
|
|
55
|
+
var e;
|
|
56
|
+
return (e = a.value) == null ? void 0 : e.tag_list;
|
|
57
|
+
},
|
|
58
|
+
(e) => {
|
|
59
|
+
Array.isArray(e) && i.value && n(() => {
|
|
60
|
+
i.value && i.value.setValue && i.value.setValue("tag_list", e);
|
|
61
|
+
});
|
|
62
|
+
},
|
|
63
|
+
{ deep: !0 }
|
|
64
|
+
);
|
|
65
|
+
const _ = async (e) => {
|
|
66
|
+
if (e.tag_list && (e.tag_list = l(e.tag_list), a.value.tag_list = e.tag_list), await i.value.validate()) {
|
|
67
|
+
B({
|
|
68
|
+
type: "warning",
|
|
69
|
+
title: u("cms.common.actions.warning"),
|
|
70
|
+
message: u("cms.builder.editFieldFailed")
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
d({
|
|
76
|
+
restoreTagsBeforeSubmit: async () => {
|
|
77
|
+
var e;
|
|
78
|
+
if (s.value = !0, Array.isArray((e = a.value) == null ? void 0 : e.tag_list)) {
|
|
79
|
+
const t = await p(a.value.tag_list);
|
|
80
|
+
a.value.tag_list = t;
|
|
81
|
+
}
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
s.value = !1;
|
|
84
|
+
}, 2e3);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
const v = N(() => {
|
|
88
|
+
var e;
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
key: "tag_list",
|
|
92
|
+
type: "select",
|
|
93
|
+
multiple: !0,
|
|
94
|
+
searchable: !1,
|
|
95
|
+
placeholder: u("cms.builder.tags"),
|
|
96
|
+
data: "tag_id",
|
|
97
|
+
value: ((e = a.value) == null ? void 0 : e.tag_list) || []
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
});
|
|
101
|
+
return (e, t) => a.value ? (O(), T(J(y), {
|
|
102
|
+
key: 0,
|
|
103
|
+
schema: v.value,
|
|
104
|
+
modelValue: a.value,
|
|
105
|
+
"onUpdate:modelValue": [
|
|
106
|
+
t[0] || (t[0] = (r) => a.value = r),
|
|
107
|
+
_
|
|
108
|
+
]
|
|
109
|
+
}, null, 8, ["schema", "modelValue"])) : k("", !0);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
export {
|
|
113
|
+
U as default
|
|
114
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ref as c, onMounted as d, openBlock as l, createElementBlock as n, createElementVNode as u, createTextVNode as v, createVNode as p, unref as w } from "vue";
|
|
2
|
+
import { ExternalLink as y } from "lucide-vue-next";
|
|
3
|
+
const g = { class: "flex justify-end mb-4" }, m = ["href"], $ = ["src"], b = ["src"], k = {
|
|
4
|
+
key: 2,
|
|
5
|
+
class: "w-full h-[80vh] flex items-center justify-center text-gray-500"
|
|
6
|
+
}, j = {
|
|
7
|
+
__name: "VsPreview",
|
|
8
|
+
props: {
|
|
9
|
+
preview_path: {
|
|
10
|
+
type: String,
|
|
11
|
+
default: ""
|
|
12
|
+
},
|
|
13
|
+
slug: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: ""
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
setup(r) {
|
|
19
|
+
const t = c(""), a = c(""), f = async () => {
|
|
20
|
+
var s, e;
|
|
21
|
+
try {
|
|
22
|
+
const i = await (await fetch("/api/settings")).json();
|
|
23
|
+
t.value = ((e = (s = i == null ? void 0 : i.settings) == null ? void 0 : s.site_info) == null ? void 0 : e.previewUrl) || "http://ip.local.softpro.ua";
|
|
24
|
+
} catch (o) {
|
|
25
|
+
console.error("Failed to fetch settings:", o), t.value = "http://ip.local.softpro.ua";
|
|
26
|
+
}
|
|
27
|
+
}, h = async () => {
|
|
28
|
+
var s;
|
|
29
|
+
try {
|
|
30
|
+
const o = await (await fetch("/user")).json();
|
|
31
|
+
a.value = (s = o == null ? void 0 : o.user) == null ? void 0 : s.draftKey;
|
|
32
|
+
} catch (e) {
|
|
33
|
+
console.error("Failed to fetch user:", e);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return d(() => {
|
|
37
|
+
f(), h();
|
|
38
|
+
}), (s, e) => (l(), n("div", null, [
|
|
39
|
+
u("div", g, [
|
|
40
|
+
u("a", {
|
|
41
|
+
href: `${t.value}/uk/${r.preview_path}${r.slug}${a.value ? `?draftKey=${a.value}` : ""}`,
|
|
42
|
+
target: "_blank",
|
|
43
|
+
class: "inline-flex items-center gap-2 px-3 py-1.5 text-black-600 bg-white border border-blue-200 rounded hover:border-blue-300 hover:bg-blue-50 transition-colors duration-200 font-normal cursor-pointer"
|
|
44
|
+
}, [
|
|
45
|
+
e[0] || (e[0] = v(" Переглянути на сайті ", -1)),
|
|
46
|
+
p(w(y), { class: "w-4 h-4" })
|
|
47
|
+
], 8, m)
|
|
48
|
+
]),
|
|
49
|
+
t.value && r.preview_path ? (l(), n("iframe", {
|
|
50
|
+
key: 0,
|
|
51
|
+
src: `${t.value}/uk/${r.preview_path}${r.slug}?hideHeader=true&hideFooter=true${a.value ? `&draftKey=${a.value}` : ""}`,
|
|
52
|
+
class: "w-full h-[80vh]"
|
|
53
|
+
}, null, 8, $)) : t.value ? (l(), n("iframe", {
|
|
54
|
+
key: 1,
|
|
55
|
+
src: `${t.value}/uk/${r.slug}?hideHeader=true&hideFooter=true`,
|
|
56
|
+
class: "w-full h-[80vh]"
|
|
57
|
+
}, null, 8, b)) : (l(), n("div", k, " Loading preview... "))
|
|
58
|
+
]));
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export {
|
|
62
|
+
j as default
|
|
63
|
+
};
|