@oktis-works/admin 0.8.8 → 0.10.0

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 (123) hide show
  1. package/dist/client/_astro/ActivityWidget.ChQWOeJC.js +16 -0
  2. package/dist/client/_astro/{AdminBar.5-l0PBZz.js → AdminBar.Dt8_nO1o.js} +2 -2
  3. package/dist/client/_astro/{AtGlanceWidget.B5ytZ8mp.js → AtGlanceWidget.NFubs9y9.js} +3 -3
  4. package/dist/client/_astro/BaseLayout.DAkzjMTq.css +1 -0
  5. package/dist/client/_astro/ContentEditor.CV3dhbjt.js +1 -0
  6. package/dist/client/_astro/{ContentEditor.CQ2OYPHn.js → ContentEditor.DfL_lpMd.js} +2 -2
  7. package/dist/client/_astro/{ContentTypeWorkspace.CdsUQQfa.js → ContentTypeWorkspace.BitHXXxQ.js} +1 -1
  8. package/dist/client/_astro/{DashboardHome.BYOWl94l.js → DashboardHome.Bc3UoI13.js} +1 -1
  9. package/dist/client/_astro/DashboardLayout.DM3iZCrw.css +1 -0
  10. package/dist/client/_astro/DashboardLayout.astro_astro_type_script_index_0_lang.CzpgSZHu.js +1 -0
  11. package/dist/client/_astro/FbIcon.CUNS6rpP.js +1 -0
  12. package/dist/client/_astro/FieldGroupEditor.DZI2aKIV.js +69 -0
  13. package/dist/client/_astro/FieldGroupList.Jz2ScLbc.js +1 -0
  14. package/dist/client/_astro/FloatingPanel.BeCEt_JP.js +1 -0
  15. package/dist/client/_astro/{Footer.CnuW-fOP.js → Footer.CoQHbtro.js} +2 -2
  16. package/dist/client/_astro/GeneralSettings.CE_IKxIn.js +1 -0
  17. package/dist/client/_astro/LogsManager.BQUduS0g.js +1 -0
  18. package/dist/client/_astro/MediaLibrary.Bt-NcHbG.js +1 -0
  19. package/dist/client/_astro/{MenuManager.Bl_gpt5T.js → MenuManager.D4NmoaFw.js} +1 -1
  20. package/dist/client/_astro/{PluginManager.ClpQA_a-.js → PluginManager.BlNWs5RU.js} +2 -2
  21. package/dist/client/_astro/PostTypesManager.BKcoZ1gF.js +1 -0
  22. package/dist/client/_astro/{QuickDraftWidget.Gjzwimmf.js → QuickDraftWidget.CRQ7FmTm.js} +2 -2
  23. package/dist/client/_astro/ResourceHubs.Dz0u_gL5.js +1 -0
  24. package/dist/client/_astro/TaxonomiesManager.BZZ626v_.js +1 -0
  25. package/dist/client/_astro/TaxonomyTermsManager.CxXNNf5j.js +1 -0
  26. package/dist/client/_astro/ThemeManager.DzbQaPu4.js +176 -0
  27. package/dist/client/_astro/UserCreateForm.DL04jrgd.js +1 -0
  28. package/dist/client/_astro/{UsersManager.GrlsCN-n.js → UsersManager.DGQJqlbN.js} +1 -1
  29. package/dist/client/_astro/WebhooksManager.DACLOiX1.js +1 -0
  30. package/dist/client/_astro/api.CNp-a9Z3.js +1 -0
  31. package/dist/client/_astro/{ar.9BcNkJMI.js → ar.BeEmOTlL.js} +1 -1
  32. package/dist/client/_astro/client.DU9Dc2oe.js +1 -0
  33. package/dist/client/_astro/{es-ES.DgqDFCmG.js → es-ES.C0DI0CK6.js} +1 -1
  34. package/dist/client/_astro/extensions.BWDpAUyI.js +1 -0
  35. package/dist/client/_astro/{he.11dIJHQw.js → he.RF4swhtn.js} +1 -1
  36. package/dist/client/_astro/i18n.DCpVFQAZ.js +1 -0
  37. package/dist/client/_astro/{it.yCdgk3Xj.js → it.DhCR9YsW.js} +1 -1
  38. package/dist/client/_astro/{ja.BIm7Hwe_.js → ja.DPrxHQvU.js} +1 -1
  39. package/dist/client/_astro/{login.astro_astro_type_script_index_0_lang.D7pjn1zG.js → login.astro_astro_type_script_index_0_lang.Dni6a5dD.js} +1 -1
  40. package/dist/client/_astro/{pl.dUwrcITB.js → pl.6VCoPa7y.js} +1 -1
  41. package/dist/client/_astro/pt-BR.BpKbXMEZ.js +1 -0
  42. package/dist/client/_astro/{ru.lmDiQaSu.js → ru.Cv0Z6X2y.js} +1 -1
  43. package/dist/client/_astro/solid.D49dPDCT.js +1 -0
  44. package/dist/client/_astro/{src.BJaHBCQK.js → src.DXVWCoHp.js} +1 -1
  45. package/dist/client/_astro/{sw._qHdoFbp.js → sw.BBMIgY-Y.js} +1 -1
  46. package/dist/client/_astro/{tr.Do-lr98T.js → tr.BWEmWhCE.js} +1 -1
  47. package/dist/client/_astro/{uk.DTUX-N1c.js → uk.DDXJXOmn.js} +1 -1
  48. package/dist/client/_astro/web.Bqbl_1YR.js +1 -0
  49. package/dist/client/_astro/{yo.BIYG0J7I.js → yo.DNoEBLJd.js} +1 -1
  50. package/dist/client/_astro/{zh-CN.C7Iod1E1.js → zh-CN.CVKBB6Ky.js} +1 -1
  51. package/dist/server/chunks/404_CfM6kYWd.mjs +56 -0
  52. package/dist/server/chunks/{BaseLayout_DAvxa2_1.mjs → BaseLayout_DTOkhEmH.mjs} +1 -1
  53. package/dist/server/chunks/{ContentEditor_GY92E-dL.mjs → ContentEditor_D3N5qDZK.mjs} +2 -2
  54. package/dist/server/chunks/{DashboardLayout_U7BSt4BY.mjs → DashboardLayout_CidaIIqh.mjs} +12 -8
  55. package/dist/server/chunks/FloatingPanel_DI2CdUZK.mjs +57 -0
  56. package/dist/server/chunks/{MediaLibrary_B-7kFx0j.mjs → MediaLibrary_DZqdhYpt.mjs} +2 -2
  57. package/dist/server/chunks/{_id__CrGKzk8c.mjs → _id__9FIehtyR.mjs} +21 -10
  58. package/dist/server/chunks/{_slug__BFkT7tf-.mjs → _slug__Izz0oLah.mjs} +1 -1
  59. package/dist/server/chunks/access_BSltT-j0.mjs +417 -0
  60. package/dist/server/chunks/{ar_DlCzOUGe.mjs → ar_DObFFdrO.mjs} +10 -1
  61. package/dist/server/chunks/{custom-fields_C21soZ6X.mjs → custom-fields_ChGoFU6v.mjs} +2 -2
  62. package/dist/server/chunks/{edit_BX_SHtDf.mjs → edit_BDJsuJht.mjs} +2 -2
  63. package/dist/server/chunks/{es-ES_DD40B9Zr.mjs → es-ES_D6jd6T7H.mjs} +10 -1
  64. package/dist/server/chunks/{general_4pi2Xyk_.mjs → general_J5JruaEJ.mjs} +31 -27
  65. package/dist/server/chunks/{he_8WSAyM_S.mjs → he_DwGJwonL.mjs} +10 -1
  66. package/dist/server/chunks/{i18n_k88p-B6j.mjs → i18n_Cr9pc66i.mjs} +229 -527
  67. package/dist/server/chunks/{index_J14tJb39.mjs → index_BZk89gnA.mjs} +2 -2
  68. package/dist/server/chunks/{index_BrpYs70y.mjs → index_DEkpVnI-.mjs} +2 -2
  69. package/dist/server/chunks/{index_BwnKp1u1.mjs → index__TzLfz1Y.mjs} +2 -2
  70. package/dist/server/chunks/{index_DlZPZgHm.mjs → index_goZUoZn8.mjs} +3 -3
  71. package/dist/server/chunks/{index_DfzW3lzT.mjs → index_ph0CQvPI.mjs} +1 -1
  72. package/dist/server/chunks/{it_DEDC6yxf.mjs → it_CMLpQyoj.mjs} +10 -1
  73. package/dist/server/chunks/{ja_BRQi6rW3.mjs → ja_CYRz0pHv.mjs} +10 -1
  74. package/dist/server/chunks/{login_CnlPFzuR.mjs → login_D1vntlDR.mjs} +1 -1
  75. package/dist/server/chunks/{logs_ClikIoCW.mjs → logs_BQ-8tURM.mjs} +2 -2
  76. package/dist/server/chunks/{menus_UezEKuJz.mjs → menus_CxwSYjnB.mjs} +2 -2
  77. package/dist/server/chunks/{new_Cgxb7rz2.mjs → new_CZGMo6CG.mjs} +2 -2
  78. package/dist/server/chunks/{new_BNlbLJSd.mjs → new_DoFj-hVB.mjs} +2 -2
  79. package/dist/server/chunks/{pl_CKanAk0F.mjs → pl_BuXVPvU1.mjs} +10 -1
  80. package/dist/server/chunks/{plugins_Cdlj5IY8.mjs → plugins_CM-vRDfx.mjs} +2 -2
  81. package/dist/server/chunks/post-types_9YdRCAhN.mjs +437 -0
  82. package/dist/server/chunks/{pt-BR_X0hfCrsD.mjs → pt-BR_CLa-GGIZ.mjs} +48 -5
  83. package/dist/server/chunks/{ru_CuNXt2MB.mjs → ru_C56ltukG.mjs} +10 -1
  84. package/dist/server/chunks/{sw_RLMWPkos.mjs → sw_Dhw0GAgD.mjs} +10 -1
  85. package/dist/server/chunks/{taxonomies_DprUiQYq.mjs → taxonomies_C2yLbsVU.mjs} +2 -2
  86. package/dist/server/chunks/{taxonomy_ECx2rh8K.mjs → taxonomy_BAqqS2TS.mjs} +2 -2
  87. package/dist/server/chunks/{themes_B8BHsKmD.mjs → themes_zV_FXCDj.mjs} +2 -2
  88. package/dist/server/chunks/{tr_Dz8pqyTZ.mjs → tr_zELRy7A-.mjs} +10 -1
  89. package/dist/server/chunks/{uk_BjwqlweA.mjs → uk_DVOqp1x6.mjs} +10 -1
  90. package/dist/server/chunks/{upload_FUWLBTTZ.mjs → upload_Bba7badi.mjs} +2 -2
  91. package/dist/server/chunks/{webhooks_BH1Qrnee.mjs → webhooks_LTF3h9-l.mjs} +2 -2
  92. package/dist/server/chunks/{yo_Dv14KWVR.mjs → yo_BqgZcoxs.mjs} +10 -1
  93. package/dist/server/chunks/{zh-CN_DjIZCWzG.mjs → zh-CN_Dz2D1XUc.mjs} +10 -1
  94. package/dist/server/entry.mjs +74 -47
  95. package/dist/server/virtual_astro_middleware.mjs +87 -17
  96. package/package.json +1 -1
  97. package/dist/client/_astro/ActivityWidget.DFfbrs-K.js +0 -16
  98. package/dist/client/_astro/BaseLayout.3eIEVCjB.css +0 -1
  99. package/dist/client/_astro/ContentEditor.DANKVwCI.js +0 -1
  100. package/dist/client/_astro/DashboardLayout.C1hUraeX.css +0 -1
  101. package/dist/client/_astro/DashboardLayout.astro_astro_type_script_index_0_lang.DP7AKyOy.js +0 -1
  102. package/dist/client/_astro/FbIcon.uhYN8ybK.js +0 -1
  103. package/dist/client/_astro/FieldGroupEditor.5iB_mZUP.js +0 -69
  104. package/dist/client/_astro/FieldGroupList.CN3KGhw5.js +0 -1
  105. package/dist/client/_astro/GeneralSettings.Dzv_7xWf.js +0 -1
  106. package/dist/client/_astro/LogsManager.C3XW2Gze.js +0 -1
  107. package/dist/client/_astro/MediaLibrary.bx1yD6aC.js +0 -1
  108. package/dist/client/_astro/PostTypesManager.BJNKEOXY.js +0 -1
  109. package/dist/client/_astro/ResourceHubs.D11v_J8D.js +0 -1
  110. package/dist/client/_astro/TaxonomiesManager.DAC1s3aS.js +0 -1
  111. package/dist/client/_astro/TaxonomyTermsManager.RsO79xRU.js +0 -1
  112. package/dist/client/_astro/ThemeManager.BO-12WST.js +0 -176
  113. package/dist/client/_astro/UserCreateForm.CSYbfU4r.js +0 -1
  114. package/dist/client/_astro/WebhooksManager.BNaGM-w5.js +0 -1
  115. package/dist/client/_astro/api.D7bs6UOp.js +0 -1
  116. package/dist/client/_astro/client.DWJHz38V.js +0 -1
  117. package/dist/client/_astro/extensions.CpcwMaUF.js +0 -1
  118. package/dist/client/_astro/i18n.CjQozXLx.js +0 -1
  119. package/dist/client/_astro/pt-BR.BnllmbjP.js +0 -1
  120. package/dist/client/_astro/solid.8gBSxpeo.js +0 -1
  121. package/dist/client/_astro/web.DwNv8rLL.js +0 -1
  122. package/dist/server/chunks/access_C2K6rVdx.mjs +0 -138
  123. package/dist/server/chunks/post-types_BzDitU7n.mjs +0 -185
@@ -0,0 +1,417 @@
1
+ import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
2
+ import { S as createAstro, i as renderComponent, u as renderTemplate } from "./server_B5N27szj.mjs";
3
+ import { t as createComponent$1 } from "./compiler_O7J1rlsi.mjs";
4
+ import { n as useTranslation, r as apiClient } from "./i18n_Cr9pc66i.mjs";
5
+ import { t as $$DashboardLayout } from "./DashboardLayout_CidaIIqh.mjs";
6
+ import { t as PageHeader } from "./PageHeader_CBOioOjo.mjs";
7
+ import { t as FloatingPanel } from "./FloatingPanel_DI2CdUZK.mjs";
8
+ import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
9
+ import { For, Show, createEffect, createMemo, createSignal, onCleanup, onMount } from "solid-js";
10
+ //#region src/components/ui/Modal.tsx
11
+ var _tmpl$$2 = [
12
+ "<div",
13
+ " class=\"modal-overlay\" role=\"presentation\"><section class=\"modal\" role=\"dialog\" aria-modal=\"true\"",
14
+ "><header class=\"modal-header\"><h3>",
15
+ "</h3><button type=\"button\" class=\"modal-close\"",
16
+ ">×</button></header><!--$-->",
17
+ "<!--/--></section></div>"
18
+ ];
19
+ function Modal(props) {
20
+ const { t } = useTranslation();
21
+ createEffect(() => {
22
+ if (!props.open) return;
23
+ const onKey = (event) => {
24
+ if (event.key === "Escape") props.onClose();
25
+ };
26
+ document.addEventListener("keydown", onKey);
27
+ onCleanup(() => document.removeEventListener("keydown", onKey));
28
+ });
29
+ return createComponent(Show, {
30
+ get when() {
31
+ return props.open;
32
+ },
33
+ get children() {
34
+ return ssr(_tmpl$$2, ssrHydrationKey(), ssrAttribute("aria-label", escape(props.title, true), false), escape(props.title), ssrAttribute("aria-label", escape(t("common.close"), true), false), escape(props.children));
35
+ }
36
+ });
37
+ }
38
+ //#endregion
39
+ //#region src/components/apps/settings/PermissionPicker.tsx
40
+ var _tmpl$$1 = [
41
+ "<input",
42
+ " type=\"search\" class=\"input permission-picker__search\"",
43
+ ">"
44
+ ];
45
+ var _tmpl$2$1 = [
46
+ "<div",
47
+ " class=\"permission-picker__matrix\" role=\"presentation\"><div class=\"permission-picker__row permission-picker__row--head\" role=\"presentation\"><span class=\"permission-picker__resource\"></span><!--$-->",
48
+ "<!--/--><!--$-->",
49
+ "<!--/--></div><!--$-->",
50
+ "<!--/--></div>"
51
+ ];
52
+ var _tmpl$3$1 = [
53
+ "<div",
54
+ " class=\"permission-picker__custom\"><p class=\"permission-picker__custom-label\">",
55
+ "</p><div class=\"permission-picker__chips\"><!--$-->",
56
+ "<!--/--><form class=\"permission-picker__custom-form\"><input class=\"input permission-picker__custom-input\"",
57
+ "><button class=\"btn btn-secondary btn-sm\" type=\"submit\">",
58
+ "</button></form></div></div>"
59
+ ];
60
+ var _tmpl$4$1 = [
61
+ "<p",
62
+ " class=\"icon-picker__count\">",
63
+ "</p>"
64
+ ];
65
+ var _tmpl$5$1 = [
66
+ "<div",
67
+ " class=\"permission-picker\"><button type=\"button\" class=\"input permission-picker__trigger\" aria-haspopup=\"dialog\"",
68
+ "><span class=\"",
69
+ "\">",
70
+ "</span><span class=\"icon-picker__caret\" aria-hidden=\"true\">",
71
+ "</span></button><!--$-->",
72
+ "<!--/--></div>"
73
+ ];
74
+ var _tmpl$6$1 = [
75
+ "<span",
76
+ " class=\"permission-picker__action-label\">",
77
+ "</span>"
78
+ ];
79
+ var _tmpl$7$1 = [
80
+ "<p",
81
+ " class=\"permission-picker__empty\">",
82
+ "</p>"
83
+ ];
84
+ var _tmpl$8 = [
85
+ "<div",
86
+ " class=\"permission-picker__row\"><span class=\"permission-picker__resource\"",
87
+ ">",
88
+ "</span><!--$-->",
89
+ "<!--/--></div>"
90
+ ];
91
+ var _tmpl$9 = [
92
+ "<label",
93
+ " class=\"",
94
+ "\" title=\"",
95
+ "\"><input type=\"checkbox\"",
96
+ "><span aria-hidden=\"true\">✓</span></label>"
97
+ ];
98
+ var _tmpl$0 = ["<span", " class=\"permission-picker__cell permission-picker__cell--empty\"></span>"];
99
+ var _tmpl$1 = [
100
+ "<span",
101
+ " class=\"permission-picker__chip\"><code>",
102
+ "</code><button type=\"button\" aria-label=\"",
103
+ "\">×</button></span>"
104
+ ];
105
+ /** Ações canônicas (o que `requirePermission(action, resource)` recebe). */
106
+ var ACTIONS = [
107
+ "read",
108
+ "create",
109
+ "update",
110
+ "delete"
111
+ ];
112
+ /** Recursos protegidos pela API, na ordem em que aparecem na matriz. */
113
+ var RESOURCES = [
114
+ "content",
115
+ "media",
116
+ "category",
117
+ "tag",
118
+ "menu",
119
+ "user",
120
+ "roles",
121
+ "theme",
122
+ "plugin",
123
+ "setting",
124
+ "webhook",
125
+ "tenants",
126
+ "audit",
127
+ "build",
128
+ "system"
129
+ ];
130
+ /** Ação extra por recurso (fora do padrão read/create/update/delete). */
131
+ var EXTRA_ACTIONS = { media: ["upload"] };
132
+ var permissionKey = (action, resource) => `${action}:${resource}`;
133
+ var isKnown = (token) => {
134
+ const [action, resource] = token.split(":");
135
+ if (!action || !resource) return false;
136
+ return ACTIONS.includes(action) && RESOURCES.includes(resource);
137
+ };
138
+ function PermissionPicker(props) {
139
+ const { t } = useTranslation();
140
+ const [open, setOpen] = createSignal(false);
141
+ const [query, setQuery] = createSignal("");
142
+ const [customDraft, setCustomDraft] = createSignal("");
143
+ const [trigger, setTrigger] = createSignal(void 0);
144
+ const selected = createMemo(() => new Set(props.value));
145
+ const custom = createMemo(() => props.value.filter((token) => !isKnown(token)));
146
+ const filteredResources = createMemo(() => {
147
+ const q = query().trim().toLowerCase();
148
+ if (!q) return RESOURCES;
149
+ return RESOURCES.filter((resource) => resource.includes(q) || t(`access.resources.${resource}`).toLowerCase().includes(q));
150
+ });
151
+ /** Colunas extras visíveis (ex.: upload quando "media" está no filtro). */
152
+ const extraColumns = createMemo(() => {
153
+ const seen = /* @__PURE__ */ new Set();
154
+ for (const resource of filteredResources()) for (const action of EXTRA_ACTIONS[resource] ?? []) seen.add(action);
155
+ return [...seen];
156
+ });
157
+ /** Coluna completa para o par (ação, recurso)? */
158
+ const hasColumn = (action, resource) => ACTIONS.includes(action) || (EXTRA_ACTIONS[resource] ?? []).includes(action);
159
+ const summary = () => {
160
+ const count = props.value.length;
161
+ if (count === 0) return props.placeholder ?? t("access.permissionsPlaceholder");
162
+ const resources = new Set(props.value.map((token) => token.split(":")[1] ?? token));
163
+ return t("access.permissionsSummary", {
164
+ resources: resources.size,
165
+ count
166
+ });
167
+ };
168
+ return ssr(_tmpl$5$1, ssrHydrationKey(), ssrAttribute("aria-expanded", escape(open(), true), false), `permission-picker__value ${props.value.length === 0 ? "is-empty" : ""}`, escape(summary()), open() ? "▴" : "▾", escape(createComponent(FloatingPanel, {
169
+ get open() {
170
+ return open();
171
+ },
172
+ get trigger() {
173
+ return trigger();
174
+ },
175
+ onClose: () => setOpen(false),
176
+ "class": "permission-picker__panel",
177
+ role: "dialog",
178
+ get ["aria-label"]() {
179
+ return t("access.permissions");
180
+ },
181
+ minWidth: 440,
182
+ get children() {
183
+ return [
184
+ ssr(_tmpl$$1, ssrHydrationKey(), ssrAttribute("placeholder", escape(props.searchPlaceholder ?? t("access.permissionSearch"), true), false) + ssrAttribute("value", escape(query(), true), false)),
185
+ ssr(_tmpl$2$1, ssrHydrationKey(), escape(createComponent(For, {
186
+ each: ACTIONS,
187
+ children: (action) => ssr(_tmpl$6$1, ssrHydrationKey(), escape(action))
188
+ })), escape(createComponent(For, {
189
+ get each() {
190
+ return extraColumns();
191
+ },
192
+ children: (action) => ssr(_tmpl$6$1, ssrHydrationKey(), escape(action))
193
+ })), escape(createComponent(For, {
194
+ get each() {
195
+ return filteredResources();
196
+ },
197
+ get fallback() {
198
+ return ssr(_tmpl$7$1, ssrHydrationKey(), escape(t("access.permissionNoMatches")));
199
+ },
200
+ children: (resource) => ssr(_tmpl$8, ssrHydrationKey(), ssrAttribute("title", escape(resource, true), false), escape(t(`access.resources.${resource}`)), escape(createComponent(For, {
201
+ get each() {
202
+ return [...ACTIONS, ...extraColumns()];
203
+ },
204
+ children: (action) => hasColumn(action, resource) ? ssr(_tmpl$9, ssrHydrationKey(), `permission-picker__cell ${selected().has(permissionKey(action, resource)) ? "is-checked" : ""}`, `${escape(action, true)}:${escape(resource, true)}`, ssrAttribute("checked", selected().has(permissionKey(action, resource)), true)) : ssr(_tmpl$0, ssrHydrationKey())
205
+ })))
206
+ }))),
207
+ ssr(_tmpl$3$1, ssrHydrationKey(), escape(t("access.customPermissions")), escape(createComponent(For, {
208
+ get each() {
209
+ return custom();
210
+ },
211
+ children: (token) => ssr(_tmpl$1, ssrHydrationKey(), escape(token), `${escape(t("common.remove"), true)}: ${escape(token, true)}`)
212
+ })), ssrAttribute("placeholder", escape(t("access.customPermission"), true), false) + ssrAttribute("value", escape(customDraft(), true), false), escape(t("common.add"))),
213
+ createComponent(Show, {
214
+ get when() {
215
+ return props.value.length > 0;
216
+ },
217
+ get children() {
218
+ return ssr(_tmpl$4$1, ssrHydrationKey(), escape(t("access.permissionsSelected", { count: props.value.length })));
219
+ }
220
+ })
221
+ ];
222
+ }
223
+ })));
224
+ }
225
+ //#endregion
226
+ //#region src/components/apps/settings/ResourceHubs.tsx
227
+ var _tmpl$ = [
228
+ "<div",
229
+ " class=\"notice notice--error\">",
230
+ "</div>"
231
+ ];
232
+ var _tmpl$2 = [
233
+ "<div",
234
+ " class=\"resource-hub\"><!--$-->",
235
+ "<!--/--><div class=\"access-grid\"><section class=\"card\"><div class=\"card-header-row\"><h3>",
236
+ "</h3><button class=\"btn btn-primary\" type=\"button\">+ <!--$-->",
237
+ "<!--/--></button></div><table class=\"table\"><thead><tr><th>",
238
+ "</th><th>",
239
+ "</th><th>",
240
+ "</th><th></th></tr></thead><tbody>",
241
+ "</tbody></table><!--$-->",
242
+ "<!--/--></section><section class=\"card\"><div class=\"card-header-row\"><h3>",
243
+ "</h3><button class=\"btn btn-primary\" type=\"button\">+ <!--$-->",
244
+ "<!--/--></button></div><table class=\"table\"><thead><tr><th>",
245
+ "</th><th>",
246
+ "</th><th>",
247
+ "</th><th></th></tr></thead><tbody>",
248
+ "</tbody></table><!--$-->",
249
+ "<!--/--></section></div></div>"
250
+ ];
251
+ var _tmpl$3 = [
252
+ "<button",
253
+ " class=\"btn btn-danger btn-sm\" type=\"button\">",
254
+ "</button>"
255
+ ];
256
+ var _tmpl$4 = [
257
+ "<tr",
258
+ "><td>",
259
+ "</td><td><code>",
260
+ "</code></td><td class=\"access-permissions-cell\"",
261
+ ">",
262
+ "</td><td class=\"access-actions\"><button class=\"btn btn-secondary btn-sm\" type=\"button\">",
263
+ "</button><!--$-->",
264
+ "<!--/--></td></tr>"
265
+ ];
266
+ var _tmpl$5 = [
267
+ "<form",
268
+ " class=\"resource-form\"><label><span class=\"resource-form__label\">",
269
+ "</span><input class=\"input\" required",
270
+ "></label><label><span class=\"resource-form__label\">",
271
+ "</span><input class=\"input\" required",
272
+ "></label><div class=\"resource-form__field\"><span class=\"resource-form__label\">",
273
+ "</span><!--$-->",
274
+ "<!--/--></div><div class=\"form-actions\"><button class=\"btn btn-secondary\" type=\"button\">",
275
+ "</button><button class=\"btn btn-primary\" type=\"submit\"",
276
+ ">",
277
+ "</button></div></form>"
278
+ ];
279
+ var _tmpl$6 = [
280
+ "<tr",
281
+ "><td>",
282
+ "</td><td><code>",
283
+ "</code></td><td>",
284
+ "</td><td class=\"access-actions\"><button class=\"btn btn-secondary btn-sm\" type=\"button\">",
285
+ "</button><button class=\"btn btn-danger btn-sm\" type=\"button\">",
286
+ "</button></td></tr>"
287
+ ];
288
+ var _tmpl$7 = [
289
+ "<form",
290
+ " class=\"resource-form\"><label><span class=\"resource-form__label\">",
291
+ "</span><input class=\"input\" required",
292
+ "></label><label><span class=\"resource-form__label\">",
293
+ "</span><input class=\"input\" required",
294
+ "></label><label><span class=\"resource-form__label\">",
295
+ "</span><input class=\"input\"",
296
+ "></label><div class=\"form-actions\"><button class=\"btn btn-secondary\" type=\"button\">",
297
+ "</button><button class=\"btn btn-primary\" type=\"submit\"",
298
+ ">",
299
+ "</button></div></form>"
300
+ ];
301
+ function AccessManager() {
302
+ const { t } = useTranslation();
303
+ const [roles, setRoles] = createSignal([]);
304
+ const [tenants, setTenants] = createSignal([]);
305
+ const [editingRole, setEditingRole] = createSignal(null);
306
+ const [editingTenant, setEditingTenant] = createSignal(null);
307
+ const [saving, setSaving] = createSignal(false);
308
+ const [error, setError] = createSignal("");
309
+ const load = async () => {
310
+ try {
311
+ setRoles(await apiClient.listRoles());
312
+ setTenants((await apiClient.listTenants({ limit: 100 })).data ?? []);
313
+ } catch (err) {
314
+ setError(err instanceof Error ? err.message : String(err));
315
+ }
316
+ };
317
+ onMount(load);
318
+ const permissionsSummary = (role) => {
319
+ const list = role.permissions ?? [];
320
+ if (list.length === 0) return "—";
321
+ return list.slice(0, 4).join(", ") + (list.length > 4 ? ` +${list.length - 4}` : "");
322
+ };
323
+ return ssr(_tmpl$2, ssrHydrationKey(), escape(createComponent(Show, {
324
+ get when() {
325
+ return error();
326
+ },
327
+ get children() {
328
+ return ssr(_tmpl$, ssrHydrationKey(), escape(error()));
329
+ }
330
+ })), escape(t("access.roles")), escape(t("common.create")), escape(t("resources.name")), escape(t("resources.slug")), escape(t("access.permissions")), escape(createComponent(For, {
331
+ get each() {
332
+ return roles();
333
+ },
334
+ children: (role) => ssr(_tmpl$4, ssrHydrationKey(), escape(role.name), escape(role.slug), ssrAttribute("title", escape((role.permissions ?? []).join(", "), true), false), escape(permissionsSummary(role)), escape(t("common.edit")), escape(createComponent(Show, {
335
+ get when() {
336
+ return !role.is_system;
337
+ },
338
+ get children() {
339
+ return ssr(_tmpl$3, ssrHydrationKey(), escape(t("common.delete")));
340
+ }
341
+ })))
342
+ })), escape(createComponent(Modal, {
343
+ get open() {
344
+ return editingRole() !== null;
345
+ },
346
+ onClose: () => setEditingRole(null),
347
+ get title() {
348
+ return memo(() => !!editingRole()?.id)() ? t("access.editRole") : t("access.newRole");
349
+ },
350
+ get children() {
351
+ return createComponent(Show, {
352
+ get when() {
353
+ return editingRole();
354
+ },
355
+ children: (role) => ssr(_tmpl$5, ssrHydrationKey(), escape(t("resources.name")), ssrAttribute("placeholder", escape(t("resources.name"), true), false) + ssrAttribute("value", escape(role().name ?? "", true), false), escape(t("resources.slug")), ssrAttribute("placeholder", escape(t("resources.slug"), true), false) + ssrAttribute("value", escape(role().slug ?? "", true), false), escape(t("access.permissions")), escape(createComponent(PermissionPicker, {
356
+ get value() {
357
+ return role().permissions ?? [];
358
+ },
359
+ onChange: (permissions) => setEditingRole({
360
+ ...role(),
361
+ permissions
362
+ })
363
+ })), escape(t("common.cancel")), ssrAttribute("disabled", saving(), true), saving() ? escape(t("common.loading")) : escape(t("common.save")))
364
+ });
365
+ }
366
+ })), escape(t("access.tenants")), escape(t("common.create")), escape(t("resources.name")), escape(t("resources.slug")), escape(t("common.status")), escape(createComponent(For, {
367
+ get each() {
368
+ return tenants();
369
+ },
370
+ children: (tenant) => ssr(_tmpl$6, ssrHydrationKey(), escape(tenant.name), escape(tenant.slug), escape(tenant.status), escape(t("common.edit")), escape(t("common.delete")))
371
+ })), escape(createComponent(Modal, {
372
+ get open() {
373
+ return editingTenant() !== null;
374
+ },
375
+ onClose: () => setEditingTenant(null),
376
+ get title() {
377
+ return memo(() => !!editingTenant()?.id)() ? t("access.editTenant") : t("access.newTenant");
378
+ },
379
+ get children() {
380
+ return createComponent(Show, {
381
+ get when() {
382
+ return editingTenant();
383
+ },
384
+ children: (tenant) => ssr(_tmpl$7, ssrHydrationKey(), escape(t("resources.name")), ssrAttribute("placeholder", escape(t("resources.name"), true), false) + ssrAttribute("value", escape(tenant().name ?? "", true), false), escape(t("resources.slug")), ssrAttribute("placeholder", escape(t("resources.slug"), true), false) + ssrAttribute("value", escape(tenant().slug ?? "", true), false), escape(t("access.domain")), ssrAttribute("placeholder", escape(t("access.domain"), true), false) + ssrAttribute("value", escape(tenant().domain ?? "", true), false), escape(t("common.cancel")), ssrAttribute("disabled", saving(), true), saving() ? escape(t("common.loading")) : escape(t("common.save")))
385
+ });
386
+ }
387
+ })));
388
+ }
389
+ //#endregion
390
+ //#region src/pages/settings/access.astro
391
+ var access_exports = /* @__PURE__ */ __exportAll({
392
+ default: () => $$Access,
393
+ file: () => $$file,
394
+ url: () => $$url
395
+ });
396
+ createAstro("https://astro.build");
397
+ var $$Access = createComponent$1(($$result, $$props, $$slots) => {
398
+ const Astro = $$result.createAstro($$props, $$slots);
399
+ Astro.self = $$Access;
400
+ const { t } = Astro.locals;
401
+ return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, { "title": t("access.title") }, { "default": ($$result) => renderTemplate`${renderComponent($$result, "PageHeader", PageHeader, {
402
+ "title": t("access.title"),
403
+ "description": t("access.description")
404
+ })}${renderComponent($$result, "AccessManager", AccessManager, {
405
+ "client:load": true,
406
+ "client:component-hydration": "load",
407
+ "client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/apps/settings/ResourceHubs.tsx",
408
+ "client:component-export": "AccessManager"
409
+ })}` })}`;
410
+ }, "/home/runner/work/cms/cms/apps/admin/src/pages/settings/access.astro", void 0);
411
+ var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/settings/access.astro";
412
+ var $$url = "/settings/access";
413
+ //#endregion
414
+ //#region \0virtual:astro:page:src/pages/settings/access@_@astro
415
+ var page = () => access_exports;
416
+ //#endregion
417
+ export { page };
@@ -315,6 +315,14 @@ var settings = {
315
315
  }
316
316
  }
317
317
  };
318
+ var notFound = {
319
+ "title": "الصفحة غير موجودة",
320
+ "description": "قد يكون القديم أو تم نقل الصفحة. تحقق من العنوان أو انتقل إلى أحد الأقسام أدناه.",
321
+ "requestedPath": "لقد حاولت فتح",
322
+ "suggestionsLabel": "أو انتقل إلى أحد هذه الأقسام",
323
+ "goHome": "العودة إلى الصفحة الرئيسية",
324
+ "goBack": "رجوع"
325
+ };
318
326
  var login = {
319
327
  "title": "تسجيل الدخول",
320
328
  "subtitle": "سجّل دخولك إلى حسابك",
@@ -418,6 +426,7 @@ var ar_default = {
418
426
  media,
419
427
  users,
420
428
  settings,
429
+ notFound,
421
430
  login,
422
431
  common,
423
432
  activity,
@@ -427,4 +436,4 @@ var ar_default = {
427
436
  screenOptions
428
437
  };
429
438
  //#endregion
430
- export { activity, adminBar, common, content, dashboard, ar_default as default, footer, helpTabs, layout, login, media, menus, screenOptions, settings, users };
439
+ export { activity, adminBar, common, content, dashboard, ar_default as default, footer, helpTabs, layout, login, media, menus, notFound, screenOptions, settings, users };
@@ -1,8 +1,8 @@
1
1
  import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
2
2
  import { S as createAstro, d as maybeRenderHead, i as renderComponent, u as renderTemplate } from "./server_B5N27szj.mjs";
3
3
  import { t as createComponent$1 } from "./compiler_O7J1rlsi.mjs";
4
- import { n as useTranslation, r as apiClient } from "./i18n_k88p-B6j.mjs";
5
- import { t as $$DashboardLayout } from "./DashboardLayout_U7BSt4BY.mjs";
4
+ import { n as useTranslation, r as apiClient } from "./i18n_Cr9pc66i.mjs";
5
+ import { t as $$DashboardLayout } from "./DashboardLayout_CidaIIqh.mjs";
6
6
  import { t as FbIcon } from "./FbIcon_D0f6QiFJ.mjs";
7
7
  import { createComponent, escape, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
8
8
  import { For, Show, createMemo, createSignal, onMount } from "solid-js";
@@ -1,8 +1,8 @@
1
1
  import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
2
2
  import { S as createAstro, i as renderComponent, u as renderTemplate } from "./server_B5N27szj.mjs";
3
3
  import { t as createComponent } from "./compiler_O7J1rlsi.mjs";
4
- import { t as $$DashboardLayout } from "./DashboardLayout_U7BSt4BY.mjs";
5
- import { t as ContentEditor } from "./ContentEditor_GY92E-dL.mjs";
4
+ import { t as $$DashboardLayout } from "./DashboardLayout_CidaIIqh.mjs";
5
+ import { t as ContentEditor } from "./ContentEditor_D3N5qDZK.mjs";
6
6
  import { t as PageHeader } from "./PageHeader_CBOioOjo.mjs";
7
7
  //#region src/pages/content/[type]/edit.astro
8
8
  var edit_exports = /* @__PURE__ */ __exportAll({
@@ -315,6 +315,14 @@ var settings = {
315
315
  }
316
316
  }
317
317
  };
318
+ var notFound = {
319
+ "title": "Página no encontrada",
320
+ "description": "La dirección puede haber cambiado o la página haberse movido. Comprueba la URL o visita una de estas secciones.",
321
+ "requestedPath": "Intentaste abrir",
322
+ "suggestionsLabel": "O visita una de estas secciones",
323
+ "goHome": "Volver al inicio",
324
+ "goBack": "Volver"
325
+ };
318
326
  var login = {
319
327
  "title": "Iniciar Sesión",
320
328
  "subtitle": "Accede a tu cuenta",
@@ -418,6 +426,7 @@ var es_ES_default = {
418
426
  media,
419
427
  users,
420
428
  settings,
429
+ notFound,
421
430
  login,
422
431
  common,
423
432
  activity,
@@ -427,4 +436,4 @@ var es_ES_default = {
427
436
  screenOptions
428
437
  };
429
438
  //#endregion
430
- export { activity, adminBar, common, content, dashboard, es_ES_default as default, footer, helpTabs, layout, login, media, menus, screenOptions, settings, users };
439
+ export { activity, adminBar, common, content, dashboard, es_ES_default as default, footer, helpTabs, layout, login, media, menus, notFound, screenOptions, settings, users };
@@ -1,19 +1,24 @@
1
1
  import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
2
2
  import { S as createAstro, i as renderComponent, u as renderTemplate } from "./server_B5N27szj.mjs";
3
3
  import { t as createComponent$1 } from "./compiler_O7J1rlsi.mjs";
4
- import { a as LOCALE_FLAGS, n as useTranslation, o as LOCALE_LABELS, r as apiClient, s as SUPPORTED_LOCALES } from "./i18n_k88p-B6j.mjs";
5
- import { f as createMemo$1, i as Card, l as Select, m as onMount$1, o as Input, p as createSignal$1, r as Button, t as $$DashboardLayout, u as Show2 } from "./DashboardLayout_U7BSt4BY.mjs";
4
+ import { a as LOCALE_LABELS, i as LOCALE_FLAGS, n as useTranslation, o as SUPPORTED_LOCALES, r as apiClient } from "./i18n_Cr9pc66i.mjs";
5
+ import { f as createMemo$1, i as Card, l as Select, m as onMount$1, o as Input, p as createSignal$1, r as Button, t as $$DashboardLayout, u as Show2 } from "./DashboardLayout_CidaIIqh.mjs";
6
6
  import { t as PageHeader } from "./PageHeader_CBOioOjo.mjs";
7
+ import { t as FloatingPanel } from "./FloatingPanel_DI2CdUZK.mjs";
7
8
  import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
8
- import { For, Show, createMemo, createSignal, onCleanup, onMount } from "solid-js";
9
+ import { For, Show, createMemo, createSignal } from "solid-js";
9
10
  //#region src/components/apps/settings/TimezoneSelect.tsx
10
11
  var _tmpl$$1 = [
11
- "<div",
12
- " class=\"tz-select__panel\" role=\"listbox\"><input type=\"search\" class=\"input tz-select__search\"",
13
- " autofocus><div class=\"tz-select__options\">",
14
- "</div></div>"
12
+ "<input",
13
+ " type=\"search\" class=\"input tz-select__search\"",
14
+ ">"
15
15
  ];
16
16
  var _tmpl$2$1 = [
17
+ "<div",
18
+ " class=\"tz-select__options\">",
19
+ "</div>"
20
+ ];
21
+ var _tmpl$3$1 = [
17
22
  "<div",
18
23
  " class=\"tz-select\"><button type=\"button\" class=\"input tz-select__trigger\" aria-haspopup=\"listbox\"",
19
24
  "><span class=\"tz-select__value\">",
@@ -21,8 +26,8 @@ var _tmpl$2$1 = [
21
26
  "</span></button><!--$-->",
22
27
  "<!--/--></div>"
23
28
  ];
24
- var _tmpl$3$1 = ["<p", " class=\"tz-select__empty\">—</p>"];
25
- var _tmpl$4$1 = [
29
+ var _tmpl$4$1 = ["<p", " class=\"tz-select__empty\">—</p>"];
30
+ var _tmpl$5$1 = [
26
31
  "<button",
27
32
  " type=\"button\" role=\"option\"",
28
33
  " class=\"",
@@ -74,6 +79,7 @@ var normalize = (text) => text.toLowerCase().replace(/[/_\-]/g, " ");
74
79
  function TimezoneSelect(props) {
75
80
  const [open, setOpen] = createSignal(false);
76
81
  const [query, setQuery] = createSignal("");
82
+ const [trigger, setTrigger] = createSignal(void 0);
77
83
  const options = createMemo(() => buildTimezoneOptions());
78
84
  const selected = createMemo(() => options().find((option) => option.tz === props.value));
79
85
  const filtered = createMemo(() => {
@@ -81,39 +87,37 @@ function TimezoneSelect(props) {
81
87
  if (!q) return options();
82
88
  return options().filter((option) => normalize(option.label).includes(q));
83
89
  });
84
- onMount(() => {
85
- const close = (event) => {};
86
- const onKey = (event) => {
87
- if (event.key === "Escape") setOpen(false);
88
- };
89
- document.addEventListener("mousedown", close);
90
- document.addEventListener("keydown", onKey);
91
- onCleanup(() => {
92
- document.removeEventListener("mousedown", close);
93
- document.removeEventListener("keydown", onKey);
94
- });
95
- });
96
- return ssr(_tmpl$2$1, ssrHydrationKey(), ssrAttribute("aria-expanded", escape(open(), true), false), escape(selected()?.label ?? props.placeholder ?? ""), open() ? "▴" : "▾", escape(createComponent(Show, {
97
- get when() {
90
+ return ssr(_tmpl$3$1, ssrHydrationKey(), ssrAttribute("aria-expanded", escape(open(), true), false), escape(selected()?.label ?? props.placeholder ?? ""), open() ? "▴" : "▾", escape(createComponent(FloatingPanel, {
91
+ get open() {
98
92
  return open();
99
93
  },
94
+ get trigger() {
95
+ return trigger();
96
+ },
97
+ onClose: () => {
98
+ setOpen(false);
99
+ setQuery("");
100
+ },
101
+ "class": "tz-select__panel",
102
+ role: "listbox",
103
+ minWidth: 320,
100
104
  get children() {
101
- return ssr(_tmpl$$1, ssrHydrationKey(), ssrAttribute("placeholder", escape(props.searchPlaceholder ?? props.placeholder ?? "", true), false) + ssrAttribute("value", escape(query(), true), false), escape(createComponent(Show, {
105
+ return [ssr(_tmpl$$1, ssrHydrationKey(), ssrAttribute("placeholder", escape(props.searchPlaceholder ?? props.placeholder ?? "", true), false) + ssrAttribute("value", escape(query(), true), false)), ssr(_tmpl$2$1, ssrHydrationKey(), escape(createComponent(Show, {
102
106
  get when() {
103
107
  return filtered().length > 0;
104
108
  },
105
109
  get fallback() {
106
- return ssr(_tmpl$3$1, ssrHydrationKey());
110
+ return ssr(_tmpl$4$1, ssrHydrationKey());
107
111
  },
108
112
  get children() {
109
113
  return createComponent(For, {
110
114
  get each() {
111
115
  return filtered();
112
116
  },
113
- children: (option) => ssr(_tmpl$4$1, ssrHydrationKey(), ssrAttribute("aria-selected", escape(props.value, true) === escape(option.tz, true), false), `tz-select__option ${props.value === option.tz ? "is-selected" : ""}`, escape(option.label))
117
+ children: (option) => ssr(_tmpl$5$1, ssrHydrationKey(), ssrAttribute("aria-selected", escape(props.value, true) === escape(option.tz, true), false), `tz-select__option ${props.value === option.tz ? "is-selected" : ""}`, escape(option.label))
114
118
  });
115
119
  }
116
- })));
120
+ })))];
117
121
  }
118
122
  })));
119
123
  }
@@ -315,6 +315,14 @@ var settings = {
315
315
  }
316
316
  }
317
317
  };
318
+ var notFound = {
319
+ "title": "הדף לא נמצא",
320
+ "description": "הכתובת יתכן שהתיישנה או שהדף הועבר. בדוק את הכתובת או כניסה לאחת מהחטיבות שלמטה.",
321
+ "requestedPath": "ניסית לפתוח",
322
+ "suggestionsLabel": "או כניסה לאחת מהחטיבות האלה",
323
+ "goHome": "חזרה לעמוד הראשי",
324
+ "goBack": "חזרה"
325
+ };
318
326
  var login = {
319
327
  "title": "התחברות",
320
328
  "subtitle": "התחבר לחשבונך",
@@ -418,6 +426,7 @@ var he_default = {
418
426
  media,
419
427
  users,
420
428
  settings,
429
+ notFound,
421
430
  login,
422
431
  common,
423
432
  activity,
@@ -427,4 +436,4 @@ var he_default = {
427
436
  screenOptions
428
437
  };
429
438
  //#endregion
430
- export { activity, adminBar, common, content, dashboard, he_default as default, footer, helpTabs, layout, login, media, menus, screenOptions, settings, users };
439
+ export { activity, adminBar, common, content, dashboard, he_default as default, footer, helpTabs, layout, login, media, menus, notFound, screenOptions, settings, users };