Updated ui

This commit is contained in:
Théo 2023-02-14 16:22:18 +01:00
parent da139e88e7
commit 19a8f6abc5
28 changed files with 645 additions and 332 deletions

11
app/(auth)/layout.tsx Normal file
View file

@ -0,0 +1,11 @@
import { type ReactNode } from 'react';
export default function Layout({ children }: { children: ReactNode }) {
return (
<div className="flex h-screen w-full">
<div className="flex h-full w-full flex-col items-center justify-center space-y-4">
{children}
</div>
</div>
);
}

View file

@ -1,15 +1,17 @@
import AppLink from '@/ui/AppLink'; import AppLink from '@/ui/AppLink';
import Icon from '@/ui/Icon';
import UserAuthForm from '@/ui/UserAuthForm';
export default function Home() { export default function Page() {
return ( return (
<div className="flex h-screen w-full"> <>
<div className="m-auto flex flex-col"> <div className="flex flex-col justify-start space-y-4">
<h1 className="text-center text-4xl font-bold"> <AppLink href="/">
Amuse toi avec <span className="rounded-md bg-white p-1 text-black ">Next.js</span> et{' '} <Icon name="arrow-left-line" />
<span className="text-blue-500">Tailwindcss</span> ! </AppLink>
</h1> <h2 className="mx-auto text-xl font-bold">Connexion</h2>
<AppLink href="/dashboard">Dashboard</AppLink> <UserAuthForm />
</div>
</div> </div>
</>
); );
} }

View file

@ -1,15 +1,17 @@
import AppLink from '@/ui/AppLink'; import AppLink from '@/ui/AppLink';
import Icon from '@/ui/Icon';
import UserAuthForm from '@/ui/UserAuthForm';
export default function Home() { export default function Page() {
return ( return (
<div className="flex h-screen w-full"> <>
<div className="m-auto flex flex-col"> <div className="flex flex-col justify-start space-y-4">
<h1 className="text-center text-4xl font-bold"> <AppLink href="/">
Amuse toi avec <span className="rounded-md bg-white p-1 text-black ">Next.js</span> et{' '} <Icon name="arrow-left-line" />
<span className="text-blue-500">Tailwindcss</span> ! </AppLink>
</h1> <h2 className="mx-auto text-xl font-bold">Créer un compte</h2>
<AppLink href="/dashboard">Dashboard</AppLink> <UserAuthForm />
</div>
</div> </div>
</>
); );
} }

View file

@ -1,33 +1,64 @@
import Card from '@/ui/Card'; import Card from '@/ui/Card';
import CardTable from '@/ui/CardTable';
export default function Page() { export default function Page() {
return ( return (
<div className="flex h-full w-full flex-col justify-between space-y-4"> <div className="flex h-screen flex-col space-y-4">
<div className="flex flex-col space-y-6"> <section className="flex-col space-y-4">
<div className="flex flex-col space-y-2"> <header>
<h2 className="text-2xl">Bienvenue!</h2> <h3 className="text-xl font-semibold">Tableau de bord</h3>
<p className="text-muted">Ceci est la page d&apos;accueil du dashboard</p> <p className="text-muted">Ceci est la page d&apos;accueil du dashboard</p>
</div> </header>
<section className="flex justify-between space-x-4"> <main className="flex-col justify-between space-x-0 space-y-4 md:flex md:flex-row md:space-x-4 md:space-y-0">
<Card /> <Card title={'Hey salut'} data={'Xavier il aime les pieds'} />
<Card /> <Card title="Nicolas le boss" data="Car il a fait ces cartes" />
<Card /> <Card title="Https" data="Une histoire d'amour avec Xav" />
</main>
</section> </section>
{/* TODO fix ça c'est pas responsive */}
<div className="flex"> {/* <section className="flex-col space-y-4">
<section className="flex max-h-96 w-full space-y-4"> <header>
<div className="flex justify-between space-x-4"> <h3 className="text-xl font-semibold">Statistiques</h3>
<CardTable /> <p className="text-muted">Ceci est la page d&apos;accueil du dashboard</p>
</div> </header>
</section> <main className="flex-col justify-between space-x-0 space-y-4 sm:flex sm:flex-row sm:space-x-4 sm:space-y-0">
<section className="flex max-h-96 w-full space-y-4"> <CardTable
<div className="flex justify-between space-x-4"> puzzles={[
<CardTable /> { name: 'Jour 0 | Save Conway Gadgetski', id: '1', content: '' },
</div> { name: 'Jour 1 | Next', id: '2', content: '' },
</section> { name: 'Jour 2 | Previous', id: '3', content: '' },
</div> { name: 'Jour 3 | Next 1 loop', id: '4', content: '' },
</div> { name: 'Jour 4 | Next no loop + recursion', id: '5', content: '' },
{ name: 'Jour 5 | N first rows', id: '6', content: '' },
{ name: 'Week-end | Game of Life', id: '7', content: '' },
{ name: 'Jour 0 | Save Conway Gadgetski', id: '1', content: '' },
{ name: 'Jour 1 | Next', id: '2', content: '' },
{ name: 'Jour 2 | Previous', id: '3', content: '' },
{ name: 'Jour 3 | Next 1 loop', id: '4', content: '' },
{ name: 'Jour 4 | Next no loop + recursion', id: '5', content: '' },
{ name: 'Jour 5 | N first rows', id: '6', content: '' },
{ name: 'Week-end | Game of Life', id: '7', content: '' },
{ name: 'Jour 0 | Save Conway Gadgetski', id: '1', content: '' },
{ name: 'Jour 1 | Next', id: '2', content: '' },
{ name: 'Jour 2 | Previous', id: '3', content: '' },
{ name: 'Jour 3 | Next 1 loop', id: '4', content: '' },
{ name: 'Jour 4 | Next no loop + recursion', id: '5', content: '' },
{ name: 'Jour 5 | N first rows', id: '6', content: '' },
{ name: 'Week-end | Game of Life', id: '7', content: '' }
]}
/>
<CardTable
puzzles={[
{ name: 'Jour 0 | Save Conway Gadgetski', id: '1', content: '' },
{ name: 'Jour 1 | Next', id: '2', content: '' },
{ name: 'Jour 2 | Previous', id: '3', content: '' },
{ name: 'Jour 3 | Next 1 loop', id: '4', content: '' },
{ name: 'Jour 4 | Next no loop + recursion', id: '5', content: '' },
{ name: 'Jour 5 | N first rows', id: '6', content: '' },
{ name: 'Week-end | Game of Life', id: '7', content: '' }
]}
/>
</main>
</section> */}
</div> </div>
); );
} }

View file

@ -0,0 +1,11 @@
import Image from 'next/image';
import error404 from '@/public/assets/404.png';
export default function NotFound() {
return (
<div className="m-auto flex h-screen flex-col items-center justify-center space-y-6">
<h2 className="text-6xl">Oh non! Un François 404</h2>
<Image src={error404} alt="François 404" width={1000} height={1000} />
</div>
);
}

View file

@ -1,6 +1,6 @@
import Puzzle from '@/ui/Puzzle'; import Puzzle from '@/ui/Puzzle';
export default async function Page({ params }: { params: { id: string } }) { export default async function Page({ params }: { params: { id: number } }) {
const { id } = params; const { id } = params;
return ( return (

View file

@ -4,14 +4,10 @@ export default async function Page() {
// const puzzles = await getPuzzles(); // const puzzles = await getPuzzles();
return ( return (
<div className="flex h-full w-full flex-col justify-between space-y-4">
<div className="flex flex-col space-y-6"> <div className="flex flex-col space-y-6">
<section className="flex flex-col space-y-6">
{/* <SWRFallback fallback={{ ['puzzles']: puzzles }}> */} {/* <SWRFallback fallback={{ ['puzzles']: puzzles }}> */}
<Puzzles /> <Puzzles />
{/* </SWRFallback> */} {/* </SWRFallback> */}
</section>
</div>
</div> </div>
); );
} }

BIN
app/fonts/VG5000.woff2 Normal file

Binary file not shown.

View file

@ -8,7 +8,7 @@ import { type ReactNode } from 'react';
const sans = localFont({ const sans = localFont({
variable: '--font-sans', variable: '--font-sans',
src: './fonts/Karrik-Regular.woff2', src: './fonts/Karrik.woff2',
weight: 'variable' weight: 'variable'
}); });

View file

@ -9,6 +9,6 @@ export function usePuzzles() {
return useSWR('puzzles', () => getPuzzles()); return useSWR('puzzles', () => getPuzzles());
} }
export function usePuzzle(id: string) { export function usePuzzle(id: number) {
return useSWR(`puzzles/${id}`, () => getPuzzle(id)); return useSWR(`puzzles/${id}`, () => getPuzzle(id));
} }

View file

@ -1,7 +1,7 @@
export const getChapters = async (): Promise<Chapter[]> => { export const getChapters = async (): Promise<Chapter[]> => {
const req = await fetch(`http://170.75.166.204/chapters`); const req = await fetch(`http://170.75.166.204/chapters`);
const chapters = await req.json(); let chapters = await req.json();
if (!req.ok) { if (!req.ok) {
throw new Error('Failed to fetch puzzles'); throw new Error('Failed to fetch puzzles');
@ -11,23 +11,31 @@ export const getChapters = async (): Promise<Chapter[]> => {
return []; return [];
} }
chapters = chapters.filter((chapter: Chapter) => chapter.id !== 0);
console.log(chapters);
return chapters as Chapter[]; return chapters as Chapter[];
}; };
export const getPuzzlesByChapter = async (chapitre: string): Promise<Puzzle[]> => { export const getPuzzlesByChapter = async (chapitre: number): Promise<Chapter | null> => {
const req = await fetch(`http://170.75.166.204/chapter/${chapitre}`); const req = await fetch(`http://170.75.166.204/chapter/${chapitre}`);
const { puzzles } = await req.json(); const { puzzles, name, id } = await req.json();
if (!req.ok) { if (!req.ok) {
throw new Error('Failed to fetch puzzles'); throw new Error('Failed to fetch puzzles');
} }
if (!puzzles) { if (!puzzles) {
return []; return null;
} }
return puzzles as Puzzle[]; return {
name,
id,
puzzles
};
}; };
export const getPuzzles = async (): Promise<{ chapters: Chapter[]; puzzles: Puzzle[] }> => { export const getPuzzles = async (): Promise<{ chapters: Chapter[]; puzzles: Puzzle[] }> => {
@ -36,7 +44,7 @@ export const getPuzzles = async (): Promise<{ chapters: Chapter[]; puzzles: Puzz
for (const chapter of chapters) { for (const chapter of chapters) {
const puzzlesByChapter = await getPuzzlesByChapter(chapter.id); const puzzlesByChapter = await getPuzzlesByChapter(chapter.id);
puzzles = [...puzzles, ...puzzlesByChapter]; puzzles = [...puzzles, ...puzzlesByChapter!.puzzles];
} }
return { return {
@ -45,7 +53,7 @@ export const getPuzzles = async (): Promise<{ chapters: Chapter[]; puzzles: Puzz
}; };
}; };
export const getPuzzle = async (id: string): Promise<Puzzle> => { export const getPuzzle = async (id: number): Promise<Puzzle> => {
const req = await fetch(`http://170.75.166.204/puzzle/${id}`); const req = await fetch(`http://170.75.166.204/puzzle/${id}`);
const puzzle = await req.json(); const puzzle = await req.json();
@ -62,13 +70,13 @@ export const getPuzzle = async (id: string): Promise<Puzzle> => {
}; };
export type Puzzle = { export type Puzzle = {
chapter: string;
name: string; name: string;
id: string; id: number;
content: string; content: string;
}; };
export type Chapter = { export type Chapter = {
name: string; name: string;
id: string; id: number;
puzzles: Puzzle[];
}; };

View file

@ -27,6 +27,7 @@
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-hook-form": "^7.43.1", "react-hook-form": "^7.43.1",
"react-markdown": "^8.0.5",
"remixicon": "^2.5.0", "remixicon": "^2.5.0",
"swr": "^2.0.3", "swr": "^2.0.3",
"tailwind-merge": "^1.9.0", "tailwind-merge": "^1.9.0",

472
pnpm-lock.yaml generated
View file

@ -21,6 +21,7 @@ specifiers:
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0 react-dom: 18.2.0
react-hook-form: ^7.43.1 react-hook-form: ^7.43.1
react-markdown: ^8.0.5
remixicon: ^2.5.0 remixicon: ^2.5.0
swr: ^2.0.3 swr: ^2.0.3
tailwind-merge: ^1.9.0 tailwind-merge: ^1.9.0
@ -35,6 +36,7 @@ dependencies:
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0_react@18.2.0 react-dom: 18.2.0_react@18.2.0
react-hook-form: 7.43.1_react@18.2.0 react-hook-form: 7.43.1_react@18.2.0
react-markdown: 8.0.5_3stiutgnnbnfnf3uowm5cip22i
remixicon: 2.5.0 remixicon: 2.5.0
swr: 2.0.3_react@18.2.0 swr: 2.0.3_react@18.2.0
tailwind-merge: 1.9.0 tailwind-merge: 1.9.0
@ -287,6 +289,18 @@ packages:
tailwindcss: 3.2.4_postcss@8.4.21 tailwindcss: 3.2.4_postcss@8.4.21
dev: true dev: true
/@types/debug/4.1.7:
resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
dependencies:
'@types/ms': 0.7.31
dev: false
/@types/hast/2.3.4:
resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==}
dependencies:
'@types/unist': 2.0.6
dev: false
/@types/json-schema/7.0.11: /@types/json-schema/7.0.11:
resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
dev: true dev: true
@ -295,13 +309,22 @@ packages:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true dev: true
/@types/mdast/3.0.10:
resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==}
dependencies:
'@types/unist': 2.0.6
dev: false
/@types/ms/0.7.31:
resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
dev: false
/@types/node/18.11.18: /@types/node/18.11.18:
resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
dev: true dev: true
/@types/prop-types/15.7.5: /@types/prop-types/15.7.5:
resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
dev: true
/@types/react-dom/18.0.10: /@types/react-dom/18.0.10:
resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==}
@ -315,16 +338,18 @@ packages:
'@types/prop-types': 15.7.5 '@types/prop-types': 15.7.5
'@types/scheduler': 0.16.2 '@types/scheduler': 0.16.2
csstype: 3.1.1 csstype: 3.1.1
dev: true
/@types/scheduler/0.16.2: /@types/scheduler/0.16.2:
resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
dev: true
/@types/semver/7.3.13: /@types/semver/7.3.13:
resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
dev: true dev: true
/@types/unist/2.0.6:
resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
dev: false
/@typescript-eslint/eslint-plugin/5.50.0_go4drrxstycfikanvu45pi4vgq: /@typescript-eslint/eslint-plugin/5.50.0_go4drrxstycfikanvu45pi4vgq:
resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==} resolution: {integrity: sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -613,6 +638,10 @@ packages:
deep-equal: 2.2.0 deep-equal: 2.2.0
dev: true dev: true
/bail/2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
dev: false
/balanced-match/1.0.2: /balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true dev: true
@ -675,6 +704,10 @@ packages:
supports-color: 7.2.0 supports-color: 7.2.0
dev: true dev: true
/character-entities/2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
dev: false
/chokidar/3.5.3: /chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'} engines: {node: '>= 8.10.0'}
@ -710,6 +743,10 @@ packages:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: true dev: true
/comma-separated-tokens/2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
dev: false
/concat-map/0.0.1: /concat-map/0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
dev: true dev: true
@ -731,7 +768,6 @@ packages:
/csstype/3.1.1: /csstype/3.1.1:
resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
dev: true
/damerau-levenshtein/1.0.8: /damerau-levenshtein/1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
@ -758,7 +794,12 @@ packages:
optional: true optional: true
dependencies: dependencies:
ms: 2.1.2 ms: 2.1.2
dev: true
/decode-named-character-reference/1.0.2:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
dependencies:
character-entities: 2.0.2
dev: false
/deep-equal/2.2.0: /deep-equal/2.2.0:
resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==}
@ -803,6 +844,11 @@ packages:
resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
dev: true dev: true
/dequal/2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
dev: false
/detective/5.2.1: /detective/5.2.1:
resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
engines: {node: '>=0.8.0'} engines: {node: '>=0.8.0'}
@ -817,6 +863,11 @@ packages:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: true dev: true
/diff/5.1.0:
resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
engines: {node: '>=0.3.1'}
dev: false
/dir-glob/3.0.1: /dir-glob/3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -1269,6 +1320,10 @@ packages:
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: true dev: true
/extend/3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
dev: false
/fast-deep-equal/3.1.3: /fast-deep-equal/3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: true dev: true
@ -1530,6 +1585,10 @@ packages:
function-bind: 1.1.1 function-bind: 1.1.1
dev: true dev: true
/hast-util-whitespace/2.0.1:
resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
dev: false
/ignore/5.2.4: /ignore/5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
@ -1559,6 +1618,10 @@ packages:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true dev: true
/inline-style-parser/0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
dev: false
/internal-slot/1.0.4: /internal-slot/1.0.4:
resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -1605,6 +1668,11 @@ packages:
has-tostringtag: 1.0.0 has-tostringtag: 1.0.0
dev: true dev: true
/is-buffer/2.0.5:
resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
engines: {node: '>=4'}
dev: false
/is-callable/1.2.7: /is-callable/1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -1667,6 +1735,11 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/is-plain-obj/4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
dev: false
/is-regex/1.1.4: /is-regex/1.1.4:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -1779,6 +1852,11 @@ packages:
object.assign: 4.1.4 object.assign: 4.1.4
dev: true dev: true
/kleur/4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
dev: false
/language-subtag-registry/0.3.22: /language-subtag-registry/0.3.22:
resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
dev: true dev: true
@ -1826,11 +1904,233 @@ packages:
yallist: 4.0.0 yallist: 4.0.0
dev: true dev: true
/mdast-util-definitions/5.1.2:
resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
dependencies:
'@types/mdast': 3.0.10
'@types/unist': 2.0.6
unist-util-visit: 4.1.2
dev: false
/mdast-util-from-markdown/1.3.0:
resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==}
dependencies:
'@types/mdast': 3.0.10
'@types/unist': 2.0.6
decode-named-character-reference: 1.0.2
mdast-util-to-string: 3.1.1
micromark: 3.1.0
micromark-util-decode-numeric-character-reference: 1.0.0
micromark-util-decode-string: 1.0.2
micromark-util-normalize-identifier: 1.0.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
unist-util-stringify-position: 3.0.3
uvu: 0.5.6
transitivePeerDependencies:
- supports-color
dev: false
/mdast-util-to-hast/12.3.0:
resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
dependencies:
'@types/hast': 2.3.4
'@types/mdast': 3.0.10
mdast-util-definitions: 5.1.2
micromark-util-sanitize-uri: 1.1.0
trim-lines: 3.0.1
unist-util-generated: 2.0.1
unist-util-position: 4.0.4
unist-util-visit: 4.1.2
dev: false
/mdast-util-to-string/3.1.1:
resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==}
dependencies:
'@types/mdast': 3.0.10
dev: false
/merge2/1.4.1: /merge2/1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
dev: true dev: true
/micromark-core-commonmark/1.0.6:
resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==}
dependencies:
decode-named-character-reference: 1.0.2
micromark-factory-destination: 1.0.0
micromark-factory-label: 1.0.2
micromark-factory-space: 1.0.0
micromark-factory-title: 1.0.2
micromark-factory-whitespace: 1.0.0
micromark-util-character: 1.1.0
micromark-util-chunked: 1.0.0
micromark-util-classify-character: 1.0.0
micromark-util-html-tag-name: 1.1.0
micromark-util-normalize-identifier: 1.0.0
micromark-util-resolve-all: 1.0.0
micromark-util-subtokenize: 1.0.2
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
uvu: 0.5.6
dev: false
/micromark-factory-destination/1.0.0:
resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==}
dependencies:
micromark-util-character: 1.1.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
dev: false
/micromark-factory-label/1.0.2:
resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==}
dependencies:
micromark-util-character: 1.1.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
uvu: 0.5.6
dev: false
/micromark-factory-space/1.0.0:
resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==}
dependencies:
micromark-util-character: 1.1.0
micromark-util-types: 1.0.2
dev: false
/micromark-factory-title/1.0.2:
resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==}
dependencies:
micromark-factory-space: 1.0.0
micromark-util-character: 1.1.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
uvu: 0.5.6
dev: false
/micromark-factory-whitespace/1.0.0:
resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==}
dependencies:
micromark-factory-space: 1.0.0
micromark-util-character: 1.1.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
dev: false
/micromark-util-character/1.1.0:
resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==}
dependencies:
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
dev: false
/micromark-util-chunked/1.0.0:
resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==}
dependencies:
micromark-util-symbol: 1.0.1
dev: false
/micromark-util-classify-character/1.0.0:
resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==}
dependencies:
micromark-util-character: 1.1.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
dev: false
/micromark-util-combine-extensions/1.0.0:
resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==}
dependencies:
micromark-util-chunked: 1.0.0
micromark-util-types: 1.0.2
dev: false
/micromark-util-decode-numeric-character-reference/1.0.0:
resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==}
dependencies:
micromark-util-symbol: 1.0.1
dev: false
/micromark-util-decode-string/1.0.2:
resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==}
dependencies:
decode-named-character-reference: 1.0.2
micromark-util-character: 1.1.0
micromark-util-decode-numeric-character-reference: 1.0.0
micromark-util-symbol: 1.0.1
dev: false
/micromark-util-encode/1.0.1:
resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==}
dev: false
/micromark-util-html-tag-name/1.1.0:
resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==}
dev: false
/micromark-util-normalize-identifier/1.0.0:
resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==}
dependencies:
micromark-util-symbol: 1.0.1
dev: false
/micromark-util-resolve-all/1.0.0:
resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==}
dependencies:
micromark-util-types: 1.0.2
dev: false
/micromark-util-sanitize-uri/1.1.0:
resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==}
dependencies:
micromark-util-character: 1.1.0
micromark-util-encode: 1.0.1
micromark-util-symbol: 1.0.1
dev: false
/micromark-util-subtokenize/1.0.2:
resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==}
dependencies:
micromark-util-chunked: 1.0.0
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
uvu: 0.5.6
dev: false
/micromark-util-symbol/1.0.1:
resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==}
dev: false
/micromark-util-types/1.0.2:
resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==}
dev: false
/micromark/3.1.0:
resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==}
dependencies:
'@types/debug': 4.1.7
debug: 4.3.4
decode-named-character-reference: 1.0.2
micromark-core-commonmark: 1.0.6
micromark-factory-space: 1.0.0
micromark-util-character: 1.1.0
micromark-util-chunked: 1.0.0
micromark-util-combine-extensions: 1.0.0
micromark-util-decode-numeric-character-reference: 1.0.0
micromark-util-encode: 1.0.1
micromark-util-normalize-identifier: 1.0.0
micromark-util-resolve-all: 1.0.0
micromark-util-sanitize-uri: 1.1.0
micromark-util-subtokenize: 1.0.2
micromark-util-symbol: 1.0.1
micromark-util-types: 1.0.2
uvu: 0.5.6
transitivePeerDependencies:
- supports-color
dev: false
/micromatch/4.0.5: /micromatch/4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
@ -1854,9 +2154,13 @@ packages:
resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
dev: true dev: true
/mri/1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
dev: false
/ms/2.1.2: /ms/2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
/ms/2.1.3: /ms/2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@ -1936,7 +2240,6 @@ packages:
/object-assign/4.1.1: /object-assign/4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
dev: true
/object-hash/3.0.0: /object-hash/3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
@ -2244,7 +2547,10 @@ packages:
loose-envify: 1.4.0 loose-envify: 1.4.0
object-assign: 4.1.1 object-assign: 4.1.1
react-is: 16.13.1 react-is: 16.13.1
dev: true
/property-information/6.2.0:
resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
dev: false
/punycode/2.3.0: /punycode/2.3.0:
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
@ -2281,7 +2587,37 @@ packages:
/react-is/16.13.1: /react-is/16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
dev: true
/react-is/18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
dev: false
/react-markdown/8.0.5_3stiutgnnbnfnf3uowm5cip22i:
resolution: {integrity: sha512-jGJolWWmOWAvzf+xMdB9zwStViODyyFQhNB/bwCerbBKmrTmgmA599CGiOlP58OId1IMoIRsA8UdI1Lod4zb5A==}
peerDependencies:
'@types/react': '>=16'
react: '>=16'
dependencies:
'@types/hast': 2.3.4
'@types/prop-types': 15.7.5
'@types/react': 18.0.27
'@types/unist': 2.0.6
comma-separated-tokens: 2.0.3
hast-util-whitespace: 2.0.1
prop-types: 15.8.1
property-information: 6.2.0
react: 18.2.0
react-is: 18.2.0
remark-parse: 10.0.1
remark-rehype: 10.1.0
space-separated-tokens: 2.0.2
style-to-object: 0.4.1
unified: 10.1.2
unist-util-visit: 4.1.2
vfile: 5.3.7
transitivePeerDependencies:
- supports-color
dev: false
/react/18.2.0: /react/18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
@ -2321,6 +2657,25 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/remark-parse/10.0.1:
resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==}
dependencies:
'@types/mdast': 3.0.10
mdast-util-from-markdown: 1.3.0
unified: 10.1.2
transitivePeerDependencies:
- supports-color
dev: false
/remark-rehype/10.1.0:
resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
dependencies:
'@types/hast': 2.3.4
'@types/mdast': 3.0.10
mdast-util-to-hast: 12.3.0
unified: 10.1.2
dev: false
/remixicon/2.5.0: /remixicon/2.5.0:
resolution: {integrity: sha512-q54ra2QutYDZpuSnFjmeagmEiN9IMo56/zz5dDNitzKD23oFRw77cWo4TsrAdmdkPiEn8mxlrTqxnkujDbEGww==} resolution: {integrity: sha512-q54ra2QutYDZpuSnFjmeagmEiN9IMo56/zz5dDNitzKD23oFRw77cWo4TsrAdmdkPiEn8mxlrTqxnkujDbEGww==}
dev: false dev: false
@ -2366,6 +2721,13 @@ packages:
queue-microtask: 1.2.3 queue-microtask: 1.2.3
dev: true dev: true
/sade/1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
dependencies:
mri: 1.2.0
dev: false
/safe-regex-test/1.0.0: /safe-regex-test/1.0.0:
resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
dependencies: dependencies:
@ -2427,6 +2789,10 @@ packages:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
/space-separated-tokens/2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
dev: false
/stop-iteration-iterator/1.0.0: /stop-iteration-iterator/1.0.0:
resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -2480,6 +2846,12 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/style-to-object/0.4.1:
resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==}
dependencies:
inline-style-parser: 0.1.1
dev: false
/styled-jsx/5.1.1_react@18.2.0: /styled-jsx/5.1.1_react@18.2.0:
resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
engines: {node: '>= 12.0.0'} engines: {node: '>= 12.0.0'}
@ -2588,6 +2960,14 @@ packages:
is-number: 7.0.0 is-number: 7.0.0
dev: true dev: true
/trim-lines/3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
dev: false
/trough/2.1.0:
resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
dev: false
/tsconfig-paths/3.14.1: /tsconfig-paths/3.14.1:
resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
dependencies: dependencies:
@ -2649,6 +3029,53 @@ packages:
which-boxed-primitive: 1.0.2 which-boxed-primitive: 1.0.2
dev: true dev: true
/unified/10.1.2:
resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
dependencies:
'@types/unist': 2.0.6
bail: 2.0.2
extend: 3.0.2
is-buffer: 2.0.5
is-plain-obj: 4.1.0
trough: 2.1.0
vfile: 5.3.7
dev: false
/unist-util-generated/2.0.1:
resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
dev: false
/unist-util-is/5.2.0:
resolution: {integrity: sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==}
dev: false
/unist-util-position/4.0.4:
resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
dependencies:
'@types/unist': 2.0.6
dev: false
/unist-util-stringify-position/3.0.3:
resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
dependencies:
'@types/unist': 2.0.6
dev: false
/unist-util-visit-parents/5.1.3:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
dependencies:
'@types/unist': 2.0.6
unist-util-is: 5.2.0
dev: false
/unist-util-visit/4.1.2:
resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
dependencies:
'@types/unist': 2.0.6
unist-util-is: 5.2.0
unist-util-visit-parents: 5.1.3
dev: false
/update-browserslist-db/1.0.10_browserslist@4.21.5: /update-browserslist-db/1.0.10_browserslist@4.21.5:
resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
hasBin: true hasBin: true
@ -2678,6 +3105,33 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: true dev: true
/uvu/0.5.6:
resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
engines: {node: '>=8'}
hasBin: true
dependencies:
dequal: 2.0.3
diff: 5.1.0
kleur: 4.1.5
sade: 1.8.1
dev: false
/vfile-message/3.1.4:
resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
dependencies:
'@types/unist': 2.0.6
unist-util-stringify-position: 3.0.3
dev: false
/vfile/5.3.7:
resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
dependencies:
'@types/unist': 2.0.6
is-buffer: 2.0.5
unist-util-stringify-position: 3.0.3
vfile-message: 3.1.4
dev: false
/which-boxed-primitive/1.0.2: /which-boxed-primitive/1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
dependencies: dependencies:

BIN
public/assets/404.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -1 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="31" fill="none"><g opacity=".9"><path fill="url(#a)" d="M13 .4v29.3H7V6.3h-.2L0 10.5V5L7.2.4H13Z"/><path fill="url(#b)" d="M28.8 30.1c-2.2 0-4-.3-5.7-1-1.7-.8-3-1.8-4-3.1a7.7 7.7 0 0 1-1.4-4.6h6.2c0 .8.3 1.4.7 2 .4.5 1 .9 1.7 1.2.7.3 1.6.4 2.5.4 1 0 1.7-.2 2.5-.5.7-.3 1.3-.8 1.7-1.4.4-.6.6-1.2.6-2s-.2-1.5-.7-2.1c-.4-.6-1-1-1.8-1.4-.8-.4-1.8-.5-2.9-.5h-2.7v-4.6h2.7a6 6 0 0 0 2.5-.5 4 4 0 0 0 1.7-1.3c.4-.6.6-1.3.6-2a3.5 3.5 0 0 0-2-3.3 5.6 5.6 0 0 0-4.5 0 4 4 0 0 0-1.7 1.2c-.4.6-.6 1.2-.6 2h-6c0-1.7.6-3.2 1.5-4.5 1-1.3 2.2-2.3 3.8-3C25 .4 26.8 0 28.8 0s3.8.4 5.3 1.1c1.5.7 2.7 1.7 3.6 3a7.2 7.2 0 0 1 1.2 4.2c0 1.6-.5 3-1.5 4a7 7 0 0 1-4 2.2v.2c2.2.3 3.8 1 5 2.2a6.4 6.4 0 0 1 1.6 4.6c0 1.7-.5 3.1-1.4 4.4a9.7 9.7 0 0 1-4 3.1c-1.7.8-3.7 1.1-5.8 1.1Z"/></g><defs><linearGradient id="a" x1="20" x2="20" y1="0" y2="30.1" gradientUnits="userSpaceOnUse"><stop/><stop offset="1" stop-color="#3D3D3D"/></linearGradient><linearGradient id="b" x1="20" x2="20" y1="0" y2="30.1" gradientUnits="userSpaceOnUse"><stop/><stop offset="1" stop-color="#3D3D3D"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>

Before

Width:  |  Height:  |  Size: 629 B

View file

@ -1,8 +1,8 @@
export default function Card({ title = 'Title', data = 'Data' }) { export default function Card({ title, data }: { title: string; data: string }) {
return ( return (
<div className="flex w-full flex-col rounded-lg border-2 border-highlight-primary bg-primary-700 p-4 shadow-md"> <div className="flex w-full flex-col rounded-lg border-2 border-highlight-primary bg-primary-700 p-4 shadow-md">
<p className="font-bold">{title}</p> <h3 className="text-xl font-semibold">{title}</h3>
<p className="text-lg">{data}</p> <p className="text-muted">{data}</p>
</div> </div>
); );
} }

View file

@ -1,237 +1,42 @@
import { type Puzzle } from '@/lib/puzzles';
import AppLink from './AppLink'; import AppLink from './AppLink';
export default function CardTable() { export default function CardTable({ puzzles }: { puzzles: Puzzle[] }) {
return ( return (
<div className="relative w-full overflow-x-auto border-2 border-highlight-primary bg-primary-700 shadow-md sm:rounded-lg"> <div className="relative h-96 w-full overflow-scroll">
<table className="w-full text-left text-sm text-muted "> <table className="min-w-full table-auto rounded-lg border-2 border-highlight-primary bg-primary-700 text-left text-sm text-muted shadow-md">
<thead className="z-1 sticky top-0 bg-primary-600 text-xs uppercase text-white"> <thead className="z-1 sticky -top-1 bg-primary-600 text-xs uppercase text-white ">
<tr> <tr>
<th scope="col" className="px-6 py-3"> <th className="px-6 py-3">Exercice</th>
Exercice <th className="px-6 py-3">Tentative</th>
</th> <th className="px-6 py-3">Score</th>
<th scope="col" className="px-6 py-3"> <th className="px-6 py-3">Dernier essai</th>
Tentative <th className="px-6 py-3">
</th>
<th scope="col" className="px-6 py-3">
Score
</th>
<th scope="col" className="px-6 py-3">
Dernier essai
</th>
<th scope="col" className="px-6 py-3">
<span className="sr-only">Reprendre</span> <span className="sr-only">Reprendre</span>
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody className="overflow-y-scroll">
<tr className="bg-primary-700 hover:bg-primary-800 "> {puzzles.length &&
puzzles.map((puzzle) => (
<tr key={puzzle.id} className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white"> <th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1 {puzzle.name}
</th> </th>
<td className="px-6 py-4">30</td> <td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td> <td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td> <td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right"> <td className="px-6 py-4 text-right">
<AppLink <AppLink
href="dashboard/puzzles/1" href={`dashboard/puzzles/${puzzle.id}`}
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline"
>
Reprendre
</AppLink>
</td>
</tr>
<tr className="bg-primary-700 hover:bg-primary-800 ">
<th scope="row" className="whitespace-nowrap px-6 py-4 font-medium text-white">
Exercice 1
</th>
<td className="px-6 py-4">30</td>
<td className="px-6 py-4">300</td>
<td className="px-6 py-4">10/10/2010</td>
<td className="px-6 py-4 text-right">
<AppLink
href="dashboard/puzzles/1"
className="font-medium text-brand hover:underline" className="font-medium text-brand hover:underline"
> >
Reprendre Reprendre
</AppLink> </AppLink>
</td> </td>
</tr> </tr>
))}
</tbody> </tbody>
</table> </table>
</div> </div>

View file

@ -14,7 +14,7 @@ const Input = forwardRef<
<Label label={label} description={description} required={props.required} className={className}> <Label label={label} description={description} required={props.required} className={className}>
<input <input
ref={ref} ref={ref}
className="w-full rounded-md border-0 bg-highlight-primary px-5 py-2.5 text-sm font-medium ring-offset-0 focus:ring-brand disabled:opacity-50" className="w-full rounded-md border border-primary-600 bg-highlight-primary px-5 py-2.5 text-sm font-medium outline-none focus:border-brand focus:bg-primary-800 disabled:opacity-50"
{...props} {...props}
/> />
</Label> </Label>

View file

@ -17,9 +17,9 @@ export default function Label({
<label className={cn('flex flex-col gap-1 text-left', className)}> <label className={cn('flex flex-col gap-1 text-left', className)}>
<span className="text-sm"> <span className="text-sm">
{label} {label}
{required && <span className="ml-1 text-orange-600">*</span>} {required && <span className="ml-1 text-error">*</span>}
</span> </span>
{description && <span className="text-xs text-gray-500">{description}</span>} {description && <span className="text-xs text-muted">{description}</span>}
{children} {children}
</label> </label>
); );

View file

@ -2,11 +2,12 @@
import { usePuzzle } from '@/lib/hooks/use-puzzles'; import { usePuzzle } from '@/lib/hooks/use-puzzles';
import { notFound } from 'next/navigation'; import { notFound } from 'next/navigation';
import Button from './Button'; import Button from './Button';
import Input from './Input'; import Input from './Input';
import ToHTML from './ToHTML'; import ToHTML from './ToHTML';
export default function Puzzle({ id }: { id: string }) { export default function Puzzle({ id }: { id: number }) {
const { data: puzzle, isLoading } = usePuzzle(id); const { data: puzzle, isLoading } = usePuzzle(id);
if (isLoading) { if (isLoading) {
@ -21,10 +22,10 @@ export default function Puzzle({ id }: { id: string }) {
<div className="flex h-full w-full flex-col justify-between space-y-4"> <div className="flex h-full w-full flex-col justify-between space-y-4">
<div className="flex flex-col space-y-2"> <div className="flex flex-col space-y-2">
<h2 className="text-4xl font-bold">{puzzle.name}</h2> <h2 className="text-4xl font-bold">{puzzle.name}</h2>
<p className="text-sm text-muted">Chapitre {puzzle.chapter}</p> <p className="text-sm text-muted">Chapitre</p>
</div> </div>
<div className="flex h-screen overflow-y-auto"> <div className="flex h-screen overflow-y-auto">
<ToHTML className="font-code" html={puzzle.content} /> <ToHTML className="font-code" data={puzzle.content} />
</div> </div>
<form className="flex w-full flex-col justify-between sm:flex-row"> <form className="flex w-full flex-col justify-between sm:flex-row">
<div className="flex flex-col space-x-0 sm:flex-row sm:space-x-6"> <div className="flex flex-col space-x-0 sm:flex-row sm:space-x-6">

View file

@ -23,10 +23,7 @@ export default function Puzzles() {
{data?.puzzles.map((puzzle) => ( {data?.puzzles.map((puzzle) => (
<AppLink key={puzzle.id} href={`/dashboard/puzzles/${puzzle.id}`}> <AppLink key={puzzle.id} href={`/dashboard/puzzles/${puzzle.id}`}>
<li className="group flex justify-between rounded-md bg-primary-700 p-4 font-code hover:bg-primary-600"> <li className="group flex justify-between rounded-md bg-primary-700 p-4 font-code hover:bg-primary-600">
<div className="flex space-x-4">
<span className="">{puzzle.id}</span>
<span className="font-semibold">{puzzle.name}</span> <span className="font-semibold">{puzzle.name}</span>
</div>
<Icon <Icon
className="-translate-x-2 transform-gpu duration-300 group-hover:translate-x-0" className="-translate-x-2 transform-gpu duration-300 group-hover:translate-x-0"
name="arrow-right-line" name="arrow-right-line"

View file

@ -1,12 +1,12 @@
'use client';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
import Mardown from 'react-markdown';
interface ToHTMLProps { export default function ToHTML({ data, className }: { data: string; className?: string }) {
html: string;
className?: string;
}
export default function ToHTML({ html, className }: ToHTMLProps) {
return ( return (
<div className={cn('select-none', className)} dangerouslySetInnerHTML={{ __html: html }} /> <div className={cn('select-none', className)}>
<Mardown>{data}</Mardown>
</div>
); );
} }

View file

@ -55,10 +55,7 @@ function AuthForm() {
} }
return ( return (
<form <form className="flex flex-col justify-center space-y-4" onSubmit={handleSubmit(onSubmit)}>
className="bg-dark flex flex-col space-y-4 rounded-md p-6"
onSubmit={handleSubmit(onSubmit)}
>
{!isSignIn && ( {!isSignIn && (
<Input <Input
label="Adresse e-mail" label="Adresse e-mail"
@ -97,7 +94,7 @@ function AuthForm() {
{...register('password', { required: true })} {...register('password', { required: true })}
/> />
<Button type="submit" kind="brand"> <Button type="submit" kind="brand">
Se connecter {isSignIn ? 'Se connecter' : "S'inscrire"}
</Button> </Button>
{/* {!isSignIn && ( {/* {!isSignIn && (
<p className="items-center text-sm text-gray-400"> <p className="items-center text-sm text-gray-400">
@ -108,9 +105,9 @@ function AuthForm() {
. .
</p> </p>
)} */} )} */}
<p className="flex flex-col items-center text-sm text-gray-400"> <p className="flex flex-col items-center text-sm text-muted">
{isSignIn ? "Vous n'avez pas de compte?" : 'Vous possédez un compte?'}{' '} {isSignIn ? "Vous n'avez pas de compte?" : 'Vous possédez un compte?'}{' '}
<AppLink className="text-white underline" href={isSignIn ? '/sign-up' : '/sign-in'}> <AppLink className="text-brand underline" href={isSignIn ? '/sign-up' : '/sign-in'}>
{isSignIn ? "S'inscrire maintenant" : 'Se connecter'} {isSignIn ? "S'inscrire maintenant" : 'Se connecter'}
</AppLink> </AppLink>
</p> </p>

View file

@ -44,9 +44,9 @@ export default function Sidenav({ isOpen, toggle }: { isOpen: boolean; toggle: (
<NavItem <NavItem
item={{ item={{
name: 'Tutoriels', name: 'Tutoriels',
slug: '/dashboard/tutorials', slug: 'tutorials',
icon: 'question-line', icon: 'question-line',
disabled: false disabled: true
}} }}
isOpen={isOpen} isOpen={isOpen}
onClick={toggle} onClick={toggle}
@ -74,7 +74,7 @@ function NavItem({
<AppLink <AppLink
href={item.disabled ? '/dashboard' : `/dashboard/${item.slug}`} href={item.disabled ? '/dashboard' : `/dashboard/${item.slug}`}
className={cn('flex justify-center rounded-md px-3 py-3 text-sm md:justify-start', { className={cn('flex justify-center rounded-md px-3 py-3 text-sm md:justify-start', {
'text-muted hover:text-white': !isActive, 'text-muted hover:text-secondary': !isActive,
'bg-highlight-primary text-secondary': isActive, 'bg-highlight-primary text-secondary': isActive,
'text-gray-600 hover:text-gray-600': item.disabled, 'text-gray-600 hover:text-gray-600': item.disabled,
'justify-center md:justify-start': isOpen, 'justify-center md:justify-start': isOpen,