create-next-pro-cli 0.1.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.
- package/.vscode/settings.json +3 -0
- package/CODE_OF_CONDUCT.md +33 -0
- package/CONTRIBUTING.md +44 -0
- package/FONCTIONALITY.md +25 -0
- package/README.md +292 -0
- package/bin.ts +2 -0
- package/bun.lock +27 -0
- package/create-next-pro-completion.sh +36 -0
- package/install.sh +18 -0
- package/package.json +32 -0
- package/public/logo.svg +76 -0
- package/src/index.ts +511 -0
- package/src/scaffold-dev.ts +89 -0
- package/src/scaffold.ts +70 -0
- package/templates/Component/Component.tsx +13 -0
- package/templates/Component/component.json +4 -0
- package/templates/Page/default.tsx +0 -0
- package/templates/Page/error.tsx +38 -0
- package/templates/Page/global-error.tsx +0 -0
- package/templates/Page/layout.tsx +0 -0
- package/templates/Page/loading.tsx +17 -0
- package/templates/Page/not-found.tsx +0 -0
- package/templates/Page/page-ui.tsx +22 -0
- package/templates/Page/page.json +4 -0
- package/templates/Page/page.tsx +24 -0
- package/templates/Page/route.ts +0 -0
- package/templates/Page/template.tsx +0 -0
- package/templates/Projects/default/README.md +36 -0
- package/templates/Projects/default/eslint.config.mjs +16 -0
- package/templates/Projects/default/messages/en/_global_ui.json +30 -0
- package/templates/Projects/default/messages/en/_home.json +4 -0
- package/templates/Projects/default/messages/en/dashboard.json +14 -0
- package/templates/Projects/default/messages/en/login.json +7 -0
- package/templates/Projects/default/messages/en/register.json +7 -0
- package/templates/Projects/default/messages/en/settings.json +4 -0
- package/templates/Projects/default/messages/en/user_info.json +4 -0
- package/templates/Projects/default/messages/en.ts +4 -0
- package/templates/Projects/default/messages/fr/_global_ui.json +30 -0
- package/templates/Projects/default/messages/fr/_home.json +4 -0
- package/templates/Projects/default/messages/fr/dashboard.json +14 -0
- package/templates/Projects/default/messages/fr/login.json +7 -0
- package/templates/Projects/default/messages/fr/register.json +7 -0
- package/templates/Projects/default/messages/fr/settings.json +4 -0
- package/templates/Projects/default/messages/fr/user_info.json +4 -0
- package/templates/Projects/default/messages/fr.ts +4 -0
- package/templates/Projects/default/messages/getMergedMessages.ts +31 -0
- package/templates/Projects/default/middleware.ts +11 -0
- package/templates/Projects/default/next.config.ts +12 -0
- package/templates/Projects/default/package.json +32 -0
- package/templates/Projects/default/postcss.config.mjs +5 -0
- package/templates/Projects/default/public/cnp-logo.ico +0 -0
- package/templates/Projects/default/public/cnp-logo.png +0 -0
- package/templates/Projects/default/public/cnp-logo.svg +76 -0
- package/templates/Projects/default/public/file.svg +1 -0
- package/templates/Projects/default/public/globe.svg +1 -0
- package/templates/Projects/default/public/next.svg +1 -0
- package/templates/Projects/default/public/vercel.svg +1 -0
- package/templates/Projects/default/public/window.svg +1 -0
- package/templates/Projects/default/src/app/[locale]/(public)/_home/loading.tsx +1 -0
- package/templates/Projects/default/src/app/[locale]/(public)/_home/page.tsx +16 -0
- package/templates/Projects/default/src/app/[locale]/(public)/layout.tsx +11 -0
- package/templates/Projects/default/src/app/[locale]/(public)/login/page.tsx +19 -0
- package/templates/Projects/default/src/app/[locale]/(public)/register/page.tsx +23 -0
- package/templates/Projects/default/src/app/[locale]/(user)/dashboard/error.tsx +38 -0
- package/templates/Projects/default/src/app/[locale]/(user)/dashboard/loading.tsx +17 -0
- package/templates/Projects/default/src/app/[locale]/(user)/dashboard/page.tsx +12 -0
- package/templates/Projects/default/src/app/[locale]/(user)/layout.tsx +12 -0
- package/templates/Projects/default/src/app/[locale]/(user)/settings/loading.tsx +17 -0
- package/templates/Projects/default/src/app/[locale]/(user)/settings/page.tsx +12 -0
- package/templates/Projects/default/src/app/[locale]/(user)/user_info/loading.tsx +17 -0
- package/templates/Projects/default/src/app/[locale]/(user)/user_info/page.tsx +12 -0
- package/templates/Projects/default/src/app/[locale]/layout.tsx +32 -0
- package/templates/Projects/default/src/app/[locale]/loading.tsx +17 -0
- package/templates/Projects/default/src/app/[locale]/not-found.tsx +22 -0
- package/templates/Projects/default/src/app/[locale]/page.tsx +116 -0
- package/templates/Projects/default/src/app/api/auth/[...nextauth]/route.ts +81 -0
- package/templates/Projects/default/src/app/api/auth/[...nextauth].ts +0 -0
- package/templates/Projects/default/src/app/api/auth/post-login/route.ts +27 -0
- package/templates/Projects/default/src/app/api/me/route.ts +15 -0
- package/templates/Projects/default/src/app/favicon.ico +0 -0
- package/templates/Projects/default/src/app/layout.tsx +11 -0
- package/templates/Projects/default/src/app/not-found.tsx +17 -0
- package/templates/Projects/default/src/app/page.tsx +6 -0
- package/templates/Projects/default/src/app/sitemap.ts +27 -0
- package/templates/Projects/default/src/app/styles/globals.css +26 -0
- package/templates/Projects/default/src/app/ui/dashboard/MainDashboard.tsx +21 -0
- package/templates/Projects/default/src/app/ui/dashboard/StatsCard.tsx +14 -0
- package/templates/Projects/default/src/app/ui/dashboard/WelcomeCard.tsx +10 -0
- package/templates/Projects/default/src/auth.config.ts +0 -0
- package/templates/Projects/default/src/config.ts +4 -0
- package/templates/Projects/default/src/lib/auth/isConnected.ts +16 -0
- package/templates/Projects/default/src/lib/i18n/navigation.ts +19 -0
- package/templates/Projects/default/src/lib/i18n/request.ts +31 -0
- package/templates/Projects/default/src/lib/i18n/routing.ts +20 -0
- package/templates/Projects/default/src/ui/_global/BackButton.tsx +15 -0
- package/templates/Projects/default/src/ui/_global/GlobalHeader.tsx +34 -0
- package/templates/Projects/default/src/ui/_global/GlobalMain.tsx +15 -0
- package/templates/Projects/default/src/ui/_global/LocaleSwitcher.tsx +38 -0
- package/templates/Projects/default/src/ui/_global/PublicNav.tsx +30 -0
- package/templates/Projects/default/src/ui/_global/UserNav.tsx +32 -0
- package/templates/Projects/default/src/ui/dashboard/StatsCard.tsx +14 -0
- package/templates/Projects/default/src/ui/dashboard/WelcomeCard.tsx +10 -0
- package/templates/Projects/default/src/ui/dashboard/page.tsx +22 -0
- package/templates/Projects/default/tailwind.config.ts +1 -0
- package/templates/Projects/default/tsconfig.json +34 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// app/[locale]/template/error.tsx
|
|
2
|
+
"use client"; // Error boundaries must be Client Components
|
|
3
|
+
|
|
4
|
+
import { useEffect } from "react";
|
|
5
|
+
|
|
6
|
+
export default function Error({
|
|
7
|
+
error,
|
|
8
|
+
reset,
|
|
9
|
+
}: {
|
|
10
|
+
error: Error & { digest?: string };
|
|
11
|
+
reset: () => void;
|
|
12
|
+
}) {
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
// Log the error to an error reporting service
|
|
15
|
+
console.error(error);
|
|
16
|
+
}, [error]);
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div>
|
|
20
|
+
<h2>Something went wrong!</h2>
|
|
21
|
+
<button
|
|
22
|
+
onClick={
|
|
23
|
+
// Attempt to recover by trying to re-render the segment
|
|
24
|
+
() => reset()
|
|
25
|
+
}
|
|
26
|
+
>
|
|
27
|
+
Try again
|
|
28
|
+
</button>
|
|
29
|
+
</div>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
// This page is used to handle errors in the application
|
|
33
|
+
// You can customize this page to display a user-friendly error message
|
|
34
|
+
// or redirect to a different page if needed
|
|
35
|
+
// This is part of the Next.js app directory structure and will be automatically used by Next.js
|
|
36
|
+
// when an error occurs in the application
|
|
37
|
+
// Make sure to handle errors gracefully to improve user experience
|
|
38
|
+
// You can also log errors or send them to an error tracking service
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// app/[locale]/template/loading.tsx
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
export default function Loading() {
|
|
5
|
+
return (
|
|
6
|
+
<div className="flex flex-col flex-1 items-center justify-center">
|
|
7
|
+
<p className="text-gray-500">Loading ...</p>
|
|
8
|
+
</div>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
// This component is used to show a loading state while the page is being prepared
|
|
12
|
+
// You can customize it with a spinner, skeletons, or any loading UI you prefer
|
|
13
|
+
// It will be displayed when the page is loading, for example during data fetching or component rendering
|
|
14
|
+
// This is useful for providing feedback to users that something is happening in the background
|
|
15
|
+
// You can also use this to implement a more complex loading state with animations or placeholders
|
|
16
|
+
// Make sure to keep it lightweight to avoid blocking the main thread
|
|
17
|
+
// This component is part of the Next.js app directory structure and will be automatically used by Next.js
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
("");
|
|
2
|
+
import { useTranslations } from "next-intl";
|
|
3
|
+
import BackButton from "@/ui/_global/BackButton";
|
|
4
|
+
import WelcomeCard from "@/ui/dashboard/WelcomeCard";
|
|
5
|
+
import StatsCard from "@/ui/dashboard/StatsCard";
|
|
6
|
+
|
|
7
|
+
export default function Dashboard() {
|
|
8
|
+
const t = useTranslations("dashboard");
|
|
9
|
+
return (
|
|
10
|
+
<>
|
|
11
|
+
<div className="flex items-center justify-between mb-6">
|
|
12
|
+
<h1 className="text-2xl font-bold">{t("title")}</h1>
|
|
13
|
+
<BackButton />
|
|
14
|
+
</div>
|
|
15
|
+
<p className="text-muted mb-8">{t("description")}</p>
|
|
16
|
+
<section className="grid grid-cols-1 md:grid-cols-2 gap-6">
|
|
17
|
+
<WelcomeCard t={t} />
|
|
18
|
+
<StatsCard t={t} />
|
|
19
|
+
</section>
|
|
20
|
+
</>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useTranslations } from "next-intl";
|
|
3
|
+
import BackButton from "@/ui/_global/BackButton";
|
|
4
|
+
|
|
5
|
+
export default function templatePage() {
|
|
6
|
+
const t = useTranslations("template");
|
|
7
|
+
return (
|
|
8
|
+
<main className="py-8 px-4 max-w-3xl mx-auto">
|
|
9
|
+
<div className="flex items-center justify-between mb-6">
|
|
10
|
+
<h1 className="text-2xl font-bold">{t("title")}</h1>
|
|
11
|
+
<BackButton />
|
|
12
|
+
</div>
|
|
13
|
+
<p className="text-muted mb-8">{t("description")}</p>
|
|
14
|
+
<section className="grid grid-cols-1 md:grid-cols-2 gap-6"></section>
|
|
15
|
+
</main>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
// This page is the main entry point for the page
|
|
19
|
+
// It uses the `useTranslations` hook to fetch localized strings
|
|
20
|
+
// The `t` function is used to get the translated strings for the page
|
|
21
|
+
// You can add more components or logic here to build your page
|
|
22
|
+
// This is part of the Next.js app directory structure
|
|
23
|
+
// It will be automatically rendered when the user navigates to the page
|
|
24
|
+
// Make sure to define the translations in your locale files
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// README.mdThis is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-pro`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
|
2
|
+
|
|
3
|
+
## Getting Started
|
|
4
|
+
|
|
5
|
+
First, run the development server:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm run dev
|
|
9
|
+
# or
|
|
10
|
+
yarn dev
|
|
11
|
+
# or
|
|
12
|
+
pnpm dev
|
|
13
|
+
# or
|
|
14
|
+
bun dev
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
18
|
+
|
|
19
|
+
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
|
20
|
+
|
|
21
|
+
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
|
22
|
+
|
|
23
|
+
## Learn More
|
|
24
|
+
|
|
25
|
+
To learn more about Next.js, take a look at the following resources:
|
|
26
|
+
|
|
27
|
+
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
28
|
+
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
29
|
+
|
|
30
|
+
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
|
31
|
+
|
|
32
|
+
## Deploy on Vercel
|
|
33
|
+
|
|
34
|
+
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
35
|
+
|
|
36
|
+
Check out [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { dirname } from "path";
|
|
2
|
+
import { fileURLToPath } from "url";
|
|
3
|
+
import { FlatCompat } from "@eslint/eslintrc";
|
|
4
|
+
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
|
|
8
|
+
const compat = new FlatCompat({
|
|
9
|
+
baseDirectory: __dirname,
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const eslintConfig = [
|
|
13
|
+
...compat.extends("next/core-web-vitals", "next/typescript"),
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
export default eslintConfig;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"public_nav": {
|
|
3
|
+
"links": {
|
|
4
|
+
"home": "Home",
|
|
5
|
+
"login": "Login",
|
|
6
|
+
"register": "Register",
|
|
7
|
+
"about": "About Us",
|
|
8
|
+
"contact": "Contact Us",
|
|
9
|
+
"privacy_policy": "Privacy Policy",
|
|
10
|
+
"terms_of_service": "Terms of Service",
|
|
11
|
+
"help": "Help",
|
|
12
|
+
"faq": "FAQ",
|
|
13
|
+
"blog": "Blog",
|
|
14
|
+
"careers": "Careers",
|
|
15
|
+
"support": "Support",
|
|
16
|
+
"language": "Language",
|
|
17
|
+
"dark_mode": "Dark Mode",
|
|
18
|
+
"light_mode": "Light Mode",
|
|
19
|
+
"search": "Search"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"user_nav": {
|
|
23
|
+
"links": {
|
|
24
|
+
"home": "Home",
|
|
25
|
+
"dashboard": "Dashboard",
|
|
26
|
+
"settings": "Settings",
|
|
27
|
+
"user_info": "User Information"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Dashboard",
|
|
3
|
+
"description": "Overview of your account",
|
|
4
|
+
"widgets": {
|
|
5
|
+
"welcome": "Welcome to your dashboard!",
|
|
6
|
+
"description": "Here you can see an overview of the number of people who have signed up.",
|
|
7
|
+
"stats": {
|
|
8
|
+
"title": "Your Stats",
|
|
9
|
+
"views": "Views",
|
|
10
|
+
"likes": "Likes",
|
|
11
|
+
"comments": "Comments"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"public_nav": {
|
|
3
|
+
"links": {
|
|
4
|
+
"home": "Accueil",
|
|
5
|
+
"login": "Connexion",
|
|
6
|
+
"register": "S'inscrire",
|
|
7
|
+
"about": "À propos de nous",
|
|
8
|
+
"contact": "Nous contacter",
|
|
9
|
+
"privacy_policy": "Politique de confidentialité",
|
|
10
|
+
"terms_of_service": "Conditions d'utilisation",
|
|
11
|
+
"help": "Aide",
|
|
12
|
+
"faq": "FAQ",
|
|
13
|
+
"blog": "Blog",
|
|
14
|
+
"careers": "Carrières",
|
|
15
|
+
"support": "Support",
|
|
16
|
+
"language": "Langue",
|
|
17
|
+
"dark_mode": "Mode sombre",
|
|
18
|
+
"light_mode": "Mode clair",
|
|
19
|
+
"search": "Recherche"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"user_nav": {
|
|
23
|
+
"links": {
|
|
24
|
+
"home": "Accueil",
|
|
25
|
+
"dashboard": "Tableau de bord",
|
|
26
|
+
"settings": "Paramètres",
|
|
27
|
+
"user_info": "Informations sur l'utilisateur"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "Tableau de bord",
|
|
3
|
+
"description": "Aperçu de votre compte",
|
|
4
|
+
"widgets": {
|
|
5
|
+
"welcome": "Bienvenue sur votre tableau de bord !",
|
|
6
|
+
"description": "Ici, vous pouvez voir un aperçu du nombre de personnes qui se sont inscrites.",
|
|
7
|
+
"stats": {
|
|
8
|
+
"title": "Vos statistiques",
|
|
9
|
+
"views": "Vues",
|
|
10
|
+
"likes": "J'aime",
|
|
11
|
+
"comments": "Commentaires"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// lib/i18n/getMergedMessages.ts
|
|
2
|
+
import { readdir, readFile } from "fs/promises";
|
|
3
|
+
import { join, basename } from "path";
|
|
4
|
+
|
|
5
|
+
export default async function getMergedMessages(currentModuleFilename: string) {
|
|
6
|
+
const locale = basename(currentModuleFilename, ".ts");
|
|
7
|
+
const basePath = join(process.cwd(), "messages", locale);
|
|
8
|
+
const merged: Record<string, any> = {};
|
|
9
|
+
|
|
10
|
+
try {
|
|
11
|
+
const files = await readdir(basePath);
|
|
12
|
+
for (const file of files) {
|
|
13
|
+
if (file.endsWith(".json")) {
|
|
14
|
+
try {
|
|
15
|
+
const content = await readFile(join(basePath, file), "utf8");
|
|
16
|
+
const key = basename(file, ".json");
|
|
17
|
+
merged[key] = JSON.parse(content);
|
|
18
|
+
} catch (err) {
|
|
19
|
+
console.error(
|
|
20
|
+
`❌ Failed to read ${file} for locale '${locale}':`,
|
|
21
|
+
err
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
console.error(`❌ Failed to read directory '${basePath}':`, err);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return merged;
|
|
31
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import createMiddleware from "next-intl/middleware";
|
|
2
|
+
import { routing } from "@/lib/i18n/routing";
|
|
3
|
+
|
|
4
|
+
export default createMiddleware(routing);
|
|
5
|
+
|
|
6
|
+
export const config = {
|
|
7
|
+
// Match all pathnames except for
|
|
8
|
+
// - … if they start with `/api`, `/trpc`, `/_next` or `/_vercel`
|
|
9
|
+
// - … the ones containing a dot (e.g. `favicon.ico`)
|
|
10
|
+
matcher: "/((?!api|trpc|_next|_vercel|.*\\..*).*)",
|
|
11
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NextConfig } from "next";
|
|
2
|
+
import createNextIntlPlugin from "next-intl/plugin";
|
|
3
|
+
|
|
4
|
+
const nextConfig: NextConfig = {
|
|
5
|
+
/* devIndicators: {
|
|
6
|
+
buildActivity: true,
|
|
7
|
+
}, */
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const withNextIntl = createNextIntlPlugin("./src/lib/i18n/request.ts");
|
|
11
|
+
|
|
12
|
+
export default withNextIntl(nextConfig);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "my-next-app",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev --turbopack",
|
|
7
|
+
"build": "next build",
|
|
8
|
+
"start": "next start",
|
|
9
|
+
"lint": "next lint"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"cookie": "^1.0.2",
|
|
13
|
+
"jsonwebtoken": "^9.0.2",
|
|
14
|
+
"next": "15.4.5",
|
|
15
|
+
"next-auth": "^4.24.11",
|
|
16
|
+
"next-intl": "^4.3.4",
|
|
17
|
+
"react": "19.1.0",
|
|
18
|
+
"react-dom": "19.1.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@eslint/eslintrc": "^3",
|
|
22
|
+
"@tailwindcss/postcss": "^4",
|
|
23
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
24
|
+
"@types/node": "^20",
|
|
25
|
+
"@types/react": "^19",
|
|
26
|
+
"@types/react-dom": "^19",
|
|
27
|
+
"eslint": "^9",
|
|
28
|
+
"eslint-config-next": "15.4.5",
|
|
29
|
+
"tailwindcss": "^4",
|
|
30
|
+
"typescript": "^5"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="112.24746mm"
|
|
6
|
+
height="112.24745mm"
|
|
7
|
+
viewBox="0 0 112.24746 112.24745"
|
|
8
|
+
version="1.1"
|
|
9
|
+
id="svg1484"
|
|
10
|
+
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
|
11
|
+
sodipodi:docname="cnp-logo.svg"
|
|
12
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
13
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
14
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
15
|
+
xmlns:svg="http://www.w3.org/2000/svg">
|
|
16
|
+
<sodipodi:namedview
|
|
17
|
+
id="namedview1486"
|
|
18
|
+
pagecolor="#ffffff"
|
|
19
|
+
bordercolor="#000000"
|
|
20
|
+
borderopacity="0.25"
|
|
21
|
+
inkscape:showpageshadow="2"
|
|
22
|
+
inkscape:pageopacity="0.0"
|
|
23
|
+
inkscape:pagecheckerboard="0"
|
|
24
|
+
inkscape:deskcolor="#d1d1d1"
|
|
25
|
+
inkscape:document-units="mm"
|
|
26
|
+
showgrid="false"
|
|
27
|
+
inkscape:zoom="0.76078844"
|
|
28
|
+
inkscape:cx="-1.3144259"
|
|
29
|
+
inkscape:cy="251.71255"
|
|
30
|
+
inkscape:window-width="1920"
|
|
31
|
+
inkscape:window-height="1007"
|
|
32
|
+
inkscape:window-x="0"
|
|
33
|
+
inkscape:window-y="0"
|
|
34
|
+
inkscape:window-maximized="1"
|
|
35
|
+
inkscape:current-layer="layer1" />
|
|
36
|
+
<defs
|
|
37
|
+
id="defs1481" />
|
|
38
|
+
<g
|
|
39
|
+
inkscape:label="Calque 1"
|
|
40
|
+
inkscape:groupmode="layer"
|
|
41
|
+
id="layer1"
|
|
42
|
+
transform="translate(-53.773225,-81.94302)">
|
|
43
|
+
<g
|
|
44
|
+
id="g1385"
|
|
45
|
+
transform="matrix(0.26458333,0,0,0.26458333,201.36845,241.5967)">
|
|
46
|
+
<rect
|
|
47
|
+
style="fill:#ffffff;stroke-width:0.895961;-inkscape-stroke:none;paint-order:stroke fill markers;stop-color:#000000"
|
|
48
|
+
id="rect1073"
|
|
49
|
+
width="300"
|
|
50
|
+
height="300"
|
|
51
|
+
x="370.79443"
|
|
52
|
+
y="-112.50255"
|
|
53
|
+
transform="rotate(-135.57968)" />
|
|
54
|
+
<path
|
|
55
|
+
d="m -241.8353,-300.88743 c -5.48362,-4.07465 -6.9802,-9.81191 -3.75252,-15.21916 2.06433,-3.38583 29.76875,-38.02867 42.69319,-53.38544 4.01322,-4.7685 7.29676,-8.931 7.29676,-9.25 0,-0.31901 -25.8382,-0.58001 -57.41821,-0.58001 -31.58002,0 -58.14666,-0.27953 -59.03699,-0.62118 -2.78999,-1.07062 -4.5448,-5.96651 -4.5448,-12.67994 0,-7.31726 1.38538,-12.16578 3.81988,-13.36871 0.92406,-0.45659 27.66212,-1.05517 59.41789,-1.33017 l 57.73777,-0.5 -7.19511,-8.5 -43.49499,-51.42428 c -3.1585,-5.39795 -0.32305,-12.74756 6.03088,-15.63234 8.80205,-3.99626 14.69126,-1.00858 23.00814,7.93888 l 83.67554,81.9993 -90.55578,92.40693 c -6.7551,6.89319 -14.20625,2.03185 -17.68165,0.14612 z"
|
|
56
|
+
style="fill:#000000"
|
|
57
|
+
id="path953-7"
|
|
58
|
+
sodipodi:nodetypes="ccssssssscccscccc" />
|
|
59
|
+
<path
|
|
60
|
+
d="m -288.79372,-297.36779 c -4.25765,-0.76506 -7.12135,-3.46831 -8.18755,-7.72897 -0.3601,-1.43864 -0.3179,-4.81015 0.079,-6.29963 0.6803,-2.55472 2.4806,-5.04059 4.5128,-6.23159 2.15975,-1.26571 5.72415,-1.74707 8.38285,-1.13211 3.5277,0.81595 6.2231,3.55787 7.2258,7.35053 0.4254,1.60884 0.4281,5.09577 0.01,6.68671 -0.9115,3.42883 -3.2396,5.93976 -6.427,6.9318 -1.4874,0.46292 -4.2192,0.66974 -5.5909,0.42326 z m 3.8337,-4.14317 c 1.4069,-0.41781 2.5839,-1.4751 3.2279,-2.89977 0.4382,-0.96936 0.5015,-1.43023 0.5015,-3.65334 0,-2.45698 -0.024,-2.59322 -0.7074,-3.98098 -1.124,-2.28309 -2.9392,-3.28336 -5.5317,-3.04827 -1.573,0.14263 -2.8367,0.82406 -3.7489,2.02149 -1.05265,1.38201 -1.39555,2.844 -1.29315,5.51422 0.073,1.9093 0.1696,2.40913 0.6377,3.30738 0.73805,1.41634 1.60785,2.20002 2.96035,2.66715 1.3874,0.47922 2.5137,0.49977 3.9537,0.0721 z m -136.05385,-6.65448 v -10.58162 h 2.286 2.2859 l 3.9436,5.8728 c 2.1689,3.23004 4.283,6.34867 4.6979,6.93029 l 0.7543,1.05749 v -6.93029 -6.93029 h 2.2222 2.2221 v 10.58162 10.58163 h -2.2801 -2.2802 l -4.1808,-6.08443 c -2.2994,-3.34644 -4.3663,-6.32253 -4.5932,-6.61352 -0.4113,-0.52767 -0.4124,-0.51145 -0.4171,6.08443 v 6.61352 h -2.328 -2.328 z m 22.4329,0 v -10.58162 h 6.7723 6.7722 v 2.01051 2.01051 h -4.5501 -4.5501 v 2.32795 2.32796 h 4.2327 4.2326 v 1.90022 1.90022 l -4.1796,0.0574 -4.1799,0.0574 v 2.29095 2.29094 l 4.5606,-0.0231 c 2.5083,-0.0127 4.6036,0.0194 4.6559,0.0713 0.053,0.0519 0.065,0.95989 0.027,2.01769 l -0.068,1.92328 h -6.863 -6.8631 z m 19.5992,5.26832 c 1.9233,-2.92232 3.4485,-5.43915 3.3896,-5.59296 -0.059,-0.15381 -1.5239,-2.40551 -3.2552,-5.00378 -1.7311,-2.59826 -3.2185,-4.84316 -3.3053,-4.98866 -0.1225,-0.20595 0.4308,-0.26454 2.4989,-0.26454 h 2.6563 l 2.1481,3.29335 2.148,3.29335 2.1391,-3.29249 2.139,-3.29249 2.4867,-8.5e-4 c 1.3676,-4.2e-4 2.4867,0.0491 2.4867,0.11016 0,0.061 -1.4505,2.32288 -3.2232,5.02627 -1.7727,2.70339 -3.2222,5.10572 -3.2211,5.33852 0,0.2328 1.5478,2.73271 3.4369,5.55535 l 3.435,5.13209 h -2.7219 -2.7219 l -2.2034,-3.3799 -2.2033,-3.3799 -2.2012,3.3799 -2.201,3.37989 h -2.6018 -2.6018 z m 23.9971,-3.25781 v -8.57111 h -3.2803 -3.2802 v -2.01051 -2.01051 h 8.677 8.6769 v 2.01051 2.01051 h -3.0688 -3.0685 v 8.57111 8.57112 h -2.328 -2.328 z m 20.3168,-2.03448 V -318.795 l 5.1321,0.095 c 5.9104,0.10938 6.7248,0.29611 8.5851,1.96861 1.5199,1.3665 2.0456,2.67293 2.0476,5.08907 0,1.72046 -0.064,2.04934 -0.6369,3.16845 -0.4285,0.83803 -0.9759,1.50374 -1.6645,2.02413 -1.5734,1.1892 -2.7676,1.50525 -6.1186,1.61948 l -2.9193,0.0995 0.062,3.57374 0.062,3.57375 -2.2752,-2.1e-4 -2.2749,-4.2e-4 z m 9.6753,-0.75271 c 1.0348,-0.49111 1.5394,-1.4045 1.5404,-2.78842 8e-4,-1.3177 -0.4053,-2.13039 -1.3506,-2.70146 -0.539,-0.32561 -1.0835,-0.39836 -2.9871,-0.39904 l -2.3279,-8.4e-4 -0.059,3.12158 -0.059,3.12158 h 2.2488 c 1.6621,0 2.4429,-0.0922 2.9935,-0.35342 z m 9.16,0.75556 v -10.60275 l 5.3438,0.088 c 6.0045,0.0988 6.8325,0.26882 8.575,1.76031 2.4332,2.08271 2.8625,6.44999 0.9003,9.15869 -0.5808,0.80172 -2.0013,2.01077 -2.5951,2.20871 -0.185,0.0616 2.3709,4.59169 4.2392,7.51366 l 0.3045,0.47617 h -2.6225 -2.6225 l -2.0049,-3.69722 -2.0048,-3.69722 -1.4285,-0.006 -1.4285,-0.006 v 3.70357 3.70356 h -2.328 -2.3279 v -10.60274 z m 9.9395,-0.98446 c 1.8999,-0.95844 2.0652,-4.11636 0.2768,-5.28849 -0.4401,-0.28841 -1.1309,-0.3893 -3.0643,-0.44755 l -2.4961,-0.0752 v 3.09096 3.09097 l 2.275,-4.3e-4 c 1.7447,-2.1e-4 2.4461,-0.0866 3.0086,-0.37035 z m -95.2273,-16.00809 c -4.6939,-1.04536 -7.4827,-5.11056 -7.4928,-10.92182 -0.01,-3.48792 0.7494,-5.81708 2.5284,-7.79577 2.9162,-3.24352 7.9231,-4.25831 12.5254,-2.53866 2.2651,0.8464 4.6574,3.8232 5.0511,6.28563 l 0.1398,0.87431 h -2.4508 -2.4511 l -0.4434,-1.00262 c -0.563,-1.27276 -1.1557,-1.91473 -2.2217,-2.40677 -1.0217,-0.4715 -3.3988,-0.53345 -4.3982,-0.11462 -2.8229,1.18296 -4.1612,5.0386 -3.2063,9.23707 0.5698,2.50541 2.0726,4.07677 4.2939,4.48988 2.5024,0.46538 4.6363,-0.44074 5.5449,-2.35455 l 0.511,-1.07615 h 2.3724 2.3724 l -0.3221,1.11107 c -0.678,2.33853 -2.5193,4.61258 -4.4301,5.47118 -2.2462,1.00933 -5.3971,1.30435 -7.9228,0.74182 z m 16.0839,-10.72245 v -10.80552 l 5.8728,0.0652 c 6.5826,0.073 6.909,0.13835 8.6776,1.73615 2.9123,2.63116 2.4256,8.46271 -0.8896,10.65865 -0.551,0.3649 -1.0955,0.69472 -1.21,0.73293 -0.1148,0.0382 0.7324,1.59079 1.8824,3.45018 1.1502,1.8594 2.3079,3.73785 2.5731,4.17434 l 0.4821,0.79362 h -2.7395 -2.7396 l -2.1982,-3.86229 -2.1981,-3.8623 h -1.4276 -1.4276 v 3.8623 3.86229 h -2.328 -2.328 z m 10.0239,-1.12607 c 1.167,-0.48764 1.616,-1.25901 1.616,-2.77687 0,-1.03212 -0.1001,-1.44523 -0.4589,-1.9018 -0.7358,-0.93542 -1.5879,-1.16687 -4.2961,-1.16687 h -2.4406 v 3.06867 3.06867 h 2.4406 c 1.5953,0 2.6824,-0.10106 3.139,-0.2918 z m 10.5045,1.03252 v -10.89908 h 7.0897 7.0897 v 2.00646 2.00646 l -4.7089,0.057 -4.7088,0.057 -0.06,2.38086 -0.06,2.38087 h 4.4512 4.4514 v 2.01051 2.01051 h -4.4443 -4.4444 v 2.32405 2.32406 l 4.9204,0.0568 4.9206,0.0568 0.061,2.06341 0.061,2.06342 h -7.3089 -7.3089 z m 17.1423,10.82775 c 0,-0.0466 1.3203,-3.64474 2.9341,-7.99584 1.6138,-4.3511 3.4011,-9.1791 3.9717,-10.72888 l 1.0374,-2.81778 h 2.8489 c 2.171,0 2.8687,0.0662 2.9315,0.27819 0.08,0.26867 7.4611,20.20771 7.764,20.97199 0.1391,0.35115 -0.029,0.37297 -2.4424,0.31745 l -2.5917,-0.0596 -0.7929,-2.22215 -0.7928,-2.22214 -4.2124,-0.0571 -4.2122,-0.0571 -0.7487,2.27928 -0.7488,2.27929 -2.4728,0.0596 c -1.3602,0.0328 -2.4729,0.0215 -2.4729,-0.0251 z m 12.1875,-12.57372 c -0.7291,-2.18246 -1.3729,-4.11096 -1.4306,-4.28556 -0.058,-0.1746 -0.7061,1.49201 -1.4411,3.70357 -0.7349,2.21156 -1.3799,4.14006 -1.4334,4.28556 -0.075,0.20339 0.5646,0.26454 2.7667,0.26454 h 2.864 z m 14.4782,3.75648 v -8.88857 h -3.2804 -3.2803 v -1.90469 -1.9047 h 8.8887 8.8885 v 1.89918 1.89919 l -3.2274,0.0584 -3.2274,0.0584 -0.055,8.83565 -0.055,8.83566 h -2.3256 -2.3257 z m 14.6027,-2.01051 v -10.89908 h 7.0896 7.0897 l 2e-4,2.06342 2e-4,2.06342 -4.7619,-0.0606 -4.7619,-0.0606 v 2.4415 2.4415 h 4.4443 4.4442 v 2.01051 2.01051 h -4.4442 -4.4443 v 2.32795 2.32796 h 4.9733 4.97335 v 2.11633 2.11632 h -7.30125 -7.3013 z"
|
|
61
|
+
style="fill:#000000;stroke-width:0.211633"
|
|
62
|
+
id="path996-5" />
|
|
63
|
+
<path
|
|
64
|
+
d="m -417.80895,-456.2471 c -2.6521,-2.65213 -3.143,-6.39063 -1.2929,-9.84753 0.6389,-1.19383 6.6372,-8.25175 13.3295,-15.68426 l 12.1679,-13.51366 -10.9444,-12 c -6.0194,-6.6 -11.7911,-13.35 -12.8258,-15 -2.2909,-3.65298 -2.4091,-7.31218 -0.3322,-10.27749 1.3695,-1.95515 2.4442,-2.22251 8.9338,-2.22251 h 7.3771 l 16.2884,17.48448 c 8.9586,9.61647 16.6336,18.41754 17.0554,19.55794 0.4614,1.24714 0.2016,3.34558 -0.6517,5.26552 -1.8905,4.25322 -30.9394,35.8639 -34.3663,37.39696 -1.4814,0.66269 -4.8513,1.22519 -7.4888,1.25 -3.7949,0.0357 -5.3076,-0.46707 -7.25,-2.40945 z m 69.78419,-38.2591 0.26125,-40.78635 h 9.64368 9.64368 l 15.85632,25.70167 c 8.72098,14.13592 16.20765,25.72342 16.63706,25.75 0.42941,0.0266 0.73782,-11.46302 0.68537,-25.53245 l -0.0954,-25.58078 9.06462,-0.34229 9.06463,-0.34229 v 40.95805 40.95806 l -10.12982,-0.28499 -10.12978,-0.28498 -15.12018,-23.18428 c -8.3161,-12.75136 -15.4728,-23.52897 -15.90377,-23.95026 -0.43097,-0.42128 -0.73612,10.01164 -0.67811,23.18428 l 0.10548,23.95026 -9.58314,0.28635 -9.58314,0.28635 z"
|
|
65
|
+
style="fill:#000000"
|
|
66
|
+
id="path1243" />
|
|
67
|
+
<rect
|
|
68
|
+
style="fill:#000000;stroke-width:0.797604;-inkscape-stroke:none;paint-order:stroke fill markers;stop-color:#000000"
|
|
69
|
+
id="rect1326"
|
|
70
|
+
width="159.32465"
|
|
71
|
+
height="11.760501"
|
|
72
|
+
x="-508.67618"
|
|
73
|
+
y="-398.26614" />
|
|
74
|
+
</g>
|
|
75
|
+
</g>
|
|
76
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// app/[locale]/_main/loading.tsx
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useTranslations } from "next-intl";
|
|
3
|
+
// import Test from "@/ui/_home/test/page";
|
|
4
|
+
|
|
5
|
+
export default function HomePage() {
|
|
6
|
+
const t = useTranslations("_home");
|
|
7
|
+
return (
|
|
8
|
+
<main className="py-8 px-4 max-w-3xl mx-auto">
|
|
9
|
+
{/* <Test /> */}
|
|
10
|
+
<div className="flex items-center justify-between mb-6">
|
|
11
|
+
<h1 className="text-2xl font-bold">{t("title")}</h1>
|
|
12
|
+
</div>
|
|
13
|
+
<p className="text-muted mt-2">{t("description")}</p>
|
|
14
|
+
</main>
|
|
15
|
+
);
|
|
16
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useTranslations } from "next-intl";
|
|
3
|
+
import { signIn } from "next-auth/react";
|
|
4
|
+
|
|
5
|
+
export default function LoginPage() {
|
|
6
|
+
const t = useTranslations("login");
|
|
7
|
+
return (
|
|
8
|
+
<main className="py-8 px-4 max-w-3xl mx-auto">
|
|
9
|
+
<h1 className="text-2xl font-bold">{t("title")}</h1>
|
|
10
|
+
<p className="text-muted mt-2">{t("description")}</p>
|
|
11
|
+
<button
|
|
12
|
+
onClick={() => signIn("google")}
|
|
13
|
+
className="mt-6 w-full py-2 px-4 rounded bg-blue-600 text-white font-semibold hover:bg-blue-700 transition"
|
|
14
|
+
>
|
|
15
|
+
{t("login_with_google")}
|
|
16
|
+
</button>
|
|
17
|
+
</main>
|
|
18
|
+
);
|
|
19
|
+
}
|