@tekki-forge/runtime-admin 0.1.0 → 0.3.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 (143) hide show
  1. package/dist/admin-dashboard.d.ts +16 -0
  2. package/dist/admin-dashboard.js +60 -0
  3. package/dist/admin-dashboard.js.map +1 -0
  4. package/dist/admin-orgs.d.ts +14 -0
  5. package/dist/admin-orgs.js +75 -0
  6. package/dist/admin-orgs.js.map +1 -0
  7. package/dist/admin-shell.d.ts +55 -0
  8. package/dist/admin-shell.js +141 -0
  9. package/dist/admin-shell.js.map +1 -0
  10. package/dist/admin.js +39 -6
  11. package/dist/admin.js.map +1 -1
  12. package/dist/app-pages.d.ts +19 -0
  13. package/dist/app-pages.js +109 -0
  14. package/dist/app-pages.js.map +1 -0
  15. package/dist/auth-pages.js +7 -2
  16. package/dist/auth-pages.js.map +1 -1
  17. package/dist/charts.d.ts +98 -2
  18. package/dist/charts.js +264 -24
  19. package/dist/charts.js.map +1 -1
  20. package/dist/context.js +32 -1
  21. package/dist/context.js.map +1 -1
  22. package/dist/dashboard.d.ts +63 -8
  23. package/dist/dashboard.js +180 -36
  24. package/dist/dashboard.js.map +1 -1
  25. package/dist/entity-icons.d.ts +3 -0
  26. package/dist/entity-icons.js +105 -0
  27. package/dist/entity-icons.js.map +1 -0
  28. package/dist/i18n/messages/de.js +751 -0
  29. package/dist/i18n/messages/de.js.map +1 -1
  30. package/dist/i18n/messages/en.js +751 -0
  31. package/dist/i18n/messages/en.js.map +1 -1
  32. package/dist/i18n/messages/es.js +751 -0
  33. package/dist/i18n/messages/es.js.map +1 -1
  34. package/dist/i18n/messages/fr.js +751 -0
  35. package/dist/i18n/messages/fr.js.map +1 -1
  36. package/dist/i18n/messages/pt.js +751 -0
  37. package/dist/i18n/messages/pt.js.map +1 -1
  38. package/dist/index.d.ts +9 -0
  39. package/dist/index.js +9 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/schema-editor.js +2 -1
  42. package/dist/schema-editor.js.map +1 -1
  43. package/dist/shell.js +37 -34
  44. package/dist/shell.js.map +1 -1
  45. package/dist/site/editor/api.d.ts +74 -0
  46. package/dist/site/editor/api.js +93 -0
  47. package/dist/site/editor/api.js.map +1 -0
  48. package/dist/site/editor/content-page.d.ts +4 -0
  49. package/dist/site/editor/content-page.js +65 -0
  50. package/dist/site/editor/content-page.js.map +1 -0
  51. package/dist/site/editor/inbox-tab.d.ts +4 -0
  52. package/dist/site/editor/inbox-tab.js +88 -0
  53. package/dist/site/editor/inbox-tab.js.map +1 -0
  54. package/dist/site/editor/index.d.ts +1 -0
  55. package/dist/site/editor/index.js +3 -0
  56. package/dist/site/editor/index.js.map +1 -0
  57. package/dist/site/editor/model.d.ts +145 -0
  58. package/dist/site/editor/model.js +408 -0
  59. package/dist/site/editor/model.js.map +1 -0
  60. package/dist/site/editor/page-editor.d.ts +10 -0
  61. package/dist/site/editor/page-editor.js +257 -0
  62. package/dist/site/editor/page-editor.js.map +1 -0
  63. package/dist/site/editor/page-settings.d.ts +9 -0
  64. package/dist/site/editor/page-settings.js +105 -0
  65. package/dist/site/editor/page-settings.js.map +1 -0
  66. package/dist/site/editor/pages-tab.d.ts +5 -0
  67. package/dist/site/editor/pages-tab.js +108 -0
  68. package/dist/site/editor/pages-tab.js.map +1 -0
  69. package/dist/site/editor/posts-tab.d.ts +6 -0
  70. package/dist/site/editor/posts-tab.js +139 -0
  71. package/dist/site/editor/posts-tab.js.map +1 -0
  72. package/dist/site/editor/preview.d.ts +32 -0
  73. package/dist/site/editor/preview.js +104 -0
  74. package/dist/site/editor/preview.js.map +1 -0
  75. package/dist/site/editor/prop-fields.d.ts +53 -0
  76. package/dist/site/editor/prop-fields.js +233 -0
  77. package/dist/site/editor/prop-fields.js.map +1 -0
  78. package/dist/site/editor/section-list.d.ts +14 -0
  79. package/dist/site/editor/section-list.js +110 -0
  80. package/dist/site/editor/section-list.js.map +1 -0
  81. package/dist/site/editor/section-picker.d.ts +12 -0
  82. package/dist/site/editor/section-picker.js +44 -0
  83. package/dist/site/editor/section-picker.js.map +1 -0
  84. package/dist/site/editor/widgets.d.ts +84 -0
  85. package/dist/site/editor/widgets.js +130 -0
  86. package/dist/site/editor/widgets.js.map +1 -0
  87. package/dist/site/format.d.ts +31 -0
  88. package/dist/site/format.js +106 -0
  89. package/dist/site/format.js.map +1 -0
  90. package/dist/site/forms.d.ts +43 -0
  91. package/dist/site/forms.js +155 -0
  92. package/dist/site/forms.js.map +1 -0
  93. package/dist/site/header.d.ts +32 -0
  94. package/dist/site/header.js +76 -0
  95. package/dist/site/header.js.map +1 -0
  96. package/dist/site/icons.d.ts +10 -0
  97. package/dist/site/icons.js +28 -0
  98. package/dist/site/icons.js.map +1 -0
  99. package/dist/site/index.d.ts +11 -0
  100. package/dist/site/index.js +13 -0
  101. package/dist/site/index.js.map +1 -0
  102. package/dist/site/markdown.d.ts +14 -0
  103. package/dist/site/markdown.js +457 -0
  104. package/dist/site/markdown.js.map +1 -0
  105. package/dist/site/page.d.ts +16 -0
  106. package/dist/site/page.js +65 -0
  107. package/dist/site/page.js.map +1 -0
  108. package/dist/site/proxy.d.ts +13 -0
  109. package/dist/site/proxy.js +43 -0
  110. package/dist/site/proxy.js.map +1 -0
  111. package/dist/site/sections.d.ts +43 -0
  112. package/dist/site/sections.js +560 -0
  113. package/dist/site/sections.js.map +1 -0
  114. package/dist/site/server.d.ts +73 -0
  115. package/dist/site/server.js +235 -0
  116. package/dist/site/server.js.map +1 -0
  117. package/dist/site/types.d.ts +137 -0
  118. package/dist/site/types.js +2 -0
  119. package/dist/site/types.js.map +1 -0
  120. package/dist/support.d.ts +29 -0
  121. package/dist/support.js +165 -0
  122. package/dist/support.js.map +1 -0
  123. package/dist/system-config.d.ts +24 -0
  124. package/dist/system-config.js +37 -0
  125. package/dist/system-config.js.map +1 -0
  126. package/dist/system-settings.d.ts +9 -0
  127. package/dist/system-settings.js +60 -0
  128. package/dist/system-settings.js.map +1 -0
  129. package/dist/theme-catalog.d.ts +72 -2
  130. package/dist/theme-catalog.js +47 -0
  131. package/dist/theme-catalog.js.map +1 -1
  132. package/dist/theme-switcher.d.ts +8 -0
  133. package/dist/theme-switcher.js +39 -4
  134. package/dist/theme-switcher.js.map +1 -1
  135. package/dist/theme.js +8 -0
  136. package/dist/theme.js.map +1 -1
  137. package/dist/transactions.d.ts +4 -0
  138. package/dist/transactions.js +60 -0
  139. package/dist/transactions.js.map +1 -0
  140. package/dist/ui.js +3 -22
  141. package/dist/ui.js.map +1 -1
  142. package/package.json +9 -5
  143. package/styles.css +1089 -0
package/dist/shell.js CHANGED
@@ -1,18 +1,19 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useQuery, useQueryClient } from "@tanstack/react-query";
4
- import { BookOpen, Building, ChevronDown, ChevronsUpDown, LayoutDashboard, LogOut, Menu, PanelLeftClose, PanelLeftOpen, ScrollText, Search, Shield, UserCircle, UsersRound, X, Blocks, KeyRound } from "lucide-react";
4
+ import { Bell, BookOpen, Building, ChevronDown, ChevronsUpDown, Gauge, LayoutDashboard, LifeBuoy, LogOut, Menu, PanelLeftClose, PanelLeftOpen, Plug, Search, Settings, UserCircle, UsersRound, X } from "lucide-react";
5
5
  import Link from "next/link";
6
6
  import { usePathname, useRouter } from "next/navigation";
7
7
  import { useCallback, useEffect, useRef, useState } from "react";
8
8
  import { BrandMark } from "./brand.js";
9
9
  import { CommandPalette, openCommandPalette } from "./command-palette.js";
10
- import { SCHEMA_EDITOR_NAV } from "./schema-editor.js";
11
10
  import { useForge, useMe } from "./context.js";
12
11
  import { LocaleSwitcher } from "./locale-switcher.js";
13
12
  import { NotificationBell } from "./notifications.js";
14
13
  import { usePreviewLayout } from "./theme-preview.js";
15
14
  import { ThemeSwitcher } from "./theme-switcher.js";
15
+ import { AdminEntryLink, AdminPage, adminSections, useAdminAccess } from "./admin-shell.js";
16
+ import { MaintenanceBanner, useAppName } from "./system-config.js";
16
17
  import { PageHeader, ResourceIcon, Spinner, cn } from "./ui.js";
17
18
  export function isGlobalAdmin(role) {
18
19
  return (role ?? "").split(",").map((r) => r.trim()).includes("admin");
@@ -48,13 +49,14 @@ function PageTransition({ children }) {
48
49
  return;
49
50
  }
50
51
  const el = ref.current;
51
- if (!el || typeof el.animate !== "function" || window.matchMedia?.("(prefers-reduced-motion: reduce)").matches)
52
+ // No page transition when the visitor asks for less motion or the theme sets motion: "none".
53
+ if (!el || typeof el.animate !== "function" || window.matchMedia?.("(prefers-reduced-motion: reduce)").matches || document.documentElement.dataset.forgeMotion === "none")
52
54
  return;
53
55
  el.animate([{ opacity: 0, transform: "translateY(6px)" }, { opacity: 1, transform: "none" }], { duration: 220, easing: "cubic-bezier(.2,.7,.2,1)" });
54
56
  }, [pathname]);
55
57
  return _jsx("div", { ref: ref, children: children });
56
58
  }
57
- function UserMenu({ user, admin, extra = [], onSignOut }) {
59
+ function UserMenu({ user, extra = [], onSignOut }) {
58
60
  const { t } = useForge();
59
61
  const [open, setOpen] = useState(false);
60
62
  const ref = useRef(null);
@@ -73,7 +75,7 @@ function UserMenu({ user, admin, extra = [], onSignOut }) {
73
75
  };
74
76
  }, [open]);
75
77
  const initials = user.name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("") || "?";
76
- return (_jsxs("div", { ref: ref, className: "relative", children: [_jsxs("button", { type: "button", "aria-expanded": open, "aria-haspopup": "true", "aria-label": t("nav.accountMenu"), onClick: () => setOpen((o) => !o), className: "forge-btn forge-btn-ghost flex items-center gap-1.5 p-1", children: [_jsx("span", { className: "forge-avatar flex size-7 items-center justify-center text-[11px] font-semibold", children: initials }), _jsx(ChevronDown, { className: "size-3.5", "aria-hidden": true })] }), open && (_jsxs("div", { className: "forge-popover forge-pop absolute top-11 right-0 z-50 w-64 p-1.5", children: [_jsxs("div", { className: "px-2.5 py-2", children: [_jsx("p", { className: "truncate text-sm font-medium text-ink", children: user.name }), _jsx("p", { className: "truncate text-xs text-ink-muted", children: user.email })] }), _jsx("div", { className: "my-1 h-px bg-line" }), _jsx(LocaleSwitcher, {}), _jsx(NavLink, { href: "/account", icon: _jsx(UserCircle, { className: "size-4" }), children: t("account.title") }), extra.map((n) => (n.external ? _jsx(ExternalNavLink, { entry: n }, n.href) : _jsx(NavLink, { href: n.href, icon: n.icon, children: n.label }, n.href))), admin.length > 0 && (_jsxs(_Fragment, { children: [_jsx("p", { className: "px-2.5 pt-2.5 pb-1 text-xs font-medium tracking-wide text-ink-subtle uppercase", children: t("nav.administration") }), admin.map((n) => (n.external ? _jsx(ExternalNavLink, { entry: n }, n.href) : _jsx(NavLink, { href: n.href, icon: n.icon, children: n.label }, n.href)))] })), _jsx("div", { className: "my-1 h-px bg-line" }), _jsxs("button", { type: "button", onClick: onSignOut, className: "forge-nav-item flex w-full items-center gap-2.5 px-2.5 py-1.5 text-sm", children: [_jsx(LogOut, { className: "size-4" }), " ", t("nav.signOut")] })] }))] }));
78
+ return (_jsxs("div", { ref: ref, className: "relative", children: [_jsxs("button", { type: "button", "aria-expanded": open, "aria-haspopup": "true", "aria-label": t("nav.accountMenu"), onClick: () => setOpen((o) => !o), className: "forge-btn forge-btn-ghost flex items-center gap-1.5 p-1", children: [_jsx("span", { className: "forge-avatar flex size-7 items-center justify-center text-[11px] font-semibold", children: initials }), _jsx(ChevronDown, { className: "size-3.5", "aria-hidden": true })] }), open && (_jsxs("div", { className: "forge-popover forge-pop absolute top-11 right-0 z-50 w-64 p-1.5", children: [_jsxs("div", { className: "px-2.5 py-2", children: [_jsx("p", { className: "truncate text-sm font-medium text-ink", children: user.name }), _jsx("p", { className: "truncate text-xs text-ink-muted", children: user.email })] }), _jsx("div", { className: "my-1 h-px bg-line" }), _jsx(LocaleSwitcher, {}), _jsx(NavLink, { href: "/settings", icon: _jsx(UserCircle, { className: "size-4" }), children: t("settings.title") }), extra.map((n) => (n.external ? _jsx(ExternalNavLink, { entry: n }, n.href) : _jsx(NavLink, { href: n.href, icon: n.icon, children: n.label }, n.href))), _jsx(AdminEntryLink, {}), _jsx("div", { className: "my-1 h-px bg-line" }), _jsxs("button", { type: "button", onClick: onSignOut, className: "forge-nav-item flex w-full items-center gap-2.5 px-2.5 py-1.5 text-sm", children: [_jsx(LogOut, { className: "size-4" }), " ", t("nav.signOut")] })] }))] }));
77
79
  }
78
80
  function ExternalNavLink({ entry }) {
79
81
  return (_jsxs("a", { href: entry.href, target: "_blank", rel: "noreferrer", className: "forge-nav-item flex items-center gap-2.5 overflow-hidden px-2.5 py-1.5 text-sm whitespace-nowrap", children: [entry.icon, _jsx("span", { className: "forge-nav-label min-w-0 truncate", children: entry.label })] }));
@@ -134,9 +136,11 @@ function RailTooltips({ enabled, children }) {
134
136
  }
135
137
  /** Authenticated application frame: navigation generated from resource metadata, in the theme's layout. */
136
138
  export function AppShell({ children }) {
137
- const { app, resources, auth, t } = useForge();
139
+ const { app, resources, auth, pages, t } = useForge();
138
140
  const session = auth.useSession();
139
141
  const me = useMe();
142
+ const access = useAdminAccess();
143
+ const appName = useAppName();
140
144
  const router = useRouter();
141
145
  const pathname = usePathname();
142
146
  const [mobileOpen, setMobileOpen] = useState(false);
@@ -173,53 +177,52 @@ export function AppShell({ children }) {
173
177
  if (session.isPending || !session.data || me.isLoading)
174
178
  return _jsx(Spinner, {});
175
179
  const user = session.data.user;
176
- const globalAdmin = isGlobalAdmin(user.role);
177
180
  const signOut = async () => {
178
181
  await auth.signOut();
179
182
  window.location.href = "/sign-in";
180
183
  };
181
- const paletteExtras = [
182
- ...app.plugins.flatMap((pl) => pl.nav.filter((n) => !n.admin || me.isAdmin)).map((n) => ({ label: n.label, href: `/${n.path}` })),
183
- { label: t("account.title"), href: "/account" },
184
- ...(globalAdmin && app.admin.enabled ? [{ label: t("admin.users.title"), href: "/admin/users" }] : []),
185
- ...(app.tenancy.enabled && me.isAdmin && app.admin.enabled ? [{ label: t("admin.members.title"), href: "/admin/members" }] : []),
186
- ...(me.isAdmin && app.admin.enabled ? [{ label: t("admin.audit.title"), href: "/admin/audit-logs" }] : []),
187
- ...(me.isAdmin && app.admin.enabled && process.env.NODE_ENV !== "production" ? [{ label: t(SCHEMA_EDITOR_NAV.label), href: `/${SCHEMA_EDITOR_NAV.path}` }] : []),
188
- ...(app.teams?.enabled && me.isAdmin && app.admin.enabled ? [{ label: t("admin.teams.title"), href: "/admin/teams" }] : []),
189
- ...(me.isAdmin && app.admin.enabled ? [{ label: t("admin.apiKeys.title"), href: "/admin/api-keys" }] : []),
190
- ];
184
+ const icon = (I) => _jsx(I, { className: "size-4 shrink-0" });
185
+ const payments = app.plugins.find((pl) => pl.name === "payments");
186
+ const planLimits = (payments?.options.plans ?? []).some((pl) => Object.keys(pl.limits ?? {}).length > 0);
187
+ const orgAdmin = app.tenancy.enabled && me.isAdmin;
191
188
  const mainLinks = [
192
189
  { href: "/", label: t("nav.dashboard"), icon: _jsx(LayoutDashboard, { className: "size-4 shrink-0" }), exact: true },
193
190
  ...Object.values(resources)
194
191
  .filter((r) => r.nav !== false)
195
192
  .map((r) => ({ href: `/${r.path}`, label: r.pluralLabel, icon: _jsx(ResourceIcon, { name: r.icon, className: "size-4 shrink-0" }) })),
196
193
  ];
197
- const pluginLinks = app.plugins.flatMap((pl) => pl.nav.filter((n) => !n.admin)).map((n) => ({ href: `/${n.path}`, label: n.label, icon: _jsx(ResourceIcon, { name: n.icon, className: "size-4 shrink-0" }) }));
198
- const adminLinks = (me.isAdmin || globalAdmin) && app.admin.enabled
199
- ? [
200
- ...(globalAdmin ? [{ href: "/admin/users", label: t("admin.users.title"), icon: _jsx(Shield, { className: "size-4 shrink-0" }) }] : []),
201
- ...(app.tenancy.enabled && me.isAdmin ? [{ href: "/admin/members", label: t("admin.members.title"), icon: _jsx(UsersRound, { className: "size-4 shrink-0" }) }] : []),
202
- ...(me.isAdmin ? [{ href: "/admin/audit-logs", label: t("admin.audit.title"), icon: _jsx(ScrollText, { className: "size-4 shrink-0" }) }] : []),
203
- // The schema editor edits forge.config.ts, so it only exists while running `forge dev`.
204
- ...(me.isAdmin && process.env.NODE_ENV !== "production" ? [{ href: `/${SCHEMA_EDITOR_NAV.path}`, label: t(SCHEMA_EDITOR_NAV.label), icon: _jsx(Blocks, { className: "size-4 shrink-0" }) }] : []),
205
- ...(me.isAdmin ? app.plugins.flatMap((pl) => pl.nav.filter((n) => n.admin)).map((n) => ({ href: `/${n.path}`, label: n.label, icon: _jsx(ResourceIcon, { name: n.icon, className: "size-4 shrink-0" }) })) : []),
206
- ...(app.teams?.enabled && me.isAdmin ? [{ href: "/admin/teams", label: t("admin.teams.title"), icon: _jsx(UsersRound, { className: "size-4 shrink-0" }) }] : []),
207
- ...(me.isAdmin ? [{ href: "/admin/api-keys", label: t("admin.apiKeys.title"), icon: _jsx(KeyRound, { className: "size-4 shrink-0" }) }] : []),
208
- ]
209
- : [];
194
+ // Application area, in this order: Notifications, Team, Integrations, Usage, Billing (and other plugin pages), Settings.
195
+ const pluginLinks = app.plugins.flatMap((pl) => pl.nav.filter((n) => !n.admin)).map((n) => ({ href: `/${n.path}`, label: n.path === "billing" ? t("nav.billing") : n.label, icon: _jsx(ResourceIcon, { name: n.icon, className: "size-4 shrink-0" }) }));
196
+ const workspaceLinks = [
197
+ { href: "/notifications", label: t("notifications.title"), icon: icon(Bell) },
198
+ ...(app.tenancy.enabled ? [{ href: "/team", label: t("team.title"), icon: icon(UsersRound) }] : []),
199
+ ...(orgAdmin ? [{ href: "/integrations", label: t("integrations.title"), icon: icon(Plug) }] : []),
200
+ ...(payments && planLimits ? [{ href: "/usage", label: t("usage.title"), icon: icon(Gauge) }] : []),
201
+ ...pluginLinks,
202
+ { href: "/settings", label: t("settings.title"), icon: icon(Settings) },
203
+ ];
204
+ const helpLinks = app.admin.support ? [{ href: "/support", label: t("support.navLabel"), icon: icon(LifeBuoy) }] : [];
205
+ const paletteExtras = [
206
+ ...workspaceLinks.map((n) => ({ label: n.label, href: n.href })),
207
+ ...helpLinks.map((n) => ({ label: n.label, href: n.href })),
208
+ ...(access.any ? adminSections(app, access, pages, t).map((sec) => ({ label: `${t("adminArea.title")} · ${sec.label}`, href: `/${sec.path}` })) : []),
209
+ ];
210
210
  const docsLink = app.api.docs ? { href: `${app.api.prefix}/docs`, label: t("nav.apiDocs"), icon: _jsx(BookOpen, { className: "size-4 shrink-0" }), external: true } : null;
211
211
  const links = (entries) => entries.map((n) => (n.external ? _jsx(ExternalNavLink, { entry: n }, n.href) : _jsx(NavLink, { href: n.href, icon: n.icon, exact: n.exact, children: n.label }, n.href)));
212
212
  // Vertical navigation: the sidebar, the compact rail (icons + tooltips, or expanded with its toggle) and the mobile drawer.
213
- const nav = (rail) => (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "forge-brand-row flex h-14 items-center gap-2 px-5", children: [_jsx(BrandMark, {}), _jsx("span", { className: "forge-nav-label flex-1 truncate text-sm font-semibold text-ink", children: app.name }), _jsx("div", { className: "forge-rail-extra", children: _jsx(NotificationBell, {}) })] }), app.tenancy.enabled && (_jsx("div", { className: "forge-rail-extra", children: _jsx(OrganizationSwitcher, {}) })), _jsx("div", { className: "forge-rail-extra px-3 pt-3", children: _jsxs("button", { type: "button", onClick: openCommandPalette, className: "forge-input flex h-8 w-full items-center gap-2 px-2.5 text-left text-xs text-ink-subtle", children: [_jsx(Search, { className: "size-3.5" }), " ", t("common.searchEllipsis"), _jsx("kbd", { className: "ml-auto rounded border border-line px-1 text-[10px]", children: "\u2318K" })] }) }), _jsxs("nav", { className: "flex-1 space-y-6 overflow-x-hidden overflow-y-auto px-3 py-4", "aria-label": t("nav.main"), children: [_jsx("div", { className: "space-y-0.5", children: links(mainLinks) }), pluginLinks.length > 0 && _jsx("div", { className: "space-y-0.5", children: links(pluginLinks) }), adminLinks.length > 0 && (_jsxs("div", { className: "space-y-0.5", children: [_jsx("p", { className: "forge-rail-extra px-2.5 pb-1 text-xs font-medium tracking-wide whitespace-nowrap text-ink-subtle uppercase", children: t("nav.administration") }), links(adminLinks)] })), docsLink && _jsx("div", { className: "space-y-0.5", children: links([docsLink]) })] }), _jsxs("div", { className: "border-t border-line p-3", children: [_jsx("div", { className: "forge-rail-extra", children: _jsx(LocaleSwitcher, {}) }), rail && (_jsxs("button", { type: "button", onClick: toggleRail, "aria-expanded": railExpanded, "aria-controls": "forge-rail", className: "forge-nav-item mb-0.5 flex w-full items-center gap-2.5 overflow-hidden px-2.5 py-1.5 text-sm whitespace-nowrap", children: [railExpanded ? _jsx(PanelLeftClose, { className: "size-4 shrink-0", "aria-hidden": true }) : _jsx(PanelLeftOpen, { className: "size-4 shrink-0", "aria-hidden": true }), _jsx("span", { className: "forge-nav-label", children: railExpanded ? t("nav.collapseRail") : t("nav.expandRail") })] })), _jsxs(NavLink, { href: "/account", icon: _jsx(UserCircle, { className: "size-4 shrink-0" }), tooltip: user.name, children: [_jsx("span", { className: "block truncate", children: user.name }), _jsx("span", { className: "block truncate text-xs text-ink-subtle", children: user.email })] }), _jsxs("button", { type: "button", onClick: signOut, className: "forge-nav-item mt-0.5 flex w-full items-center gap-2.5 overflow-hidden px-2.5 py-1.5 text-sm whitespace-nowrap", children: [_jsx(LogOut, { className: "size-4 shrink-0" }), " ", _jsx("span", { className: "forge-nav-label", children: t("nav.signOut") })] })] })] }));
213
+ const nav = (rail) => (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "forge-brand-row flex h-14 items-center gap-2 px-5", children: [_jsx(BrandMark, {}), _jsx("span", { className: "forge-nav-label flex-1 truncate text-sm font-semibold text-ink", children: appName }), _jsx("div", { className: "forge-rail-extra", children: _jsx(NotificationBell, {}) })] }), app.tenancy.enabled && (_jsx("div", { className: "forge-rail-extra", children: _jsx(OrganizationSwitcher, {}) })), _jsx("div", { className: "forge-rail-extra px-3 pt-3", children: _jsxs("button", { type: "button", onClick: openCommandPalette, className: "forge-input flex h-8 w-full items-center gap-2 px-2.5 text-left text-xs text-ink-subtle", children: [_jsx(Search, { className: "size-3.5" }), " ", t("common.searchEllipsis"), _jsx("kbd", { className: "ml-auto rounded border border-line px-1 text-[10px]", children: "\u2318K" })] }) }), _jsxs("nav", { className: "flex-1 space-y-6 overflow-x-hidden overflow-y-auto px-3 py-4", "aria-label": t("nav.main"), children: [_jsx("div", { className: "space-y-0.5", children: links(mainLinks) }), _jsx("div", { className: "space-y-0.5", children: links(workspaceLinks) }), access.any && (_jsx("div", { className: "space-y-0.5", children: _jsx(AdminEntryLink, { tooltip: t("adminArea.entry") }) })), (helpLinks.length > 0 || docsLink) && _jsx("div", { className: "space-y-0.5", children: links([...helpLinks, ...(docsLink ? [docsLink] : [])]) })] }), _jsxs("div", { className: "border-t border-line p-3", children: [_jsx("div", { className: "forge-rail-extra", children: _jsx(LocaleSwitcher, {}) }), rail && (_jsxs("button", { type: "button", onClick: toggleRail, "aria-expanded": railExpanded, "aria-controls": "forge-rail", className: "forge-nav-item mb-0.5 flex w-full items-center gap-2.5 overflow-hidden px-2.5 py-1.5 text-sm whitespace-nowrap", children: [railExpanded ? _jsx(PanelLeftClose, { className: "size-4 shrink-0", "aria-hidden": true }) : _jsx(PanelLeftOpen, { className: "size-4 shrink-0", "aria-hidden": true }), _jsx("span", { className: "forge-nav-label", children: railExpanded ? t("nav.collapseRail") : t("nav.expandRail") })] })), _jsxs(NavLink, { href: "/settings", icon: _jsx(UserCircle, { className: "size-4 shrink-0" }), tooltip: user.name, children: [_jsx("span", { className: "block truncate", children: user.name }), _jsx("span", { className: "block truncate text-xs text-ink-subtle", children: user.email })] }), _jsxs("button", { type: "button", onClick: signOut, className: "forge-nav-item mt-0.5 flex w-full items-center gap-2.5 overflow-hidden px-2.5 py-1.5 text-sm whitespace-nowrap", children: [_jsx(LogOut, { className: "size-4 shrink-0" }), " ", _jsx("span", { className: "forge-nav-label", children: t("nav.signOut") })] })] })] }));
214
214
  const offset = layout === "sidebar" ? "lg:pl-60" : layout === "compact" ? cn("forge-rail-offset", railExpanded ? "lg:pl-60" : "lg:pl-16") : "";
215
- return (_jsxs("div", { className: "forge-app-bg", "data-forge-shell": layout, children: [_jsx("a", { href: "#forge-main", className: "forge-skip-link", children: t("nav.skipToContent") }), me.data?.impersonating && (_jsxs("div", { className: "forge-banner flex items-center justify-center gap-3 px-4 py-1.5 text-sm", children: [t("nav.impersonating", { name: user.name }), _jsx("button", { type: "button", className: "font-medium underline", onClick: async () => {
215
+ return (_jsxs("div", { className: "forge-app-bg", "data-forge-shell": layout, children: [_jsx("a", { href: "#forge-main", className: "forge-skip-link", children: t("nav.skipToContent") }), _jsx(MaintenanceBanner, {}), me.data?.impersonating && (_jsxs("div", { className: "forge-banner flex items-center justify-center gap-3 px-4 py-1.5 text-sm", children: [t("nav.impersonating", { name: user.name }), _jsx("button", { type: "button", className: "font-medium underline", onClick: async () => {
216
216
  await auth.admin.stopImpersonating();
217
217
  window.location.href = "/admin/users";
218
- }, children: t("nav.stopImpersonating") })] })), layout === "sidebar" && _jsx("aside", { className: "forge-sidebar fixed inset-y-0 left-0 hidden w-60 lg:block", children: nav(false) }), layout === "compact" && (_jsx("aside", { id: "forge-rail", "data-expanded": railExpanded, className: cn("forge-sidebar forge-rail fixed inset-y-0 left-0 z-30 hidden lg:block", railExpanded ? "w-60" : "w-16"), children: _jsx(RailTooltips, { enabled: !railExpanded, children: nav(true) }) })), layout === "topbar" && (_jsx("header", { className: "forge-topbar forge-topnav sticky top-0 z-30 hidden lg:block", children: _jsxs("div", { className: "mx-auto flex h-16 max-w-7xl items-center gap-4 px-6", children: [_jsxs(Link, { href: "/", className: "flex shrink-0 items-center gap-2.5 rounded-[var(--forge-radius-control)]", children: [_jsx(BrandMark, {}), _jsx("span", { className: "forge-heading text-sm font-semibold text-ink", children: app.name })] }), app.tenancy.enabled && (_jsx("div", { className: "w-44 shrink-0 [&>div]:px-0", children: _jsx(OrganizationSwitcher, {}) })), _jsx("nav", { "aria-label": t("nav.main"), className: "forge-topnav-links flex min-w-0 flex-1 items-center gap-0.5 overflow-x-auto", children: links([...mainLinks, ...pluginLinks]) }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsxs("button", { type: "button", onClick: openCommandPalette, "aria-label": t("common.search"), className: "forge-btn forge-btn-ghost flex items-center gap-2 px-2 py-1.5 text-xs", children: [_jsx(Search, { className: "size-4", "aria-hidden": true }), _jsx("kbd", { className: "rounded border border-line px-1 text-[10px]", children: "\u2318K" })] }), _jsx(NotificationBell, { align: "end" }), _jsx(UserMenu, { user: user, admin: adminLinks, extra: docsLink ? [docsLink] : [], onSignOut: signOut })] })] }) })), mobileOpen && (_jsxs("div", { className: "fixed inset-0 z-40 lg:hidden", children: [_jsx("div", { className: "forge-overlay absolute inset-0", onClick: () => setMobileOpen(false) }), _jsxs("aside", { className: "forge-sidebar forge-drawer absolute inset-y-0 left-0 w-64", children: [_jsx("button", { type: "button", "aria-label": t("nav.closeMenu"), onClick: () => setMobileOpen(false), className: "forge-btn forge-btn-ghost absolute top-4 right-3 p-1", children: _jsx(X, { className: "size-4" }) }), nav(false)] })] })), _jsxs("div", { className: offset, children: [_jsxs("header", { className: "forge-topbar flex h-14 items-center px-4 lg:hidden", children: [_jsx("button", { type: "button", "aria-label": t("nav.openMenu"), onClick: () => setMobileOpen(true), className: "forge-btn forge-btn-ghost p-1.5", children: _jsx(Menu, { className: "size-5" }) }), _jsx(BrandMark, { className: "ml-3" }), _jsx("span", { className: "ml-2.5 text-sm font-semibold", children: app.name })] }), _jsx("main", { id: "forge-main", tabIndex: -1, className: "mx-auto max-w-6xl px-4 py-[var(--forge-main-y)] outline-none sm:px-8", children: _jsx(PageTransition, { children: children }) })] }), _jsx(CommandPalette, { extra: paletteExtras }), process.env.NODE_ENV !== "production" && _jsx(ThemeSwitcher, {})] }));
218
+ }, children: t("nav.stopImpersonating") })] })), layout === "sidebar" && _jsx("aside", { className: "forge-sidebar fixed inset-y-0 left-0 hidden w-60 lg:block", children: nav(false) }), layout === "compact" && (_jsx("aside", { id: "forge-rail", "data-expanded": railExpanded, className: cn("forge-sidebar forge-rail fixed inset-y-0 left-0 z-30 hidden lg:block", railExpanded ? "w-60" : "w-16"), children: _jsx(RailTooltips, { enabled: !railExpanded, children: nav(true) }) })), layout === "topbar" && (_jsx("header", { className: "forge-topbar forge-topnav sticky top-0 z-30 hidden lg:block", children: _jsxs("div", { className: "mx-auto flex h-16 max-w-7xl items-center gap-4 px-6", children: [_jsxs(Link, { href: "/", className: "flex shrink-0 items-center gap-2.5 rounded-[var(--forge-radius-control)]", children: [_jsx(BrandMark, {}), _jsx("span", { className: "forge-heading text-sm font-semibold text-ink", children: appName })] }), app.tenancy.enabled && (_jsx("div", { className: "w-44 shrink-0 [&>div]:px-0", children: _jsx(OrganizationSwitcher, {}) })), _jsx("nav", { "aria-label": t("nav.main"), className: "forge-topnav-links flex min-w-0 flex-1 items-center gap-0.5 overflow-x-auto", children: links([...mainLinks, ...workspaceLinks.filter((n) => n.href !== "/notifications" && n.href !== "/settings")]) }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [_jsx(AdminEntryLink, { variant: "button" }), _jsxs("button", { type: "button", onClick: openCommandPalette, "aria-label": t("common.search"), className: "forge-btn forge-btn-ghost flex items-center gap-2 px-2 py-1.5 text-xs", children: [_jsx(Search, { className: "size-4", "aria-hidden": true }), _jsx("kbd", { className: "rounded border border-line px-1 text-[10px]", children: "\u2318K" })] }), _jsx(NotificationBell, { align: "end" }), _jsx(UserMenu, { user: user, extra: [{ href: "/notifications", label: t("notifications.title"), icon: icon(Bell) }, ...helpLinks, ...(docsLink ? [docsLink] : [])], onSignOut: signOut })] })] }) })), mobileOpen && (_jsxs("div", { className: "fixed inset-0 z-40 lg:hidden", children: [_jsx("div", { className: "forge-overlay absolute inset-0", onClick: () => setMobileOpen(false) }), _jsxs("aside", { className: "forge-sidebar forge-drawer absolute inset-y-0 left-0 w-64", children: [_jsx("button", { type: "button", "aria-label": t("nav.closeMenu"), onClick: () => setMobileOpen(false), className: "forge-btn forge-btn-ghost absolute top-4 right-3 p-1", children: _jsx(X, { className: "size-4" }) }), nav(false)] })] })), _jsxs("div", { className: offset, children: [_jsxs("header", { className: "forge-topbar flex h-14 items-center px-4 lg:hidden", children: [_jsx("button", { type: "button", "aria-label": t("nav.openMenu"), onClick: () => setMobileOpen(true), className: "forge-btn forge-btn-ghost p-1.5", children: _jsx(Menu, { className: "size-5" }) }), _jsx(BrandMark, { className: "ml-3" }), _jsx("span", { className: "ml-2.5 min-w-0 truncate text-sm font-semibold", children: appName }), _jsx(AdminEntryLink, { variant: "icon" })] }), _jsx("main", { id: "forge-main", tabIndex: -1, className: "mx-auto max-w-6xl px-4 py-[var(--forge-main-y)] outline-none sm:px-8", children: _jsx(PageTransition, { children: children }) })] }), _jsx(CommandPalette, { extra: paletteExtras }), process.env.NODE_ENV !== "production" && _jsx(ThemeSwitcher, {})] }));
219
219
  }
220
220
  /** Renders a plugin page registered under `path` (used by the generic /admin/[page] route). */
221
221
  export function PluginPage({ path }) {
222
222
  const { pages, t } = useForge();
223
+ // Administration pages (old apps still route /admin/* through the app shell): same resolver as the admin area.
224
+ if (path === "admin" || path.startsWith("admin/"))
225
+ return _jsx(AdminPage, { path: path });
223
226
  const Page = pages[path];
224
227
  if (!Page)
225
228
  return _jsx(PageHeader, { title: t("common.notFound"), description: t("nav.noPage", { path: `/${path}` }) });
package/dist/shell.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import type { SitePageDetail, SitePageListItem, SitePostAdmin, SectionData } from "../types.js";
2
+ export interface SiteOverview {
3
+ pages: SitePageListItem[];
4
+ conflicts: number;
5
+ messages: {
6
+ new: number;
7
+ };
8
+ subscribers: number;
9
+ storage: boolean;
10
+ payments: boolean;
11
+ blogKinds: Record<string, string>;
12
+ }
13
+ export interface ContactMessage {
14
+ id: string;
15
+ name: string;
16
+ email: string;
17
+ company: string | null;
18
+ message: string;
19
+ page: string | null;
20
+ status: "new" | "read" | "archived";
21
+ createdAt: string;
22
+ }
23
+ export interface Subscriber {
24
+ id: string;
25
+ email: string;
26
+ status: "subscribed" | "unsubscribed";
27
+ source: string | null;
28
+ createdAt: string;
29
+ }
30
+ export interface Paged<T> {
31
+ data: T[];
32
+ total: number;
33
+ }
34
+ export declare const siteKeys: {
35
+ all: readonly ["forge", "site"];
36
+ overview: readonly ["forge", "site", "overview"];
37
+ page: (id: string) => readonly ["forge", "site", "page", string];
38
+ posts: (filters: Record<string, unknown>) => readonly ["forge", "site", "posts", Record<string, unknown>];
39
+ post: (id: string) => readonly ["forge", "site", "post", string];
40
+ messages: (filters: Record<string, unknown>) => readonly ["forge", "site", "messages", Record<string, unknown>];
41
+ subscribers: (page: number) => readonly ["forge", "site", "subscribers", number];
42
+ preview: (key: string) => readonly ["forge", "site", "preview", string];
43
+ };
44
+ /** 403 = signed in but not a site editor; 404 = the API has no website (app.site absent there). */
45
+ export declare const errorStatus: (e: unknown) => number | undefined;
46
+ export declare function errorMessage(e: unknown): string;
47
+ export declare const apiIssues: (e: unknown) => {
48
+ path: string;
49
+ message: string;
50
+ }[];
51
+ export declare function useOverview(): import("@tanstack/react-query").UseQueryResult<SiteOverview, Error>;
52
+ export declare function usePageDetail(id: string | null): import("@tanstack/react-query").UseQueryResult<SitePageDetail, Error>;
53
+ export declare function usePosts(filters: {
54
+ kind?: string;
55
+ status?: string;
56
+ search?: string;
57
+ page?: number;
58
+ }): import("@tanstack/react-query").UseQueryResult<Paged<SitePostAdmin>, Error>;
59
+ export declare function usePost(id: string | null): import("@tanstack/react-query").UseQueryResult<SitePostAdmin, Error>;
60
+ export declare function useMessages(filters: {
61
+ status?: string;
62
+ page?: number;
63
+ }): import("@tanstack/react-query").UseQueryResult<Paged<ContactMessage>, Error>;
64
+ export declare function useSubscribers(page: number): import("@tanstack/react-query").UseQueryResult<Paged<Subscriber>, Error>;
65
+ /** Refetch everything the editor shows (after a change that affects lists and counts). */
66
+ export declare function useInvalidateSite(): (what?: "all" | "overview" | "posts" | "messages" | "subscribers") => Promise<void>;
67
+ /** Preview data of unsaved sections (live numbers, records, posts, plans); null entries failed validation. */
68
+ export declare function usePreviewData(): (sections: {
69
+ type: string;
70
+ variant: string;
71
+ props: Record<string, unknown>;
72
+ }[]) => Promise<(SectionData | null)[]>;
73
+ /** Upload one image to the storage plugin as a website asset; resolves with its public URL ("/api/files/<id>"). */
74
+ export declare function useImageUpload(): (file: File, onProgress?: (percent: number) => void) => Promise<string>;
@@ -0,0 +1,93 @@
1
+ "use client";
2
+ /*
3
+ * Data access of the website editor: TanStack Query hooks over the admin API (/api/site/admin/…), keys under
4
+ * ["forge", "site", …], plus image uploads to the storage plugin.
5
+ */
6
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
7
+ import { useCallback } from "react";
8
+ import { ApiError, useForge } from "../../context.js";
9
+ export const siteKeys = {
10
+ all: ["forge", "site"],
11
+ overview: ["forge", "site", "overview"],
12
+ page: (id) => ["forge", "site", "page", id],
13
+ posts: (filters) => ["forge", "site", "posts", filters],
14
+ post: (id) => ["forge", "site", "post", id],
15
+ messages: (filters) => ["forge", "site", "messages", filters],
16
+ subscribers: (page) => ["forge", "site", "subscribers", page],
17
+ preview: (key) => ["forge", "site", "preview", key],
18
+ };
19
+ /** 403 = signed in but not a site editor; 404 = the API has no website (app.site absent there). */
20
+ export const errorStatus = (e) => (e instanceof ApiError ? e.status : e?.status);
21
+ export function errorMessage(e) {
22
+ const body = e?.body;
23
+ if (typeof body?.message === "string")
24
+ return body.message;
25
+ return e instanceof Error ? e.message : String(e);
26
+ }
27
+ export const apiIssues = (e) => e?.body?.issues ?? [];
28
+ export function useOverview() {
29
+ const { api, app } = useForge();
30
+ return useQuery({ queryKey: siteKeys.overview, queryFn: () => api("/site/admin/overview"), enabled: !!app.site, retry: (n, e) => errorStatus(e) !== 403 && errorStatus(e) !== 404 && n < 1 });
31
+ }
32
+ export function usePageDetail(id) {
33
+ const { api } = useForge();
34
+ return useQuery({ queryKey: siteKeys.page(id ?? ""), queryFn: () => api(`/site/admin/pages/${id}`), enabled: !!id });
35
+ }
36
+ export function usePosts(filters) {
37
+ const { api } = useForge();
38
+ return useQuery({ queryKey: siteKeys.posts(filters), queryFn: () => api("/site/admin/posts", { query: filters }), placeholderData: (prev) => prev });
39
+ }
40
+ export function usePost(id) {
41
+ const { api } = useForge();
42
+ return useQuery({ queryKey: siteKeys.post(id ?? ""), queryFn: () => api(`/site/admin/posts/${id}`), enabled: !!id && id !== "new" });
43
+ }
44
+ export function useMessages(filters) {
45
+ const { api } = useForge();
46
+ return useQuery({ queryKey: siteKeys.messages(filters), queryFn: () => api("/site/admin/messages", { query: filters }), placeholderData: (prev) => prev });
47
+ }
48
+ export function useSubscribers(page) {
49
+ const { api } = useForge();
50
+ return useQuery({ queryKey: siteKeys.subscribers(page), queryFn: () => api("/site/admin/subscribers", { query: { page } }), placeholderData: (prev) => prev });
51
+ }
52
+ /** Refetch everything the editor shows (after a change that affects lists and counts). */
53
+ export function useInvalidateSite() {
54
+ const qc = useQueryClient();
55
+ return useCallback((what = "all") => qc.invalidateQueries({ queryKey: what === "all" ? siteKeys.all : ["forge", "site", what] }), [qc]);
56
+ }
57
+ /** Preview data of unsaved sections (live numbers, records, posts, plans); null entries failed validation. */
58
+ export function usePreviewData() {
59
+ const { api } = useForge();
60
+ return useCallback((sections) => api("/site/admin/preview", { method: "POST", body: JSON.stringify({ sections }) }).then((r) => r.data), [api]);
61
+ }
62
+ /** Upload one image to the storage plugin as a website asset; resolves with its public URL ("/api/files/<id>"). */
63
+ export function useImageUpload() {
64
+ const { app } = useForge();
65
+ return useCallback((file, onProgress) => new Promise((resolve, reject) => {
66
+ const form = new FormData();
67
+ // The storage plugin reads entity and field before the file.
68
+ form.append("entity", "SitePage");
69
+ form.append("field", "image");
70
+ form.append("file", file);
71
+ const xhr = new XMLHttpRequest();
72
+ xhr.open("POST", `${app.api.prefix}/files`);
73
+ xhr.withCredentials = true;
74
+ xhr.upload.onprogress = (e) => e.lengthComputable && onProgress?.(Math.round((e.loaded / e.total) * 100));
75
+ xhr.onload = () => {
76
+ let body = {};
77
+ try {
78
+ body = JSON.parse(xhr.responseText);
79
+ }
80
+ catch {
81
+ /* non-JSON error */
82
+ }
83
+ const url = body.url ?? (body.id ? `${app.api.prefix}/files/${body.id}` : undefined);
84
+ if (xhr.status >= 200 && xhr.status < 300 && url)
85
+ resolve(url);
86
+ else
87
+ reject(new Error(body.message ?? `Upload failed (${xhr.status})`));
88
+ };
89
+ xhr.onerror = () => reject(new Error("network"));
90
+ xhr.send(form);
91
+ }), [app.api.prefix]);
92
+ }
93
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/site/editor/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type ContentTab = "pages" | "posts" | "messages" | "subscribers";
2
+ /** Parse ?tab= (unknown values fall back to "pages"). */
3
+ export declare const contentTab: (value: string | null | undefined) => ContentTab;
4
+ export declare function ContentAdminPage(): import("react").JSX.Element;
@@ -0,0 +1,65 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /*
4
+ * Admin "Content" page (/admin/content): the website's pages (with the visual page editor), posts, contact
5
+ * messages and newsletter subscribers. Tabs and the open page/post live in the URL (?tab=pages&page=<id>).
6
+ */
7
+ import { FileText, Inbox, Mail, Newspaper } from "lucide-react";
8
+ import { usePathname, useRouter, useSearchParams } from "next/navigation";
9
+ import { useCallback } from "react";
10
+ import { useForge } from "../../context.js";
11
+ import { ListSkeleton } from "../../skeleton.js";
12
+ import { Badge, Card, EmptyState, PageHeader } from "../../ui.js";
13
+ import { errorMessage, errorStatus, useOverview } from "./api.js";
14
+ import { MessagesTab, SubscribersTab } from "./inbox-tab.js";
15
+ import { PageEditor } from "./page-editor.js";
16
+ import { PagesTab } from "./pages-tab.js";
17
+ import { PostsTab } from "./posts-tab.js";
18
+ import { TabPanel, Tabs } from "./widgets.js";
19
+ const TABS = ["pages", "posts", "messages", "subscribers"];
20
+ /** Parse ?tab= (unknown values fall back to "pages"). */
21
+ export const contentTab = (value) => (TABS.includes(value) ? value : "pages");
22
+ export function ContentAdminPage() {
23
+ const { app, t } = useForge();
24
+ const router = useRouter();
25
+ const pathname = usePathname();
26
+ const params = useSearchParams();
27
+ const tab = contentTab(params.get("tab"));
28
+ const pageId = params.get("page");
29
+ const postId = params.get("post");
30
+ const overview = useOverview();
31
+ const go = useCallback((next) => {
32
+ const q = new URLSearchParams(params.toString());
33
+ for (const [k, v] of Object.entries(next)) {
34
+ if (v === null)
35
+ q.delete(k);
36
+ else
37
+ q.set(k, v);
38
+ }
39
+ const qs = q.toString();
40
+ router.push(`${pathname}${qs ? `?${qs}` : ""}`, { scroll: false });
41
+ }, [params, pathname, router]);
42
+ const header = _jsx(PageHeader, { title: t("siteAdmin.title"), description: t("siteAdmin.description") });
43
+ if (!app.site) {
44
+ return (_jsxs("div", { children: [header, _jsx(Card, { children: _jsx(EmptyState, { illustration: "dashboard", title: t("siteAdmin.disabled.title"), description: t("siteAdmin.disabled.description") }) })] }));
45
+ }
46
+ const status = errorStatus(overview.error);
47
+ if (status === 403 || status === 401) {
48
+ return (_jsxs("div", { children: [header, _jsx(Card, { children: _jsx(EmptyState, { illustration: "search", title: t("siteAdmin.forbidden.title"), description: t("siteAdmin.forbidden.description", { roles: app.site.editors.join(", ") }) }) })] }));
49
+ }
50
+ if (overview.error) {
51
+ return (_jsxs("div", { children: [header, _jsx(Card, { children: _jsx(EmptyState, { title: status === 404 ? t("siteAdmin.disabled.title") : t("siteAdmin.error.load"), description: status === 404 ? t("siteAdmin.disabled.description") : errorMessage(overview.error) }) })] }));
52
+ }
53
+ const data = overview.data;
54
+ // A page open in the editor takes the whole area.
55
+ if (tab === "pages" && pageId)
56
+ return _jsx(PageEditor, { pageId: pageId, overview: data, onBack: () => go({ page: null }) }, pageId);
57
+ const count = (n) => (n ? _jsx(Badge, { tone: 0, children: n }) : null);
58
+ return (_jsxs("div", { children: [header, _jsx("div", { className: "mb-4", children: _jsx(Tabs, { idPrefix: "site-content", label: t("siteAdmin.title"), value: tab, onChange: (k) => go({ tab: k === "pages" ? null : k, page: null, post: null }), tabs: [
59
+ { key: "pages", label: t("siteAdmin.tab.pages"), icon: _jsx(FileText, { className: "size-4", "aria-hidden": true }), badge: data?.conflicts ? _jsx(Badge, { tone: 2, children: data.conflicts }) : null },
60
+ { key: "posts", label: t("siteAdmin.tab.posts"), icon: _jsx(Newspaper, { className: "size-4", "aria-hidden": true }) },
61
+ { key: "messages", label: t("siteAdmin.tab.messages"), icon: _jsx(Mail, { className: "size-4", "aria-hidden": true }), badge: count(data?.messages.new) },
62
+ { key: "subscribers", label: t("siteAdmin.tab.subscribers"), icon: _jsx(Inbox, { className: "size-4", "aria-hidden": true }) },
63
+ ] }) }), _jsx(TabPanel, { idPrefix: "site-content", tab: tab, children: !data ? (_jsx(Card, { children: _jsx(ListSkeleton, { rows: 5 }) })) : tab === "pages" ? (_jsx(PagesTab, { overview: data, onOpen: (id) => go({ page: id }) })) : tab === "posts" ? (_jsx(PostsTab, { overview: data, postId: postId, onOpen: (id) => go({ post: id }) })) : tab === "messages" ? (_jsx(MessagesTab, {})) : (_jsx(SubscribersTab, { count: data.subscribers })) })] }));
64
+ }
65
+ //# sourceMappingURL=content-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-page.js","sourceRoot":"","sources":["../../../src/site/editor/content-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function MessagesTab(): import("react").JSX.Element;
2
+ export declare function SubscribersTab({ count }: {
3
+ count: number;
4
+ }): import("react").JSX.Element;