import { redirect } from "next/navigation"; import { getThemeBuilderData } from "@/actions/theme-builder"; import { canAccess, getAdminContext, PERMS } from "@/lib/permissions"; import { getFullScopeValues } from "@/lib/theme-resolver"; import { ScopeForm } from "./scope-form"; import { ScopeTree } from "./scope-tree"; import { ThemeEditor } from "./theme-editor"; export const metadata = { title: "Theme Builder" }; export default async function ThemeBuilderPage({ searchParams, }: { searchParams: Promise>; }) { const ctx = await getAdminContext(); if (!ctx || !canAccess(ctx.permissions, PERMS.SETTINGS_VIEW)) { redirect("/admin"); } const sp = await searchParams; const { scopes, tree, moduleIds } = await getThemeBuilderData(); const selectedId = sp.scope ? Number(sp.scope) : (scopes[0]?.id ?? null); const values = selectedId ? await getFullScopeValues(selectedId) : { light: {}, dark: {}, blocks: {}, layout: {}, effects: {}, media: {}, custom: {}, }; return (

Theme Builder

Create and manage scoped themes for different parts of your site. Themes inherit from parent scopes — only override what you need.

{sp.created ? (
Scope created.
) : null} {sp.updated ? (
Scope updated.
) : null} {sp.deleted ? (
Scope deleted.
) : null} {sp.saved ? (
Theme values saved.
) : null} {sp.duplicated ? (
Scope duplicated.
) : null}
{selectedId ? ( ) : (
Select or create a scope to start editing.
)}
); }