@oktis-works/admin 0.9.0 → 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 (93) hide show
  1. package/dist/client/_astro/{ActivityWidget.l4_oR6gt.js → ActivityWidget.ChQWOeJC.js} +2 -2
  2. package/dist/client/_astro/{AdminBar.DbabNkmU.js → AdminBar.Dt8_nO1o.js} +2 -2
  3. package/dist/client/_astro/{AtGlanceWidget.C7QyOZnc.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.BCy7gbzZ.js → ContentEditor.DfL_lpMd.js} +2 -2
  7. package/dist/client/_astro/ContentTypeWorkspace.BitHXXxQ.js +1 -0
  8. package/dist/client/_astro/DashboardHome.Bc3UoI13.js +1 -0
  9. package/dist/client/_astro/DashboardLayout.DM3iZCrw.css +1 -0
  10. package/dist/client/_astro/{DashboardLayout.astro_astro_type_script_index_0_lang.PXk2X2qN.js → DashboardLayout.astro_astro_type_script_index_0_lang.CzpgSZHu.js} +1 -1
  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.DrhO-iww.js → FieldGroupList.Jz2ScLbc.js} +1 -1
  14. package/dist/client/_astro/FloatingPanel.BeCEt_JP.js +1 -0
  15. package/dist/client/_astro/{Footer.Uc7SesWM.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.Cy7xyr2l.js → MenuManager.D4NmoaFw.js} +1 -1
  20. package/dist/client/_astro/{PluginManager.3qXWwYBV.js → PluginManager.BlNWs5RU.js} +2 -2
  21. package/dist/client/_astro/PostTypesManager.BKcoZ1gF.js +1 -0
  22. package/dist/client/_astro/{QuickDraftWidget.ux_yGWpX.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.DGQJqlbN.js +1 -0
  29. package/dist/client/_astro/WebhooksManager.DACLOiX1.js +1 -0
  30. package/dist/client/_astro/client.DU9Dc2oe.js +1 -0
  31. package/dist/client/_astro/extensions.BWDpAUyI.js +1 -0
  32. package/dist/client/_astro/{i18n.CXvd48vy.js → i18n.DCpVFQAZ.js} +1 -1
  33. package/dist/client/_astro/{pt-BR.B-uijFlj.js → pt-BR.BpKbXMEZ.js} +1 -1
  34. package/dist/client/_astro/solid.D49dPDCT.js +1 -0
  35. package/dist/client/_astro/{src.DksrLolD.js → src.DXVWCoHp.js} +1 -1
  36. package/dist/client/_astro/web.Bqbl_1YR.js +1 -0
  37. package/dist/server/chunks/{404_DIfrzRRM.mjs → 404_CfM6kYWd.mjs} +1 -1
  38. package/dist/server/chunks/{BaseLayout_CmMnXoh2.mjs → BaseLayout_DTOkhEmH.mjs} +1 -1
  39. package/dist/server/chunks/{ContentEditor_CrP88U9K.mjs → ContentEditor_D3N5qDZK.mjs} +2 -2
  40. package/dist/server/chunks/{DashboardLayout_C6I2H2jO.mjs → DashboardLayout_CidaIIqh.mjs} +2 -2
  41. package/dist/server/chunks/FloatingPanel_DI2CdUZK.mjs +57 -0
  42. package/dist/server/chunks/{MediaLibrary_c4bl4fTY.mjs → MediaLibrary_DZqdhYpt.mjs} +2 -2
  43. package/dist/server/chunks/{_id__C2MAQ-Pj.mjs → _id__9FIehtyR.mjs} +21 -10
  44. package/dist/server/chunks/{_slug__CR0j3J9V.mjs → _slug__Izz0oLah.mjs} +1 -1
  45. package/dist/server/chunks/access_BSltT-j0.mjs +417 -0
  46. package/dist/server/chunks/{custom-fields_BPduH9VI.mjs → custom-fields_ChGoFU6v.mjs} +2 -2
  47. package/dist/server/chunks/{edit_CJdKxNhx.mjs → edit_BDJsuJht.mjs} +2 -2
  48. package/dist/server/chunks/{general_eI-sNsQl.mjs → general_J5JruaEJ.mjs} +31 -27
  49. package/dist/server/chunks/{i18n_BqZ4e24O.mjs → i18n_Cr9pc66i.mjs} +33 -4
  50. package/dist/server/chunks/{index_CyKyYL4y.mjs → index_BZk89gnA.mjs} +2 -2
  51. package/dist/server/chunks/{index_CA70i3-b.mjs → index_DEkpVnI-.mjs} +2 -2
  52. package/dist/server/chunks/{index_BKzgF5qF.mjs → index__TzLfz1Y.mjs} +2 -2
  53. package/dist/server/chunks/{index_Om0n2OAr.mjs → index_goZUoZn8.mjs} +3 -3
  54. package/dist/server/chunks/{index_XRE0Vjch.mjs → index_ph0CQvPI.mjs} +1 -1
  55. package/dist/server/chunks/{login_0iFVtfgV.mjs → login_D1vntlDR.mjs} +1 -1
  56. package/dist/server/chunks/{logs_D-h53LJu.mjs → logs_BQ-8tURM.mjs} +2 -2
  57. package/dist/server/chunks/{menus_CcCZvv6r.mjs → menus_CxwSYjnB.mjs} +2 -2
  58. package/dist/server/chunks/{new_BmimSObH.mjs → new_CZGMo6CG.mjs} +2 -2
  59. package/dist/server/chunks/{new_DSopKVB7.mjs → new_DoFj-hVB.mjs} +2 -2
  60. package/dist/server/chunks/{plugins_MF0XTr5R.mjs → plugins_CM-vRDfx.mjs} +2 -2
  61. package/dist/server/chunks/{post-types_D5ajDp3x.mjs → post-types_9YdRCAhN.mjs} +100 -47
  62. package/dist/server/chunks/{pt-BR_CQndzpOT.mjs → pt-BR_CLa-GGIZ.mjs} +32 -3
  63. package/dist/server/chunks/{taxonomies_CfvbHc_y.mjs → taxonomies_C2yLbsVU.mjs} +2 -2
  64. package/dist/server/chunks/{taxonomy_DdWpf9lk.mjs → taxonomy_BAqqS2TS.mjs} +2 -2
  65. package/dist/server/chunks/{themes_DQE1-WCF.mjs → themes_zV_FXCDj.mjs} +2 -2
  66. package/dist/server/chunks/{upload_DjkuLTrW.mjs → upload_Bba7badi.mjs} +2 -2
  67. package/dist/server/chunks/{webhooks_NO5wRHnZ.mjs → webhooks_LTF3h9-l.mjs} +2 -2
  68. package/dist/server/entry.mjs +25 -25
  69. package/dist/server/virtual_astro_middleware.mjs +1 -1
  70. package/package.json +1 -1
  71. package/dist/client/_astro/BaseLayout.CgLTOe_a.css +0 -1
  72. package/dist/client/_astro/ContentEditor.BlRm9ezb.js +0 -1
  73. package/dist/client/_astro/ContentTypeWorkspace.BF8WjCDy.js +0 -1
  74. package/dist/client/_astro/DashboardHome.C2TVw1TO.js +0 -1
  75. package/dist/client/_astro/DashboardLayout.C1hUraeX.css +0 -1
  76. package/dist/client/_astro/FbIcon.DFmK-EWG.js +0 -1
  77. package/dist/client/_astro/FieldGroupEditor.CcxZuz0o.js +0 -69
  78. package/dist/client/_astro/GeneralSettings.Bxn673WF.js +0 -1
  79. package/dist/client/_astro/LogsManager.DF_3DQlY.js +0 -1
  80. package/dist/client/_astro/MediaLibrary._7sCWvNs.js +0 -1
  81. package/dist/client/_astro/PostTypesManager.BAXkf__Y.js +0 -1
  82. package/dist/client/_astro/ResourceHubs.Dhx1kbfj.js +0 -1
  83. package/dist/client/_astro/TaxonomiesManager.BYTDEeNU.js +0 -1
  84. package/dist/client/_astro/TaxonomyTermsManager.DBb5gB5l.js +0 -1
  85. package/dist/client/_astro/ThemeManager.DVBYapuE.js +0 -176
  86. package/dist/client/_astro/UserCreateForm.CTr8bSlL.js +0 -1
  87. package/dist/client/_astro/UsersManager.BfPqZNy7.js +0 -1
  88. package/dist/client/_astro/WebhooksManager.DPAWAObu.js +0 -1
  89. package/dist/client/_astro/client.m5rScAmr.js +0 -1
  90. package/dist/client/_astro/extensions.CenNQy0u.js +0 -1
  91. package/dist/client/_astro/solid.8gBSxpeo.js +0 -1
  92. package/dist/client/_astro/web.DB4MaPY9.js +0 -1
  93. package/dist/server/chunks/access_bpmBW03n.mjs +0 -138
@@ -18,7 +18,7 @@ async function renderScript(result, id) {
18
18
  }
19
19
  var package_default = {
20
20
  name: "@oktis-works/admin",
21
- version: "0.9.0",
21
+ version: "0.10.0",
22
22
  type: "module",
23
23
  bin: { "okcms-admin": "./bin/admin.js" },
24
24
  files: ["bin", "dist"],
@@ -1,5 +1,5 @@
1
- import { n as useTranslation, r as apiClient } from "./i18n_BqZ4e24O.mjs";
2
- import { a as For2, f as createMemo$1, p as createSignal$1, u as Show2 } from "./DashboardLayout_C6I2H2jO.mjs";
1
+ import { n as useTranslation, r as apiClient } from "./i18n_Cr9pc66i.mjs";
2
+ import { a as For2, f as createMemo$1, p as createSignal$1, u as Show2 } from "./DashboardLayout_CidaIIqh.mjs";
3
3
  import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
4
4
  import { For, Show, createMemo, createSignal, onMount } from "solid-js";
5
5
  //#region ../../packages/validation/dist/client-validate.js
@@ -1,8 +1,8 @@
1
1
  import "./rolldown-runtime_BMI-E3GI.mjs";
2
2
  import { S as createAstro, d as maybeRenderHead, i as renderComponent, p as addAttribute, s as renderSlot, u as renderTemplate } from "./server_B5N27szj.mjs";
3
3
  import { t as createComponent$1 } from "./compiler_O7J1rlsi.mjs";
4
- import { n as renderScript, t as $$BaseLayout } from "./BaseLayout_CmMnXoh2.mjs";
5
- import { a as LOCALE_LABELS, i as LOCALE_FLAGS, n as useTranslation, o as SUPPORTED_LOCALES, r as apiClient } from "./i18n_BqZ4e24O.mjs";
4
+ import { n as renderScript, t as $$BaseLayout } from "./BaseLayout_DTOkhEmH.mjs";
5
+ import { a as LOCALE_LABELS, i as LOCALE_FLAGS, n as useTranslation, o as SUPPORTED_LOCALES, r as apiClient } from "./i18n_Cr9pc66i.mjs";
6
6
  import { t as require_semver } from "./semver_WbqCUY_o.mjs";
7
7
  import { createComponent, escape, ssr, ssrAttribute, ssrHydrationKey, ssrStyle } from "solid-js/web";
8
8
  import { For, For as For2, Show, Show as Show2, createEffect, createMemo as createMemo$1, createSignal, createSignal as createSignal$1, onCleanup, onMount, onMount as onMount$1 } from "solid-js";
@@ -0,0 +1,57 @@
1
+ import { Portal, createComponent, escape, ssr, ssrAttribute, ssrHydrationKey, ssrStyle } from "solid-js/web";
2
+ import { Show, createEffect, createSignal, onCleanup, onMount } from "solid-js";
3
+ //#region src/components/ui/FloatingPanel.tsx
4
+ var _tmpl$ = [
5
+ "<div",
6
+ " style=\"",
7
+ "\">",
8
+ "</div>"
9
+ ];
10
+ function FloatingPanel(props) {
11
+ const [style, setStyle] = createSignal({
12
+ position: "fixed",
13
+ visibility: "hidden"
14
+ });
15
+ const reposition = () => {
16
+ props.trigger;
17
+ };
18
+ createEffect(() => {
19
+ if (!props.open) return;
20
+ queueMicrotask(reposition);
21
+ requestAnimationFrame(reposition);
22
+ });
23
+ onMount(() => {
24
+ const onOutside = (event) => {
25
+ const target = event.target;
26
+ if (!target) return;
27
+ if (props.trigger?.contains(target) || void 0) return;
28
+ props.onClose();
29
+ };
30
+ const onKey = (event) => {
31
+ if (event.key === "Escape") props.onClose();
32
+ };
33
+ const onScrollOrResize = () => reposition();
34
+ document.addEventListener("mousedown", onOutside);
35
+ document.addEventListener("keydown", onKey);
36
+ window.addEventListener("scroll", onScrollOrResize, true);
37
+ window.addEventListener("resize", onScrollOrResize);
38
+ onCleanup(() => {
39
+ document.removeEventListener("mousedown", onOutside);
40
+ document.removeEventListener("keydown", onKey);
41
+ window.removeEventListener("scroll", onScrollOrResize, true);
42
+ window.removeEventListener("resize", onScrollOrResize);
43
+ });
44
+ });
45
+ return createComponent(Show, {
46
+ get when() {
47
+ return props.open;
48
+ },
49
+ get children() {
50
+ return createComponent(Portal, { get children() {
51
+ return ssr(_tmpl$, ssrHydrationKey() + ssrAttribute("class", escape(props.class, true), false) + ssrAttribute("role", escape(props.role, true), false) + ssrAttribute("aria-label", escape(props["aria-label"], true), false), ssrStyle(style()), escape(props.children));
52
+ } });
53
+ }
54
+ });
55
+ }
56
+ //#endregion
57
+ export { FloatingPanel as t };
@@ -1,5 +1,5 @@
1
- import { n as useTranslation, r as apiClient } from "./i18n_BqZ4e24O.mjs";
2
- import { a as For2, c as Pagination, l as Select, m as onMount, o as Input, p as createSignal, r as Button, s as Modal, u as Show2 } from "./DashboardLayout_C6I2H2jO.mjs";
1
+ import { n as useTranslation, r as apiClient } from "./i18n_Cr9pc66i.mjs";
2
+ import { a as For2, c as Pagination, l as Select, m as onMount, o as Input, p as createSignal, r as Button, s as Modal, u as Show2 } from "./DashboardLayout_CidaIIqh.mjs";
3
3
  import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey, ssrStyleProperty } from "solid-js/web";
4
4
  //#region src/components/media/MediaLibrary.tsx
5
5
  var _tmpl$ = [
@@ -1,9 +1,10 @@
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 { n as useTranslation, r as apiClient } from "./i18n_BqZ4e24O.mjs";
5
- import { t as $$DashboardLayout } from "./DashboardLayout_C6I2H2jO.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 PageHeader } from "./PageHeader_CBOioOjo.mjs";
7
+ import { t as FloatingPanel } from "./FloatingPanel_DI2CdUZK.mjs";
7
8
  import { t as FbIcon } from "./FbIcon_D0f6QiFJ.mjs";
8
9
  import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
9
10
  import { For, Show, batch, createContext, createEffect, createMemo, createSignal, on, onCleanup, onMount, splitProps, useContext } from "solid-js";
@@ -5949,10 +5950,9 @@ function ConditionalLogicEditor(props) {
5949
5950
  //#endregion
5950
5951
  //#region src/components/content/FieldTypePicker.tsx
5951
5952
  var _tmpl$$6 = [
5952
- "<div",
5953
- " class=\"field-type-picker__panel\" role=\"listbox\"><input type=\"search\" class=\"field-type-picker__search\" placeholder=\"Buscar tipo de campo...\"",
5954
- "><!--$-->",
5955
- "<!--/--></div>"
5953
+ "<input",
5954
+ " type=\"search\" class=\"field-type-picker__search\" placeholder=\"Buscar tipo de campo...\"",
5955
+ ">"
5956
5956
  ];
5957
5957
  var _tmpl$2$6 = [
5958
5958
  "<div",
@@ -5983,6 +5983,7 @@ var _tmpl$5$4 = [
5983
5983
  function FieldTypePicker(props) {
5984
5984
  const [open, setOpen] = createSignal(false);
5985
5985
  const [query, setQuery] = createSignal("");
5986
+ const [trigger, setTrigger] = createSignal(void 0);
5986
5987
  const selected = () => props.types.find((type) => type.type === props.value);
5987
5988
  const filteredTypes = () => {
5988
5989
  const q = query().toLowerCase();
@@ -5992,12 +5993,22 @@ function FieldTypePicker(props) {
5992
5993
  queueMicrotask(() => createIcons({ icons }));
5993
5994
  };
5994
5995
  onMount(refreshIcons);
5995
- return ssr(_tmpl$2$6, ssrHydrationKey(), ssrAttribute("aria-expanded", escape(open(), true), false), ssrAttribute("data-lucide", escape(selected()?.icon ?? "box", true), false), escape(selected()?.label ?? "Selecione o tipo"), open() ? "▴" : "▾", escape(createComponent(Show, {
5996
- get when() {
5996
+ return ssr(_tmpl$2$6, ssrHydrationKey(), ssrAttribute("aria-expanded", escape(open(), true), false), ssrAttribute("data-lucide", escape(selected()?.icon ?? "box", true), false), escape(selected()?.label ?? "Selecione o tipo"), open() ? "▴" : "▾", escape(createComponent(FloatingPanel, {
5997
+ get open() {
5997
5998
  return open();
5998
5999
  },
6000
+ get trigger() {
6001
+ return trigger();
6002
+ },
6003
+ onClose: () => {
6004
+ setOpen(false);
6005
+ setQuery("");
6006
+ },
6007
+ "class": "field-type-picker__panel",
6008
+ role: "listbox",
6009
+ minWidth: 280,
5999
6010
  get children() {
6000
- return ssr(_tmpl$$6, ssrHydrationKey(), ssrAttribute("value", escape(query(), true), false), escape(createComponent(For, {
6011
+ return [ssr(_tmpl$$6, ssrHydrationKey(), ssrAttribute("value", escape(query(), true), false)), createComponent(For, {
6001
6012
  get each() {
6002
6013
  return props.categories;
6003
6014
  },
@@ -6022,7 +6033,7 @@ function FieldTypePicker(props) {
6022
6033
  }
6023
6034
  });
6024
6035
  }
6025
- })));
6036
+ })];
6026
6037
  }
6027
6038
  })));
6028
6039
  }
@@ -1,7 +1,7 @@
1
1
  import { r as __exportAll } from "./rolldown-runtime_BMI-E3GI.mjs";
2
2
  import { S as createAstro, d as maybeRenderHead, i as renderComponent, p as addAttribute, u as renderTemplate } from "./server_B5N27szj.mjs";
3
3
  import { t as createComponent } from "./compiler_O7J1rlsi.mjs";
4
- import { t as $$DashboardLayout } from "./DashboardLayout_C6I2H2jO.mjs";
4
+ import { t as $$DashboardLayout } from "./DashboardLayout_CidaIIqh.mjs";
5
5
  import { t as PageHeader } from "./PageHeader_CBOioOjo.mjs";
6
6
  //#region src/pages/plugins/[slug].astro
7
7
  var _slug__exports = /* @__PURE__ */ __exportAll({
@@ -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 };
@@ -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_BqZ4e24O.mjs";
5
- import { t as $$DashboardLayout } from "./DashboardLayout_C6I2H2jO.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_C6I2H2jO.mjs";
5
- import { t as ContentEditor } from "./ContentEditor_CrP88U9K.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({