@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.
Files changed (56) hide show
  1. package/README.md +1 -1
  2. package/dist/AddNewItemInTree-05PSSEFi.js +76 -0
  3. package/dist/ArticlesPage-BjYzvTWM.js +298 -0
  4. package/dist/CollectionsBreadcrumb-HePNJb-d.js +4 -0
  5. package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-BJh-tjam.js +53 -0
  6. package/dist/CollectionsPage-DHfPNql6.js +124 -0
  7. package/dist/{CreateForm-BMOBeP4G.js → CreateForm-5FvT45vH.js} +1 -1
  8. package/dist/Dashboard-CXkg_pk8.js +358 -0
  9. package/dist/EditCollectionPage-CqYHpEON.js +187 -0
  10. package/dist/{EmptyData-DaZt_nAm.js → EmptyData-DxPrSXhV.js} +1 -1
  11. package/dist/{MenuAddPage-Bf48Z-ah.js → MenuAddPage-QTnwCoGh.js} +40 -35
  12. package/dist/MenuBody-Bi0ONVZf.js +125 -0
  13. package/dist/MenuItemPage-B7Y9KFyb.js +1027 -0
  14. package/dist/MenuList-BLIpeqSd.js +172 -0
  15. package/dist/MenuPage-3W6jZ15H.js +107 -0
  16. package/dist/MenuWrapper-OrOv6sOb.js +12 -0
  17. package/dist/MonacoEditor-ByPT8pnv.js +4 -0
  18. package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-C8cip9Ci.js +84 -0
  19. package/dist/{UniversalTable.vue_vue_type_script_setup_true_lang-CJGTsd1V.js → UniversalTable-GBd_pStq.js} +81 -81
  20. package/dist/{UniversalTablePagination.vue_vue_type_script_setup_true_lang-GYZd_gkA.js → UniversalTablePagination-Dw2hc0nc.js} +47 -47
  21. package/dist/VsFormTags-CMjiu9sY.js +114 -0
  22. package/dist/VsPreview-DwETkOpb.js +63 -0
  23. package/dist/contentForm-Buku-lel.js +489 -0
  24. package/dist/getField-CpwVE28P.js +179 -0
  25. package/dist/index.d.ts +8 -0
  26. package/dist/index.js +72 -71
  27. package/dist/style.css +1 -1
  28. package/dist/vs-builder-edit-D-q1o8tF.js +604 -0
  29. package/dist/vs-builder-monaco-Cw-f19gc.js +33 -0
  30. package/dist/vs-builder-preview-BH4VAM3a.js +44 -0
  31. package/dist/vs-form-custom-datatable-BDZo48w3.js +317 -0
  32. package/dist/vs-form-integer-BZ855R3g.js +61 -0
  33. package/dist/vs-form-media-select-NY27EaG1.js +837 -0
  34. package/dist/vs-form-reference-list-Dtv8fJJU.js +1536 -0
  35. package/dist/vs-form-reletion-link-BhzNQszm.js +34 -0
  36. package/dist/vs-form-tiptap-DDFQjRjY.js +4 -0
  37. package/dist/vs-form-tiptap.vue_vue_type_script_setup_true_lang-DGgsqXwg.js +11 -0
  38. package/dist/vs-richtext-md-C098v_6Q.js +4 -0
  39. package/dist/vs-richtext-md.vue_vue_type_script_setup_true_lang-Ct8uTV-J.js +14 -0
  40. package/locales/en.json +1 -0
  41. package/locales/uk.json +1 -0
  42. package/package.json +69 -68
  43. package/server/functions/utils/mock.reply.js +7 -7
  44. package/server/routes/cms/controllers/getPermissions.js +15 -15
  45. package/server/routes/cms/controllers/setPermissions.js +49 -49
  46. package/server/templates/select/core.user_mentioned.sql +1 -1
  47. package/dist/ArticlesPage-BcR1hbds.js +0 -286
  48. package/dist/BuilderPage-CK_osM89.js +0 -386
  49. package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-CnOe9ORD.js +0 -45
  50. package/dist/CollectionsPage-JfmrHNR_.js +0 -110
  51. package/dist/EditCollectionPage-Cw3GQYRe.js +0 -809
  52. package/dist/MenuItemPage-CXn5HC8j.js +0 -1366
  53. package/dist/MenuPage-tJZtK46W.js +0 -106
  54. package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-B1DrxmQX.js +0 -84
  55. package/dist/contentForm-B6gHgGkz.js +0 -586
  56. package/dist/getField-Y5WXnRR0.js +0 -2948
@@ -1,6 +1,6 @@
1
- import { defineComponent as f, mergeModels as p, useModel as w, computed as h, openBlock as d, createElementBlock as c, createElementVNode as e, toDisplayString as n, createTextVNode as u, createVNode as b, unref as g, Fragment as v, renderList as k, normalizeClass as y } from "vue";
2
- import { ChevronLeft as $, ChevronRight as M } from "lucide-vue-next";
3
- const C = { 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" }, _ = { 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 = {
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__ */ p({
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(a) {
21
- const t = w(a, "page"), r = h(() => Math.ceil(a.total / a.limit)), x = h(() => {
22
- const s = [];
23
- if (r.value <= 4) {
24
- for (let i = 1; i <= r.value; i++)
25
- s.push(i);
26
- return s;
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, t.value - 2), m = Math.min(r.value - 1, t.value + 2);
29
- s.push(1), o > 2 && s.push("ellipsis");
30
- for (let i = o; i <= m; i++)
31
- s.push(i);
32
- return m < r.value - 1 && s.push("ellipsis"), s.push(r.value), s;
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 (l, s) => (d(), c("div", C, [
35
- e("div", _, [
36
- e("button", j, n(l.$t("cms.common.pagination.previous")), 1),
37
- e("button", P, n(l.$t("cms.common.pagination.next")), 1)
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
- e("div", N, [
40
- e("div", null, [
41
- e("p", T, [
42
- u(n(l.$t("cms.common.pagination.showing")) + " ", 1),
43
- e("span", V, n(a.count), 1),
44
- u(" " + n(l.$t("cms.common.pagination.of")) + " ", 1),
45
- e("span", z, n(a.total), 1),
46
- u(" " + n(l.$t("cms.common.pagination.results")), 1)
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
- e("div", null, [
50
- e("nav", B, [
51
- e("button", {
52
- onClick: s[0] || (s[0] = (o) => t.value = t.value > 1 ? t.value - 1 : 1),
53
- disabled: t.value === 1,
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
- e("span", L, n(l.$t("cms.common.pagination.previous")), 1),
57
- b(g($), { class: "w-5 h-5" })
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
- e("div", S, [
60
- (d(!0), c(v, null, k(x.value, (o, m) => (d(), c(v, {
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" ? (d(), c("span", D, "...")) : (d(), c("button", {
63
+ o === "ellipsis" ? (r(), d("span", D, "...")) : (r(), d("button", {
64
64
  key: 1,
65
- onClick: (i) => t.value = o,
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 !== t.value,
68
- "shadow bg-blue-600 hover:bg-blue-700 text-white border-blue-600": o === t.value
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
- e("button", {
74
- onClick: s[1] || (s[1] = (o) => t.value = t.value < Math.ceil(a.total / a.limit) ? t.value + 1 : Math.ceil(a.total / a.limit)),
75
- disabled: t.value === Math.ceil(a.total / a.limit),
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
- e("span", U, n(l.$t("cms.common.pagination.next")), 1),
79
- b(g(M), { class: "w-5 h-5" })
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
+ };