diff --git a/package-lock.json b/package-lock.json
index 8f55da3..3231a52 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,11 +11,13 @@
"@tanstack/react-query": "^5.90.11",
"@tanstack/react-table": "^8.21.3",
"clsx": "^2.1.1",
+ "jose": "^6.1.2",
"next": "16.1.2",
"next-intl": "^4.7.0",
"react": "19.2.3",
"react-dom": "19.2.3",
- "sonner": "^2.0.7"
+ "sonner": "^2.0.7",
+ "zod": "^4.1.13"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.18",
@@ -1803,6 +1805,15 @@
"jiti": "lib/jiti-cli.mjs"
}
},
+ "node_modules/jose": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz",
+ "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/lightningcss": {
"version": "1.30.2",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz",
@@ -2550,6 +2561,15 @@
"peerDependencies": {
"react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0"
}
+ },
+ "node_modules/zod": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
+ "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
}
}
}
diff --git a/package.json b/package.json
index 56ed15a..25991da 100644
--- a/package.json
+++ b/package.json
@@ -11,11 +11,13 @@
"@tanstack/react-query": "^5.90.11",
"@tanstack/react-table": "^8.21.3",
"clsx": "^2.1.1",
+ "jose": "^6.1.2",
"next": "16.1.2",
"next-intl": "^4.7.0",
"react": "19.2.3",
"react-dom": "19.2.3",
- "sonner": "^2.0.7"
+ "sonner": "^2.0.7",
+ "zod": "^4.1.13"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.18",
diff --git a/src/app/[locale]/layout.tsx b/src/app/[locale]/layout.tsx
index 2ef3196..731123d 100644
--- a/src/app/[locale]/layout.tsx
+++ b/src/app/[locale]/layout.tsx
@@ -6,10 +6,11 @@ import { getQueryClient } from '@/app/providers/getQueryClient';
import { HydrationBoundary, dehydrate } from '@tanstack/react-query';
import { prefetchLayoutQueries } from '@/app/lib/prefetch-queries';
import { routing } from '@/i18n/routing';
-import AdminNavLinks from '@/app/ui/navigation/admin-nav-links'
-import AdminHeaderPanel from '@/app/ui/admin-header-panel';
+import AdminLayoutWrapper from '@/app/components/admin-layout-wrapper';
+// @ts-expect-error - CSS modules types not defined
import "../styles/globals.css";
+// @ts-expect-error - CSS modules types not defined
import "../styles/global-styles.scss"
export const metadata: Metadata = {
@@ -17,7 +18,7 @@ export const metadata: Metadata = {
description: "Admin panel no copy",
};
-export function generateStaticParams() {
+export async function generateStaticParams() {
return routing.locales.map((locale: any) => ({ locale }));
}
@@ -29,6 +30,7 @@ export default async function RootLayout({
params: Promise<{ locale: string }>;
}>) {
const { locale } = await params;
+
if (!hasLocale(routing.locales, locale)) {
notFound();
}
@@ -38,21 +40,13 @@ export default async function RootLayout({
return (
-