@opengis/cms 0.0.58 → 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 +131 -131
- package/dist/{ArticlesPage-CFjE_cw_.js → ArticlesPage-BjYzvTWM.js} +3 -3
- package/dist/{CollectionsBreadcrumb-BCxeRikP.js → CollectionsBreadcrumb-HePNJb-d.js} +1 -1
- package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-BJh-tjam.js +53 -0
- package/dist/{Dashboard-C1eGscNd.js → Dashboard-CXkg_pk8.js} +132 -132
- package/dist/{EditCollectionPage-DIr1tdtn.js → EditCollectionPage-CqYHpEON.js} +2 -2
- package/dist/{MenuAddPage-D-p3gFgm.js → MenuAddPage-QTnwCoGh.js} +1 -1
- package/dist/{MenuBody-rN5j4YBu.js → MenuBody-Bi0ONVZf.js} +2 -2
- package/dist/{MenuItemPage-BoJw885D.js → MenuItemPage-B7Y9KFyb.js} +3 -3
- package/dist/{MenuList-DFEBS0NB.js → MenuList-BLIpeqSd.js} +53 -53
- package/dist/{MenuPage-BCZB_S8j.js → MenuPage-3W6jZ15H.js} +1 -1
- package/dist/{MenuWrapper-AZ_8s-zd.js → MenuWrapper-OrOv6sOb.js} +1 -1
- package/dist/{MonacoEditor-Db-3Jc3E.js → MonacoEditor-ByPT8pnv.js} +1 -1
- package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-C8cip9Ci.js +84 -0
- package/dist/{UniversalTable-CzqPG-tY.js → UniversalTable-GBd_pStq.js} +80 -80
- package/dist/{UniversalTablePagination-4gL47A7I.js → UniversalTablePagination-Dw2hc0nc.js} +46 -46
- package/dist/{contentForm-CtMhQTG0.js → contentForm-Buku-lel.js} +1 -1
- package/dist/index.html +29 -29
- package/dist/index.js +5 -5
- package/dist/{vs-builder-monaco-B3Jj0V31.js → vs-builder-monaco-Cw-f19gc.js} +1 -1
- package/input-types.json +9 -9
- package/locales/en.json +815 -815
- package/locales/uk.json +813 -813
- package/module/cms/cls/content.status.json +17 -17
- package/module/cms/cls/user_type.json +9 -9
- package/module/cms/form/admin.users.form.json +77 -77
- package/module/cms/select/cms.page_type.sql +1 -1
- package/module/cms/select/news_tag_id.sql +11 -11
- package/module/cms/table/admin.users.table.json +53 -53
- package/module/cms/table/collection.default.table.json +96 -96
- package/module/cms/table/single.default.table.json +116 -116
- package/package.json +2 -1
- package/plugin.js +43 -43
- package/server/app.js +35 -35
- package/server/config.js +4 -4
- package/server/functions/getContent.js +45 -45
- package/server/functions/getDraftKey.js +22 -22
- package/server/functions/getSearchData.js +31 -31
- package/server/functions/getTags.js +30 -30
- package/server/functions/getUser.js +27 -27
- package/server/functions/utils/mock.reply.js +55 -55
- package/server/index.js +22 -22
- package/server/migrations/fixes.sql +129 -129
- package/server/migrations/site.sql +595 -595
- package/server/plugins/adminHook.js +78 -78
- package/server/plugins/hook.js +59 -59
- package/server/plugins/vite.js +75 -75
- package/server/routes/category/controllers/cms.category.delete.js +21 -21
- package/server/routes/category/controllers/cms.category.get.js +17 -17
- package/server/routes/category/controllers/cms.category.list.js +16 -16
- package/server/routes/category/controllers/cms.category.post.js +21 -21
- package/server/routes/category/controllers/cms.category.put.js +23 -23
- package/server/routes/category/index.mjs +22 -22
- package/server/routes/cms/controllers/cmsStat.js +55 -55
- package/server/routes/cms/controllers/cmsSuggest.js +57 -57
- package/server/routes/cms/controllers/deleteContent.js +113 -113
- package/server/routes/cms/controllers/deleteMedia.js +76 -76
- package/server/routes/cms/controllers/downloadMedia.js +84 -84
- package/server/routes/cms/controllers/getContent.js +113 -113
- package/server/routes/cms/controllers/getContentBySlug.js +93 -93
- package/server/routes/cms/controllers/getPermissions.js +15 -15
- package/server/routes/cms/controllers/insertContent.js +217 -217
- package/server/routes/cms/controllers/listMedia.js +155 -155
- package/server/routes/cms/controllers/metadataMedia.js +39 -39
- package/server/routes/cms/controllers/properties.get.js +18 -18
- package/server/routes/cms/controllers/properties.post.js +99 -99
- package/server/routes/cms/controllers/searchContent.js +214 -214
- package/server/routes/cms/controllers/setPermissions.js +49 -49
- package/server/routes/cms/controllers/translate.js +89 -89
- package/server/routes/cms/controllers/updateContent.js +266 -266
- package/server/routes/cms/controllers/uploadMedia.js +79 -79
- package/server/routes/cms/functions/getSettings.js +48 -48
- package/server/routes/cms/index.mjs +112 -112
- package/server/routes/cms/utils/additionalData.js +35 -35
- package/server/routes/cms/utils/getCollection.js +89 -89
- package/server/routes/cms/utils/getSingle.js +188 -188
- package/server/routes/cms/utils/inputTypes.js +5 -5
- package/server/routes/cms/utils/insertContentLocalization.js +104 -104
- package/server/routes/cms/utils/requestTranslation.js +85 -85
- package/server/routes/cms/utils/updateLocalization.js +47 -47
- package/server/routes/cmsSpace/controllers/deleteSpace.js +25 -25
- package/server/routes/cmsSpace/controllers/getSpaces.js +27 -27
- package/server/routes/cmsSpace/controllers/insertSpace.js +21 -21
- package/server/routes/cmsSpace/controllers/updateSpace.js +23 -23
- package/server/routes/cmsSpace/index.mjs +20 -20
- package/server/routes/contentType/controllers/addContentType.js +160 -160
- package/server/routes/contentType/controllers/contentTypeList.js +54 -54
- package/server/routes/contentType/controllers/delContentType.js +75 -75
- package/server/routes/contentType/controllers/editContentType.js +88 -88
- package/server/routes/contentType/controllers/getContentType.js +65 -65
- package/server/routes/contentType/index.mjs +35 -35
- package/server/routes/contentType/utils/updateContents.js +44 -44
- package/server/routes/contentType/utils/updateCustomContentTable.js +53 -53
- package/server/routes/feedback/controllers/email.list.js +24 -24
- package/server/routes/feedback/controllers/feedback.js +48 -48
- package/server/routes/feedback/controllers/feedback.list.js +37 -37
- package/server/routes/feedback/controllers/news.subscriptions.js +44 -44
- package/server/routes/feedback/index.mjs +71 -71
- package/server/routes/logs/controllers/export.user.logs.js +77 -77
- package/server/routes/logs/controllers/user.logs.js +44 -44
- package/server/routes/logs/index.mjs +9 -9
- package/server/routes/menu/controllers/addMenu.js +37 -37
- package/server/routes/menu/controllers/delMenu.js +31 -31
- package/server/routes/menu/controllers/editMenu.js +41 -41
- package/server/routes/menu/controllers/getMenu.js +24 -24
- package/server/routes/menu/functions/getMenu.js +50 -50
- package/server/routes/menu/index.mjs +13 -13
- package/server/routes/migration/controllers/collectionToCustom.js +137 -137
- package/server/routes/migration/index.mjs +8 -8
- package/server/routes/root.mjs +8 -8
- package/server/routes/tags/controllers/add.tags.js +24 -24
- package/server/routes/tags/controllers/del.tags.js +19 -19
- package/server/routes/tags/controllers/edit.tags.js +25 -25
- package/server/routes/tags/controllers/get.tags.js +15 -15
- package/server/routes/tags/index.mjs +14 -14
- package/server/templates/cls/cms.category_type.json +9 -9
- package/server/templates/cls/cms.content_review_status.json +9 -9
- package/server/templates/cls/cms.content_status.json +9 -9
- package/server/templates/cls/cms.content_type.json +9 -9
- package/server/templates/cls/cms.lang.json +9 -9
- package/server/templates/page/login.html +126 -126
- package/server/templates/select/core.user_mentioned.sql +1 -1
- package/utils.d.ts +52 -52
- package/utils.js +8 -8
- package/dist/CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-umRzB5mY.js +0 -53
- package/dist/MonacoEditor.vue_vue_type_script_setup_true_lang-B1DrxmQX.js +0 -84
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as h, resolveComponent as S, openBlock as l, createElementBlock as c, createElementVNode as e, toDisplayString as a, unref as u, createVNode as n, withCtx as A, createTextVNode as p, normalizeClass as g, createBlock as _, resolveDynamicComponent as j, Fragment as x, renderList as k, ref as P, onMounted as I } from "vue";
|
|
2
2
|
import { HelpCircle as T, Plus as L, FileText as v, Users as w, Image as U, Eye as F, Calendar as N, SquarePen as R, Activity as V, Zap as z } from "lucide-vue-next";
|
|
3
3
|
import { useI18n as $ } from "vue-i18n";
|
|
4
4
|
import { useRouter as M } from "vue-router";
|
|
5
|
-
const B = { class: "flex items-center justify-between" }, E = { class: "flex items-center gap-2" }, q = { class: "text-4xl font-bold text-slate-800 dark:text-slate-100 mb-2" }, H = ["href", "title"], J = { class: "text-lg text-slate-600 dark:text-slate-300" }, O = /* @__PURE__ */
|
|
5
|
+
const B = { class: "flex items-center justify-between" }, E = { class: "flex items-center gap-2" }, q = { class: "text-4xl font-bold text-slate-800 dark:text-slate-100 mb-2" }, H = ["href", "title"], J = { class: "text-lg text-slate-600 dark:text-slate-300" }, O = /* @__PURE__ */ h({
|
|
6
6
|
__name: "DashboardHeader",
|
|
7
|
-
setup(
|
|
8
|
-
const { locale:
|
|
9
|
-
return (
|
|
10
|
-
const
|
|
11
|
-
return
|
|
7
|
+
setup(b) {
|
|
8
|
+
const { locale: r } = $();
|
|
9
|
+
return (o, t) => {
|
|
10
|
+
const i = S("router-link");
|
|
11
|
+
return l(), c("div", B, [
|
|
12
12
|
e("div", null, [
|
|
13
13
|
e("div", E, [
|
|
14
|
-
e("h1", q,
|
|
14
|
+
e("h1", q, a(o.$t("cms.dashboard.title")), 1),
|
|
15
15
|
e("a", {
|
|
16
|
-
href: `https://cms.opengis.info/${
|
|
16
|
+
href: `https://cms.opengis.info/${u(r)}/get-started/app-overview`,
|
|
17
17
|
target: "_blank",
|
|
18
|
-
title:
|
|
18
|
+
title: o.$t("cms.guide.appOverview")
|
|
19
19
|
}, [
|
|
20
|
-
|
|
20
|
+
n(u(T), { class: "w-5 h-5" })
|
|
21
21
|
], 8, H)
|
|
22
22
|
]),
|
|
23
|
-
e("div", J,
|
|
23
|
+
e("div", J, a(o.$t("cms.dashboard.description")), 1)
|
|
24
24
|
]),
|
|
25
25
|
e("div", null, [
|
|
26
|
-
|
|
26
|
+
n(i, {
|
|
27
27
|
to: "/settings/collections",
|
|
28
28
|
class: "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 shadow h-9 px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white"
|
|
29
29
|
}, {
|
|
30
30
|
default: A(() => [
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
n(u(L), { class: "w-4 h-4 mr-2" }),
|
|
32
|
+
p(" " + a(o.$t("cms.dashboard.newCollection")), 1)
|
|
33
33
|
]),
|
|
34
34
|
_: 1
|
|
35
35
|
})
|
|
@@ -37,109 +37,109 @@ const B = { class: "flex items-center justify-between" }, E = { class: "flex ite
|
|
|
37
37
|
]);
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
}), W = { class: "rounded-xl text-card-foreground shadow-lg border-0 bg-white dark:bg-slate-800 backdrop-blur-sm hover:shadow-xl transition-all duration-300 transform hover:scale-105" }, G = { class: "p-6" }, K = { class: "flex items-start justify-between" }, Q = { class: "flex-1" }, Z = { class: "flex items-center space-x-2 mb-2" }, X = { class: "text-sm font-medium text-slate-600 dark:text-slate-400" }, Y = { class: "text-3xl font-bold text-slate-800 dark:text-slate-100 mb-1" }, ee = { class: "text-xs text-slate-500 dark:text-slate-400 mb-3" }, te = /* @__PURE__ */
|
|
40
|
+
}), W = { class: "rounded-xl text-card-foreground shadow-lg border-0 bg-white dark:bg-slate-800 backdrop-blur-sm hover:shadow-xl transition-all duration-300 transform hover:scale-105" }, G = { class: "p-6" }, K = { class: "flex items-start justify-between" }, Q = { class: "flex-1" }, Z = { class: "flex items-center space-x-2 mb-2" }, X = { class: "text-sm font-medium text-slate-600 dark:text-slate-400" }, Y = { class: "text-3xl font-bold text-slate-800 dark:text-slate-100 mb-1" }, ee = { class: "text-xs text-slate-500 dark:text-slate-400 mb-3" }, te = /* @__PURE__ */ h({
|
|
41
41
|
__name: "StatCard",
|
|
42
42
|
props: {
|
|
43
43
|
stat: {}
|
|
44
44
|
},
|
|
45
|
-
setup(
|
|
46
|
-
const
|
|
45
|
+
setup(b) {
|
|
46
|
+
const r = (o) => ({
|
|
47
47
|
"file-text": v,
|
|
48
48
|
users: w,
|
|
49
49
|
image: U,
|
|
50
50
|
eye: F
|
|
51
|
-
})[
|
|
52
|
-
return (
|
|
51
|
+
})[o] || v;
|
|
52
|
+
return (o, t) => (l(), c("div", W, [
|
|
53
53
|
e("div", G, [
|
|
54
54
|
e("div", K, [
|
|
55
55
|
e("div", Q, [
|
|
56
56
|
e("div", Z, [
|
|
57
57
|
e("div", {
|
|
58
|
-
class:
|
|
58
|
+
class: g(`p-2 rounded-lg bg-${o.stat.color}-50 dark:bg-${o.stat.color}-900/20`)
|
|
59
59
|
}, [
|
|
60
|
-
(
|
|
61
|
-
class:
|
|
60
|
+
(l(), _(j(r(o.stat.icon)), {
|
|
61
|
+
class: g(`w-5 h-5 text-${o.stat.color}-600`)
|
|
62
62
|
}, null, 8, ["class"]))
|
|
63
63
|
], 2),
|
|
64
|
-
e("p", X,
|
|
64
|
+
e("p", X, a(o.stat.title), 1)
|
|
65
65
|
]),
|
|
66
|
-
e("p", Y,
|
|
67
|
-
e("p", ee,
|
|
66
|
+
e("p", Y, a(o.stat.value), 1),
|
|
67
|
+
e("p", ee, a(o.stat.description), 1)
|
|
68
68
|
])
|
|
69
69
|
])
|
|
70
70
|
])
|
|
71
71
|
]));
|
|
72
72
|
}
|
|
73
|
-
}), se = { class: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6" }, oe = /* @__PURE__ */
|
|
73
|
+
}), se = { class: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6" }, oe = /* @__PURE__ */ h({
|
|
74
74
|
__name: "StatsGrid",
|
|
75
75
|
props: {
|
|
76
76
|
stats: {}
|
|
77
77
|
},
|
|
78
|
-
setup(
|
|
79
|
-
return (
|
|
80
|
-
(
|
|
81
|
-
key:
|
|
82
|
-
stat:
|
|
78
|
+
setup(b) {
|
|
79
|
+
return (r, o) => (l(), c("div", se, [
|
|
80
|
+
(l(!0), c(x, null, k(r.stats, (t) => (l(), _(te, {
|
|
81
|
+
key: t.id,
|
|
82
|
+
stat: t
|
|
83
83
|
}, null, 8, ["stat"]))), 128))
|
|
84
84
|
]));
|
|
85
85
|
}
|
|
86
|
-
}), re = { class: "p-4 hover:bg-slate-50 dark:hover:bg-slate-700/50 transition-colors" }, ae = { class: "flex items-center justify-between" }, ie = { class: "flex-1" }, ne = { class: "flex items-center space-x-3 mb-2" }, le = { class: "inline-flex items-center rounded-md border px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-xs bg-white dark:bg-slate-700 border-slate-300 dark:border-slate-600 text-slate-600 dark:text-slate-300" }, de = { class: "font-semibold text-slate-800 dark:text-slate-100 mb-1" }, ce = { class: "flex items-center space-x-4 text-sm text-slate-500 dark:text-slate-400" }, ue = { class: "flex items-center" }, me = { class: "flex items-center" }, he = { class: "flex items-center" }, be = { class: "flex items-center space-x-2" },
|
|
86
|
+
}), re = { class: "p-4 hover:bg-slate-50 dark:hover:bg-slate-700/50 transition-colors" }, ae = { class: "flex items-center justify-between" }, ie = { class: "flex-1" }, ne = { class: "flex items-center space-x-3 mb-2" }, le = { class: "inline-flex items-center rounded-md border px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-xs bg-white dark:bg-slate-700 border-slate-300 dark:border-slate-600 text-slate-600 dark:text-slate-300" }, de = { class: "font-semibold text-slate-800 dark:text-slate-100 mb-1" }, ce = { class: "flex items-center space-x-4 text-sm text-slate-500 dark:text-slate-400" }, ue = { class: "flex items-center" }, me = { class: "flex items-center" }, he = { class: "flex items-center" }, be = { class: "flex items-center space-x-2" }, pe = /* @__PURE__ */ h({
|
|
87
87
|
__name: "ContentItem",
|
|
88
88
|
props: {
|
|
89
89
|
item: {}
|
|
90
90
|
},
|
|
91
|
-
setup(
|
|
92
|
-
const
|
|
93
|
-
const
|
|
91
|
+
setup(b) {
|
|
92
|
+
const r = (t) => {
|
|
93
|
+
const i = {
|
|
94
94
|
published: "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-secondary/80 bg-green-100 dark:bg-green-900/30 text-green-800 dark:text-green-300",
|
|
95
95
|
draft: "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-secondary/80 bg-yellow-100 dark:bg-yellow-900/30 text-yellow-800 dark:text-yellow-300",
|
|
96
96
|
review: "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 border-transparent hover:bg-secondary/80 bg-blue-100 dark:bg-blue-900/30 text-blue-800 dark:text-blue-300"
|
|
97
97
|
};
|
|
98
|
-
return
|
|
99
|
-
},
|
|
100
|
-
if (!
|
|
98
|
+
return i[t] || i.draft;
|
|
99
|
+
}, o = (t) => {
|
|
100
|
+
if (!t)
|
|
101
101
|
return "--.--.--";
|
|
102
|
-
const
|
|
102
|
+
const i = new Date(t);
|
|
103
103
|
return new Intl.DateTimeFormat("en-US", {
|
|
104
104
|
year: "numeric",
|
|
105
105
|
month: "short",
|
|
106
106
|
day: "numeric"
|
|
107
|
-
}).format(
|
|
107
|
+
}).format(i);
|
|
108
108
|
};
|
|
109
|
-
return (
|
|
110
|
-
const
|
|
111
|
-
return
|
|
109
|
+
return (t, i) => {
|
|
110
|
+
const d = S("router-link");
|
|
111
|
+
return l(), c("div", re, [
|
|
112
112
|
e("div", ae, [
|
|
113
113
|
e("div", ie, [
|
|
114
114
|
e("div", ne, [
|
|
115
|
-
e("div", le,
|
|
115
|
+
e("div", le, a(t.item.type), 1),
|
|
116
116
|
e("div", {
|
|
117
|
-
class:
|
|
118
|
-
},
|
|
117
|
+
class: g(r(t.item.status))
|
|
118
|
+
}, a(t.item.status || "--"), 3)
|
|
119
119
|
]),
|
|
120
|
-
e("h3", de,
|
|
120
|
+
e("h3", de, a(t.item.title || "--"), 1),
|
|
121
121
|
e("div", ce, [
|
|
122
122
|
e("span", ue, [
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
n(u(w), { class: "w-4 h-4 mr-1" }),
|
|
124
|
+
p(" " + a(t.item.author || "--"), 1)
|
|
125
125
|
]),
|
|
126
126
|
e("span", me, [
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
n(u(N), { class: "w-4 h-4 mr-1" }),
|
|
128
|
+
p(" " + a(o(t.item.updated_at) || "--.--.--"), 1)
|
|
129
129
|
]),
|
|
130
130
|
e("span", he, [
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
n(u(F), { class: "w-4 h-4 mr-1" }),
|
|
132
|
+
p(" " + a(t.item.views || "--") + " " + a(t.$t("cms.dashboard.views")), 1)
|
|
133
133
|
])
|
|
134
134
|
])
|
|
135
135
|
]),
|
|
136
136
|
e("div", be, [
|
|
137
|
-
|
|
138
|
-
to: `/collections/${
|
|
137
|
+
n(d, {
|
|
138
|
+
to: `/collections/${t.item.object_id}/${t.item.content_id}`,
|
|
139
139
|
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 hover:text-accent-foreground hover:bg-slate-50 dark:border-slate-600 dark:bg-slate-700 dark:hover:bg-slate-600"
|
|
140
140
|
}, {
|
|
141
141
|
default: A(() => [
|
|
142
|
-
|
|
142
|
+
n(u(R), { class: "w-4 h-4 dark:text-blue-50" })
|
|
143
143
|
]),
|
|
144
144
|
_: 1
|
|
145
145
|
}, 8, ["to"])
|
|
@@ -148,144 +148,144 @@ const B = { class: "flex items-center justify-between" }, E = { class: "flex ite
|
|
|
148
148
|
]);
|
|
149
149
|
};
|
|
150
150
|
}
|
|
151
|
-
}),
|
|
151
|
+
}), ge = { class: "lg:col-span-2" }, _e = { class: "rounded-xl text-card-foreground shadow-lg border-0 bg-white dark:bg-slate-800 backdrop-blur-sm" }, fe = { class: "flex flex-col space-y-1.5 p-6 border-b border-slate-200 dark:border-slate-700 bg-gradient-to-r from-slate-50 dark:from-slate-800 to-white dark:to-slate-800" }, ve = { class: "flex items-center justify-between" }, xe = { class: "tracking-tight text-xl font-semibold text-slate-800 dark:text-slate-100 flex items-center" }, ke = { class: "p-0" }, we = { class: "divide-y divide-slate-100 dark:divide-slate-700" }, $e = /* @__PURE__ */ h({
|
|
152
152
|
__name: "RecentContent",
|
|
153
153
|
props: {
|
|
154
154
|
content: {}
|
|
155
155
|
},
|
|
156
|
-
setup(
|
|
157
|
-
const
|
|
158
|
-
|
|
156
|
+
setup(b) {
|
|
157
|
+
const r = M(), o = (t) => {
|
|
158
|
+
r.push(t);
|
|
159
159
|
};
|
|
160
|
-
return (
|
|
161
|
-
e("div",
|
|
162
|
-
e("div",
|
|
160
|
+
return (t, i) => (l(), c("div", ge, [
|
|
161
|
+
e("div", _e, [
|
|
162
|
+
e("div", fe, [
|
|
163
163
|
e("div", ve, [
|
|
164
|
-
e("h3",
|
|
165
|
-
|
|
166
|
-
|
|
164
|
+
e("h3", xe, [
|
|
165
|
+
n(u(V), { class: "w-5 h-5 mr-2" }),
|
|
166
|
+
p(" " + a(t.$t("cms.dashboard.recentContent")), 1)
|
|
167
167
|
]),
|
|
168
168
|
e("button", {
|
|
169
|
-
onClick:
|
|
169
|
+
onClick: i[0] || (i[0] = (d) => o("/settings/collections")),
|
|
170
170
|
class: "inline-flex items-center justify-center whitespace-nowrap font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 border shadow-sm hover:text-accent-foreground h-8 rounded-md px-3 text-xs bg-white dark:bg-slate-700 border-slate-300 dark:border-slate-600 text-slate-700 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-600"
|
|
171
|
-
},
|
|
171
|
+
}, a(t.$t("cms.dashboard.viewAll")), 1)
|
|
172
172
|
])
|
|
173
173
|
]),
|
|
174
174
|
e("div", ke, [
|
|
175
175
|
e("div", we, [
|
|
176
|
-
(
|
|
177
|
-
key:
|
|
178
|
-
item:
|
|
176
|
+
(l(!0), c(x, null, k(t.content, (d) => (l(), _(pe, {
|
|
177
|
+
key: d.id,
|
|
178
|
+
item: d
|
|
179
179
|
}, null, 8, ["item"]))), 128))
|
|
180
180
|
])
|
|
181
181
|
])
|
|
182
182
|
])
|
|
183
183
|
]));
|
|
184
184
|
}
|
|
185
|
-
}), ye = { class: "rounded-xl text-card-foreground shadow-lg border-0 bg-white dark:bg-slate-800 backdrop-blur-sm" }, Ce = { class: "flex flex-col space-y-1.5 p-6 border-b border-slate-200 dark:border-slate-700 bg-gradient-to-r from-slate-50 dark:from-slate-800 to-white dark:to-slate-800" }, De = { class: "tracking-tight text-lg font-semibold text-slate-800 dark:text-slate-100 flex items-center" }, Pe = { class: "p-4" }, Se = { class: "grid grid-cols-2 gap-3" }, Ae = ["onClick"], je = { class: "p-2 rounded-lg bg-blue-50 dark:bg-blue-900/20 mb-2 w-fit" }, Ue = { class: "font-medium text-slate-800 dark:text-slate-100 text-sm mb-1 group-hover:text-slate-900 dark:group-hover:text-slate-50" }, Fe = { class: "text-xs text-slate-500 dark:text-slate-400 group-hover:text-slate-600 dark:group-hover:text-slate-300" }, Me = /* @__PURE__ */
|
|
185
|
+
}), ye = { class: "rounded-xl text-card-foreground shadow-lg border-0 bg-white dark:bg-slate-800 backdrop-blur-sm" }, Ce = { class: "flex flex-col space-y-1.5 p-6 border-b border-slate-200 dark:border-slate-700 bg-gradient-to-r from-slate-50 dark:from-slate-800 to-white dark:to-slate-800" }, De = { class: "tracking-tight text-lg font-semibold text-slate-800 dark:text-slate-100 flex items-center" }, Pe = { class: "p-4" }, Se = { class: "grid grid-cols-2 gap-3" }, Ae = ["onClick"], je = { class: "p-2 rounded-lg bg-blue-50 dark:bg-blue-900/20 mb-2 w-fit" }, Ue = { class: "font-medium text-slate-800 dark:text-slate-100 text-sm mb-1 group-hover:text-slate-900 dark:group-hover:text-slate-50" }, Fe = { class: "text-xs text-slate-500 dark:text-slate-400 group-hover:text-slate-600 dark:group-hover:text-slate-300" }, Me = /* @__PURE__ */ h({
|
|
186
186
|
__name: "QuickActions",
|
|
187
|
-
setup(
|
|
188
|
-
const
|
|
187
|
+
setup(b) {
|
|
188
|
+
const r = M(), { t: o } = $(), t = [
|
|
189
189
|
{
|
|
190
190
|
id: "create-article",
|
|
191
|
-
title:
|
|
192
|
-
description:
|
|
191
|
+
title: o("cms.dashboard.createArticle"),
|
|
192
|
+
description: o("cms.dashboard.createArticleDescription"),
|
|
193
193
|
icon: v,
|
|
194
194
|
iconColor: "text-blue-500",
|
|
195
195
|
link: "/collections/pages/create"
|
|
196
196
|
},
|
|
197
197
|
{
|
|
198
198
|
id: "upload-media",
|
|
199
|
-
title:
|
|
200
|
-
description:
|
|
199
|
+
title: o("cms.dashboard.uploadMedia"),
|
|
200
|
+
description: o("cms.dashboard.uploadMediaDescription"),
|
|
201
201
|
icon: U,
|
|
202
202
|
iconColor: "text-purple-500",
|
|
203
203
|
link: "/media"
|
|
204
204
|
},
|
|
205
205
|
{
|
|
206
206
|
id: "manage-users",
|
|
207
|
-
title:
|
|
208
|
-
description:
|
|
207
|
+
title: o("cms.dashboard.manageUsers"),
|
|
208
|
+
description: o("cms.dashboard.manageUsersDescription"),
|
|
209
209
|
icon: w,
|
|
210
210
|
iconColor: "text-green-500",
|
|
211
211
|
link: "/settings/users"
|
|
212
212
|
}
|
|
213
|
-
],
|
|
214
|
-
|
|
213
|
+
], i = (d) => {
|
|
214
|
+
d && r.push(d);
|
|
215
215
|
};
|
|
216
|
-
return (
|
|
216
|
+
return (d, m) => (l(), c("div", ye, [
|
|
217
217
|
e("div", Ce, [
|
|
218
218
|
e("h3", De, [
|
|
219
|
-
|
|
220
|
-
|
|
219
|
+
n(u(z), { class: "w-5 h-5 mr-2" }),
|
|
220
|
+
p(" " + a(d.$t("cms.dashboard.quickActions")), 1)
|
|
221
221
|
])
|
|
222
222
|
]),
|
|
223
223
|
e("div", Pe, [
|
|
224
224
|
e("div", Se, [
|
|
225
|
-
(
|
|
226
|
-
key:
|
|
225
|
+
(l(), c(x, null, k(t, (s) => e("button", {
|
|
226
|
+
key: s.id,
|
|
227
227
|
class: "p-3 rounded-lg border border-slate-200 transition-all duration-200 text-left group hover:bg-slate-50 hover:shadow-md dark:border-slate-600 bg-white dark:bg-slate-700 dark:hover:bg-slate-600",
|
|
228
|
-
onClick: (
|
|
228
|
+
onClick: (f) => i(s == null ? void 0 : s.link)
|
|
229
229
|
}, [
|
|
230
230
|
e("div", je, [
|
|
231
|
-
(
|
|
232
|
-
class:
|
|
231
|
+
(l(), _(j(s == null ? void 0 : s.icon), {
|
|
232
|
+
class: g(`w-4 h-4 ${s == null ? void 0 : s.iconColor}`)
|
|
233
233
|
}, null, 8, ["class"]))
|
|
234
234
|
]),
|
|
235
|
-
e("h3", Ue,
|
|
236
|
-
e("p", Fe,
|
|
235
|
+
e("h3", Ue, a(s == null ? void 0 : s.title), 1),
|
|
236
|
+
e("p", Fe, a(s == null ? void 0 : s.description), 1)
|
|
237
237
|
], 8, Ae)), 64))
|
|
238
238
|
])
|
|
239
239
|
])
|
|
240
240
|
]));
|
|
241
241
|
}
|
|
242
|
-
}), Ie = { class: "w-full max-w-7xl mx-auto space-y-8" }, Te = { class: "grid grid-cols-1 lg:grid-cols-3 gap-6" }, ze = /* @__PURE__ */
|
|
242
|
+
}), Ie = { class: "w-full max-w-7xl mx-auto space-y-8" }, Te = { class: "grid grid-cols-1 lg:grid-cols-3 gap-6" }, ze = /* @__PURE__ */ h({
|
|
243
243
|
__name: "Dashboard",
|
|
244
|
-
setup(
|
|
245
|
-
const { t:
|
|
244
|
+
setup(b) {
|
|
245
|
+
const { t: r } = $(), o = P([
|
|
246
246
|
{
|
|
247
247
|
id: "total-content",
|
|
248
|
-
title:
|
|
248
|
+
title: r("cms.dashboard.totalContent"),
|
|
249
249
|
value: "2,847",
|
|
250
|
-
description:
|
|
250
|
+
description: r("cms.dashboard.articlesPostsPages"),
|
|
251
251
|
change: { value: "+12.5%", isPositive: !0 },
|
|
252
252
|
icon: "file-text",
|
|
253
253
|
color: "blue"
|
|
254
254
|
},
|
|
255
255
|
{
|
|
256
256
|
id: "active-users",
|
|
257
|
-
title:
|
|
257
|
+
title: r("cms.dashboard.activeUsers"),
|
|
258
258
|
value: "1,234",
|
|
259
|
-
description:
|
|
259
|
+
description: r("cms.dashboard.monthlyActiveUsers"),
|
|
260
260
|
change: { value: "+8.2%", isPositive: !0 },
|
|
261
261
|
icon: "users",
|
|
262
262
|
color: "emerald"
|
|
263
263
|
},
|
|
264
264
|
{
|
|
265
265
|
id: "media-files",
|
|
266
|
-
title:
|
|
266
|
+
title: r("cms.dashboard.mediaFiles"),
|
|
267
267
|
value: "5,692",
|
|
268
|
-
description:
|
|
268
|
+
description: r("cms.dashboard.imagesVideosDocs"),
|
|
269
269
|
change: { value: "+23.1%", isPositive: !0 },
|
|
270
270
|
icon: "image",
|
|
271
271
|
color: "purple"
|
|
272
272
|
},
|
|
273
273
|
{
|
|
274
274
|
id: "new-media",
|
|
275
|
-
title:
|
|
275
|
+
title: r("cms.dashboard.newMediaFiles"),
|
|
276
276
|
value: "89.2K",
|
|
277
|
-
description:
|
|
277
|
+
description: r("cms.dashboard.thisMonth"),
|
|
278
278
|
change: { value: "-2.4%", isPositive: !1 },
|
|
279
279
|
icon: "eye",
|
|
280
280
|
color: "orange"
|
|
281
281
|
}
|
|
282
|
-
]),
|
|
282
|
+
]), t = P([
|
|
283
283
|
{
|
|
284
284
|
id: 1,
|
|
285
285
|
type: "Article",
|
|
286
286
|
status: "published",
|
|
287
|
-
title:
|
|
288
|
-
author:
|
|
287
|
+
title: r("cms.dashboard.gettingStartedWithNextJs14"),
|
|
288
|
+
author: r("cms.dashboard.sarahJohnson"),
|
|
289
289
|
updated_at: "2024-01-15",
|
|
290
290
|
views: 1247
|
|
291
291
|
},
|
|
@@ -293,8 +293,8 @@ const B = { class: "flex items-center justify-between" }, E = { class: "flex ite
|
|
|
293
293
|
id: 2,
|
|
294
294
|
type: "Post",
|
|
295
295
|
status: "draft",
|
|
296
|
-
title:
|
|
297
|
-
author:
|
|
296
|
+
title: r("cms.dashboard.advancedReactPatterns"),
|
|
297
|
+
author: r("cms.dashboard.mikeChen"),
|
|
298
298
|
updated_at: "2024-01-14",
|
|
299
299
|
views: 0
|
|
300
300
|
},
|
|
@@ -302,8 +302,8 @@ const B = { class: "flex items-center justify-between" }, E = { class: "flex ite
|
|
|
302
302
|
id: 3,
|
|
303
303
|
type: "Article",
|
|
304
304
|
status: "published",
|
|
305
|
-
title:
|
|
306
|
-
author:
|
|
305
|
+
title: r("cms.dashboard.uiUxDesignPrinciples"),
|
|
306
|
+
author: r("cms.dashboard.emmaWilson"),
|
|
307
307
|
updated_at: "2024-01-13",
|
|
308
308
|
views: 892
|
|
309
309
|
},
|
|
@@ -311,43 +311,43 @@ const B = { class: "flex items-center justify-between" }, E = { class: "flex ite
|
|
|
311
311
|
id: 4,
|
|
312
312
|
type: "Post",
|
|
313
313
|
status: "review",
|
|
314
|
-
title:
|
|
315
|
-
author:
|
|
314
|
+
title: r("cms.dashboard.databaseOptimizationTips"),
|
|
315
|
+
author: r("cms.dashboard.alexRodriguez"),
|
|
316
316
|
updated_at: "2024-01-12",
|
|
317
317
|
views: 0
|
|
318
318
|
}
|
|
319
|
-
]),
|
|
320
|
-
|
|
321
|
-
var
|
|
322
|
-
switch (
|
|
319
|
+
]), i = (m) => {
|
|
320
|
+
o.value = o.value.map((s) => {
|
|
321
|
+
var f, y, C, D;
|
|
322
|
+
switch (s.id) {
|
|
323
323
|
case "total-content":
|
|
324
|
-
return { ...
|
|
324
|
+
return { ...s, value: ((f = m.totalContent) == null ? void 0 : f.toLocaleString()) ?? s.value };
|
|
325
325
|
case "active-users":
|
|
326
|
-
return { ...
|
|
326
|
+
return { ...s, value: ((y = m.totalUsers) == null ? void 0 : y.toLocaleString()) ?? s.value };
|
|
327
327
|
case "media-files":
|
|
328
|
-
return { ...
|
|
328
|
+
return { ...s, value: ((C = m.totalMediaFiles) == null ? void 0 : C.toLocaleString()) ?? s.value };
|
|
329
329
|
case "new-media":
|
|
330
|
-
return { ...
|
|
330
|
+
return { ...s, value: ((D = m.newMediaFiles) == null ? void 0 : D.toLocaleString()) ?? s.value };
|
|
331
331
|
default:
|
|
332
|
-
return
|
|
332
|
+
return s;
|
|
333
333
|
}
|
|
334
334
|
});
|
|
335
|
-
},
|
|
336
|
-
const
|
|
337
|
-
|
|
335
|
+
}, d = async () => {
|
|
336
|
+
const s = await (await fetch("api/cms-stat")).json();
|
|
337
|
+
t.value = s.recentContent, i(s.stat);
|
|
338
338
|
};
|
|
339
339
|
return I(() => {
|
|
340
|
-
|
|
341
|
-
}), (
|
|
342
|
-
|
|
343
|
-
|
|
340
|
+
d();
|
|
341
|
+
}), (m, s) => (l(), c("div", Ie, [
|
|
342
|
+
n(O),
|
|
343
|
+
n(oe, { stats: o.value }, null, 8, ["stats"]),
|
|
344
344
|
e("div", Te, [
|
|
345
|
-
|
|
346
|
-
content:
|
|
345
|
+
n($e, {
|
|
346
|
+
content: t.value,
|
|
347
347
|
class: "lg:col-span-2"
|
|
348
348
|
}, null, 8, ["content"]),
|
|
349
349
|
e("div", null, [
|
|
350
|
-
|
|
350
|
+
n(Me)
|
|
351
351
|
])
|
|
352
352
|
])
|
|
353
353
|
]));
|
|
@@ -2,9 +2,9 @@ import { defineAsyncComponent as k, defineComponent as z, inject as E, ref as u,
|
|
|
2
2
|
import { useRoute as G, useRouter as H } from "vue-router";
|
|
3
3
|
import { useI18n as K } from "vue-i18n";
|
|
4
4
|
import { notify as $ } from "@opengis/core";
|
|
5
|
-
import { _ as P } from "./CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-
|
|
5
|
+
import { _ as P } from "./CollectionsBreadcrumb.vue_vue_type_script_setup_true_lang-BJh-tjam.js";
|
|
6
6
|
const Q = {
|
|
7
|
-
monaco: k(() => import("./vs-builder-monaco-
|
|
7
|
+
monaco: k(() => import("./vs-builder-monaco-Cw-f19gc.js")),
|
|
8
8
|
edit: k(() => import("./vs-builder-edit-D-q1o8tF.js")),
|
|
9
9
|
preview: k(() => import("./vs-builder-preview-BH4VAM3a.js"))
|
|
10
10
|
}, X = { class: "mx-auto max-w-[90%]" }, Z = { class: "flex items-center justify-between mb-6" }, ee = { class: "mb-2 text-2xl font-semibold text-gray-900" }, te = { class: "lowercase" }, oe = { class: "text-gray-600" }, ne = { class: "flex items-center gap-2" }, se = { class: "w-full" }, ie = { class: "flex items-center w-full h-10 max-w-md grid-cols-3 p-1 mb-6 bg-white border border-gray-200 rounded-md text-muted-foreground" }, re = ["onClick"], ae = {
|
|
@@ -8,7 +8,7 @@ const M = { class: "space-y-6 max-w-7xl mx-auto" }, S = { class: "flex items-cen
|
|
|
8
8
|
__name: "MenuAddPage",
|
|
9
9
|
setup(F) {
|
|
10
10
|
const p = v(
|
|
11
|
-
() => import("./MonacoEditor-
|
|
11
|
+
() => import("./MonacoEditor-ByPT8pnv.js")
|
|
12
12
|
);
|
|
13
13
|
C["vs-input-monaco-editor"] = p;
|
|
14
14
|
const { t: e } = q(), u = b();
|
|
@@ -11,8 +11,8 @@ const R = /* @__PURE__ */ x({
|
|
|
11
11
|
},
|
|
12
12
|
emits: ["update:modelValue"],
|
|
13
13
|
setup(f) {
|
|
14
|
-
const v = m(() => import("./MenuList-
|
|
15
|
-
() => import("./MonacoEditor-
|
|
14
|
+
const v = m(() => import("./MenuList-BLIpeqSd.js")), y = m(() => import("./AddNewItemInTree-05PSSEFi.js")), g = m(
|
|
15
|
+
() => import("./MonacoEditor-ByPT8pnv.js")
|
|
16
16
|
);
|
|
17
17
|
O["vs-input-monaco-editor"] = g;
|
|
18
18
|
const { t: r } = F(), l = i(!1), d = i(null), n = V(f, "modelValue"), u = i({}), h = async (t) => {
|
|
@@ -4,7 +4,7 @@ import { ArrowLeft as Ie, HelpCircle as Re, Save as Le } from "lucide-vue-next";
|
|
|
4
4
|
import { useI18n as Ye } from "vue-i18n";
|
|
5
5
|
import { notify as B } from "@opengis/core";
|
|
6
6
|
import { inputs as z, VForm as Me } from "@opengis/form";
|
|
7
|
-
/*! js-yaml 4.1.
|
|
7
|
+
/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
|
|
8
8
|
function se(e) {
|
|
9
9
|
return typeof e > "u" || e === null;
|
|
10
10
|
}
|
|
@@ -874,9 +874,9 @@ const Bn = { class: "space-y-6 max-w-7xl mx-auto" }, Pn = { class: "flex items-c
|
|
|
874
874
|
__name: "MenuItemPage",
|
|
875
875
|
setup(e) {
|
|
876
876
|
const r = Q(
|
|
877
|
-
() => import("./MenuBody-
|
|
877
|
+
() => import("./MenuBody-Bi0ONVZf.js")
|
|
878
878
|
), n = Q(
|
|
879
|
-
() => import("./MonacoEditor-
|
|
879
|
+
() => import("./MonacoEditor-ByPT8pnv.js")
|
|
880
880
|
);
|
|
881
881
|
z["vs-input-monaco-editor"] = n, console.log("[MenuItemPage] vs-input-monaco-editor registered:", !!z["vs-input-monaco-editor"]);
|
|
882
882
|
const { t, locale: i } = Ye(), a = Ce(), l = be(), u = Ne(() => [
|