@oktis-works/admin 0.1.5 → 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.
Files changed (38) hide show
  1. package/dist/client/_astro/{BaseLayout.COf3Eran.css → BaseLayout.BPkaFsmK.css} +1 -1
  2. package/dist/client/_astro/{ContentEditor.COyD6bGV.js → ContentEditor.DOcUnkMP.js} +1 -1
  3. package/dist/client/_astro/ContentList.KzxsMMxH.js +1 -0
  4. package/dist/client/_astro/DashboardHome.DFRZ_yyM.js +1 -0
  5. package/dist/client/_astro/DashboardLayout.astro_astro_type_script_index_0_lang.B663y3aY.js +1 -0
  6. package/dist/client/_astro/GeneralSettings.gbcKHf_p.js +1 -0
  7. package/dist/client/_astro/MediaLibrary.BtCjwNlR.js +1 -0
  8. package/dist/client/_astro/{PostTypesManager.APvO7Cs9.js → PostTypesManager.DsxV-sF3.js} +1 -1
  9. package/dist/client/_astro/{TaxonomiesManager.CVFdfaUR.js → TaxonomiesManager.DqnwUCtt.js} +1 -1
  10. package/dist/client/_astro/UserCreateForm.BLaiQTzI.js +1 -0
  11. package/dist/client/_astro/UsersManager.BPRG8tjn.js +1 -0
  12. package/dist/client/_astro/api.BegLcOlq.js +1 -0
  13. 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
  14. package/dist/server/chunks/{BaseLayout_Mvr1_6Ng.mjs → BaseLayout_C41_wW4F.mjs} +19 -2
  15. package/dist/server/chunks/{edit_D14rRl_p.mjs → ContentEditor_DwBpNq-K.mjs} +21 -30
  16. package/dist/server/chunks/DashboardLayout_DO66tdeZ.mjs +43 -0
  17. package/dist/server/chunks/MediaLibrary_DEi9k6ms.mjs +179 -0
  18. package/dist/server/chunks/api_BWOj0bUJ.mjs +274 -0
  19. package/dist/server/chunks/edit_DNavSwFw.mjs +30 -0
  20. package/dist/server/chunks/general_r50g45qE.mjs +173 -0
  21. package/dist/server/chunks/index_6G7rXrus.mjs +133 -0
  22. package/dist/server/chunks/index_B50u2M3P.mjs +23 -0
  23. package/dist/server/chunks/index_DUzUgyr4.mjs +155 -0
  24. package/dist/server/chunks/index_qxSk7_hO.mjs +30 -0
  25. package/dist/server/chunks/index_yiAU3Mfy.mjs +204 -0
  26. package/dist/server/chunks/{login_B7vbWIed.mjs → login_BH67N4b1.mjs} +2 -19
  27. package/dist/server/chunks/new_BWcSqoqV.mjs +86 -0
  28. package/dist/server/chunks/new_h8TItZZ9.mjs +30 -0
  29. package/dist/server/chunks/{post-types_BtNyF2Iv.mjs → post-types_BSobAovm.mjs} +2 -2
  30. package/dist/server/chunks/{taxonomies_DSgstawN.mjs → taxonomies_Ij7CReDF.mjs} +2 -2
  31. package/dist/server/chunks/upload_16xg6koU.mjs +31 -0
  32. package/dist/server/entry.mjs +259 -13
  33. package/package.json +4 -4
  34. package/dist/client/_astro/api.DSP61PKM.js +0 -1
  35. package/dist/server/chunks/DashboardLayout_CP5ag-_P.mjs +0 -17
  36. package/dist/server/chunks/api_Cy8sbUHf.mjs +0 -153
  37. package/dist/server/chunks/index_BgbHlcwr.mjs +0 -23
  38. package/dist/server/chunks/index_c3b5hMDp.mjs +0 -22
@@ -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 };
@@ -0,0 +1,204 @@
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/apps/users/UsersManager.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
+ "<table",
21
+ " class=\"users-table\"><thead><tr><th>Nome</th><th>Email</th><th>Papel</th><th>Status</th><th>Último acesso</th><th></th></tr></thead><tbody>",
22
+ "</tbody></table>"
23
+ ];
24
+ var _tmpl$4 = [
25
+ "<div",
26
+ " class=\"pagination\"><button class=\"btn btn-secondary btn-sm\" type=\"button\"",
27
+ ">← Anterior</button><span class=\"muted\">Página <!--$-->",
28
+ "<!--/--> de <!--$-->",
29
+ "<!--/--></span><button class=\"btn btn-secondary btn-sm\" type=\"button\"",
30
+ ">Próxima →</button></div>"
31
+ ];
32
+ var _tmpl$5 = [
33
+ "<div",
34
+ " class=\"users-manager\"><!--$-->",
35
+ "<!--/--><!--$-->",
36
+ "<!--/--><div class=\"toolbar\"><input class=\"input\" placeholder=\"Buscar por nome ou email…\"",
37
+ "><select class=\"input\"",
38
+ "><option value>Todos os status</option><option value=\"ACTIVE\">Ativos</option><option value=\"INACTIVE\">Inativos</option></select><a class=\"btn btn-primary\" href=\"/users/new\">+ Novo usuário</a><button class=\"btn btn-secondary\" type=\"button\">Buscar</button></div><!--$-->",
39
+ "<!--/--><!--$-->",
40
+ "<!--/--><!--$-->",
41
+ "<!--/--></div>"
42
+ ];
43
+ var _tmpl$6 = ["<p", " class=\"muted\">Nenhum usuário encontrado.</p>"];
44
+ var _tmpl$7 = [
45
+ "<span",
46
+ " class=\"badge\">",
47
+ "</span>"
48
+ ];
49
+ var _tmpl$8 = [
50
+ "<tr",
51
+ " class=\"",
52
+ "\"><td>",
53
+ "</td><td class=\"muted\">",
54
+ "</td><td>",
55
+ "</td><td><span class=\"",
56
+ "\"></span><!--$-->",
57
+ "<!--/--></td><td class=\"muted\">",
58
+ "</td><td class=\"users-table__actions\"><button class=\"btn btn-secondary btn-sm\" type=\"button\">Gerenciar</button><button class=\"btn btn-danger btn-sm\" type=\"button\">Excluir</button></td></tr>"
59
+ ];
60
+ var _tmpl$9 = ["<span", " class=\"muted\">sem papel</span>"];
61
+ var _tmpl$0 = [
62
+ "<div",
63
+ " class=\"card user-details\"><h3>Gerenciar usuário</h3><div class=\"form-grid\"><label>Nome<input class=\"input\"",
64
+ "></label><label>Email<input class=\"input\" type=\"email\"",
65
+ "></label><label>Status<select class=\"input\"",
66
+ "><option value=\"ACTIVE\">Ativo</option><option value=\"INACTIVE\">Inativo</option></select></label><label>Papel<select class=\"input\"",
67
+ "",
68
+ "><option value>— sem papel —</option><!--$-->",
69
+ "<!--/--></select></label></div><p class=\"muted\">Criado em <!--$-->",
70
+ "<!--/--> · último acesso <!--$-->",
71
+ "<!--/--></p><div class=\"media-details__actions\"><button class=\"btn btn-primary\" type=\"button\"",
72
+ ">",
73
+ "</button><button class=\"btn btn-secondary\" type=\"button\"",
74
+ ">Redefinir senha</button><button class=\"btn btn-secondary\" type=\"button\">Fechar</button></div></div>"
75
+ ];
76
+ var _tmpl$1 = [
77
+ "<option",
78
+ "><!--$-->",
79
+ "<!--/--> (<!--$-->",
80
+ "<!--/-->)</option>"
81
+ ];
82
+ function formatDate(value) {
83
+ if (!value) return "—";
84
+ const date = new Date(value);
85
+ return Number.isNaN(date.getTime()) ? "—" : date.toLocaleString("pt-BR");
86
+ }
87
+ function UsersManager() {
88
+ const [users, setUsers] = createSignal([]);
89
+ const [roles, setRoles] = createSignal([]);
90
+ const [total, setTotal] = createSignal(0);
91
+ const [page, setPage] = createSignal(1);
92
+ const [search, setSearch] = createSignal("");
93
+ const [status, setStatus] = createSignal("");
94
+ const [error, setError] = createSignal("");
95
+ const [info, setInfo] = createSignal("");
96
+ const [selected, setSelected] = createSignal(null);
97
+ const [busy, setBusy] = createSignal(false);
98
+ const limit = 20;
99
+ const load = async () => {
100
+ try {
101
+ const result = await apiClient.listUsers({
102
+ page: page(),
103
+ limit,
104
+ search: search() || void 0,
105
+ status: status() || void 0
106
+ });
107
+ setUsers(result.data ?? []);
108
+ setTotal(result.total ?? 0);
109
+ } catch (err) {
110
+ setError(err instanceof Error ? err.message : String(err));
111
+ }
112
+ };
113
+ onMount(async () => {
114
+ await load();
115
+ try {
116
+ setRoles(await apiClient.listRoles());
117
+ } catch {}
118
+ });
119
+ const totalPages = () => Math.max(1, Math.ceil(total() / limit));
120
+ const currentRole = (user) => roles().find((r) => r.slug === user.roles[0]);
121
+ return ssr(_tmpl$5, ssrHydrationKey(), escape(createComponent(Show, {
122
+ get when() {
123
+ return error();
124
+ },
125
+ get children() {
126
+ return ssr(_tmpl$, ssrHydrationKey(), escape(error()));
127
+ }
128
+ })), escape(createComponent(Show, {
129
+ get when() {
130
+ return info();
131
+ },
132
+ get children() {
133
+ return ssr(_tmpl$2, ssrHydrationKey(), escape(info()));
134
+ }
135
+ })), ssrAttribute("value", escape(search(), true), false), ssrAttribute("value", escape(status(), true), false), escape(createComponent(Show, {
136
+ get when() {
137
+ return users().length > 0;
138
+ },
139
+ get fallback() {
140
+ return ssr(_tmpl$6, ssrHydrationKey());
141
+ },
142
+ get children() {
143
+ return ssr(_tmpl$3, ssrHydrationKey(), escape(createComponent(For, {
144
+ get each() {
145
+ return users();
146
+ },
147
+ children: (user) => ssr(_tmpl$8, ssrHydrationKey(), selected()?.id === user.id ? "users-table__row--selected" : "", escape(user.name), escape(user.email), escape(createComponent(Show, {
148
+ get when() {
149
+ return user.roles.length > 0;
150
+ },
151
+ get fallback() {
152
+ return ssr(_tmpl$9, ssrHydrationKey());
153
+ },
154
+ get children() {
155
+ return ssr(_tmpl$7, ssrHydrationKey(), escape(user.roles.join(", ")));
156
+ }
157
+ })), `status-dot ${user.status === "ACTIVE" ? "status-dot--active" : ""}`, escape(user.status), escape(formatDate(user.last_login_at)))
158
+ })));
159
+ }
160
+ })), escape(createComponent(Show, {
161
+ get when() {
162
+ return totalPages() > 1;
163
+ },
164
+ get children() {
165
+ return ssr(_tmpl$4, ssrHydrationKey(), ssrAttribute("disabled", page() <= 1, true), escape(page()), escape(totalPages()), ssrAttribute("disabled", page() >= totalPages(), true));
166
+ }
167
+ })), escape(createComponent(Show, {
168
+ get when() {
169
+ return selected();
170
+ },
171
+ children: (user) => ssr(_tmpl$0, ssrHydrationKey(), ssrAttribute("value", escape(user().name, true), false), ssrAttribute("value", escape(user().email, true), false), ssrAttribute("value", escape(user().status, true), false), ssrAttribute("value", escape(currentRole(user())?.id ?? "", true), false), ssrAttribute("disabled", busy(), true), escape(createComponent(For, {
172
+ get each() {
173
+ return roles();
174
+ },
175
+ children: (role) => ssr(_tmpl$1, ssrHydrationKey() + ssrAttribute("value", escape(role.id, true), false), escape(role.name), escape(role.slug))
176
+ })), escape(formatDate(user().created_at)), escape(formatDate(user().last_login_at)), ssrAttribute("disabled", busy(), true), busy() ? "Salvando…" : "Salvar", ssrAttribute("disabled", busy(), true))
177
+ })));
178
+ }
179
+ //#endregion
180
+ //#region src/pages/users/index.astro
181
+ var users_exports = /* @__PURE__ */ __exportAll({
182
+ default: () => $$Index,
183
+ file: () => $$file,
184
+ url: () => $$url
185
+ });
186
+ var $$Index = createComponent$1(($$result, $$props, $$slots) => {
187
+ return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, {
188
+ "title": "Users",
189
+ "data-astro-cid-ao6unroh": true
190
+ }, { "default": ($$result) => renderTemplate`${maybeRenderHead($$result)}<div class="users-page" data-astro-cid-ao6unroh><div class="page-header" data-astro-cid-ao6unroh><h2 data-astro-cid-ao6unroh>Usuários</h2><p data-astro-cid-ao6unroh>Gerencie contas, papéis (roles) e acessos do projeto.</p></div>${renderComponent($$result, "UsersManager", UsersManager, {
191
+ "client:load": true,
192
+ "data-astro-cid-ao6unroh": true,
193
+ "client:component-hydration": "load",
194
+ "client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/apps/users/UsersManager.tsx",
195
+ "client:component-export": "UsersManager"
196
+ })}</div>` })}`;
197
+ }, "/home/runner/work/cms/cms/apps/admin/src/pages/users/index.astro", void 0);
198
+ var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/users/index.astro";
199
+ var $$url = "/users";
200
+ //#endregion
201
+ //#region \0virtual:astro:page:src/pages/users/index@_@astro
202
+ var page = () => users_exports;
203
+ //#endregion
204
+ export { page };
@@ -1,24 +1,7 @@
1
1
  import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
2
- import { d as maybeRenderHead, i as renderComponent, m as createRenderInstruction, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
2
+ import { d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_CnzC2Y0K.mjs";
3
3
  import { t as createComponent } from "./compiler_CYjwXhLT.mjs";
4
- import { t as $$BaseLayout } from "./BaseLayout_Mvr1_6Ng.mjs";
5
- //#region ../../node_modules/.bun/astro@7.3.5+b816f5dfb7c6296d/node_modules/astro/dist/runtime/server/render/script.js
6
- async function renderScript(result, id) {
7
- const inlined = result.inlinedScripts.get(id);
8
- let content = "";
9
- if (inlined != null) {
10
- if (inlined) content = `<script type="module">${inlined}<\/script>`;
11
- } else {
12
- const resolved = await result.resolve(id);
13
- content = `<script type="module" src="${result.userAssetsBase ? (result.base === "/" ? "" : result.base) + result.userAssetsBase : ""}${resolved}"><\/script>`;
14
- }
15
- return createRenderInstruction({
16
- type: "script",
17
- id,
18
- content
19
- });
20
- }
21
- //#endregion
4
+ import { n as renderScript, t as $$BaseLayout } from "./BaseLayout_C41_wW4F.mjs";
22
5
  //#region src/pages/login.astro
23
6
  var login_exports = /* @__PURE__ */ __exportAll({
24
7
  default: () => $$Login,