@oktis-works/admin 0.9.0 → 0.11.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 (101) hide show
  1. package/dist/client/_astro/{ActivityWidget.l4_oR6gt.js → ActivityWidget.D9s4FOLp.js} +2 -2
  2. package/dist/client/_astro/{AdminBar.DbabNkmU.js → AdminBar.D8078Gqs.js} +2 -2
  3. package/dist/client/_astro/ApiKeysManager.BjyxI6JT.js +1 -0
  4. package/dist/client/_astro/{AtGlanceWidget.C7QyOZnc.js → AtGlanceWidget.DBA3mEnF.js} +3 -3
  5. package/dist/client/_astro/BaseLayout.DAkzjMTq.css +1 -0
  6. package/dist/client/_astro/{ContentEditor.BCy7gbzZ.js → ContentEditor.BZ8aLcGz.js} +2 -2
  7. package/dist/client/_astro/ContentEditor.CfQqsa6r.js +1 -0
  8. package/dist/client/_astro/ContentTypeWorkspace.BhHFc6WZ.js +1 -0
  9. package/dist/client/_astro/DashboardHome.BXIUgb4u.js +1 -0
  10. package/dist/client/_astro/DashboardLayout.DM3iZCrw.css +1 -0
  11. package/dist/client/_astro/{DashboardLayout.astro_astro_type_script_index_0_lang.PXk2X2qN.js → DashboardLayout.astro_astro_type_script_index_0_lang.Cc0PvXrs.js} +1 -1
  12. package/dist/client/_astro/FbIcon.CUNS6rpP.js +1 -0
  13. package/dist/client/_astro/FieldGroupEditor.CVoPJ2v-.js +69 -0
  14. package/dist/client/_astro/{FieldGroupList.DrhO-iww.js → FieldGroupList.BG2ET5gZ.js} +1 -1
  15. package/dist/client/_astro/FloatingPanel.BeCEt_JP.js +1 -0
  16. package/dist/client/_astro/{Footer.Uc7SesWM.js → Footer.Chcu8yzV.js} +2 -2
  17. package/dist/client/_astro/GeneralSettings.CefkBcVj.js +1 -0
  18. package/dist/client/_astro/LogsManager.ya0kmAUm.js +1 -0
  19. package/dist/client/_astro/MediaLibrary.Bod2Afk4.js +1 -0
  20. package/dist/client/_astro/{MenuManager.Cy7xyr2l.js → MenuManager.d6_0hgNg.js} +1 -1
  21. package/dist/client/_astro/Modal.DR905gyF.js +1 -0
  22. package/dist/client/_astro/{PluginManager.3qXWwYBV.js → PluginManager.BHvKQlj2.js} +2 -2
  23. package/dist/client/_astro/PostTypesManager.DMUxfOp9.js +1 -0
  24. package/dist/client/_astro/{QuickDraftWidget.ux_yGWpX.js → QuickDraftWidget.DyX_bJ1p.js} +2 -2
  25. package/dist/client/_astro/ResourceHubs.BwxYHeE5.js +1 -0
  26. package/dist/client/_astro/TaxonomiesManager.DlVS4Ujm.js +1 -0
  27. package/dist/client/_astro/TaxonomyTermsManager.B_ZDFU-K.js +1 -0
  28. package/dist/client/_astro/ThemeManager.DuHgcKyn.js +176 -0
  29. package/dist/client/_astro/UserCreateForm.1KIa3Aa2.js +1 -0
  30. package/dist/client/_astro/UsersManager.v24y8OSk.js +1 -0
  31. package/dist/client/_astro/WebhooksManager.DPkFhoVr.js +1 -0
  32. package/dist/client/_astro/api.CYg1SW2X.js +1 -0
  33. package/dist/client/_astro/client.DU9Dc2oe.js +1 -0
  34. package/dist/client/_astro/extensions.Brl6zAPA.js +1 -0
  35. package/dist/client/_astro/i18n.AbBpo2WD.js +1 -0
  36. package/dist/client/_astro/{login.astro_astro_type_script_index_0_lang.Dni6a5dD.js → login.astro_astro_type_script_index_0_lang.F2J3xZhK.js} +1 -1
  37. package/dist/client/_astro/{pt-BR.B-uijFlj.js → pt-BR.B0jeLTb0.js} +1 -1
  38. package/dist/client/_astro/solid.D49dPDCT.js +1 -0
  39. package/dist/client/_astro/{src.DksrLolD.js → src.DXVWCoHp.js} +1 -1
  40. package/dist/client/_astro/web.Bqbl_1YR.js +1 -0
  41. package/dist/server/chunks/{404_DIfrzRRM.mjs → 404_Bj-sYqJF.mjs} +1 -1
  42. package/dist/server/chunks/{BaseLayout_CmMnXoh2.mjs → BaseLayout_BlxsDTAd.mjs} +3 -3
  43. package/dist/server/chunks/{ContentEditor_CrP88U9K.mjs → ContentEditor_BLL0Q9aT.mjs} +2 -2
  44. package/dist/server/chunks/{DashboardLayout_C6I2H2jO.mjs → DashboardLayout_D-AI4SdO.mjs} +7 -2
  45. package/dist/server/chunks/FloatingPanel_DI2CdUZK.mjs +57 -0
  46. package/dist/server/chunks/{MediaLibrary_c4bl4fTY.mjs → MediaLibrary_BPSHokdn.mjs} +2 -2
  47. package/dist/server/chunks/Modal_vHjkS4i2.mjs +33 -0
  48. package/dist/server/chunks/{_id__C2MAQ-Pj.mjs → _id__CvxvSegw.mjs} +21 -10
  49. package/dist/server/chunks/{_slug__CR0j3J9V.mjs → _slug__B3m1GWZj.mjs} +1 -1
  50. package/dist/server/chunks/access_t-YgohBR.mjs +389 -0
  51. package/dist/server/chunks/api-keys_DvIgJEw-.mjs +283 -0
  52. package/dist/server/chunks/{custom-fields_BPduH9VI.mjs → custom-fields_Yq-7YaBk.mjs} +2 -2
  53. package/dist/server/chunks/{edit_CJdKxNhx.mjs → edit_7AfeGLnP.mjs} +2 -2
  54. package/dist/server/chunks/{general_eI-sNsQl.mjs → general_4IEF4sYI.mjs} +31 -27
  55. package/dist/server/chunks/{i18n_BqZ4e24O.mjs → i18n_CItvcX64.mjs} +86 -5
  56. package/dist/server/chunks/{index_XRE0Vjch.mjs → index_B0LWYIKC.mjs} +2 -2
  57. package/dist/server/chunks/{index_CyKyYL4y.mjs → index_BoAt_7s4.mjs} +2 -2
  58. package/dist/server/chunks/{index_Om0n2OAr.mjs → index_CG0xJrh0.mjs} +3 -3
  59. package/dist/server/chunks/{index_CA70i3-b.mjs → index_CUe8civB.mjs} +2 -2
  60. package/dist/server/chunks/{index_BKzgF5qF.mjs → index_CkJtZm1g.mjs} +2 -2
  61. package/dist/server/chunks/{login_0iFVtfgV.mjs → login_CWnr9s7S.mjs} +1 -1
  62. package/dist/server/chunks/{logs_D-h53LJu.mjs → logs_jSHdYZQ7.mjs} +2 -2
  63. package/dist/server/chunks/{menus_CcCZvv6r.mjs → menus_DSIld5hj.mjs} +2 -2
  64. package/dist/server/chunks/{new_DSopKVB7.mjs → new_DMbeF6_n.mjs} +2 -2
  65. package/dist/server/chunks/{new_BmimSObH.mjs → new_NQMhsp8J.mjs} +2 -2
  66. package/dist/server/chunks/{plugins_MF0XTr5R.mjs → plugins_ChSk7C1I.mjs} +2 -2
  67. package/dist/server/chunks/{post-types_D5ajDp3x.mjs → post-types_Y8dhnrtw.mjs} +100 -47
  68. package/dist/server/chunks/{pt-BR_CQndzpOT.mjs → pt-BR_DpWzkRv5.mjs} +74 -4
  69. package/dist/server/chunks/{taxonomies_CfvbHc_y.mjs → taxonomies_Bg6steYg.mjs} +2 -2
  70. package/dist/server/chunks/{taxonomy_DdWpf9lk.mjs → taxonomy_Bk7DHF9d.mjs} +2 -2
  71. package/dist/server/chunks/{themes_DQE1-WCF.mjs → themes_JFxY7m2_.mjs} +2 -2
  72. package/dist/server/chunks/{upload_DjkuLTrW.mjs → upload_CrHx55UT.mjs} +2 -2
  73. package/dist/server/chunks/{webhooks_NO5wRHnZ.mjs → webhooks_Du4Tv0yn.mjs} +2 -2
  74. package/dist/server/entry.mjs +68 -37
  75. package/dist/server/virtual_astro_middleware.mjs +1 -1
  76. package/package.json +3 -3
  77. package/dist/client/_astro/BaseLayout.CgLTOe_a.css +0 -1
  78. package/dist/client/_astro/ContentEditor.BlRm9ezb.js +0 -1
  79. package/dist/client/_astro/ContentTypeWorkspace.BF8WjCDy.js +0 -1
  80. package/dist/client/_astro/DashboardHome.C2TVw1TO.js +0 -1
  81. package/dist/client/_astro/DashboardLayout.C1hUraeX.css +0 -1
  82. package/dist/client/_astro/FbIcon.DFmK-EWG.js +0 -1
  83. package/dist/client/_astro/FieldGroupEditor.CcxZuz0o.js +0 -69
  84. package/dist/client/_astro/GeneralSettings.Bxn673WF.js +0 -1
  85. package/dist/client/_astro/LogsManager.DF_3DQlY.js +0 -1
  86. package/dist/client/_astro/MediaLibrary._7sCWvNs.js +0 -1
  87. package/dist/client/_astro/PostTypesManager.BAXkf__Y.js +0 -1
  88. package/dist/client/_astro/ResourceHubs.Dhx1kbfj.js +0 -1
  89. package/dist/client/_astro/TaxonomiesManager.BYTDEeNU.js +0 -1
  90. package/dist/client/_astro/TaxonomyTermsManager.DBb5gB5l.js +0 -1
  91. package/dist/client/_astro/ThemeManager.DVBYapuE.js +0 -176
  92. package/dist/client/_astro/UserCreateForm.CTr8bSlL.js +0 -1
  93. package/dist/client/_astro/UsersManager.BfPqZNy7.js +0 -1
  94. package/dist/client/_astro/WebhooksManager.DPAWAObu.js +0 -1
  95. package/dist/client/_astro/api.CNp-a9Z3.js +0 -1
  96. package/dist/client/_astro/client.m5rScAmr.js +0 -1
  97. package/dist/client/_astro/extensions.CenNQy0u.js +0 -1
  98. package/dist/client/_astro/i18n.CXvd48vy.js +0 -1
  99. package/dist/client/_astro/solid.8gBSxpeo.js +0 -1
  100. package/dist/client/_astro/web.DB4MaPY9.js +0 -1
  101. package/dist/server/chunks/access_bpmBW03n.mjs +0 -138
@@ -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_BlxsDTAd.mjs";
5
+ import { a as LOCALE_LABELS, i as LOCALE_FLAGS, n as useTranslation, o as SUPPORTED_LOCALES, r as apiClient } from "./i18n_CItvcX64.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";
@@ -992,6 +992,11 @@ var $$DashboardLayout = createComponent$1(($$result, $$props, $$slots) => {
992
992
  href: "/settings/webhooks",
993
993
  key: "webhooks.title",
994
994
  active: isActive("/settings/webhooks")
995
+ },
996
+ {
997
+ href: "/settings/api-keys",
998
+ key: "apiKeys.title",
999
+ active: isActive("/settings/api-keys")
995
1000
  }
996
1001
  ];
997
1002
  return renderTemplate`${renderComponent($$result, "BaseLayout", $$BaseLayout, {
@@ -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_CItvcX64.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_D-AI4SdO.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$ = [
@@ -0,0 +1,33 @@
1
+ import { n as useTranslation } from "./i18n_CItvcX64.mjs";
2
+ import { createComponent, escape, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
3
+ import { Show, createEffect, onCleanup } from "solid-js";
4
+ //#region src/components/ui/Modal.tsx
5
+ var _tmpl$ = [
6
+ "<div",
7
+ " class=\"modal-overlay\" role=\"presentation\"><section class=\"modal\" role=\"dialog\" aria-modal=\"true\"",
8
+ "><header class=\"modal-header\"><h3>",
9
+ "</h3><button type=\"button\" class=\"modal-close\"",
10
+ ">×</button></header><!--$-->",
11
+ "<!--/--></section></div>"
12
+ ];
13
+ function Modal(props) {
14
+ const { t } = useTranslation();
15
+ createEffect(() => {
16
+ if (!props.open) return;
17
+ const onKey = (event) => {
18
+ if (event.key === "Escape") props.onClose();
19
+ };
20
+ document.addEventListener("keydown", onKey);
21
+ onCleanup(() => document.removeEventListener("keydown", onKey));
22
+ });
23
+ return createComponent(Show, {
24
+ get when() {
25
+ return props.open;
26
+ },
27
+ get children() {
28
+ return ssr(_tmpl$, ssrHydrationKey(), ssrAttribute("aria-label", escape(props.title, true), false), escape(props.title), ssrAttribute("aria-label", escape(t("common.close"), true), false), escape(props.children));
29
+ }
30
+ });
31
+ }
32
+ //#endregion
33
+ export { Modal as t };
@@ -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_CItvcX64.mjs";
5
+ import { t as $$DashboardLayout } from "./DashboardLayout_D-AI4SdO.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_D-AI4SdO.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,389 @@
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_CItvcX64.mjs";
5
+ import { t as $$DashboardLayout } from "./DashboardLayout_D-AI4SdO.mjs";
6
+ import { t as PageHeader } from "./PageHeader_CBOioOjo.mjs";
7
+ import { t as Modal } from "./Modal_vHjkS4i2.mjs";
8
+ import { t as FloatingPanel } from "./FloatingPanel_DI2CdUZK.mjs";
9
+ import { createComponent, escape, memo, ssr, ssrAttribute, ssrHydrationKey } from "solid-js/web";
10
+ import { For, Show, createMemo, createSignal, onMount } from "solid-js";
11
+ //#region src/components/apps/settings/PermissionPicker.tsx
12
+ var _tmpl$$1 = [
13
+ "<input",
14
+ " type=\"search\" class=\"input permission-picker__search\"",
15
+ ">"
16
+ ];
17
+ var _tmpl$2$1 = [
18
+ "<div",
19
+ " class=\"permission-picker__matrix\" role=\"presentation\"><div class=\"permission-picker__row permission-picker__row--head\" role=\"presentation\"><span class=\"permission-picker__resource\"></span><!--$-->",
20
+ "<!--/--><!--$-->",
21
+ "<!--/--></div><!--$-->",
22
+ "<!--/--></div>"
23
+ ];
24
+ var _tmpl$3$1 = [
25
+ "<div",
26
+ " class=\"permission-picker__custom\"><p class=\"permission-picker__custom-label\">",
27
+ "</p><div class=\"permission-picker__chips\"><!--$-->",
28
+ "<!--/--><form class=\"permission-picker__custom-form\"><input class=\"input permission-picker__custom-input\"",
29
+ "><button class=\"btn btn-secondary btn-sm\" type=\"submit\">",
30
+ "</button></form></div></div>"
31
+ ];
32
+ var _tmpl$4$1 = [
33
+ "<p",
34
+ " class=\"icon-picker__count\">",
35
+ "</p>"
36
+ ];
37
+ var _tmpl$5$1 = [
38
+ "<div",
39
+ " class=\"permission-picker\"><button type=\"button\" class=\"input permission-picker__trigger\" aria-haspopup=\"dialog\"",
40
+ "><span class=\"",
41
+ "\">",
42
+ "</span><span class=\"icon-picker__caret\" aria-hidden=\"true\">",
43
+ "</span></button><!--$-->",
44
+ "<!--/--></div>"
45
+ ];
46
+ var _tmpl$6$1 = [
47
+ "<span",
48
+ " class=\"permission-picker__action-label\">",
49
+ "</span>"
50
+ ];
51
+ var _tmpl$7$1 = [
52
+ "<p",
53
+ " class=\"permission-picker__empty\">",
54
+ "</p>"
55
+ ];
56
+ var _tmpl$8 = [
57
+ "<div",
58
+ " class=\"permission-picker__row\"><span class=\"permission-picker__resource\"",
59
+ ">",
60
+ "</span><!--$-->",
61
+ "<!--/--></div>"
62
+ ];
63
+ var _tmpl$9 = [
64
+ "<label",
65
+ " class=\"",
66
+ "\" title=\"",
67
+ "\"><input type=\"checkbox\"",
68
+ "><span aria-hidden=\"true\">✓</span></label>"
69
+ ];
70
+ var _tmpl$0 = ["<span", " class=\"permission-picker__cell permission-picker__cell--empty\"></span>"];
71
+ var _tmpl$1 = [
72
+ "<span",
73
+ " class=\"permission-picker__chip\"><code>",
74
+ "</code><button type=\"button\" aria-label=\"",
75
+ "\">×</button></span>"
76
+ ];
77
+ /** Ações canônicas (o que `requirePermission(action, resource)` recebe). */
78
+ var ACTIONS = [
79
+ "read",
80
+ "create",
81
+ "update",
82
+ "delete"
83
+ ];
84
+ /** Recursos protegidos pela API, na ordem em que aparecem na matriz. */
85
+ var RESOURCES = [
86
+ "content",
87
+ "media",
88
+ "category",
89
+ "tag",
90
+ "menu",
91
+ "user",
92
+ "roles",
93
+ "theme",
94
+ "plugin",
95
+ "setting",
96
+ "webhook",
97
+ "tenants",
98
+ "audit",
99
+ "build",
100
+ "system"
101
+ ];
102
+ /** Ação extra por recurso (fora do padrão read/create/update/delete). */
103
+ var EXTRA_ACTIONS = { media: ["upload"] };
104
+ var permissionKey = (action, resource) => `${action}:${resource}`;
105
+ var isKnown = (token) => {
106
+ const [action, resource] = token.split(":");
107
+ if (!action || !resource) return false;
108
+ return ACTIONS.includes(action) && RESOURCES.includes(resource);
109
+ };
110
+ function PermissionPicker(props) {
111
+ const { t } = useTranslation();
112
+ const [open, setOpen] = createSignal(false);
113
+ const [query, setQuery] = createSignal("");
114
+ const [customDraft, setCustomDraft] = createSignal("");
115
+ const [trigger, setTrigger] = createSignal(void 0);
116
+ const selected = createMemo(() => new Set(props.value));
117
+ const custom = createMemo(() => props.value.filter((token) => !isKnown(token)));
118
+ const filteredResources = createMemo(() => {
119
+ const q = query().trim().toLowerCase();
120
+ if (!q) return RESOURCES;
121
+ return RESOURCES.filter((resource) => resource.includes(q) || t(`access.resources.${resource}`).toLowerCase().includes(q));
122
+ });
123
+ /** Colunas extras visíveis (ex.: upload quando "media" está no filtro). */
124
+ const extraColumns = createMemo(() => {
125
+ const seen = /* @__PURE__ */ new Set();
126
+ for (const resource of filteredResources()) for (const action of EXTRA_ACTIONS[resource] ?? []) seen.add(action);
127
+ return [...seen];
128
+ });
129
+ /** Coluna completa para o par (ação, recurso)? */
130
+ const hasColumn = (action, resource) => ACTIONS.includes(action) || (EXTRA_ACTIONS[resource] ?? []).includes(action);
131
+ const summary = () => {
132
+ const count = props.value.length;
133
+ if (count === 0) return props.placeholder ?? t("access.permissionsPlaceholder");
134
+ const resources = new Set(props.value.map((token) => token.split(":")[1] ?? token));
135
+ return t("access.permissionsSummary", {
136
+ resources: resources.size,
137
+ count
138
+ });
139
+ };
140
+ 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, {
141
+ get open() {
142
+ return open();
143
+ },
144
+ get trigger() {
145
+ return trigger();
146
+ },
147
+ onClose: () => setOpen(false),
148
+ "class": "permission-picker__panel",
149
+ role: "dialog",
150
+ get ["aria-label"]() {
151
+ return t("access.permissions");
152
+ },
153
+ minWidth: 440,
154
+ get children() {
155
+ return [
156
+ ssr(_tmpl$$1, ssrHydrationKey(), ssrAttribute("placeholder", escape(props.searchPlaceholder ?? t("access.permissionSearch"), true), false) + ssrAttribute("value", escape(query(), true), false)),
157
+ ssr(_tmpl$2$1, ssrHydrationKey(), escape(createComponent(For, {
158
+ each: ACTIONS,
159
+ children: (action) => ssr(_tmpl$6$1, ssrHydrationKey(), escape(action))
160
+ })), escape(createComponent(For, {
161
+ get each() {
162
+ return extraColumns();
163
+ },
164
+ children: (action) => ssr(_tmpl$6$1, ssrHydrationKey(), escape(action))
165
+ })), escape(createComponent(For, {
166
+ get each() {
167
+ return filteredResources();
168
+ },
169
+ get fallback() {
170
+ return ssr(_tmpl$7$1, ssrHydrationKey(), escape(t("access.permissionNoMatches")));
171
+ },
172
+ children: (resource) => ssr(_tmpl$8, ssrHydrationKey(), ssrAttribute("title", escape(resource, true), false), escape(t(`access.resources.${resource}`)), escape(createComponent(For, {
173
+ get each() {
174
+ return [...ACTIONS, ...extraColumns()];
175
+ },
176
+ 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())
177
+ })))
178
+ }))),
179
+ ssr(_tmpl$3$1, ssrHydrationKey(), escape(t("access.customPermissions")), escape(createComponent(For, {
180
+ get each() {
181
+ return custom();
182
+ },
183
+ children: (token) => ssr(_tmpl$1, ssrHydrationKey(), escape(token), `${escape(t("common.remove"), true)}: ${escape(token, true)}`)
184
+ })), ssrAttribute("placeholder", escape(t("access.customPermission"), true), false) + ssrAttribute("value", escape(customDraft(), true), false), escape(t("common.add"))),
185
+ createComponent(Show, {
186
+ get when() {
187
+ return props.value.length > 0;
188
+ },
189
+ get children() {
190
+ return ssr(_tmpl$4$1, ssrHydrationKey(), escape(t("access.permissionsSelected", { count: props.value.length })));
191
+ }
192
+ })
193
+ ];
194
+ }
195
+ })));
196
+ }
197
+ //#endregion
198
+ //#region src/components/apps/settings/ResourceHubs.tsx
199
+ var _tmpl$ = [
200
+ "<div",
201
+ " class=\"notice notice--error\">",
202
+ "</div>"
203
+ ];
204
+ var _tmpl$2 = [
205
+ "<div",
206
+ " class=\"resource-hub\"><!--$-->",
207
+ "<!--/--><div class=\"access-grid\"><section class=\"card\"><div class=\"card-header-row\"><h3>",
208
+ "</h3><button class=\"btn btn-primary\" type=\"button\">+ <!--$-->",
209
+ "<!--/--></button></div><table class=\"table\"><thead><tr><th>",
210
+ "</th><th>",
211
+ "</th><th>",
212
+ "</th><th></th></tr></thead><tbody>",
213
+ "</tbody></table><!--$-->",
214
+ "<!--/--></section><section class=\"card\"><div class=\"card-header-row\"><h3>",
215
+ "</h3><button class=\"btn btn-primary\" type=\"button\">+ <!--$-->",
216
+ "<!--/--></button></div><table class=\"table\"><thead><tr><th>",
217
+ "</th><th>",
218
+ "</th><th>",
219
+ "</th><th></th></tr></thead><tbody>",
220
+ "</tbody></table><!--$-->",
221
+ "<!--/--></section></div></div>"
222
+ ];
223
+ var _tmpl$3 = [
224
+ "<button",
225
+ " class=\"btn btn-danger btn-sm\" type=\"button\">",
226
+ "</button>"
227
+ ];
228
+ var _tmpl$4 = [
229
+ "<tr",
230
+ "><td>",
231
+ "</td><td><code>",
232
+ "</code></td><td class=\"access-permissions-cell\"",
233
+ ">",
234
+ "</td><td class=\"access-actions\"><button class=\"btn btn-secondary btn-sm\" type=\"button\">",
235
+ "</button><!--$-->",
236
+ "<!--/--></td></tr>"
237
+ ];
238
+ var _tmpl$5 = [
239
+ "<form",
240
+ " class=\"resource-form\"><label><span class=\"resource-form__label\">",
241
+ "</span><input class=\"input\" required",
242
+ "></label><label><span class=\"resource-form__label\">",
243
+ "</span><input class=\"input\" required",
244
+ "></label><div class=\"resource-form__field\"><span class=\"resource-form__label\">",
245
+ "</span><!--$-->",
246
+ "<!--/--></div><div class=\"form-actions\"><button class=\"btn btn-secondary\" type=\"button\">",
247
+ "</button><button class=\"btn btn-primary\" type=\"submit\"",
248
+ ">",
249
+ "</button></div></form>"
250
+ ];
251
+ var _tmpl$6 = [
252
+ "<tr",
253
+ "><td>",
254
+ "</td><td><code>",
255
+ "</code></td><td>",
256
+ "</td><td class=\"access-actions\"><button class=\"btn btn-secondary btn-sm\" type=\"button\">",
257
+ "</button><button class=\"btn btn-danger btn-sm\" type=\"button\">",
258
+ "</button></td></tr>"
259
+ ];
260
+ var _tmpl$7 = [
261
+ "<form",
262
+ " class=\"resource-form\"><label><span class=\"resource-form__label\">",
263
+ "</span><input class=\"input\" required",
264
+ "></label><label><span class=\"resource-form__label\">",
265
+ "</span><input class=\"input\" required",
266
+ "></label><label><span class=\"resource-form__label\">",
267
+ "</span><input class=\"input\"",
268
+ "></label><div class=\"form-actions\"><button class=\"btn btn-secondary\" type=\"button\">",
269
+ "</button><button class=\"btn btn-primary\" type=\"submit\"",
270
+ ">",
271
+ "</button></div></form>"
272
+ ];
273
+ function AccessManager() {
274
+ const { t } = useTranslation();
275
+ const [roles, setRoles] = createSignal([]);
276
+ const [tenants, setTenants] = createSignal([]);
277
+ const [editingRole, setEditingRole] = createSignal(null);
278
+ const [editingTenant, setEditingTenant] = createSignal(null);
279
+ const [saving, setSaving] = createSignal(false);
280
+ const [error, setError] = createSignal("");
281
+ const load = async () => {
282
+ try {
283
+ setRoles(await apiClient.listRoles());
284
+ setTenants((await apiClient.listTenants({ limit: 100 })).data ?? []);
285
+ } catch (err) {
286
+ setError(err instanceof Error ? err.message : String(err));
287
+ }
288
+ };
289
+ onMount(load);
290
+ const permissionsSummary = (role) => {
291
+ const list = role.permissions ?? [];
292
+ if (list.length === 0) return "—";
293
+ return list.slice(0, 4).join(", ") + (list.length > 4 ? ` +${list.length - 4}` : "");
294
+ };
295
+ return ssr(_tmpl$2, ssrHydrationKey(), escape(createComponent(Show, {
296
+ get when() {
297
+ return error();
298
+ },
299
+ get children() {
300
+ return ssr(_tmpl$, ssrHydrationKey(), escape(error()));
301
+ }
302
+ })), escape(t("access.roles")), escape(t("common.create")), escape(t("resources.name")), escape(t("resources.slug")), escape(t("access.permissions")), escape(createComponent(For, {
303
+ get each() {
304
+ return roles();
305
+ },
306
+ 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, {
307
+ get when() {
308
+ return !role.is_system;
309
+ },
310
+ get children() {
311
+ return ssr(_tmpl$3, ssrHydrationKey(), escape(t("common.delete")));
312
+ }
313
+ })))
314
+ })), escape(createComponent(Modal, {
315
+ get open() {
316
+ return editingRole() !== null;
317
+ },
318
+ onClose: () => setEditingRole(null),
319
+ get title() {
320
+ return memo(() => !!editingRole()?.id)() ? t("access.editRole") : t("access.newRole");
321
+ },
322
+ get children() {
323
+ return createComponent(Show, {
324
+ get when() {
325
+ return editingRole();
326
+ },
327
+ 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, {
328
+ get value() {
329
+ return role().permissions ?? [];
330
+ },
331
+ onChange: (permissions) => setEditingRole({
332
+ ...role(),
333
+ permissions
334
+ })
335
+ })), escape(t("common.cancel")), ssrAttribute("disabled", saving(), true), saving() ? escape(t("common.loading")) : escape(t("common.save")))
336
+ });
337
+ }
338
+ })), escape(t("access.tenants")), escape(t("common.create")), escape(t("resources.name")), escape(t("resources.slug")), escape(t("common.status")), escape(createComponent(For, {
339
+ get each() {
340
+ return tenants();
341
+ },
342
+ children: (tenant) => ssr(_tmpl$6, ssrHydrationKey(), escape(tenant.name), escape(tenant.slug), escape(tenant.status), escape(t("common.edit")), escape(t("common.delete")))
343
+ })), escape(createComponent(Modal, {
344
+ get open() {
345
+ return editingTenant() !== null;
346
+ },
347
+ onClose: () => setEditingTenant(null),
348
+ get title() {
349
+ return memo(() => !!editingTenant()?.id)() ? t("access.editTenant") : t("access.newTenant");
350
+ },
351
+ get children() {
352
+ return createComponent(Show, {
353
+ get when() {
354
+ return editingTenant();
355
+ },
356
+ 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")))
357
+ });
358
+ }
359
+ })));
360
+ }
361
+ //#endregion
362
+ //#region src/pages/settings/access.astro
363
+ var access_exports = /* @__PURE__ */ __exportAll({
364
+ default: () => $$Access,
365
+ file: () => $$file,
366
+ url: () => $$url
367
+ });
368
+ createAstro("https://astro.build");
369
+ var $$Access = createComponent$1(($$result, $$props, $$slots) => {
370
+ const Astro = $$result.createAstro($$props, $$slots);
371
+ Astro.self = $$Access;
372
+ const { t } = Astro.locals;
373
+ return renderTemplate`${renderComponent($$result, "DashboardLayout", $$DashboardLayout, { "title": t("access.title") }, { "default": ($$result) => renderTemplate`${renderComponent($$result, "PageHeader", PageHeader, {
374
+ "title": t("access.title"),
375
+ "description": t("access.description")
376
+ })}${renderComponent($$result, "AccessManager", AccessManager, {
377
+ "client:load": true,
378
+ "client:component-hydration": "load",
379
+ "client:component-path": "/home/runner/work/cms/cms/apps/admin/src/components/apps/settings/ResourceHubs.tsx",
380
+ "client:component-export": "AccessManager"
381
+ })}` })}`;
382
+ }, "/home/runner/work/cms/cms/apps/admin/src/pages/settings/access.astro", void 0);
383
+ var $$file = "/home/runner/work/cms/cms/apps/admin/src/pages/settings/access.astro";
384
+ var $$url = "/settings/access";
385
+ //#endregion
386
+ //#region \0virtual:astro:page:src/pages/settings/access@_@astro
387
+ var page = () => access_exports;
388
+ //#endregion
389
+ export { page };