Merge pull request 'feat/dashboard-page' (#3) from feat/dashboard-page into main
Reviewed-on: #3
This commit is contained in:
commit
1ba47dc414
18 changed files with 249 additions and 586 deletions
|
@ -1,4 +1,5 @@
|
|||
import Leaderboard from '@/ui/Leaderboard';
|
||||
import { cookies } from 'next/headers';
|
||||
|
||||
export const metadata = {
|
||||
title: 'Tableau des scores',
|
||||
|
@ -6,5 +7,6 @@ export const metadata = {
|
|||
};
|
||||
|
||||
export default async function Page() {
|
||||
return <Leaderboard />;
|
||||
const token = cookies().get('token')?.value;
|
||||
return <Leaderboard token={token!} />;
|
||||
}
|
||||
|
|
|
@ -1,104 +1,99 @@
|
|||
'use client';
|
||||
|
||||
import { useContext } from 'react';
|
||||
|
||||
import { UserContext } from '@/context/user';
|
||||
import Card from '@/ui/Card';
|
||||
import { useContext } from 'react';
|
||||
|
||||
export default function Page() {
|
||||
const { data: me, isLoading } = useContext(UserContext);
|
||||
return (
|
||||
<div className="flex h-full w-full flex-col space-y-4">
|
||||
<div className="w-full">
|
||||
<section className="flex flex-col space-y-4">
|
||||
<header>
|
||||
<h3 className="text-xl font-semibold">Tableau de bord</h3>
|
||||
<p className="text-muted">Ceci est la page d'accueil du dashboard</p>
|
||||
</header>
|
||||
<main className="flex-col justify-between space-x-0 space-y-4 md:flex md:flex-row md:space-x-6 md:space-y-0">
|
||||
<Card
|
||||
isLoading={isLoading}
|
||||
icon="pie-chart-line"
|
||||
title="Puzzles résolus"
|
||||
data={me?.completions || 0}
|
||||
/>
|
||||
<Card
|
||||
isLoading={isLoading}
|
||||
icon="award-line"
|
||||
title="Badges obtenus"
|
||||
data={me?.badges?.length || 'Aucun'}
|
||||
/>
|
||||
<Card
|
||||
isLoading={isLoading}
|
||||
icon="bar-chart-line"
|
||||
title="Rang actuel"
|
||||
data={me?.rank || 'Non classé'}
|
||||
/>
|
||||
</main>
|
||||
</section>
|
||||
</div>
|
||||
<div className="h-full w-full flex-col justify-between space-x-0 space-y-4 md:flex md:flex-row md:space-x-6 md:space-y-0">
|
||||
<section className="flex h-full w-full flex-col space-y-4">
|
||||
<header>
|
||||
<h3 className="text-xl font-semibold">Guides</h3>
|
||||
</header>
|
||||
<main className="h-full w-full flex-col justify-between space-x-0 space-y-4 rounded-lg border border-highlight-primary bg-primary-700 md:flex md:flex-row md:space-x-6 md:space-y-0">
|
||||
Work in progress
|
||||
</main>
|
||||
</section>
|
||||
<section className="flex h-full w-full flex-col space-y-4">
|
||||
<header>
|
||||
<h3 className="text-xl font-semibold">Historiques</h3>
|
||||
</header>
|
||||
<main className="h-full w-full flex-col justify-between space-x-0 space-y-4 rounded-lg border border-highlight-primary bg-primary-700 md:flex md:flex-row md:space-x-6 md:space-y-0">
|
||||
Work in progress
|
||||
</main>
|
||||
</section>
|
||||
</div>
|
||||
{/* TODO fix ça c'est pas responsive */}
|
||||
{/* <section className="flex-col space-y-4">
|
||||
<header>
|
||||
<h3 className="text-xl font-semibold">Statistiques</h3>
|
||||
<p className="text-muted">Ceci est la page d'accueil du dashboard</p>
|
||||
</header>
|
||||
<main className="flex-col justify-between space-x-0 space-y-4 sm:flex sm:flex-row sm:space-x-6 sm:space-y-0">
|
||||
<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: '' },
|
||||
{ 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: '' }
|
||||
]}
|
||||
<section className="w-full flex-col space-y-4">
|
||||
<header>
|
||||
<h1 className="text-xl font-semibold">Tableau de bord</h1>
|
||||
<p className="text-highlight-secondary">Ceci est la page d'accueil du dashboard</p>
|
||||
</header>
|
||||
<main className="flex-col space-y-4">
|
||||
<div className="w-full flex-col justify-between space-x-0 space-y-4 md:flex md:flex-row md:space-x-6 md:space-y-0">
|
||||
<Card
|
||||
isLoading={isLoading}
|
||||
icon="pie-chart-line"
|
||||
title="Puzzles résolus"
|
||||
data={me?.completions ?? 0}
|
||||
link="/dashboard/puzzles"
|
||||
/>
|
||||
<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: '' }
|
||||
]}
|
||||
<Card
|
||||
isLoading={isLoading}
|
||||
icon="award-line"
|
||||
title="Badges obtenus"
|
||||
data={me?.badges?.length ?? 'Aucun'}
|
||||
link="/dashboard/badges"
|
||||
/>
|
||||
</main>
|
||||
</section> */}
|
||||
</div>
|
||||
<Card
|
||||
isLoading={isLoading}
|
||||
icon="bar-chart-line"
|
||||
title="Rang actuel"
|
||||
data={me?.rank ?? 'Non classé'}
|
||||
link="/dashboard/leaderboard"
|
||||
/>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 gap-4">
|
||||
<div className="flex flex-col space-y-4">
|
||||
<header>
|
||||
<h2 className="text-lg font-semibold">Derniers puzzles</h2>
|
||||
<p className="text-highlight-secondary">
|
||||
Voici les derniers puzzles que vous avez résolus ou essayer de résoudres
|
||||
</p>
|
||||
</header>
|
||||
<div className="h-full max-h-96 overflow-y-scroll rounded-lg border-2 border-highlight-primary bg-primary-700 p-4 shadow-md">
|
||||
<ul className="flex flex-col space-y-2">
|
||||
{me?.completionsList && me.completionsList.length > 0 ? (
|
||||
me?.completionsList
|
||||
.sort(
|
||||
(a, b) =>
|
||||
a.score - b.score ||
|
||||
a.tries - b.tries ||
|
||||
a.puzzleName.localeCompare(b.puzzleName)
|
||||
)
|
||||
.map((completion, key) => {
|
||||
return (
|
||||
<li key={key} className="flex justify-between space-x-2">
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="flex items-center space-x-2">
|
||||
<span className="text-lg">{completion.puzzleName}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center space-x-4">
|
||||
<div className="flex flex-col">
|
||||
<span className="text-sm font-semibold">
|
||||
Essai{completion.tries > 1 ? 's' : ''}
|
||||
</span>
|
||||
<span className="text-right text-lg text-highlight-secondary">
|
||||
{completion.tries}
|
||||
</span>
|
||||
</div>
|
||||
<div className="flex flex-col">
|
||||
<span className="text-sm font-semibold">Score</span>
|
||||
<span className="text-right text-lg text-highlight-secondary">
|
||||
{completion.score}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
<li className="m-auto flex items-center justify-center">
|
||||
<span className="text-lg text-highlight-secondary">
|
||||
{isLoading ? 'Chargement en cours...' : 'Aucun puzzles'}
|
||||
</span>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ export default function Page() {
|
|||
|
||||
useEffect(() => {
|
||||
router.push('/');
|
||||
}, []);
|
||||
}, [router]);
|
||||
|
||||
return <></>;
|
||||
}
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
import axios from 'axios';
|
||||
|
||||
const fetcher = axios.create({
|
||||
baseURL: process.env.NEXT_PUBLIC_API_URL,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Accept: 'application/json'
|
||||
},
|
||||
insecureHTTPParser: true
|
||||
});
|
||||
|
||||
export default fetcher;
|
|
@ -20,33 +20,33 @@ export type NavItem = {
|
|||
* @type {NavItem[]}
|
||||
*/
|
||||
export const navItems: NavItem[] = [
|
||||
// {
|
||||
// name: 'Dashboard',
|
||||
// slug: '',
|
||||
// icon: 'dashboard-line',
|
||||
// disabled: false
|
||||
// },
|
||||
{
|
||||
name: 'Dashboard',
|
||||
slug: 'dashboard',
|
||||
icon: 'dashboard-line',
|
||||
disabled: false
|
||||
},
|
||||
{
|
||||
name: 'Classement',
|
||||
slug: 'leaderboard',
|
||||
slug: 'dashboard/leaderboard',
|
||||
icon: 'line-chart-line',
|
||||
disabled: false
|
||||
},
|
||||
{
|
||||
name: 'Puzzles',
|
||||
slug: 'puzzles',
|
||||
slug: 'dashboard/puzzles',
|
||||
icon: 'code-s-slash-line',
|
||||
disabled: false
|
||||
},
|
||||
{
|
||||
name: 'Badges',
|
||||
slug: 'badges',
|
||||
slug: 'dashboard/badges',
|
||||
icon: 'award-fill',
|
||||
disabled: false
|
||||
},
|
||||
{
|
||||
name: 'Paramètres',
|
||||
slug: 'settings',
|
||||
slug: 'dashboard/settings',
|
||||
icon: 'equalizer-line',
|
||||
disabled: false
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ export type Player = {
|
|||
tries: number;
|
||||
completions: number;
|
||||
rank: number;
|
||||
completionsList: Completion[];
|
||||
badges: Badge[] | null;
|
||||
};
|
||||
|
||||
|
@ -46,3 +47,9 @@ export type Badge = {
|
|||
level: number;
|
||||
logo?: string;
|
||||
};
|
||||
|
||||
export type Completion = {
|
||||
puzzleName: string;
|
||||
tries: number;
|
||||
score: number;
|
||||
};
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { NextResponse, type NextRequest } from 'next/server';
|
||||
|
||||
import { getURL } from './lib/utils';
|
||||
|
||||
/**
|
||||
|
@ -26,7 +27,7 @@ export async function middleware(req: NextRequest) {
|
|||
return res;
|
||||
}
|
||||
|
||||
if (isAuth && req.nextUrl.pathname === '/logout') {
|
||||
if (isAuth && req.nextUrl.pathname.includes('logout')) {
|
||||
res.cookies.set('token', '', {
|
||||
path: '/',
|
||||
expires: new Date(0)
|
||||
|
@ -34,21 +35,15 @@ export async function middleware(req: NextRequest) {
|
|||
}
|
||||
|
||||
if (isAuth && req.nextUrl.pathname.includes('sign')) {
|
||||
return NextResponse.redirect(getURL('/dashboard/puzzles'));
|
||||
return NextResponse.redirect(getURL('/dashboard'));
|
||||
}
|
||||
|
||||
// TODO REMOVE
|
||||
if (isAuth && req.nextUrl.pathname.match(/^\/dashboard\/?$/)) {
|
||||
return NextResponse.redirect(getURL('/dashboard/puzzles'));
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: [
|
||||
// On exclut les routes de l'API, les fichiers statiques, les images, les assets, le favicon et le service worker.
|
||||
'/((?!api|_next/static|_next/image|assets|favicon|sw.js).*)'
|
||||
'/((?!api|_next/static|_next/image|favicon.ico|assets|sw.js).*)'
|
||||
]
|
||||
};
|
||||
|
||||
|
|
10
package.json
10
package.json
|
@ -22,18 +22,16 @@
|
|||
"dependencies": {
|
||||
"@radix-ui/react-dialog": "^1.0.3",
|
||||
"@radix-ui/react-popover": "^1.0.5",
|
||||
"axios": "^1.3.4",
|
||||
"boring-avatars": "^1.7.0",
|
||||
"clsx": "^1.2.1",
|
||||
"edge-csrf": "^1.0.3",
|
||||
"framer-motion": "^10.12.4",
|
||||
"js-cookie": "^3.0.1",
|
||||
"next": "13.2.3",
|
||||
"next": "13.3.1",
|
||||
"react": "18.2.0",
|
||||
"react-confetti": "^6.1.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-hook-form": "^7.43.1",
|
||||
"react-markdown": "^8.0.5",
|
||||
"react-use": "^17.4.0",
|
||||
"remark-breaks": "^3.0.2",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"remixicon": "^2.5.0",
|
||||
|
@ -51,12 +49,12 @@
|
|||
"@typescript-eslint/parser": "^5.50.0",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"eslint": "8.33.0",
|
||||
"eslint-config-next": "13.2.3",
|
||||
"eslint-config-next": "13.3.1",
|
||||
"eslint-config-prettier": "^8.6.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"postcss": "^8.4.21",
|
||||
"prettier": "^2.8.3",
|
||||
"prettier-plugin-tailwindcss": "^0.2.2",
|
||||
"prettier-plugin-tailwindcss": "^0.2.7",
|
||||
"tailwindcss": "^3.2.4",
|
||||
"typescript": "4.9.5"
|
||||
}
|
||||
|
|
437
pnpm-lock.yaml
generated
437
pnpm-lock.yaml
generated
|
@ -7,15 +7,15 @@ dependencies:
|
|||
'@radix-ui/react-popover':
|
||||
specifier: ^1.0.5
|
||||
version: 1.0.5(@types/react@18.0.27)(react-dom@18.2.0)(react@18.2.0)
|
||||
axios:
|
||||
specifier: ^1.3.4
|
||||
version: 1.3.5
|
||||
boring-avatars:
|
||||
specifier: ^1.7.0
|
||||
version: 1.7.0
|
||||
clsx:
|
||||
specifier: ^1.2.1
|
||||
version: 1.2.1
|
||||
edge-csrf:
|
||||
specifier: ^1.0.3
|
||||
version: 1.0.3(next@13.3.1)
|
||||
framer-motion:
|
||||
specifier: ^10.12.4
|
||||
version: 10.12.4(react-dom@18.2.0)(react@18.2.0)
|
||||
|
@ -23,14 +23,11 @@ dependencies:
|
|||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
next:
|
||||
specifier: 13.2.3
|
||||
version: 13.2.3(react-dom@18.2.0)(react@18.2.0)
|
||||
specifier: 13.3.1
|
||||
version: 13.3.1(react-dom@18.2.0)(react@18.2.0)
|
||||
react:
|
||||
specifier: 18.2.0
|
||||
version: 18.2.0
|
||||
react-confetti:
|
||||
specifier: ^6.1.0
|
||||
version: 6.1.0(react@18.2.0)
|
||||
react-dom:
|
||||
specifier: 18.2.0
|
||||
version: 18.2.0(react@18.2.0)
|
||||
|
@ -40,9 +37,6 @@ dependencies:
|
|||
react-markdown:
|
||||
specifier: ^8.0.5
|
||||
version: 8.0.6(@types/react@18.0.27)(react@18.2.0)
|
||||
react-use:
|
||||
specifier: ^17.4.0
|
||||
version: 17.4.0(react-dom@18.2.0)(react@18.2.0)
|
||||
remark-breaks:
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
|
@ -91,8 +85,8 @@ devDependencies:
|
|||
specifier: 8.33.0
|
||||
version: 8.33.0
|
||||
eslint-config-next:
|
||||
specifier: 13.2.3
|
||||
version: 13.2.3(eslint@8.33.0)(typescript@4.9.5)
|
||||
specifier: 13.3.1
|
||||
version: 13.3.1(eslint@8.33.0)(typescript@4.9.5)
|
||||
eslint-config-prettier:
|
||||
specifier: ^8.6.0
|
||||
version: 8.8.0(eslint@8.33.0)
|
||||
|
@ -106,7 +100,7 @@ devDependencies:
|
|||
specifier: ^2.8.3
|
||||
version: 2.8.7
|
||||
prettier-plugin-tailwindcss:
|
||||
specifier: ^0.2.2
|
||||
specifier: ^0.2.7
|
||||
version: 0.2.7(prettier@2.8.7)
|
||||
tailwindcss:
|
||||
specifier: ^3.2.4
|
||||
|
@ -212,36 +206,18 @@ packages:
|
|||
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
|
||||
dev: true
|
||||
|
||||
/@next/env@13.2.3:
|
||||
resolution: {integrity: sha512-FN50r/E+b8wuqyRjmGaqvqNDuWBWYWQiigfZ50KnSFH0f+AMQQyaZl+Zm2+CIpKk0fL9QxhLxOpTVA3xFHgFow==}
|
||||
/@next/env@13.3.1:
|
||||
resolution: {integrity: sha512-EDtCoedIZC7JlUQ3uaQpSc4aVmyhbLHmQVALg7pFfQgOTjgSnn7mKtA0DiCMkYvvsx6aFb5octGMtWrOtGXW9A==}
|
||||
dev: false
|
||||
|
||||
/@next/eslint-plugin-next@13.2.3:
|
||||
resolution: {integrity: sha512-QmMPItnU7VeojI1KnuwL9SLFWEwmaNHNlnOGpoTwdLoSiP9sc8KYiAHWEc4/44L+cAdCxcZYvn7frcRNP5l84Q==}
|
||||
/@next/eslint-plugin-next@13.3.1:
|
||||
resolution: {integrity: sha512-Hpd74UrYGF+bq9bBSRDXRsRfaWkPpcwjhvachy3sr/R/5fY6feC0T0s047pUthyqcaeNsqKOY1nUGQQJNm4WyA==}
|
||||
dependencies:
|
||||
glob: 7.1.7
|
||||
dev: true
|
||||
|
||||
/@next/swc-android-arm-eabi@13.2.3:
|
||||
resolution: {integrity: sha512-mykdVaAXX/gm+eFO2kPeVjnOCKwanJ9mV2U0lsUGLrEdMUifPUjiXKc6qFAIs08PvmTMOLMNnUxqhGsJlWGKSw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-android-arm64@13.2.3:
|
||||
resolution: {integrity: sha512-8XwHPpA12gdIFtope+n9xCtJZM3U4gH4vVTpUwJ2w1kfxFmCpwQ4xmeGSkR67uOg80yRMuF0h9V1ueo05sws5w==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-arm64@13.2.3:
|
||||
resolution: {integrity: sha512-TXOubiFdLpMfMtaRu1K5d1I9ipKbW5iS2BNbu8zJhoqrhk3Kp7aRKTxqFfWrbliAHhWVE/3fQZUYZOWSXVQi1w==}
|
||||
/@next/swc-darwin-arm64@13.3.1:
|
||||
resolution: {integrity: sha512-UXPtriEc/pBP8luSLSCZBcbzPeVv+SSjs9cH/KygTbhmACye8/OOXRZO13Z2Wq1G0gLmEAIHQAOuF+vafPd2lw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
@ -249,8 +225,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-darwin-x64@13.2.3:
|
||||
resolution: {integrity: sha512-GZctkN6bJbpjlFiS5pylgB2pifHvgkqLAPumJzxnxkf7kqNm6rOGuNjsROvOWVWXmKhrzQkREO/WPS2aWsr/yw==}
|
||||
/@next/swc-darwin-x64@13.3.1:
|
||||
resolution: {integrity: sha512-lT36yYxosCfLtplFzJWgo0hrPu6/do8+msgM7oQkPeohDNdhjtjFUgOOwdSnPublLR6Mo2Ym4P/wl5OANuD2bw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
@ -258,26 +234,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-freebsd-x64@13.2.3:
|
||||
resolution: {integrity: sha512-rK6GpmMt/mU6MPuav0/M7hJ/3t8HbKPCELw/Uqhi4732xoq2hJ2zbo2FkYs56y6w0KiXrIp4IOwNB9K8L/q62g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm-gnueabihf@13.2.3:
|
||||
resolution: {integrity: sha512-yeiCp/Odt1UJ4KUE89XkeaaboIDiVFqKP4esvoLKGJ0fcqJXMofj4ad3tuQxAMs3F+qqrz9MclqhAHkex1aPZA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-gnu@13.2.3:
|
||||
resolution: {integrity: sha512-/miIopDOUsuNlvjBjTipvoyjjaxgkOuvlz+cIbbPcm1eFvzX2ltSfgMgty15GuOiR8Hub4FeTSiq3g2dmCkzGA==}
|
||||
/@next/swc-linux-arm64-gnu@13.3.1:
|
||||
resolution: {integrity: sha512-wRb76nLWJhonH8s3kxC/1tFguEkeOPayIwe9mkaz1G/yeS3OrjeyKMJsb4+Kdg0zbTo53bNCOl59NNtDM7yyyw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
@ -285,8 +243,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-arm64-musl@13.2.3:
|
||||
resolution: {integrity: sha512-sujxFDhMMDjqhruup8LLGV/y+nCPi6nm5DlFoThMJFvaaKr/imhkXuk8uCTq4YJDbtRxnjydFv2y8laBSJVC2g==}
|
||||
/@next/swc-linux-arm64-musl@13.3.1:
|
||||
resolution: {integrity: sha512-qz3BzjJRZ16Iq/jrp+pjiYOc0jTjHlfmxQmZk9x/+5uhRP6/eWQSTAPVJ33BMo6oK5O5N4644OgTAbzXzorecg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
@ -294,8 +252,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-gnu@13.2.3:
|
||||
resolution: {integrity: sha512-w5MyxPknVvC9LVnMenAYMXMx4KxPwXuJRMQFvY71uXg68n7cvcas85U5zkdrbmuZ+JvsO5SIG8k36/6X3nUhmQ==}
|
||||
/@next/swc-linux-x64-gnu@13.3.1:
|
||||
resolution: {integrity: sha512-6mgkLmwlyWlomQmpl21I3hxgqE5INoW4owTlcLpNsd1V4wP+J46BlI/5zV5KWWbzjfncIqzXoeGs5Eg+1GHODA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
@ -303,8 +261,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-linux-x64-musl@13.2.3:
|
||||
resolution: {integrity: sha512-CTeelh8OzSOVqpzMFMFnVRJIFAFQoTsI9RmVJWW/92S4xfECGcOzgsX37CZ8K982WHRzKU7exeh7vYdG/Eh4CA==}
|
||||
/@next/swc-linux-x64-musl@13.3.1:
|
||||
resolution: {integrity: sha512-uqm5sielhQmKJM+qayIhgZv1KlS5pqTdQ99b+Z7hMWryXS96qE0DftTmMZowBcUL6x7s2vSXyH5wPtO1ON7LBg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
@ -312,8 +270,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-arm64-msvc@13.2.3:
|
||||
resolution: {integrity: sha512-7N1KBQP5mo4xf52cFCHgMjzbc9jizIlkTepe9tMa2WFvEIlKDfdt38QYcr9mbtny17yuaIw02FXOVEytGzqdOQ==}
|
||||
/@next/swc-win32-arm64-msvc@13.3.1:
|
||||
resolution: {integrity: sha512-WomIiTj/v3LevltlibNQKmvrOymNRYL+a0dp5R73IwPWN5FvXWwSELN/kiNALig/+T3luc4qHNTyvMCp9L6U5Q==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
@ -321,8 +279,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-ia32-msvc@13.2.3:
|
||||
resolution: {integrity: sha512-LzWD5pTSipUXTEMRjtxES/NBYktuZdo7xExJqGDMnZU8WOI+v9mQzsmQgZS/q02eIv78JOCSemqVVKZBGCgUvA==}
|
||||
/@next/swc-win32-ia32-msvc@13.3.1:
|
||||
resolution: {integrity: sha512-M+PoH+0+q658wRUbs285RIaSTYnGBSTdweH/0CdzDgA6Q4rBM0sQs4DHmO3BPP0ltCO/vViIoyG7ks66XmCA5g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
@ -330,8 +288,8 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@next/swc-win32-x64-msvc@13.2.3:
|
||||
resolution: {integrity: sha512-aLG2MaFs4y7IwaMTosz2r4mVbqRyCnMoFqOcmfTi7/mAS+G4IMH0vJp4oLdbshqiVoiVuKrAfqtXj55/m7Qu1Q==}
|
||||
/@next/swc-win32-x64-msvc@13.3.1:
|
||||
resolution: {integrity: sha512-Sl1F4Vp5Z1rNXWZYqJwMuWRRol4bqOB6+/d7KqkgQ4AcafKPN1PZmpkCoxv4UFHtFNIB7EotnuIhtXu3zScicQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
@ -650,8 +608,8 @@ packages:
|
|||
resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
|
||||
dev: true
|
||||
|
||||
/@swc/helpers@0.4.14:
|
||||
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
|
||||
/@swc/helpers@0.5.0:
|
||||
resolution: {integrity: sha512-SjY/p4MmECVVEWspzSRpQEM3sjR17sP8PbGxELWrT+YZMBfiUyt1MRUNjMV23zohwlG2HYtCQOsCwsTHguXkyg==}
|
||||
dependencies:
|
||||
tslib: 2.5.0
|
||||
dev: false
|
||||
|
@ -677,10 +635,6 @@ packages:
|
|||
'@types/unist': 2.0.6
|
||||
dev: false
|
||||
|
||||
/@types/js-cookie@2.2.7:
|
||||
resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==}
|
||||
dev: false
|
||||
|
||||
/@types/js-cookie@3.0.3:
|
||||
resolution: {integrity: sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww==}
|
||||
dev: true
|
||||
|
@ -864,10 +818,6 @@ packages:
|
|||
eslint-visitor-keys: 3.4.0
|
||||
dev: true
|
||||
|
||||
/@xobotyi/scrollbar-width@1.9.5:
|
||||
resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==}
|
||||
dev: false
|
||||
|
||||
/acorn-jsx@5.3.2(acorn@8.8.2):
|
||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
||||
peerDependencies:
|
||||
|
@ -993,10 +943,6 @@ packages:
|
|||
resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
|
||||
dev: true
|
||||
|
||||
/asynckit@0.4.0:
|
||||
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
||||
dev: false
|
||||
|
||||
/autoprefixer@10.4.14(postcss@8.4.21):
|
||||
resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
|
@ -1023,16 +969,6 @@ packages:
|
|||
engines: {node: '>=4'}
|
||||
dev: true
|
||||
|
||||
/axios@1.3.5:
|
||||
resolution: {integrity: sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==}
|
||||
dependencies:
|
||||
follow-redirects: 1.15.2
|
||||
form-data: 4.0.0
|
||||
proxy-from-env: 1.1.0
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
dev: false
|
||||
|
||||
/axobject-query@3.1.1:
|
||||
resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
|
||||
dependencies:
|
||||
|
@ -1081,6 +1017,13 @@ packages:
|
|||
update-browserslist-db: 1.0.10(browserslist@4.21.5)
|
||||
dev: true
|
||||
|
||||
/busboy@1.6.0:
|
||||
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
|
||||
engines: {node: '>=10.16.0'}
|
||||
dependencies:
|
||||
streamsearch: 1.1.0
|
||||
dev: false
|
||||
|
||||
/call-bind@1.0.2:
|
||||
resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
|
||||
dependencies:
|
||||
|
@ -1152,13 +1095,6 @@ packages:
|
|||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||
dev: true
|
||||
|
||||
/combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
engines: {node: '>= 0.8'}
|
||||
dependencies:
|
||||
delayed-stream: 1.0.0
|
||||
dev: false
|
||||
|
||||
/comma-separated-tokens@2.0.3:
|
||||
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
|
||||
dev: false
|
||||
|
@ -1172,12 +1108,6 @@ packages:
|
|||
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
|
||||
dev: true
|
||||
|
||||
/copy-to-clipboard@3.3.3:
|
||||
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
|
||||
dependencies:
|
||||
toggle-selection: 1.0.6
|
||||
dev: false
|
||||
|
||||
/cross-spawn@7.0.3:
|
||||
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
||||
engines: {node: '>= 8'}
|
||||
|
@ -1187,20 +1117,6 @@ packages:
|
|||
which: 2.0.2
|
||||
dev: true
|
||||
|
||||
/css-in-js-utils@3.1.0:
|
||||
resolution: {integrity: sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==}
|
||||
dependencies:
|
||||
hyphenate-style-name: 1.0.4
|
||||
dev: false
|
||||
|
||||
/css-tree@1.1.3:
|
||||
resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
dependencies:
|
||||
mdn-data: 2.0.14
|
||||
source-map: 0.6.1
|
||||
dev: false
|
||||
|
||||
/cssesc@3.0.0:
|
||||
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
||||
engines: {node: '>=4'}
|
||||
|
@ -1281,11 +1197,6 @@ packages:
|
|||
object-keys: 1.1.1
|
||||
dev: true
|
||||
|
||||
/delayed-stream@1.0.0:
|
||||
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
dev: false
|
||||
|
||||
/dequal@2.0.3:
|
||||
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
|
||||
engines: {node: '>=6'}
|
||||
|
@ -1329,6 +1240,14 @@ packages:
|
|||
esutils: 2.0.3
|
||||
dev: true
|
||||
|
||||
/edge-csrf@1.0.3(next@13.3.1):
|
||||
resolution: {integrity: sha512-miYuAv+tLaKw+niVD8Os5zQcMOB4Sdc748DKz3w6VIkou+WU2GHCUeL3fn9NyNeHAfNsUrOTB9Y/zlBVmnSTEQ==}
|
||||
peerDependencies:
|
||||
next: ^13.0.0
|
||||
dependencies:
|
||||
next: 13.3.1(react-dom@18.2.0)(react@18.2.0)
|
||||
dev: false
|
||||
|
||||
/electron-to-chromium@1.4.356:
|
||||
resolution: {integrity: sha512-nEftV1dRX3omlxAj42FwqRZT0i4xd2dIg39sog/CnCJeCcL1TRd2Uh0i9Oebgv8Ou0vzTPw++xc+Z20jzS2B6A==}
|
||||
dev: true
|
||||
|
@ -1345,12 +1264,6 @@ packages:
|
|||
tapable: 2.2.1
|
||||
dev: true
|
||||
|
||||
/error-stack-parser@2.1.4:
|
||||
resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
|
||||
dependencies:
|
||||
stackframe: 1.3.4
|
||||
dev: false
|
||||
|
||||
/es-abstract@1.21.2:
|
||||
resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
@ -1444,8 +1357,8 @@ packages:
|
|||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/eslint-config-next@13.2.3(eslint@8.33.0)(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-kPulHiQEHGei9hIaaNGygHRc0UzlWM+3euOmYbxNkd2Nbhci5rrCDeMBMPSV8xgUssphDGmwDHWbk4VZz3rlZQ==}
|
||||
/eslint-config-next@13.3.1(eslint@8.33.0)(typescript@4.9.5):
|
||||
resolution: {integrity: sha512-DieA5djybeE3Q0IqnDXihmhgRSp44x1ywWBBpVRA9pSx+m5Icj8hFclx7ffXlAvb9MMLN6cgj/hqJ4lka/QmvA==}
|
||||
peerDependencies:
|
||||
eslint: ^7.23.0 || ^8.0.0
|
||||
typescript: '>=3.3.1'
|
||||
|
@ -1453,7 +1366,7 @@ packages:
|
|||
typescript:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@next/eslint-plugin-next': 13.2.3
|
||||
'@next/eslint-plugin-next': 13.3.1
|
||||
'@rushstack/eslint-patch': 1.2.0
|
||||
'@typescript-eslint/parser': 5.57.1(eslint@8.33.0)(typescript@4.9.5)
|
||||
eslint: 8.33.0
|
||||
|
@ -1778,6 +1691,7 @@ packages:
|
|||
|
||||
/fast-deep-equal@3.1.3:
|
||||
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
||||
dev: true
|
||||
|
||||
/fast-diff@1.2.0:
|
||||
resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==}
|
||||
|
@ -1802,18 +1716,6 @@ packages:
|
|||
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
|
||||
dev: true
|
||||
|
||||
/fast-loops@1.1.3:
|
||||
resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==}
|
||||
dev: false
|
||||
|
||||
/fast-shallow-equal@1.0.0:
|
||||
resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==}
|
||||
dev: false
|
||||
|
||||
/fastest-stable-stringify@2.0.2:
|
||||
resolution: {integrity: sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==}
|
||||
dev: false
|
||||
|
||||
/fastq@1.15.0:
|
||||
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
|
||||
dependencies:
|
||||
|
@ -1854,31 +1756,12 @@ packages:
|
|||
resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
|
||||
dev: true
|
||||
|
||||
/follow-redirects@1.15.2:
|
||||
resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
|
||||
engines: {node: '>=4.0'}
|
||||
peerDependencies:
|
||||
debug: '*'
|
||||
peerDependenciesMeta:
|
||||
debug:
|
||||
optional: true
|
||||
dev: false
|
||||
|
||||
/for-each@0.3.3:
|
||||
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
|
||||
dependencies:
|
||||
is-callable: 1.2.7
|
||||
dev: true
|
||||
|
||||
/form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
|
||||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
asynckit: 0.4.0
|
||||
combined-stream: 1.0.8
|
||||
mime-types: 2.1.35
|
||||
dev: false
|
||||
|
||||
/fraction.js@4.2.0:
|
||||
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
|
||||
dev: true
|
||||
|
@ -2105,10 +1988,6 @@ packages:
|
|||
resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
|
||||
dev: false
|
||||
|
||||
/hyphenate-style-name@1.0.4:
|
||||
resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==}
|
||||
dev: false
|
||||
|
||||
/ignore@5.2.4:
|
||||
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
||||
engines: {node: '>= 4'}
|
||||
|
@ -2142,13 +2021,6 @@ packages:
|
|||
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
|
||||
dev: false
|
||||
|
||||
/inline-style-prefixer@6.0.4:
|
||||
resolution: {integrity: sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==}
|
||||
dependencies:
|
||||
css-in-js-utils: 3.1.0
|
||||
fast-loops: 1.1.3
|
||||
dev: false
|
||||
|
||||
/internal-slot@1.0.5:
|
||||
resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
@ -2353,10 +2225,6 @@ packages:
|
|||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/js-cookie@2.2.1:
|
||||
resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==}
|
||||
dev: false
|
||||
|
||||
/js-cookie@3.0.1:
|
||||
resolution: {integrity: sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -2594,10 +2462,6 @@ packages:
|
|||
'@types/mdast': 3.0.11
|
||||
dev: false
|
||||
|
||||
/mdn-data@2.0.14:
|
||||
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
|
||||
dev: false
|
||||
|
||||
/merge2@1.4.1:
|
||||
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
||||
engines: {node: '>= 8'}
|
||||
|
@ -2860,18 +2724,6 @@ packages:
|
|||
picomatch: 2.3.1
|
||||
dev: true
|
||||
|
||||
/mime-db@1.52.0:
|
||||
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: false
|
||||
|
||||
/mime-types@2.1.35:
|
||||
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dependencies:
|
||||
mime-db: 1.52.0
|
||||
dev: false
|
||||
|
||||
/mini-svg-data-uri@1.4.4:
|
||||
resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
|
||||
hasBin: true
|
||||
|
@ -2907,24 +2759,6 @@ packages:
|
|||
thenify-all: 1.6.0
|
||||
dev: true
|
||||
|
||||
/nano-css@5.3.5(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-vSB9X12bbNu4ALBu7nigJgRViZ6ja3OU7CeuiV1zMIbXOdmkLahgtPmh3GBOlDxbKY0CitqlPdOReGlBLSp+yg==}
|
||||
peerDependencies:
|
||||
react: '*'
|
||||
react-dom: '*'
|
||||
dependencies:
|
||||
css-tree: 1.1.3
|
||||
csstype: 3.1.2
|
||||
fastest-stable-stringify: 2.0.2
|
||||
inline-style-prefixer: 6.0.4
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0(react@18.2.0)
|
||||
rtl-css-js: 1.16.1
|
||||
sourcemap-codec: 1.4.8
|
||||
stacktrace-js: 2.0.2
|
||||
stylis: 4.1.3
|
||||
dev: false
|
||||
|
||||
/nanoid@3.3.6:
|
||||
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
|
||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||
|
@ -2938,12 +2772,12 @@ packages:
|
|||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||
dev: true
|
||||
|
||||
/next@13.2.3(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-nKFJC6upCPN7DWRx4+0S/1PIOT7vNlCT157w9AzbXEgKy6zkiPKEt5YyRUsRZkmpEqBVrGgOqNfwecTociyg+w==}
|
||||
engines: {node: '>=14.6.0'}
|
||||
/next@13.3.1(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-eByWRxPzKHs2oQz1yE41LX35umhz86ZSZ+mYyXBqn2IBi2hyUqxBA88avywdr4uyH+hCJczegGsDGWbzQA5Rqw==}
|
||||
engines: {node: '>=14.18.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@opentelemetry/api': ^1.4.0
|
||||
'@opentelemetry/api': ^1.1.0
|
||||
fibers: '>= 3.1.0'
|
||||
node-sass: ^6.0.0 || ^7.0.0
|
||||
react: ^18.2.0
|
||||
|
@ -2959,27 +2793,24 @@ packages:
|
|||
sass:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@next/env': 13.2.3
|
||||
'@swc/helpers': 0.4.14
|
||||
'@next/env': 13.3.1
|
||||
'@swc/helpers': 0.5.0
|
||||
busboy: 1.6.0
|
||||
caniuse-lite: 1.0.30001476
|
||||
postcss: 8.4.14
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0(react@18.2.0)
|
||||
styled-jsx: 5.1.1(react@18.2.0)
|
||||
optionalDependencies:
|
||||
'@next/swc-android-arm-eabi': 13.2.3
|
||||
'@next/swc-android-arm64': 13.2.3
|
||||
'@next/swc-darwin-arm64': 13.2.3
|
||||
'@next/swc-darwin-x64': 13.2.3
|
||||
'@next/swc-freebsd-x64': 13.2.3
|
||||
'@next/swc-linux-arm-gnueabihf': 13.2.3
|
||||
'@next/swc-linux-arm64-gnu': 13.2.3
|
||||
'@next/swc-linux-arm64-musl': 13.2.3
|
||||
'@next/swc-linux-x64-gnu': 13.2.3
|
||||
'@next/swc-linux-x64-musl': 13.2.3
|
||||
'@next/swc-win32-arm64-msvc': 13.2.3
|
||||
'@next/swc-win32-ia32-msvc': 13.2.3
|
||||
'@next/swc-win32-x64-msvc': 13.2.3
|
||||
'@next/swc-darwin-arm64': 13.3.1
|
||||
'@next/swc-darwin-x64': 13.3.1
|
||||
'@next/swc-linux-arm64-gnu': 13.3.1
|
||||
'@next/swc-linux-arm64-musl': 13.3.1
|
||||
'@next/swc-linux-x64-gnu': 13.3.1
|
||||
'@next/swc-linux-x64-musl': 13.3.1
|
||||
'@next/swc-win32-arm64-msvc': 13.3.1
|
||||
'@next/swc-win32-ia32-msvc': 13.3.1
|
||||
'@next/swc-win32-x64-msvc': 13.3.1
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
|
@ -3322,10 +3153,6 @@ packages:
|
|||
resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
|
||||
dev: false
|
||||
|
||||
/proxy-from-env@1.1.0:
|
||||
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
|
||||
dev: false
|
||||
|
||||
/punycode@2.3.0:
|
||||
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
|
||||
engines: {node: '>=6'}
|
||||
|
@ -3340,16 +3167,6 @@ packages:
|
|||
engines: {node: '>=10'}
|
||||
dev: true
|
||||
|
||||
/react-confetti@6.1.0(react@18.2.0):
|
||||
resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==}
|
||||
engines: {node: '>=10.18'}
|
||||
peerDependencies:
|
||||
react: ^16.3.0 || ^17.0.1 || ^18.0.0
|
||||
dependencies:
|
||||
react: 18.2.0
|
||||
tween-functions: 1.2.0
|
||||
dev: false
|
||||
|
||||
/react-dom@18.2.0(react@18.2.0):
|
||||
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
|
||||
peerDependencies:
|
||||
|
@ -3455,40 +3272,6 @@ packages:
|
|||
tslib: 2.5.0
|
||||
dev: false
|
||||
|
||||
/react-universal-interface@0.6.2(react@18.2.0)(tslib@2.5.0):
|
||||
resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==}
|
||||
peerDependencies:
|
||||
react: '*'
|
||||
tslib: '*'
|
||||
dependencies:
|
||||
react: 18.2.0
|
||||
tslib: 2.5.0
|
||||
dev: false
|
||||
|
||||
/react-use@17.4.0(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-TgbNTCA33Wl7xzIJegn1HndB4qTS9u03QUwyNycUnXaweZkE4Kq2SB+Yoxx8qbshkZGYBDvUXbXWRUmQDcZZ/Q==}
|
||||
peerDependencies:
|
||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
dependencies:
|
||||
'@types/js-cookie': 2.2.7
|
||||
'@xobotyi/scrollbar-width': 1.9.5
|
||||
copy-to-clipboard: 3.3.3
|
||||
fast-deep-equal: 3.1.3
|
||||
fast-shallow-equal: 1.0.0
|
||||
js-cookie: 2.2.1
|
||||
nano-css: 5.3.5(react-dom@18.2.0)(react@18.2.0)
|
||||
react: 18.2.0
|
||||
react-dom: 18.2.0(react@18.2.0)
|
||||
react-universal-interface: 0.6.2(react@18.2.0)(tslib@2.5.0)
|
||||
resize-observer-polyfill: 1.5.1
|
||||
screenfull: 5.2.0
|
||||
set-harmonic-interval: 1.0.1
|
||||
throttle-debounce: 3.0.1
|
||||
ts-easing: 0.2.0
|
||||
tslib: 2.5.0
|
||||
dev: false
|
||||
|
||||
/react@18.2.0:
|
||||
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
@ -3568,10 +3351,6 @@ packages:
|
|||
resolution: {integrity: sha512-q54ra2QutYDZpuSnFjmeagmEiN9IMo56/zz5dDNitzKD23oFRw77cWo4TsrAdmdkPiEn8mxlrTqxnkujDbEGww==}
|
||||
dev: false
|
||||
|
||||
/resize-observer-polyfill@1.5.1:
|
||||
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
|
||||
dev: false
|
||||
|
||||
/resolve-from@4.0.0:
|
||||
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
||||
engines: {node: '>=4'}
|
||||
|
@ -3607,12 +3386,6 @@ packages:
|
|||
glob: 7.2.3
|
||||
dev: true
|
||||
|
||||
/rtl-css-js@1.16.1:
|
||||
resolution: {integrity: sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==}
|
||||
dependencies:
|
||||
'@babel/runtime': 7.21.0
|
||||
dev: false
|
||||
|
||||
/run-parallel@1.2.0:
|
||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||
dependencies:
|
||||
|
@ -3640,11 +3413,6 @@ packages:
|
|||
loose-envify: 1.4.0
|
||||
dev: false
|
||||
|
||||
/screenfull@5.2.0:
|
||||
resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/semver@6.3.0:
|
||||
resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
|
||||
hasBin: true
|
||||
|
@ -3658,11 +3426,6 @@ packages:
|
|||
lru-cache: 6.0.0
|
||||
dev: true
|
||||
|
||||
/set-harmonic-interval@1.0.1:
|
||||
resolution: {integrity: sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==}
|
||||
engines: {node: '>=6.9'}
|
||||
dev: false
|
||||
|
||||
/shebang-command@2.0.0:
|
||||
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -3697,50 +3460,10 @@ packages:
|
|||
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
/source-map@0.5.6:
|
||||
resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/source-map@0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/sourcemap-codec@1.4.8:
|
||||
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
|
||||
deprecated: Please use @jridgewell/sourcemap-codec instead
|
||||
dev: false
|
||||
|
||||
/space-separated-tokens@2.0.2:
|
||||
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
|
||||
dev: false
|
||||
|
||||
/stack-generator@2.0.10:
|
||||
resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==}
|
||||
dependencies:
|
||||
stackframe: 1.3.4
|
||||
dev: false
|
||||
|
||||
/stackframe@1.3.4:
|
||||
resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
|
||||
dev: false
|
||||
|
||||
/stacktrace-gps@3.1.2:
|
||||
resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==}
|
||||
dependencies:
|
||||
source-map: 0.5.6
|
||||
stackframe: 1.3.4
|
||||
dev: false
|
||||
|
||||
/stacktrace-js@2.0.2:
|
||||
resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==}
|
||||
dependencies:
|
||||
error-stack-parser: 2.1.4
|
||||
stack-generator: 2.0.10
|
||||
stacktrace-gps: 3.1.2
|
||||
dev: false
|
||||
|
||||
/stop-iteration-iterator@1.0.0:
|
||||
resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
@ -3748,6 +3471,11 @@ packages:
|
|||
internal-slot: 1.0.5
|
||||
dev: true
|
||||
|
||||
/streamsearch@1.1.0:
|
||||
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
|
||||
engines: {node: '>=10.0.0'}
|
||||
dev: false
|
||||
|
||||
/string.prototype.matchall@4.0.8:
|
||||
resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
|
||||
dependencies:
|
||||
|
@ -3826,10 +3554,6 @@ packages:
|
|||
react: 18.2.0
|
||||
dev: false
|
||||
|
||||
/stylis@4.1.3:
|
||||
resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==}
|
||||
dev: false
|
||||
|
||||
/sucrase@3.31.0:
|
||||
resolution: {integrity: sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -3933,11 +3657,6 @@ packages:
|
|||
any-promise: 1.3.0
|
||||
dev: true
|
||||
|
||||
/throttle-debounce@3.0.1:
|
||||
resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/tiny-glob@0.2.9:
|
||||
resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
|
||||
dependencies:
|
||||
|
@ -3952,10 +3671,6 @@ packages:
|
|||
is-number: 7.0.0
|
||||
dev: true
|
||||
|
||||
/toggle-selection@1.0.6:
|
||||
resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
|
||||
dev: false
|
||||
|
||||
/trim-lines@3.0.1:
|
||||
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
|
||||
dev: false
|
||||
|
@ -3964,10 +3679,6 @@ packages:
|
|||
resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
|
||||
dev: false
|
||||
|
||||
/ts-easing@0.2.0:
|
||||
resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==}
|
||||
dev: false
|
||||
|
||||
/ts-interface-checker@0.1.13:
|
||||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||
dev: true
|
||||
|
@ -3998,10 +3709,6 @@ packages:
|
|||
typescript: 4.9.5
|
||||
dev: true
|
||||
|
||||
/tween-functions@1.2.0:
|
||||
resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==}
|
||||
dev: false
|
||||
|
||||
/type-check@0.4.0:
|
||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
|
|
|
@ -7,9 +7,6 @@ const AppLink = forwardRef<HTMLAnchorElement, Parameters<typeof Link>[0]>((props
|
|||
if (props.target === '_blank') {
|
||||
return <a ref={ref} {...props} href={props.href.toString()} />;
|
||||
}
|
||||
if (props['aria-disabled']) {
|
||||
return <span ref={ref} {...props} />;
|
||||
}
|
||||
return <Link ref={ref} {...props} href={props.href} />;
|
||||
});
|
||||
|
||||
|
|
27
ui/Card.tsx
27
ui/Card.tsx
|
@ -1,23 +1,28 @@
|
|||
import { getURL } from '@/lib/utils';
|
||||
|
||||
import AppLink from './AppLink';
|
||||
import Icon from './Icon';
|
||||
|
||||
export default function Card({
|
||||
isLoading,
|
||||
icon,
|
||||
title,
|
||||
data
|
||||
data,
|
||||
link
|
||||
}: {
|
||||
isLoading: boolean;
|
||||
icon: string;
|
||||
title: string;
|
||||
data: any;
|
||||
link?: string;
|
||||
}) {
|
||||
if (isLoading)
|
||||
return (
|
||||
<div className="flex w-full items-center space-x-4 rounded-lg border-2 border-highlight-primary bg-primary-700 p-4 shadow-md">
|
||||
<Icon name={icon} className="text-2xl text-muted" />
|
||||
<div className="flex flex-col space-y-4">
|
||||
<span className="h-4 w-32 animate-pulse rounded bg-highlight-primary" />
|
||||
<span className="h-4 w-24 animate-pulse rounded bg-highlight-primary" />
|
||||
<span className="h-[18px] w-32 animate-pulse rounded bg-highlight-primary" />
|
||||
<span className="h-[18px] w-24 animate-pulse rounded bg-highlight-primary" />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
@ -25,9 +30,19 @@ export default function Card({
|
|||
return (
|
||||
<div className="flex w-full items-center space-x-4 rounded-lg border-2 border-highlight-primary bg-primary-700 p-4 shadow-md">
|
||||
<Icon name={icon} className="text-2xl text-muted" />
|
||||
<div className="flex flex-col">
|
||||
<h3 className="text-xl font-semibold">{data}</h3>
|
||||
<p className="text-muted">{title}</p>
|
||||
<div className="flex w-full items-center justify-between">
|
||||
<div className="flex-col">
|
||||
<h2 className="text-xl font-semibold">{data}</h2>
|
||||
<p className="text-muted">{title}</p>
|
||||
</div>
|
||||
{link && (
|
||||
<AppLink
|
||||
className="text-highlight-secondary transition-colors duration-150 hover:text-brand"
|
||||
href={getURL(link)}
|
||||
>
|
||||
<Icon name="arrow-right-line" />
|
||||
</AppLink>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
import { type Puzzle } from '@/lib/puzzles';
|
||||
|
||||
import AppLink from './AppLink';
|
||||
|
||||
export default function CardTable({ puzzles }: { puzzles: Puzzle[] }) {
|
||||
return (
|
||||
<></>
|
||||
// <div className="relative flex h-96 w-full overflow-scroll">
|
||||
// <table className="w-full table-auto border-collapse rounded-lg border-2 border-highlight-primary bg-primary-700 text-left text-sm text-muted shadow-md">
|
||||
// {/* <thead className="z-1 sticky -top-1 bg-primary-600 text-xs uppercase text-white ">
|
||||
// <tr>
|
||||
// <th className="px-6 py-3">Exercice</th>
|
||||
// <th className="px-6 py-3">Tentative</th>
|
||||
// <th className="px-6 py-3">Score</th>
|
||||
// <th className="px-6 py-3">Dernier essai</th>
|
||||
// <th className="px-6 py-3">
|
||||
// <span className="sr-only">Reprendre</span>
|
||||
// </th>
|
||||
// </tr>
|
||||
// </thead> */}
|
||||
// <tbody className="overflow-scroll">
|
||||
// {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">
|
||||
// {puzzle.name}
|
||||
// </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/${puzzle.id}`}
|
||||
// className="font-medium text-brand hover:underline"
|
||||
// >
|
||||
// Reprendre
|
||||
// </AppLink>
|
||||
// </td>
|
||||
// </tr>
|
||||
// ))}
|
||||
// </tbody>
|
||||
// </table>
|
||||
// </div>
|
||||
);
|
||||
}
|
|
@ -1,37 +1,40 @@
|
|||
'use client';
|
||||
|
||||
import { AnimatePresence, motion } from 'framer-motion';
|
||||
import useSWRSubscription, { type SWRSubscription } from 'swr/subscription';
|
||||
|
||||
import { type ScoreEvent } from '@/lib/leaderboard';
|
||||
import { useLeaderboardEvent } from '@/lib/hooks/use-leaderboard';
|
||||
import { cn } from '@/lib/utils';
|
||||
import Podium from '@/ui/events/podium/Podium';
|
||||
import { Timer } from './Timer';
|
||||
import { type ScoreEvent } from '@/lib/leaderboard';
|
||||
import useSWRSubscription, { type SWRSubscription } from 'swr/subscription';
|
||||
|
||||
const SCORE_COLORS = ['text-yellow-400', 'text-gray-400', 'text-orange-400'];
|
||||
|
||||
export default function Leaderboard() {
|
||||
export default function Leaderboard({ token }: { token: string }) {
|
||||
// TODO CHANGER CECI
|
||||
const CHAPITRE_EVENT = 1;
|
||||
|
||||
const subscription: SWRSubscription<string, ScoreEvent, Error> = (key, { next }) => {
|
||||
const socket = new WebSocket(key);
|
||||
// const subscription: SWRSubscription<string, ScoreEvent, Error> = (key, { next }) => {
|
||||
// const socket = new WebSocket(key);
|
||||
|
||||
socket.addEventListener('message', (event) => {
|
||||
next(null, JSON.parse(event.data));
|
||||
});
|
||||
// socket.addEventListener('message', (event) => {
|
||||
// next(null, JSON.parse(event.data));
|
||||
// });
|
||||
|
||||
socket.addEventListener('error', (event) => {
|
||||
console.error(event);
|
||||
});
|
||||
// socket.addEventListener('error', (event) => {
|
||||
// console.error(event);
|
||||
// });
|
||||
|
||||
return () => socket.close();
|
||||
};
|
||||
// return () => socket.close();
|
||||
// };
|
||||
|
||||
const { data } = useSWRSubscription(
|
||||
`wss://${process.env.NEXT_PUBLIC_API_URL?.split('//')[1]}/rleaderboard/${CHAPITRE_EVENT}`,
|
||||
subscription
|
||||
);
|
||||
// const { data } = useSWRSubscription(
|
||||
// `wss://${process.env.NEXT_PUBLIC_API_URL?.split('//')[1]}/rleaderboard/${CHAPITRE_EVENT}`,
|
||||
// subscription
|
||||
// );
|
||||
|
||||
const { data, isLoading } = useLeaderboardEvent({ token: token, id: CHAPITRE_EVENT });
|
||||
|
||||
const scores = [data?.groups]
|
||||
.flat()
|
||||
|
@ -60,8 +63,8 @@ export default function Leaderboard() {
|
|||
const tries = group.players.reduce((a, b) => a + b.tries, 0) || 0;
|
||||
return (
|
||||
<motion.li
|
||||
layout
|
||||
initial={{ opacity: 0, y: -10 }}
|
||||
// @ts-ignore TODO Je sais pas c'est quoi cette merde
|
||||
animate={{ opacity: 1, y: 0 }}
|
||||
exit={{ opacity: 0, y: -10 }}
|
||||
transition={{ duration: 0.5 }}
|
||||
|
@ -69,13 +72,18 @@ export default function Leaderboard() {
|
|||
className="flex justify-between space-x-2"
|
||||
>
|
||||
<div className="flex items-center space-x-4">
|
||||
<span className={cn('font-semibold', SCORE_COLORS[group.rank - 1])}>
|
||||
<span
|
||||
className={cn(
|
||||
'font-semibold text-highlight-secondary',
|
||||
SCORE_COLORS[group.rank - 1]
|
||||
)}
|
||||
>
|
||||
{group.rank}
|
||||
</span>
|
||||
<div className="flex items-center space-x-2">
|
||||
<div className="flex flex-col gap-x-2 sm:flex-row sm:items-center">
|
||||
<span className="text-lg">{group.name}</span>
|
||||
<span className="text-sm text-muted">
|
||||
<span className="text-sm text-highlight-secondary">
|
||||
{group.players && group.players.length > 1
|
||||
? group.players
|
||||
.map((player) => player.pseudo || 'Anonyme')
|
||||
|
@ -89,15 +97,15 @@ export default function Leaderboard() {
|
|||
<div className="flex items-center space-x-4">
|
||||
{/* <div className="flex flex-col">
|
||||
<span className="text-sm font-semibold">Puzzle{puzzles > 1 ? 's' : ''}</span>
|
||||
<span className="text-lg text-muted">{puzzles}</span>
|
||||
<span className="text-lg text-highlight-secondary">{puzzles}</span>
|
||||
</div> */}
|
||||
<div className="flex flex-col">
|
||||
<span className="text-sm font-semibold">Essai{tries > 1 ? 's' : ''}</span>
|
||||
<span className="text-lg text-muted">{tries}</span>
|
||||
<span className="text-lg text-highlight-secondary">{tries}</span>
|
||||
</div>
|
||||
<div className="flex flex-col">
|
||||
<span className="text-sm font-semibold">Score</span>
|
||||
<span className="text-lg text-muted">
|
||||
<span className="text-lg text-highlight-secondary">
|
||||
{group.players.reduce((a, b) => a + b.score, 0)}
|
||||
</span>
|
||||
</div>
|
||||
|
|
|
@ -257,14 +257,14 @@ function PuzzleProp({ puzzle, chapter }: { puzzle: Puzzle; chapter: Chapter }) {
|
|||
{puzzle.tags
|
||||
.filter((tag) => !['easy', 'medium', 'hard'].includes(tag.name))
|
||||
.map((tag, i) => (
|
||||
<span key={i} className="inline-block rounded-md bg-primary-900 px-2 py-1">
|
||||
<span key={i} className="inline-block rounded-md bg-primary-800 px-2 py-1">
|
||||
{tag.name}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<Icon
|
||||
className="-translate-x-2 transform-gpu duration-300 group-hover:translate-x-0"
|
||||
className="-translate-x-2 transform-gpu text-highlight-secondary duration-300 group-hover:translate-x-0 group-hover:text-brand"
|
||||
name="arrow-right-line"
|
||||
/>
|
||||
</div>
|
||||
|
@ -292,7 +292,7 @@ function PuzzleProp({ puzzle, chapter }: { puzzle: Puzzle; chapter: Chapter }) {
|
|||
</div>
|
||||
)}
|
||||
<Icon
|
||||
className="-translate-x-2 transform-gpu duration-300 group-hover:translate-x-0"
|
||||
className="-translate-x-2 transform-gpu text-highlight-secondary duration-300 group-hover:translate-x-0"
|
||||
name="arrow-right-line"
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import clsx from 'clsx';
|
||||
import { useEffect, useReducer } from 'react';
|
||||
import { useWindowSize } from 'react-use';
|
||||
import Confetti from 'react-confetti';
|
||||
|
||||
type State = {
|
||||
hours: number;
|
||||
|
@ -24,8 +22,6 @@ function reducer(state: State, action: Action): State {
|
|||
}
|
||||
|
||||
export function Timer({ targetDate, className }: { targetDate: Date; className?: string }) {
|
||||
const { width, height } = useWindowSize();
|
||||
|
||||
const [timeRemaining, dispatch] = useReducer(reducer, {
|
||||
hours: 0,
|
||||
minutes: 0,
|
||||
|
@ -52,7 +48,6 @@ export function Timer({ targetDate, className }: { targetDate: Date; className?:
|
|||
if (timeRemaining.hours < 0) {
|
||||
return (
|
||||
<>
|
||||
{/* <Confetti width={width} height={height} /> */}
|
||||
<span className={clsx(className)}>Terminé</span>
|
||||
</>
|
||||
);
|
||||
|
|
|
@ -13,7 +13,7 @@ export default function ToHTML({ data, className }: { data: string; className?:
|
|||
a: ({ node, ...props }) => (
|
||||
<a
|
||||
{...props}
|
||||
className="inline text-brand-accent hover:text-brand hover:underline"
|
||||
className="inline text-brand transition-colors duration-150 hover:text-brand-accent hover:underline"
|
||||
// MAKE thIS SHIT DOWNLOADABLE
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
|
|
|
@ -37,6 +37,7 @@ export default function UserAuthForm() {
|
|||
avatar: ''
|
||||
}
|
||||
});
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const router = useRouter();
|
||||
const pathname = usePathname()!;
|
||||
|
@ -101,6 +102,7 @@ export default function UserAuthForm() {
|
|||
<form
|
||||
className="flex w-52 flex-col justify-center space-y-4 sm:w-72"
|
||||
onSubmit={handleSubmit(onSubmit)}
|
||||
method="POST"
|
||||
>
|
||||
{!isSignIn && (
|
||||
<>
|
||||
|
|
|
@ -90,13 +90,12 @@ function NavItem({
|
|||
onClick?: () => void;
|
||||
}) {
|
||||
const segment = useSelectedLayoutSegment();
|
||||
const pathname = segment?.split('/').pop() || '';
|
||||
const isHttp = item.slug.includes('http');
|
||||
const isActive = pathname === item.slug || (item.slug === '' && !segment);
|
||||
const pathname = item.slug.split('/').pop();
|
||||
const isActive = segment === pathname || (segment === null && pathname === 'dashboard');
|
||||
return (
|
||||
<AppLink
|
||||
aria-disabled={item.disabled}
|
||||
href={isHttp ? item.slug : `dashboard/${item.slug}`}
|
||||
href={isHttp ? item.slug : `/${item.slug}`}
|
||||
target={isHttp ? '_blank' : undefined}
|
||||
rel={isHttp ? 'noopener noreferrer' : undefined}
|
||||
className={cn(
|
||||
|
|
Loading…
Add table
Reference in a new issue