42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import "./styles/tokens.css";
|
|
import "./globals.css";
|
|
import "./ops-redesign.css";
|
|
import "./admin/config.css";
|
|
import "./account.css";
|
|
import "./workspace.css";
|
|
import "./portal/issue-flow.css";
|
|
import type { ReactNode } from "react";
|
|
import BrandingFavicon from "./ui/BrandingFavicon";
|
|
import FeatureGate from "./ui/FeatureGate";
|
|
import ApplicationChrome from "./ui/ApplicationChrome";
|
|
import SetupGate from "./ui/SetupGate";
|
|
import AdminViewGate from "./ui/AdminViewGate";
|
|
|
|
export const metadata = {
|
|
title: "Magent",
|
|
description: "Request timeline and AI triage for media requests",
|
|
icons: { icon: "/api/branding/favicon.ico" },
|
|
};
|
|
|
|
// A request-specific CSP nonce is generated in proxy.ts. Dynamic rendering lets
|
|
// Next.js apply that nonce to its framework and hydration scripts.
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export default function RootLayout({ children }: { children: ReactNode }) {
|
|
return (
|
|
<html lang="en" data-theme="dark">
|
|
<body>
|
|
<BrandingFavicon />
|
|
<div className="page">
|
|
<SetupGate>
|
|
<ApplicationChrome />
|
|
<AdminViewGate>
|
|
<FeatureGate>{children}</FeatureGate>
|
|
</AdminViewGate>
|
|
</SetupGate>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|