@oktis-works/admin 0.1.4 → 0.1.7
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/bin/admin.js +14 -0
- package/bin/listen-log.d.ts +8 -0
- package/bin/listen-log.js +66 -0
- package/dist/client/_astro/{BaseLayout.COf3Eran.css → BaseLayout.BPkaFsmK.css} +1 -1
- package/dist/client/_astro/{ContentEditor.COyD6bGV.js → ContentEditor.DOcUnkMP.js} +1 -1
- package/dist/client/_astro/ContentList.KzxsMMxH.js +1 -0
- package/dist/client/_astro/DashboardHome.DFRZ_yyM.js +1 -0
- package/dist/client/_astro/DashboardLayout.astro_astro_type_script_index_0_lang.B663y3aY.js +1 -0
- package/dist/client/_astro/GeneralSettings.gbcKHf_p.js +1 -0
- package/dist/client/_astro/MediaLibrary.BtCjwNlR.js +1 -0
- package/dist/client/_astro/{PostTypesManager.APvO7Cs9.js → PostTypesManager.DsxV-sF3.js} +1 -1
- package/dist/client/_astro/{TaxonomiesManager.CVFdfaUR.js → TaxonomiesManager.DqnwUCtt.js} +1 -1
- package/dist/client/_astro/UserCreateForm.BLaiQTzI.js +1 -0
- package/dist/client/_astro/UsersManager.BPRG8tjn.js +1 -0
- package/dist/client/_astro/api.BegLcOlq.js +1 -0
- package/dist/client/_astro/{login.astro_astro_type_script_index_0_lang.BLhqPWk8.js → login.astro_astro_type_script_index_0_lang.ozrnjgkA.js} +1 -1
- package/dist/server/chunks/{BaseLayout_Mvr1_6Ng.mjs → BaseLayout_C41_wW4F.mjs} +19 -2
- package/dist/server/chunks/{edit_D14rRl_p.mjs → ContentEditor_DwBpNq-K.mjs} +21 -30
- package/dist/server/chunks/DashboardLayout_DO66tdeZ.mjs +43 -0
- package/dist/server/chunks/MediaLibrary_DEi9k6ms.mjs +179 -0
- package/dist/server/chunks/api_BWOj0bUJ.mjs +274 -0
- package/dist/server/chunks/edit_DNavSwFw.mjs +30 -0
- package/dist/server/chunks/general_r50g45qE.mjs +173 -0
- package/dist/server/chunks/index_6G7rXrus.mjs +133 -0
- package/dist/server/chunks/index_B50u2M3P.mjs +23 -0
- package/dist/server/chunks/index_DUzUgyr4.mjs +155 -0
- package/dist/server/chunks/index_qxSk7_hO.mjs +30 -0
- package/dist/server/chunks/index_yiAU3Mfy.mjs +204 -0
- package/dist/server/chunks/{login_B7vbWIed.mjs → login_BH67N4b1.mjs} +2 -19
- package/dist/server/chunks/new_BWcSqoqV.mjs +86 -0
- package/dist/server/chunks/new_h8TItZZ9.mjs +30 -0
- package/dist/server/chunks/{post-types_BtNyF2Iv.mjs → post-types_BSobAovm.mjs} +2 -2
- package/dist/server/chunks/{taxonomies_DSgstawN.mjs → taxonomies_Ij7CReDF.mjs} +2 -2
- package/dist/server/chunks/upload_16xg6koU.mjs +31 -0
- package/dist/server/entry.mjs +259 -13
- package/package.json +5 -5
- package/dist/client/_astro/api.DSP61PKM.js +0 -1
- package/dist/server/chunks/DashboardLayout_CP5ag-_P.mjs +0 -17
- package/dist/server/chunks/api_Cy8sbUHf.mjs +0 -153
- package/dist/server/chunks/index_BgbHlcwr.mjs +0 -23
- package/dist/server/chunks/index_c3b5hMDp.mjs +0 -22
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
|
|
2
|
+
import { d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
|
|
3
|
+
import { t as createComponent$1 } from "./compiler_CYjwXhLT.mjs";
|
|
4
|
+
import { t as $$DashboardLayout } from "./DashboardLayout_DO66tdeZ.mjs";
|
|
5
|
+
import { t as apiClient } from "./api_BWOj0bUJ.mjs";
|
|
6
|
+
import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
|
|
7
|
+
import { For, Show, createSignal, onMount } from "solid-js";
|
|
8
|
+
//#region src/components/apps/settings/GeneralSettings.tsx
|
|
9
|
+
var _tmpl$ = [
|
|
10
|
+
"<div",
|
|
11
|
+
" class=\"notice notice--error\">",
|
|
12
|
+
"</div>"
|
|
13
|
+
];
|
|
14
|
+
var _tmpl$2 = [
|
|
15
|
+
"<div",
|
|
16
|
+
" class=\"notice\">",
|
|
17
|
+
"</div>"
|
|
18
|
+
];
|
|
19
|
+
var _tmpl$3 = [
|
|
20
|
+
"<form",
|
|
21
|
+
" class=\"card\"><h3>Geral</h3><div class=\"form-grid\">",
|
|
22
|
+
"</div><div class=\"media-details__actions\"><button class=\"btn btn-primary\" type=\"submit\"",
|
|
23
|
+
">",
|
|
24
|
+
"</button></div></form>"
|
|
25
|
+
];
|
|
26
|
+
var _tmpl$4 = [
|
|
27
|
+
"<div",
|
|
28
|
+
" class=\"general-settings\"><!--$-->",
|
|
29
|
+
"<!--/--><!--$-->",
|
|
30
|
+
"<!--/--><!--$-->",
|
|
31
|
+
"<!--/--></div>"
|
|
32
|
+
];
|
|
33
|
+
var _tmpl$5 = ["<p", " class=\"muted\">Carregando…</p>"];
|
|
34
|
+
var _tmpl$6 = [
|
|
35
|
+
"<select",
|
|
36
|
+
" class=\"input\"",
|
|
37
|
+
">",
|
|
38
|
+
"</select>"
|
|
39
|
+
];
|
|
40
|
+
var _tmpl$7 = [
|
|
41
|
+
"<label",
|
|
42
|
+
"><!--$-->",
|
|
43
|
+
"<!--/--><!--$-->",
|
|
44
|
+
"<!--/--></label>"
|
|
45
|
+
];
|
|
46
|
+
var _tmpl$8 = [
|
|
47
|
+
"<input",
|
|
48
|
+
" class=\"input\"",
|
|
49
|
+
">"
|
|
50
|
+
];
|
|
51
|
+
var _tmpl$9 = [
|
|
52
|
+
"<option",
|
|
53
|
+
">",
|
|
54
|
+
"</option>"
|
|
55
|
+
];
|
|
56
|
+
var FIELDS = [
|
|
57
|
+
{
|
|
58
|
+
key: "siteTitle",
|
|
59
|
+
label: "Título do site",
|
|
60
|
+
type: "text",
|
|
61
|
+
placeholder: "Meu Site"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
key: "siteDescription",
|
|
65
|
+
label: "Descrição",
|
|
66
|
+
type: "text",
|
|
67
|
+
placeholder: "Um novo site feito com OkCMS"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: "language",
|
|
71
|
+
label: "Idioma",
|
|
72
|
+
type: "select",
|
|
73
|
+
options: [
|
|
74
|
+
"pt-BR",
|
|
75
|
+
"en-US",
|
|
76
|
+
"es-ES"
|
|
77
|
+
]
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: "timezone",
|
|
81
|
+
label: "Fuso horário",
|
|
82
|
+
type: "text",
|
|
83
|
+
placeholder: "America/Sao_Paulo"
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
function GeneralSettings() {
|
|
87
|
+
const [values, setValues] = createSignal({});
|
|
88
|
+
const [loaded, setLoaded] = createSignal(false);
|
|
89
|
+
const [error, setError] = createSignal("");
|
|
90
|
+
const [info, setInfo] = createSignal("");
|
|
91
|
+
const [saving, setSaving] = createSignal(false);
|
|
92
|
+
onMount(async () => {
|
|
93
|
+
try {
|
|
94
|
+
const rows = await apiClient.getSettings("general");
|
|
95
|
+
const map = {};
|
|
96
|
+
for (const row of rows) map[row.key] = typeof row.value === "string" ? row.value : JSON.stringify(row.value ?? "");
|
|
97
|
+
for (const field of FIELDS) if (map[field.key] === void 0) map[field.key] = "";
|
|
98
|
+
setValues(map);
|
|
99
|
+
setLoaded(true);
|
|
100
|
+
} catch (err) {
|
|
101
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return ssr(_tmpl$4, ssrHydrationKey(), escape(createComponent(Show, {
|
|
105
|
+
get when() {
|
|
106
|
+
return error();
|
|
107
|
+
},
|
|
108
|
+
get children() {
|
|
109
|
+
return ssr(_tmpl$, ssrHydrationKey(), escape(error()));
|
|
110
|
+
}
|
|
111
|
+
})), escape(createComponent(Show, {
|
|
112
|
+
get when() {
|
|
113
|
+
return info();
|
|
114
|
+
},
|
|
115
|
+
get children() {
|
|
116
|
+
return ssr(_tmpl$2, ssrHydrationKey(), escape(info()));
|
|
117
|
+
}
|
|
118
|
+
})), escape(createComponent(Show, {
|
|
119
|
+
get when() {
|
|
120
|
+
return loaded();
|
|
121
|
+
},
|
|
122
|
+
get fallback() {
|
|
123
|
+
return ssr(_tmpl$5, ssrHydrationKey());
|
|
124
|
+
},
|
|
125
|
+
get children() {
|
|
126
|
+
return ssr(_tmpl$3, ssrHydrationKey(), escape(createComponent(For, {
|
|
127
|
+
each: FIELDS,
|
|
128
|
+
children: (field) => ssr(_tmpl$7, ssrHydrationKey(), escape(field.label), escape(createComponent(Show, {
|
|
129
|
+
get when() {
|
|
130
|
+
return field.type === "select";
|
|
131
|
+
},
|
|
132
|
+
get fallback() {
|
|
133
|
+
return ssr(_tmpl$8, ssrHydrationKey(), ssrAttribute("placeholder", "placeholder" in field ? escape(field.placeholder, true) : "", false) + ssrAttribute("value", escape(values()[field.key] ?? "", true), false));
|
|
134
|
+
},
|
|
135
|
+
get children() {
|
|
136
|
+
return ssr(_tmpl$6, ssrHydrationKey(), ssrAttribute("value", escape(values()[field.key] ?? "", true), false), escape(createComponent(For, {
|
|
137
|
+
get each() {
|
|
138
|
+
return memo(() => "options" in field)() ? field.options : [];
|
|
139
|
+
},
|
|
140
|
+
children: (option) => ssr(_tmpl$9, ssrHydrationKey() + ssrAttribute("value", escape(option, true), false), escape(option))
|
|
141
|
+
})));
|
|
142
|
+
}
|
|
143
|
+
})))
|
|
144
|
+
})), ssrAttribute("disabled", saving(), true), saving() ? "Salvando…" : "Salvar");
|
|
145
|
+
}
|
|
146
|
+
})));
|
|
147
|
+
}
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/pages/settings/general.astro
|
|
150
|
+
var general_exports = /* @__PURE__ */ __exportAll({
|
|
151
|
+
default: () => $$General,
|
|
152
|
+
file: () => $$file,
|
|
153
|
+
url: () => $$url
|
|
154
|
+
});
|
|
155
|
+
var $$General = createComponent$1(($$result, $$props, $$slots) => {
|
|
156
|
+
return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, {
|
|
157
|
+
"title": "Settings · General",
|
|
158
|
+
"data-astro-cid-nzku6miy": true
|
|
159
|
+
}, { "default": ($$result) => renderTemplate`${maybeRenderHead($$result)}<div class="settings-page" data-astro-cid-nzku6miy><div class="page-header" data-astro-cid-nzku6miy><h2 data-astro-cid-nzku6miy>Geral</h2><p data-astro-cid-nzku6miy>Informações básicas exibidas no site.</p><p data-astro-cid-nzku6miy><a href="/settings" data-astro-cid-nzku6miy>← Todas as configurações</a></p></div>${renderComponent($$result, "GeneralSettings", GeneralSettings, {
|
|
160
|
+
"client:load": true,
|
|
161
|
+
"data-astro-cid-nzku6miy": true,
|
|
162
|
+
"client:component-hydration": "load",
|
|
163
|
+
"client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/apps/settings/GeneralSettings.tsx",
|
|
164
|
+
"client:component-export": "GeneralSettings"
|
|
165
|
+
})}</div>` })}`;
|
|
166
|
+
}, "/home/runner/work/cms/cms/apps/admin/src/pages/settings/general.astro", void 0);
|
|
167
|
+
var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/settings/general.astro";
|
|
168
|
+
var $$url = "/settings/general";
|
|
169
|
+
//#endregion
|
|
170
|
+
//#region \0virtual:astro:page:src/pages/settings/general@_@astro
|
|
171
|
+
var page = () => general_exports;
|
|
172
|
+
//#endregion
|
|
173
|
+
export { page };
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
|
|
2
|
+
import { d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
|
|
3
|
+
import { t as createComponent$1 } from "./compiler_CYjwXhLT.mjs";
|
|
4
|
+
import { t as $$DashboardLayout } from "./DashboardLayout_DO66tdeZ.mjs";
|
|
5
|
+
import { t as apiClient } from "./api_BWOj0bUJ.mjs";
|
|
6
|
+
import { createComponent, escape, ssr, ssrHydrationKey } from "solid-js/web";
|
|
7
|
+
import { For, Show, createSignal, onMount } from "solid-js";
|
|
8
|
+
//#region src/components/apps/dashboard/DashboardHome.tsx
|
|
9
|
+
var _tmpl$ = [
|
|
10
|
+
"<div",
|
|
11
|
+
" class=\"notice notice--error\">",
|
|
12
|
+
"</div>"
|
|
13
|
+
];
|
|
14
|
+
var _tmpl$2 = [
|
|
15
|
+
"<table",
|
|
16
|
+
" class=\"table\"><thead><tr><th>Title</th><th>Type</th><th>Status</th><th>Updated</th></tr></thead><tbody>",
|
|
17
|
+
"</tbody></table>"
|
|
18
|
+
];
|
|
19
|
+
var _tmpl$3 = [
|
|
20
|
+
"<div",
|
|
21
|
+
" class=\"dashboard-home\"><!--$-->",
|
|
22
|
+
"<!--/--><div class=\"stats-grid\"><div class=\"card stat-card\"><h3 class=\"stat-label\">Total Content</h3><p class=\"stat-value\">",
|
|
23
|
+
"</p></div><div class=\"card stat-card\"><h3 class=\"stat-label\">Published</h3><p class=\"stat-value\">",
|
|
24
|
+
"</p></div><div class=\"card stat-card\"><h3 class=\"stat-label\">Drafts</h3><p class=\"stat-value\">",
|
|
25
|
+
"</p></div><div class=\"card stat-card\"><h3 class=\"stat-label\">Media Files</h3><p class=\"stat-value\">",
|
|
26
|
+
"</p></div><div class=\"card stat-card\"><h3 class=\"stat-label\">Users</h3><p class=\"stat-value\">",
|
|
27
|
+
"</p></div></div><div class=\"card\"><div class=\"card-header\"><h3>Recent Content</h3><a href=\"/content\" class=\"btn btn-secondary btn-sm\">View All</a></div><!--$-->",
|
|
28
|
+
"<!--/--></div></div>"
|
|
29
|
+
];
|
|
30
|
+
var _tmpl$4 = ["<p", " class=\"muted\">Nenhum conteúdo ainda — crie o primeiro!</p>"];
|
|
31
|
+
var _tmpl$5 = [
|
|
32
|
+
"<tr",
|
|
33
|
+
"><td><a href=\"",
|
|
34
|
+
"\">",
|
|
35
|
+
"</a></td><td>",
|
|
36
|
+
"</td><td>",
|
|
37
|
+
"</td><td class=\"muted\">",
|
|
38
|
+
"</td></tr>"
|
|
39
|
+
];
|
|
40
|
+
function raw(row) {
|
|
41
|
+
return row;
|
|
42
|
+
}
|
|
43
|
+
function formatDate(row) {
|
|
44
|
+
const value = raw(row)["updated_at"] ?? raw(row)["updatedAt"] ?? raw(row)["created_at"];
|
|
45
|
+
if (typeof value !== "string") return "—";
|
|
46
|
+
const date = new Date(value);
|
|
47
|
+
return Number.isNaN(date.getTime()) ? "—" : date.toLocaleString("pt-BR");
|
|
48
|
+
}
|
|
49
|
+
function DashboardHome() {
|
|
50
|
+
const [stats, setStats] = createSignal({
|
|
51
|
+
total: "—",
|
|
52
|
+
published: "—",
|
|
53
|
+
drafts: "—",
|
|
54
|
+
media: "—",
|
|
55
|
+
users: "—"
|
|
56
|
+
});
|
|
57
|
+
const [recent, setRecent] = createSignal([]);
|
|
58
|
+
const [error, setError] = createSignal("");
|
|
59
|
+
onMount(async () => {
|
|
60
|
+
const [all, published, drafts, media, users, recentList] = await Promise.allSettled([
|
|
61
|
+
apiClient.getContent({ limit: 1 }),
|
|
62
|
+
apiClient.getContent({
|
|
63
|
+
limit: 1,
|
|
64
|
+
status: "PUBLISHED"
|
|
65
|
+
}),
|
|
66
|
+
apiClient.getContent({
|
|
67
|
+
limit: 1,
|
|
68
|
+
status: "DRAFT"
|
|
69
|
+
}),
|
|
70
|
+
apiClient.listMedia({ limit: 1 }),
|
|
71
|
+
apiClient.listUsers({ limit: 1 }),
|
|
72
|
+
apiClient.getContent({ limit: 5 })
|
|
73
|
+
]);
|
|
74
|
+
const count = (result) => result.status === "fulfilled" ? String(result.value.total) : "?";
|
|
75
|
+
setStats({
|
|
76
|
+
total: count(all),
|
|
77
|
+
published: count(published),
|
|
78
|
+
drafts: count(drafts),
|
|
79
|
+
media: count(media),
|
|
80
|
+
users: count(users)
|
|
81
|
+
});
|
|
82
|
+
if (recentList.status === "fulfilled") setRecent(recentList.value.data ?? []);
|
|
83
|
+
else setError(recentList.reason instanceof Error ? recentList.reason.message : String(recentList.reason));
|
|
84
|
+
});
|
|
85
|
+
return ssr(_tmpl$3, ssrHydrationKey(), escape(createComponent(Show, {
|
|
86
|
+
get when() {
|
|
87
|
+
return error();
|
|
88
|
+
},
|
|
89
|
+
get children() {
|
|
90
|
+
return ssr(_tmpl$, ssrHydrationKey(), escape(error()));
|
|
91
|
+
}
|
|
92
|
+
})), escape(stats().total), escape(stats().published), escape(stats().drafts), escape(stats().media), escape(stats().users), escape(createComponent(Show, {
|
|
93
|
+
get when() {
|
|
94
|
+
return recent().length > 0;
|
|
95
|
+
},
|
|
96
|
+
get fallback() {
|
|
97
|
+
return ssr(_tmpl$4, ssrHydrationKey());
|
|
98
|
+
},
|
|
99
|
+
get children() {
|
|
100
|
+
return ssr(_tmpl$2, ssrHydrationKey(), escape(createComponent(For, {
|
|
101
|
+
get each() {
|
|
102
|
+
return recent();
|
|
103
|
+
},
|
|
104
|
+
children: (row) => ssr(_tmpl$5, ssrHydrationKey(), `/content/edit?id=${escape(encodeURIComponent(String(raw(row)["id"] ?? "")), true)}`, escape(String(raw(row)["title"] ?? "—")), escape(String(raw(row)["type"] ?? "—")), escape(String(raw(row)["status"] ?? "—")), escape(formatDate(row)))
|
|
105
|
+
})));
|
|
106
|
+
}
|
|
107
|
+
})));
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/pages/index.astro
|
|
111
|
+
var pages_exports = /* @__PURE__ */ __exportAll({
|
|
112
|
+
default: () => $$Index,
|
|
113
|
+
file: () => $$file,
|
|
114
|
+
url: () => ""
|
|
115
|
+
});
|
|
116
|
+
var $$Index = createComponent$1(($$result, $$props, $$slots) => {
|
|
117
|
+
return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, {
|
|
118
|
+
"title": "Dashboard",
|
|
119
|
+
"data-astro-cid-lcdefpme": true
|
|
120
|
+
}, { "default": ($$result) => renderTemplate`${maybeRenderHead($$result)}<div class="dashboard" data-astro-cid-lcdefpme>${renderComponent($$result, "DashboardHome", DashboardHome, {
|
|
121
|
+
"client:load": true,
|
|
122
|
+
"data-astro-cid-lcdefpme": true,
|
|
123
|
+
"client:component-hydration": "load",
|
|
124
|
+
"client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/apps/dashboard/DashboardHome.tsx",
|
|
125
|
+
"client:component-export": "DashboardHome"
|
|
126
|
+
})}<div class="quick-actions" data-astro-cid-lcdefpme><div class="card" data-astro-cid-lcdefpme><h3 class="card-header" data-astro-cid-lcdefpme>Quick Actions</h3><div class="actions-grid" data-astro-cid-lcdefpme><a href="/content/new" class="action-card" data-astro-cid-lcdefpme><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-lcdefpme><line x1="12" y1="5" x2="12" y2="19" data-astro-cid-lcdefpme></line><line x1="5" y1="12" x2="19" y2="12" data-astro-cid-lcdefpme></line></svg><span data-astro-cid-lcdefpme>New Post</span></a><a href="/media/upload" class="action-card" data-astro-cid-lcdefpme><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-lcdefpme><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" data-astro-cid-lcdefpme></path><polyline points="17 8 12 3 7 8" data-astro-cid-lcdefpme></polyline><line x1="12" y1="3" x2="12" y2="15" data-astro-cid-lcdefpme></line></svg><span data-astro-cid-lcdefpme>Upload Media</span></a><a href="/users/new" class="action-card" data-astro-cid-lcdefpme><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-lcdefpme><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" data-astro-cid-lcdefpme></path><circle cx="8.5" cy="7" r="4" data-astro-cid-lcdefpme></circle><line x1="20" y1="8" x2="20" y2="14" data-astro-cid-lcdefpme></line><line x1="23" y1="11" x2="17" y2="11" data-astro-cid-lcdefpme></line></svg><span data-astro-cid-lcdefpme>Add User</span></a><a href="/settings" class="action-card" data-astro-cid-lcdefpme><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-lcdefpme><circle cx="12" cy="12" r="3" data-astro-cid-lcdefpme></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" data-astro-cid-lcdefpme></path></svg><span data-astro-cid-lcdefpme>Settings</span></a></div></div></div></div>` })}`;
|
|
127
|
+
}, "/home/runner/work/cms/cms/apps/admin/src/pages/index.astro", void 0);
|
|
128
|
+
var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/index.astro";
|
|
129
|
+
//#endregion
|
|
130
|
+
//#region \0virtual:astro:page:src/pages/index@_@astro
|
|
131
|
+
var page = () => pages_exports;
|
|
132
|
+
//#endregion
|
|
133
|
+
export { page };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
|
|
2
|
+
import { d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
|
|
3
|
+
import { t as createComponent } from "./compiler_CYjwXhLT.mjs";
|
|
4
|
+
import { t as $$DashboardLayout } from "./DashboardLayout_DO66tdeZ.mjs";
|
|
5
|
+
//#region src/pages/settings/index.astro
|
|
6
|
+
var settings_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
default: () => $$Index,
|
|
8
|
+
file: () => $$file,
|
|
9
|
+
url: () => $$url
|
|
10
|
+
});
|
|
11
|
+
var $$Index = createComponent(($$result, $$props, $$slots) => {
|
|
12
|
+
return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, {
|
|
13
|
+
"title": "Settings",
|
|
14
|
+
"data-astro-cid-pvy7orjg": true
|
|
15
|
+
}, { "default": ($$result) => renderTemplate`${maybeRenderHead($$result)}<div class="settings-page" data-astro-cid-pvy7orjg><div class="page-header" data-astro-cid-pvy7orjg><h2 data-astro-cid-pvy7orjg>Configurações</h2><p data-astro-cid-pvy7orjg>Escolha uma seção para configurar o projeto.</p></div><div class="settings-cards" data-astro-cid-pvy7orjg><a class="card settings-card" href="/settings/general" data-astro-cid-pvy7orjg><h3 data-astro-cid-pvy7orjg>Geral</h3><p class="muted" data-astro-cid-pvy7orjg>Título, descrição, idioma e fuso horário do site.</p></a><a class="card settings-card" href="/settings/post-types" data-astro-cid-pvy7orjg><h3 data-astro-cid-pvy7orjg>Content Types</h3><p class="muted" data-astro-cid-pvy7orjg>Tipos de conteúdo personalizados (CPTs) além de Posts e Páginas.</p></a><a class="card settings-card" href="/settings/taxonomies" data-astro-cid-pvy7orjg><h3 data-astro-cid-pvy7orjg>Taxonomias</h3><p class="muted" data-astro-cid-pvy7orjg>Categorias, tags e taxonomias personalizadas.</p></a></div></div>` })}`;
|
|
16
|
+
}, "/home/runner/work/cms/cms/apps/admin/src/pages/settings/index.astro", void 0);
|
|
17
|
+
var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/settings/index.astro";
|
|
18
|
+
var $$url = "/settings";
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region \0virtual:astro:page:src/pages/settings/index@_@astro
|
|
21
|
+
var page = () => settings_exports;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { page };
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
|
|
2
|
+
import { d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
|
|
3
|
+
import { t as createComponent$1 } from "./compiler_CYjwXhLT.mjs";
|
|
4
|
+
import { t as $$DashboardLayout } from "./DashboardLayout_DO66tdeZ.mjs";
|
|
5
|
+
import { t as apiClient } from "./api_BWOj0bUJ.mjs";
|
|
6
|
+
import { createComponent, escape, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
|
|
7
|
+
import { For, Show, createSignal, onMount } from "solid-js";
|
|
8
|
+
//#region src/components/content/ContentList.tsx
|
|
9
|
+
var _tmpl$ = [
|
|
10
|
+
"<div",
|
|
11
|
+
" class=\"notice notice--error\">",
|
|
12
|
+
"</div>"
|
|
13
|
+
];
|
|
14
|
+
var _tmpl$2 = [
|
|
15
|
+
"<table",
|
|
16
|
+
" class=\"table\"><thead><tr><th>Título</th><th>Tipo</th><th>Status</th><th>Atualizado</th><th></th></tr></thead><tbody>",
|
|
17
|
+
"</tbody></table>"
|
|
18
|
+
];
|
|
19
|
+
var _tmpl$3 = [
|
|
20
|
+
"<div",
|
|
21
|
+
" class=\"pagination\"><button class=\"btn btn-secondary btn-sm\" type=\"button\"",
|
|
22
|
+
">← Anterior</button><span class=\"muted\">Página <!--$-->",
|
|
23
|
+
"<!--/--> de <!--$-->",
|
|
24
|
+
"<!--/--></span><button class=\"btn btn-secondary btn-sm\" type=\"button\"",
|
|
25
|
+
">Próxima →</button></div>"
|
|
26
|
+
];
|
|
27
|
+
var _tmpl$4 = [
|
|
28
|
+
"<div",
|
|
29
|
+
" class=\"content-list\"><!--$-->",
|
|
30
|
+
"<!--/--><div class=\"toolbar\"><input class=\"input\" placeholder=\"Buscar conteúdo…\"",
|
|
31
|
+
"><select class=\"input\"",
|
|
32
|
+
"><option value>Todos os tipos</option><!--$-->",
|
|
33
|
+
"<!--/--></select><select class=\"input\"",
|
|
34
|
+
"><option value>Todos os status</option><option value=\"DRAFT\">Rascunho</option><option value=\"PUBLISHED\">Publicado</option><option value=\"ARCHIVED\">Arquivado</option></select><a class=\"btn btn-primary\" href=\"/content/new\">+ Novo conteúdo</a><button class=\"btn btn-secondary\" type=\"button\">Buscar</button></div><div class=\"card\"><!--$-->",
|
|
35
|
+
"<!--/--><!--$-->",
|
|
36
|
+
"<!--/--></div></div>"
|
|
37
|
+
];
|
|
38
|
+
var _tmpl$5 = [
|
|
39
|
+
"<option",
|
|
40
|
+
">",
|
|
41
|
+
"</option>"
|
|
42
|
+
];
|
|
43
|
+
var _tmpl$6 = ["<p", " class=\"muted\">Nenhum conteúdo encontrado.</p>"];
|
|
44
|
+
var _tmpl$7 = [
|
|
45
|
+
"<tr",
|
|
46
|
+
"><td>",
|
|
47
|
+
"</td><td>",
|
|
48
|
+
"</td><td>",
|
|
49
|
+
"</td><td class=\"muted\">",
|
|
50
|
+
"</td><td class=\"users-table__actions\"><a class=\"btn btn-secondary btn-sm\" href=\"",
|
|
51
|
+
"\">Editar</a><button class=\"btn btn-danger btn-sm\" type=\"button\">Excluir</button></td></tr>"
|
|
52
|
+
];
|
|
53
|
+
function raw(row) {
|
|
54
|
+
return row;
|
|
55
|
+
}
|
|
56
|
+
function formatDate(row) {
|
|
57
|
+
const value = raw(row)["updated_at"] ?? raw(row)["updatedAt"] ?? raw(row)["created_at"];
|
|
58
|
+
if (typeof value !== "string") return "—";
|
|
59
|
+
const date = new Date(value);
|
|
60
|
+
return Number.isNaN(date.getTime()) ? "—" : date.toLocaleString("pt-BR");
|
|
61
|
+
}
|
|
62
|
+
function ContentList() {
|
|
63
|
+
const [items, setItems] = createSignal([]);
|
|
64
|
+
const [types, setTypes] = createSignal([]);
|
|
65
|
+
const [total, setTotal] = createSignal(0);
|
|
66
|
+
const [page, setPage] = createSignal(1);
|
|
67
|
+
const [search, setSearch] = createSignal("");
|
|
68
|
+
const [type, setType] = createSignal("");
|
|
69
|
+
const [status, setStatus] = createSignal("");
|
|
70
|
+
const [error, setError] = createSignal("");
|
|
71
|
+
const limit = 20;
|
|
72
|
+
const load = async () => {
|
|
73
|
+
try {
|
|
74
|
+
const result = await apiClient.getContent({
|
|
75
|
+
page: page(),
|
|
76
|
+
limit,
|
|
77
|
+
type: type() || void 0,
|
|
78
|
+
status: status() || void 0,
|
|
79
|
+
search: search() || void 0
|
|
80
|
+
});
|
|
81
|
+
setItems(result.data ?? []);
|
|
82
|
+
setTotal(result.total ?? 0);
|
|
83
|
+
} catch (err) {
|
|
84
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
onMount(async () => {
|
|
88
|
+
await load();
|
|
89
|
+
try {
|
|
90
|
+
setTypes(await apiClient.getContentTypes());
|
|
91
|
+
} catch {}
|
|
92
|
+
});
|
|
93
|
+
const totalPages = () => Math.max(1, Math.ceil(total() / limit));
|
|
94
|
+
return ssr(_tmpl$4, ssrHydrationKey(), escape(createComponent(Show, {
|
|
95
|
+
get when() {
|
|
96
|
+
return error();
|
|
97
|
+
},
|
|
98
|
+
get children() {
|
|
99
|
+
return ssr(_tmpl$, ssrHydrationKey(), escape(error()));
|
|
100
|
+
}
|
|
101
|
+
})), ssrAttribute("value", escape(search(), true), false), ssrAttribute("value", escape(type(), true), false), escape(createComponent(For, {
|
|
102
|
+
get each() {
|
|
103
|
+
return types();
|
|
104
|
+
},
|
|
105
|
+
children: (t) => ssr(_tmpl$5, ssrHydrationKey() + ssrAttribute("value", escape(t.slug, true), false), escape(t.pluralLabel || t.name))
|
|
106
|
+
})), ssrAttribute("value", escape(status(), true), false), escape(createComponent(Show, {
|
|
107
|
+
get when() {
|
|
108
|
+
return items().length > 0;
|
|
109
|
+
},
|
|
110
|
+
get fallback() {
|
|
111
|
+
return ssr(_tmpl$6, ssrHydrationKey());
|
|
112
|
+
},
|
|
113
|
+
get children() {
|
|
114
|
+
return ssr(_tmpl$2, ssrHydrationKey(), escape(createComponent(For, {
|
|
115
|
+
get each() {
|
|
116
|
+
return items();
|
|
117
|
+
},
|
|
118
|
+
children: (row) => ssr(_tmpl$7, ssrHydrationKey(), escape(String(raw(row)["title"] ?? "—")), escape(String(raw(row)["type"] ?? "—")), escape(String(raw(row)["status"] ?? "—")), escape(formatDate(row)), `/content/edit?id=${escape(encodeURIComponent(row.id), true)}`)
|
|
119
|
+
})));
|
|
120
|
+
}
|
|
121
|
+
})), escape(createComponent(Show, {
|
|
122
|
+
get when() {
|
|
123
|
+
return totalPages() > 1;
|
|
124
|
+
},
|
|
125
|
+
get children() {
|
|
126
|
+
return ssr(_tmpl$3, ssrHydrationKey(), ssrAttribute("disabled", page() <= 1, true), escape(page()), escape(totalPages()), ssrAttribute("disabled", page() >= totalPages(), true));
|
|
127
|
+
}
|
|
128
|
+
})));
|
|
129
|
+
}
|
|
130
|
+
//#endregion
|
|
131
|
+
//#region src/pages/content/index.astro
|
|
132
|
+
var content_exports = /* @__PURE__ */ __exportAll({
|
|
133
|
+
default: () => $$Index,
|
|
134
|
+
file: () => $$file,
|
|
135
|
+
url: () => $$url
|
|
136
|
+
});
|
|
137
|
+
var $$Index = createComponent$1(($$result, $$props, $$slots) => {
|
|
138
|
+
return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, {
|
|
139
|
+
"title": "Content",
|
|
140
|
+
"data-astro-cid-qhu5jad5": true
|
|
141
|
+
}, { "default": ($$result) => renderTemplate`${maybeRenderHead($$result)}<div class="content-page" data-astro-cid-qhu5jad5><div class="page-header" data-astro-cid-qhu5jad5><h2 data-astro-cid-qhu5jad5>Conteúdo</h2><p data-astro-cid-qhu5jad5>Busque, filtre, edite e publique seu conteúdo.</p></div>${renderComponent($$result, "ContentList", ContentList, {
|
|
142
|
+
"client:load": true,
|
|
143
|
+
"data-astro-cid-qhu5jad5": true,
|
|
144
|
+
"client:component-hydration": "load",
|
|
145
|
+
"client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/content/ContentList.tsx",
|
|
146
|
+
"client:component-export": "ContentList"
|
|
147
|
+
})}</div>` })}`;
|
|
148
|
+
}, "/home/runner/work/cms/cms/apps/admin/src/pages/content/index.astro", void 0);
|
|
149
|
+
var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/content/index.astro";
|
|
150
|
+
var $$url = "/content";
|
|
151
|
+
//#endregion
|
|
152
|
+
//#region \0virtual:astro:page:src/pages/content/index@_@astro
|
|
153
|
+
var page = () => content_exports;
|
|
154
|
+
//#endregion
|
|
155
|
+
export { page };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
|
|
2
|
+
import { d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
|
|
3
|
+
import { t as createComponent } from "./compiler_CYjwXhLT.mjs";
|
|
4
|
+
import { t as $$DashboardLayout } from "./DashboardLayout_DO66tdeZ.mjs";
|
|
5
|
+
import { t as MediaLibrary } from "./MediaLibrary_DEi9k6ms.mjs";
|
|
6
|
+
//#region src/pages/media/index.astro
|
|
7
|
+
var media_exports = /* @__PURE__ */ __exportAll({
|
|
8
|
+
default: () => $$Index,
|
|
9
|
+
file: () => $$file,
|
|
10
|
+
url: () => $$url
|
|
11
|
+
});
|
|
12
|
+
var $$Index = createComponent(($$result, $$props, $$slots) => {
|
|
13
|
+
return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, {
|
|
14
|
+
"title": "Media",
|
|
15
|
+
"data-astro-cid-jureezux": true
|
|
16
|
+
}, { "default": ($$result) => renderTemplate`${maybeRenderHead($$result)}<div class="media-page" data-astro-cid-jureezux><div class="page-header" data-astro-cid-jureezux><h2 data-astro-cid-jureezux>Biblioteca de mídia</h2><p data-astro-cid-jureezux>Envie e gerencie imagens, vídeos e documentos. Os arquivos ficam em <code data-astro-cid-jureezux>uploads/</code> e são servidos publicamente.</p></div>${renderComponent($$result, "MediaLibrary", MediaLibrary, {
|
|
17
|
+
"client:load": true,
|
|
18
|
+
"data-astro-cid-jureezux": true,
|
|
19
|
+
"client:component-hydration": "load",
|
|
20
|
+
"client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/media/MediaLibrary.tsx",
|
|
21
|
+
"client:component-export": "MediaLibrary"
|
|
22
|
+
})}</div>` })}`;
|
|
23
|
+
}, "/home/runner/work/cms/cms/apps/admin/src/pages/media/index.astro", void 0);
|
|
24
|
+
var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/media/index.astro";
|
|
25
|
+
var $$url = "/media";
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region \0virtual:astro:page:src/pages/media/index@_@astro
|
|
28
|
+
var page = () => media_exports;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { page };
|