From 138954a2f8fb31f74d16025428d46fa4580f9f9d Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Thu, 28 Mar 2024 16:05:58 +0100 Subject: [PATCH 01/11] :sparkles: Pages success and error done --- package-lock.json | 9 ++ package.json | 3 +- .../DesignSystem/Button/classes.module.scss | 6 +- .../Typography/classes.module.scss | 8 ++ .../DesignSystem/Typography/index.tsx | 1 + .../Elements/MessageBox/classes.module.scss | 30 +++++++ .../Components/Elements/MessageBox/index.tsx | 39 +++++++++ .../classes.module.scss | 5 ++ .../SubscriptionClientInfos/index.tsx | 26 ++++++ .../SubscriptionError/classes.module.scss | 17 ++++ .../Subscription/SubscriptionError/index.tsx | 41 +++++++++ .../SubscriptionSuccess/classes.module.scss | 17 ++++ .../SubscriptionSuccess/index.tsx | 40 +++++++++ .../SubscriptionTicket/classes.module.scss | 31 +++++++ .../Subscription/SubscriptionTicket/index.tsx | 84 +++++++++++++++++++ src/pages/subscription/error/index.tsx | 5 ++ src/pages/subscription/success/index.tsx | 5 ++ 17 files changed, 365 insertions(+), 2 deletions(-) create mode 100644 src/front/Components/Elements/MessageBox/classes.module.scss create mode 100644 src/front/Components/Elements/MessageBox/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionClientInfos/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionClientInfos/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionError/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionSuccess/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionTicket/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionTicket/index.tsx create mode 100644 src/pages/subscription/error/index.tsx create mode 100644 src/pages/subscription/success/index.tsx diff --git a/package-lock.json b/package-lock.json index 6bff1c1b..e65d49ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", + "@heroicons/react": "^2.1.3", "@mui/material": "^5.11.13", "@types/node": "18.15.1", "@types/react": "18.0.28", @@ -466,6 +467,14 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, + "node_modules/@heroicons/react": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.1.3.tgz", + "integrity": "sha512-fEcPfo4oN345SoqdlCDdSa4ivjaKbk0jTd+oubcgNxnNgAfzysfwWfQUr+51wigiWHQQRiZNd1Ao0M5Y3M2EGg==", + "peerDependencies": { + "react": ">= 16" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", diff --git a/package.json b/package.json index f95223f1..90100406 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "next dev -p 5005", "build": "next build", "start": "next start", "lint": "next lint", @@ -12,6 +12,7 @@ "dependencies": { "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", + "@heroicons/react": "^2.1.3", "@mui/material": "^5.11.13", "@types/node": "18.15.1", "@types/react": "18.0.28", diff --git a/src/front/Components/DesignSystem/Button/classes.module.scss b/src/front/Components/DesignSystem/Button/classes.module.scss index a1dc4704..1b7192e5 100644 --- a/src/front/Components/DesignSystem/Button/classes.module.scss +++ b/src/front/Components/DesignSystem/Button/classes.module.scss @@ -96,6 +96,10 @@ flex: 1; } + &[fullwidthattr="false"] { + width: fit-content; + } + &[touppercase="false"] { text-transform: inherit; } @@ -110,4 +114,4 @@ line-height: 22px; text-decoration-line: underline; } -} \ No newline at end of file +} diff --git a/src/front/Components/DesignSystem/Typography/classes.module.scss b/src/front/Components/DesignSystem/Typography/classes.module.scss index 0efa8539..6a68d909 100644 --- a/src/front/Components/DesignSystem/Typography/classes.module.scss +++ b/src/front/Components/DesignSystem/Typography/classes.module.scss @@ -115,6 +115,14 @@ letter-spacing: 0.5px; } + &.Caption_14-semibold { + font-style: normal; + font-weight: 600; + font-size: 14px; + line-height: 22px; + letter-spacing: 0.5px; + } + &.re-hover { color: $re-hover; } diff --git a/src/front/Components/DesignSystem/Typography/index.tsx b/src/front/Components/DesignSystem/Typography/index.tsx index 1d1323f5..0e812ac4 100644 --- a/src/front/Components/DesignSystem/Typography/index.tsx +++ b/src/front/Components/DesignSystem/Typography/index.tsx @@ -29,6 +29,7 @@ export enum ITypo { P_ERR_16 = "Paragraphe-16-error", CAPTION_14 = "Caption_14", + CAPTION_14_SB = "Caption_14-semibold", } export enum ITypoColor { diff --git a/src/front/Components/Elements/MessageBox/classes.module.scss b/src/front/Components/Elements/MessageBox/classes.module.scss new file mode 100644 index 00000000..1828a2c5 --- /dev/null +++ b/src/front/Components/Elements/MessageBox/classes.module.scss @@ -0,0 +1,30 @@ +.root { + display: flex; + gap: 24px; + padding: 16px; + + svg { + width: 20px; + height: 20px; + min-width: 20px; + min-height: 20px; + } + + &.info { + background-color: var(--Opium-200); + } + + &.warning { + background-color: var(--Warning-100); + } + + &.success { + border: 1px solid var(--green-flash); + background: #12bf4d0d; + } + + &.error { + border: 1px solid var(--red-soft); + background: #f087711a; + } +} diff --git a/src/front/Components/Elements/MessageBox/index.tsx b/src/front/Components/Elements/MessageBox/index.tsx new file mode 100644 index 00000000..883c66ff --- /dev/null +++ b/src/front/Components/Elements/MessageBox/index.tsx @@ -0,0 +1,39 @@ +import classes from "./classes.module.scss"; +import classNames from "classnames"; +import { InformationCircleIcon, ExclamationTriangleIcon } from "@heroicons/react/24/outline"; +import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; + +export type IProps = { + type: "info" | "warning" | "success" | "error"; + children?: React.ReactNode; + className?: string; +}; + +export default function MessageBox(props: IProps) { + const { className, type, children } = props; + return ( +
+ {getIcon(type)} +
+ + {children} + + + {children} +
+
+ ); + + function getIcon(type: IProps["type"]) { + switch (type) { + case "info": + return ; + case "warning": + return ; + case "success": + return ; + case "error": + return ; + } + } +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionClientInfos/classes.module.scss b/src/front/Components/Layouts/Subscription/SubscriptionClientInfos/classes.module.scss new file mode 100644 index 00000000..69bcd9f5 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionClientInfos/classes.module.scss @@ -0,0 +1,5 @@ +.root { + display: flex; + flex-direction: column; + gap: 32px; +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionClientInfos/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionClientInfos/index.tsx new file mode 100644 index 00000000..ed03f97b --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionClientInfos/index.tsx @@ -0,0 +1,26 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import classes from "./classes.module.scss"; + +export default function SubscriptionClientInfos() { + return ( +
+ + Informations client + + + john.doe@contact.fr + + + Adresse de facturation + + + John Doe
+ 23 rue taitbout, +
+ 75009 Paris +
+ France +
+
+ ); +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionError/classes.module.scss b/src/front/Components/Layouts/Subscription/SubscriptionError/classes.module.scss new file mode 100644 index 00000000..c0508d64 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionError/classes.module.scss @@ -0,0 +1,17 @@ +.root { + display: flex; + gap: 104px; + justify-content: center; + + .left { + display: flex; + flex-direction: column; + gap: 32px; + width: 548px; + } + .separator { + width: 100%; + height: 2px; + background: var(--grey-medium); + } +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx new file mode 100644 index 00000000..721e2bd1 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx @@ -0,0 +1,41 @@ +import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; +import classes from "./classes.module.scss"; +import SubscriptionTicket from "../SubscriptionTicket"; +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import MessageBox from "@Front/Components/Elements/MessageBox"; +import SubscriptionClientInfos from "../SubscriptionClientInfos"; +import Button from "@Front/Components/DesignSystem/Button"; + +export default function SubscriptionError() { + return ( + +
+
+
+ + Paiement échoué + +
+
+ + Votre transaction n'a pas pu être complétée. +
+
+ Malheureusement, nous n'avons pas pu traiter votre paiement et votre abonnement n'a pas été activé. Veuillez + vérifier vos informations de paiement et essayer à nouveau. +
+
+
+
+ +
+
+ +
+
+ +
+
+ + ); +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionSuccess/classes.module.scss b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/classes.module.scss new file mode 100644 index 00000000..c0508d64 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/classes.module.scss @@ -0,0 +1,17 @@ +.root { + display: flex; + gap: 104px; + justify-content: center; + + .left { + display: flex; + flex-direction: column; + gap: 32px; + width: 548px; + } + .separator { + width: 100%; + height: 2px; + background: var(--grey-medium); + } +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx new file mode 100644 index 00000000..295de436 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx @@ -0,0 +1,40 @@ +import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; +import classes from "./classes.module.scss"; +import SubscriptionTicket from "../SubscriptionTicket"; +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import MessageBox from "@Front/Components/Elements/MessageBox"; +import SubscriptionClientInfos from "../SubscriptionClientInfos"; +import Button from "@Front/Components/DesignSystem/Button"; + +export default function SubscriptionSuccess() { + return ( + +
+
+
+ + Abonnement réussi ! + +
+
+ + Votre transaction a été effectuée avec succès ! +
+
+ Votre abonnement a été pris en compte et est désormais actif. +
+
+
+
+ +
+
+ +
+
+ +
+
+ + ); +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionTicket/classes.module.scss b/src/front/Components/Layouts/Subscription/SubscriptionTicket/classes.module.scss new file mode 100644 index 00000000..a0312271 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionTicket/classes.module.scss @@ -0,0 +1,31 @@ +.root { + width: 372px; + display: flex; + flex-direction: column; + gap: 40px; + + box-shadow: 0px 8px 10px 0px #00000012; + padding: 24px; + border-radius: 16px; + .top-category { + display: flex; + justify-content: center; + align-items: center; + } + + .category { + display: flex; + flex-direction: column; + gap: 8px; + .line { + display: flex; + justify-content: space-between; + } + } + + .separator { + width: 100%; + height: 2px; + background: var(--grey-medium); + } +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionTicket/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionTicket/index.tsx new file mode 100644 index 00000000..89d34d4c --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionTicket/index.tsx @@ -0,0 +1,84 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import classes from "./classes.module.scss"; + +type IProps = {}; +export default function SubscriptionTicket(props: IProps) { + return ( +
+
+ + Récapitulatif + +
+
+ +
+ + Forfait standard + +
+
+
+
+ + Plan individuel + + + 99 € + +
+
+ + 2 collaborateurs + + + 13,98 € + +
+
+ + 6,99 € x 2 + +
+
+
+
+
+ + Sous-total + + + 112,98 € + +
+
+ + FR TVA + + + 14 € + +
+
+ + Taxes + + + 14 € + +
+
+
+
+
+ + Total + + + 112,98 € + +
+
+
+ ); +} diff --git a/src/pages/subscription/error/index.tsx b/src/pages/subscription/error/index.tsx new file mode 100644 index 00000000..52905a5b --- /dev/null +++ b/src/pages/subscription/error/index.tsx @@ -0,0 +1,5 @@ +import SubscriptionError from "@Front/Components/Layouts/Subscription/SubscriptionError"; + +export default function Route() { + return ; +} diff --git a/src/pages/subscription/success/index.tsx b/src/pages/subscription/success/index.tsx new file mode 100644 index 00000000..95ca0b27 --- /dev/null +++ b/src/pages/subscription/success/index.tsx @@ -0,0 +1,5 @@ +import SubscriptionSuccess from "@Front/Components/Layouts/Subscription/SubscriptionSuccess"; + +export default function Route() { + return ; +} From 39d7ec6421d1569bce3f7b464caa6d86a19b2e58 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Thu, 28 Mar 2024 16:37:06 +0100 Subject: [PATCH 02/11] :sparkles: Pick subscription working --- .../Typography/classes.module.scss | 9 +- .../DesignSystem/Typography/index.tsx | 4 +- .../Subscription/SubscriptionError/index.tsx | 2 +- .../SubscriptionNew/classes.module.scss | 63 +++++++++++ .../Subscription/SubscriptionNew/index.tsx | 103 ++++++++++++++++++ .../SubscriptionSuccess/index.tsx | 2 +- src/pages/subscription/new/index.tsx | 5 + 7 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionNew/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx create mode 100644 src/pages/subscription/new/index.tsx diff --git a/src/front/Components/DesignSystem/Typography/classes.module.scss b/src/front/Components/DesignSystem/Typography/classes.module.scss index 6a68d909..35ad1b15 100644 --- a/src/front/Components/DesignSystem/Typography/classes.module.scss +++ b/src/front/Components/DesignSystem/Typography/classes.module.scss @@ -8,8 +8,13 @@ &.H1-60 { font-style: normal; font-weight: 500; - font-size: 50px; - line-height: 61px; + font-size: 56px; + line-height: 67.2px; + + @media (max-width: $screen-m) { + font-size: 48px; + line-height: 56.7px; + } } &.H1-bis-40 { diff --git a/src/front/Components/DesignSystem/Typography/index.tsx b/src/front/Components/DesignSystem/Typography/index.tsx index 0e812ac4..54ecb5cb 100644 --- a/src/front/Components/DesignSystem/Typography/index.tsx +++ b/src/front/Components/DesignSystem/Typography/index.tsx @@ -46,7 +46,7 @@ export enum ITypoColor { export default class Typography extends React.Component { public override render(): JSX.Element { return ( -
{ )} title={this.props.title}> {this.props.children} -
+ ); } } diff --git a/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx index 721e2bd1..5bb0f6a5 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionError/index.tsx @@ -8,7 +8,7 @@ import Button from "@Front/Components/DesignSystem/Button"; export default function SubscriptionError() { return ( - +
diff --git a/src/front/Components/Layouts/Subscription/SubscriptionNew/classes.module.scss b/src/front/Components/Layouts/Subscription/SubscriptionNew/classes.module.scss new file mode 100644 index 00000000..aba08aec --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionNew/classes.module.scss @@ -0,0 +1,63 @@ +@import "@Themes/constants.scss"; + +.root { + display: flex; + justify-content: baseline; + align-items: center; + flex-direction: column; + gap: 64px; + max-width: 1000px; + margin: auto; + .top-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 24px; + } + + .forfeits-container { + display: flex; + gap: 32px; + + width: 100%; + + @media (max-width: $screen-s) { + flex-direction: column; + } + + .forfeit-block { + flex: 1; + padding: 32px; + border: 1px solid black; + + display: flex; + flex-direction: column; + gap: 32px; + + .forfeit-header { + display: flex; + flex-direction: column; + } + + .separator { + border-bottom: 1px solid black; + } + + .price-container { + display: flex; + flex-direction: column; + gap: 8px; + } + } + } + + .infos-container { + display: flex; + flex-direction: column; + gap: 16px; + .line { + display: flex; + gap: 16px; + } + } +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx new file mode 100644 index 00000000..25c11914 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx @@ -0,0 +1,103 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import classes from "./classes.module.scss"; +import CheckIcon from "@Assets/Icons/check.svg"; +import Image from "next/image"; +import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; +import Button from "@Front/Components/DesignSystem/Button"; + +export default function SubscriptionNew() { + return ( + +
+
+
+ + Tarifs + +
+
+ + Nos forfaits sont adaptés à la taille de votre office + +
+
+
+
+
+ + Forfait standard + + + Plan par utilisateur + +
+
+
+ + 99€ + +  HT  + + / mois + + + + 6,99€ / collaborateur / mois + +
+
+ +
+
+
+
+ + Forfait illimité + + + Plan par office + +
+
+
+ + 249€ + +  HT  + + / mois + + + Sans limite de collaborateurs + +
+
+ +
+
+
+
+
+ Check icon + + Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en main + optimale de l'application + +
+
+ Check icon + + Support technique : notre équipe support est disponible pour vous assister en cas d’incident + +
+
+ Check icon + + Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières fonctionnalités, + améliorations de sécurité et performances optimisées + +
+
+
+ + ); +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx index 295de436..9516b3de 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx @@ -8,7 +8,7 @@ import Button from "@Front/Components/DesignSystem/Button"; export default function SubscriptionSuccess() { return ( - +
diff --git a/src/pages/subscription/new/index.tsx b/src/pages/subscription/new/index.tsx new file mode 100644 index 00000000..87144c2b --- /dev/null +++ b/src/pages/subscription/new/index.tsx @@ -0,0 +1,5 @@ +import SubscriptionNew from "@Front/Components/Layouts/Subscription/SubscriptionNew"; + +export default function Route() { + return ; +} From 6ca191199ac71548fde17a93f7ff720b7c71dd7b Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Fri, 29 Mar 2024 11:05:53 +0100 Subject: [PATCH 03/11] :sparkles: Facturation page working --- .../classes.module.scss | 83 +++++++++++ .../SubscriptionFacturation/index.tsx | 129 ++++++++++++++++++ src/pages/subscription/facturation/index.tsx | 5 + 3 files changed, 217 insertions(+) create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionFacturation/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx create mode 100644 src/pages/subscription/facturation/index.tsx diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/classes.module.scss b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/classes.module.scss new file mode 100644 index 00000000..112b6ca0 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/classes.module.scss @@ -0,0 +1,83 @@ +@import "@Themes/constants.scss"; + +.root { + display: flex; + justify-content: baseline; + align-items: center; + flex-direction: column; + gap: 64px; + max-width: 1000px; + margin: auto; + .top-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 24px; + } + + .forfeits-container { + display: flex; + gap: 32px; + + width: 100%; + + @media (max-width: $screen-s) { + flex-direction: column; + } + + .forfeit-block { + flex: 1; + padding: 32px; + border: 1px solid black; + + display: flex; + flex-direction: column; + gap: 32px; + + &[data-inactive="true"] { + border: 1px solid #e7e7e7; + } + + .forfeit-header { + display: flex; + justify-content: space-between; + .left { + display: flex; + flex-direction: column; + } + + .active-plan { + @media (max-width: $screen-s) { + display: none; + } + } + } + + .separator { + border-bottom: 1px solid black; + } + + .price-container { + display: flex; + flex-direction: column; + gap: 8px; + } + } + } + + .actions-container { + display: flex; + align-items: center; + gap: 48px; + justify-content: flex-end; + justify-self: flex-end; + align-self: flex-end; + margin-bottom: 64px; + + @media (max-width: $screen-s) { + flex-direction: column-reverse; + align-self: center; + justify-self: center; + } + } +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx new file mode 100644 index 00000000..4e12a9d1 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -0,0 +1,129 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import classes from "./classes.module.scss"; +import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; +import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; +import { useState } from "react"; + +enum EForfeitType { + "standard", + "unlimited", +} +export default function SubscriptionFacturation() { + const [forfeitType, _setForfeitType] = useState(EForfeitType.standard); + return ( + +
+
+
+ + Facturation + +
+
+ + Nos forfaits sont adaptés à la taille de votre office + +
+
+
+
+
+
+ + Forfait standard + + + Plan par utilisateur + +
+ {forfeitType === EForfeitType.standard && ( +
+ + Plan actif + +
+ )} +
+
+
+ + 99€ + +  HT  + + / mois + + + + 6,99€ / collaborateur / mois + +
+
+ {forfeitType !== EForfeitType.standard && ( + + )} + {forfeitType === EForfeitType.standard && ( + + )} +
+
+
+
+
+ + Forfait illimité + + + Plan par office + +
+ {forfeitType !== EForfeitType.standard && ( +
+ + Plan actif + +
+ )} +
+
+
+ + 249€ + +  HT  + + / mois + + + Sans limite de collaborateurs + +
+
+ {forfeitType !== EForfeitType.standard && ( + + )} + {forfeitType === EForfeitType.standard && ( + + )} +
+
+
+
+ + +
+
+ + ); +} diff --git a/src/pages/subscription/facturation/index.tsx b/src/pages/subscription/facturation/index.tsx new file mode 100644 index 00000000..9bf0d2ac --- /dev/null +++ b/src/pages/subscription/facturation/index.tsx @@ -0,0 +1,5 @@ +import SubscriptionFacturation from "@Front/Components/Layouts/Subscription/SubscriptionFacturation"; + +export default function Route() { + return ; +} From 57b227fee91676c47aca02157fa3bc2275ce909c Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Fri, 29 Mar 2024 11:16:31 +0100 Subject: [PATCH 04/11] :sparkles: Cancel subscription working --- .../SubscriptionFacturation/index.tsx | 40 ++++++++++++++++++- src/front/Hooks/useOpenable.ts | 26 ++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/front/Hooks/useOpenable.ts diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx index 4e12a9d1..fab588bc 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -2,7 +2,9 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Ty import classes from "./classes.module.scss"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; -import { useState } from "react"; +import { useCallback, useState } from "react"; +import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; +import useOpenable from "@Front/Hooks/useOpenable"; enum EForfeitType { "standard", @@ -10,6 +12,12 @@ enum EForfeitType { } export default function SubscriptionFacturation() { const [forfeitType, _setForfeitType] = useState(EForfeitType.standard); + const { close, isOpen, open } = useOpenable(); + + const cancelSubscription = useCallback(() => { + return; + }, []); + return (
@@ -116,7 +124,7 @@ export default function SubscriptionFacturation() {
-
+ +
+ + Avant de confirmer, veuillez prendre note des conséquences
+ suivantes : +
+
    +
  • + Arrêt des fonctionnalités : Vous n'aurez plus accès aux outils de traitement et de mise à jour en temps + réel. +
  • +
  • + Accès limité : Vous pourrez uniquement télécharger vos documents existants, sans possibilité de les éditer + ou de créer de nouveaux fichiers. +
  • +
+ Votre abonnement se terminera le XX/XX/XXXX. Assurez-vous de sauvegarder tout ce dont vous avez besoin avant cette + date. +
+
+
); } diff --git a/src/front/Hooks/useOpenable.ts b/src/front/Hooks/useOpenable.ts new file mode 100644 index 00000000..ad7a6e24 --- /dev/null +++ b/src/front/Hooks/useOpenable.ts @@ -0,0 +1,26 @@ +import { useCallback, useState } from "react"; + +function useOpenable() { + const [isOpen, setIsOpen] = useState(false); + + const open = useCallback(() => { + setIsOpen(true); + }, []); + + const close = useCallback(() => { + setIsOpen(false); + }, []); + + const toggle = useCallback(() => { + setIsOpen((prev) => !prev); + }, []); + + return { + isOpen, + open, + close, + toggle, + }; +} + +export default useOpenable; From dae9d10c9a0257430439b4e4d74e2e4accf593e8 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Fri, 29 Mar 2024 11:21:25 +0100 Subject: [PATCH 05/11] :sparkles: subscription resiliation working --- .../Elements/MessageBox/classes.module.scss | 3 +- .../Components/Elements/MessageBox/index.tsx | 2 -- .../SubscriptionFacturation/index.tsx | 30 +++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/front/Components/Elements/MessageBox/classes.module.scss b/src/front/Components/Elements/MessageBox/classes.module.scss index 1828a2c5..1c1c16d6 100644 --- a/src/front/Components/Elements/MessageBox/classes.module.scss +++ b/src/front/Components/Elements/MessageBox/classes.module.scss @@ -11,7 +11,8 @@ } &.info { - background-color: var(--Opium-200); + border: 1px solid #005176; + background: #c3eae64d; } &.warning { diff --git a/src/front/Components/Elements/MessageBox/index.tsx b/src/front/Components/Elements/MessageBox/index.tsx index 883c66ff..60b20862 100644 --- a/src/front/Components/Elements/MessageBox/index.tsx +++ b/src/front/Components/Elements/MessageBox/index.tsx @@ -18,8 +18,6 @@ export default function MessageBox(props: IProps) { {children} - - {children}
); diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx index fab588bc..c3b03958 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -5,6 +5,7 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import { useCallback, useState } from "react"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import useOpenable from "@Front/Hooks/useOpenable"; +import MessageBox from "@Front/Components/Elements/MessageBox"; enum EForfeitType { "standard", @@ -12,11 +13,14 @@ enum EForfeitType { } export default function SubscriptionFacturation() { const [forfeitType, _setForfeitType] = useState(EForfeitType.standard); - const { close, isOpen, open } = useOpenable(); + const { close: closeCancelSubscription, isOpen: isCancelSubscriptionOpen, open: openCancelSubscription } = useOpenable(); + const { close: closeConfirmation, isOpen: isConfirmationOpen, open: openConfirmation } = useOpenable(); const cancelSubscription = useCallback(() => { + closeCancelSubscription(); + openConfirmation(); return; - }, []); + }, [closeCancelSubscription, openConfirmation]); return ( @@ -124,7 +128,7 @@ export default function SubscriptionFacturation() {
-
+ + +
+ + Votre abonnement se terminera le XX/XX/XXXX. Assurez-vous de sauvegarder tout ce dont vous avez besoin avant cette + date. + +
+
); } From 7ce6941030b65d1ce68b0cb15aa274d7f51b9071 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Fri, 29 Mar 2024 12:03:16 +0100 Subject: [PATCH 06/11] :sparkles: wip standard illimity --- .../Elements/NavTab/classes.module.scss | 25 +++++++++ .../Components/Elements/NavTab/index.tsx | 43 +++++++++++++++ .../Elements/NumberPicker/classes.module.scss | 2 + .../Elements/NumberPicker/index.tsx | 47 ++++++++++++++++ .../classes.module.scss | 0 .../SubscribeCheckoutTicket/index.tsx | 11 ++++ .../SubscribeIllimity/classes.module.scss | 25 +++++++++ .../Subscribe/SubscribeIllimity/index.tsx | 55 +++++++++++++++++++ .../SubscribeStandard/classes.module.scss | 25 +++++++++ .../Subscribe/SubscribeStandard/index.tsx | 51 +++++++++++++++++ .../SubscriptionFacturation/index.tsx | 2 +- .../subscription/subscribe/illimity/index.tsx | 5 ++ .../subscription/subscribe/standard/index.tsx | 5 ++ 13 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 src/front/Components/Elements/NavTab/classes.module.scss create mode 100644 src/front/Components/Elements/NavTab/index.tsx create mode 100644 src/front/Components/Elements/NumberPicker/classes.module.scss create mode 100644 src/front/Components/Elements/NumberPicker/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx create mode 100644 src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss create mode 100644 src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx create mode 100644 src/pages/subscription/subscribe/illimity/index.tsx create mode 100644 src/pages/subscription/subscribe/standard/index.tsx diff --git a/src/front/Components/Elements/NavTab/classes.module.scss b/src/front/Components/Elements/NavTab/classes.module.scss new file mode 100644 index 00000000..46b89064 --- /dev/null +++ b/src/front/Components/Elements/NavTab/classes.module.scss @@ -0,0 +1,25 @@ +.root { + nav { + display: flex; + gap: 32px; + .link { + cursor: pointer; + padding: 16px; + text-decoration: none; + border-bottom: 1px solid transparent; + + &:hover { + border-bottom: 1px solid black; + } + + &.active { + color: black; + border-bottom: 1px solid black; + } + } + } + + .content { + margin-top: 24px; + } +} diff --git a/src/front/Components/Elements/NavTab/index.tsx b/src/front/Components/Elements/NavTab/index.tsx new file mode 100644 index 00000000..b7494abe --- /dev/null +++ b/src/front/Components/Elements/NavTab/index.tsx @@ -0,0 +1,43 @@ +import classNames from "classnames"; +import classes from "./classes.module.scss"; +import Link from "next/link"; +import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; +import { useRouter } from "next/router"; + +type ITabItem = { + label: string; + path: string; + activePaths?: string[]; +}; + +type IProps = { + items: ITabItem[]; +}; + +export default function NavTab(props: IProps) { + const router = useRouter(); + return ( +
+ +
+ ); +} diff --git a/src/front/Components/Elements/NumberPicker/classes.module.scss b/src/front/Components/Elements/NumberPicker/classes.module.scss new file mode 100644 index 00000000..c3a2af63 --- /dev/null +++ b/src/front/Components/Elements/NumberPicker/classes.module.scss @@ -0,0 +1,2 @@ +.root { +} diff --git a/src/front/Components/Elements/NumberPicker/index.tsx b/src/front/Components/Elements/NumberPicker/index.tsx new file mode 100644 index 00000000..c141ef3d --- /dev/null +++ b/src/front/Components/Elements/NumberPicker/index.tsx @@ -0,0 +1,47 @@ +import { useState } from "react"; +import classes from "./classes.module.scss"; + +type IProps = { + defaultValue: number; + onChange: (value: number) => void; + min?: number; + max?: number; + disabled?: boolean; +}; + +export default function NumberPicker(props: IProps) { + const { defaultValue, onChange, min, max, disabled } = props; + const [value, setValue] = useState(defaultValue); + + const handleChange = (e: React.ChangeEvent) => { + let value = parseInt(e.target.value); + if (min && value < min) { + value = min; + } + if (max && value > max) { + value = max; + } + setValue(value); + onChange(value); + }; + + const handleMinus = () => { + handleChange({ target: { value: value - 1 } } as any); + }; + + const handlePlus = () => { + handleChange({ target: { value: value + 1 } } as any); + }; + + return ( +
+ + + +
+ ); +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx new file mode 100644 index 00000000..3b567fcc --- /dev/null +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx @@ -0,0 +1,11 @@ +import { EForfeitType } from "../../SubscriptionFacturation"; +import classes from "./classes.module.scss"; + +type IProps = { + forfeitType: EForfeitType; +}; +export default function SubscribeCheckoutTicket(props: IProps) { + const { forfeitType } = props; + + return
; +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss new file mode 100644 index 00000000..80936b83 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss @@ -0,0 +1,25 @@ +@import "@Themes/constants.scss"; + +.root { + max-width: 1024px; + display: flex; + gap: 104px; + .left { + display: flex; + gap: 40px; + flex-direction: column; + .infos-container { + display: flex; + flex-direction: column; + gap: 16px; + .line { + display: flex; + gap: 16px; + } + } + } + + .right { + width: 372px; + } +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx new file mode 100644 index 00000000..bf7548fa --- /dev/null +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx @@ -0,0 +1,55 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import classes from "./classes.module.scss"; +import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; +import NavTab from "@Front/Components/Elements/NavTab"; +import CheckIcon from "@Assets/Icons/check.svg"; +import Image from "next/image"; + +export default function SubscribeIllimity() { + return ( + +
+
+ + + Nombre de collaborateurs illimités + +
+
+ Check icon + + Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en + main optimale de l'application + +
+
+ Check icon + + Support technique : notre équipe support est disponible pour vous assister en cas d’incident + +
+
+ Check icon + + Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières fonctionnalités, + améliorations de sécurité et performances optimisées + +
+
+ Check icon + + Sans limite d'utilisateurs + +
+
+
+
+
+
+ ); +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss new file mode 100644 index 00000000..80936b83 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss @@ -0,0 +1,25 @@ +@import "@Themes/constants.scss"; + +.root { + max-width: 1024px; + display: flex; + gap: 104px; + .left { + display: flex; + gap: 40px; + flex-direction: column; + .infos-container { + display: flex; + flex-direction: column; + gap: 16px; + .line { + display: flex; + gap: 16px; + } + } + } + + .right { + width: 372px; + } +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx new file mode 100644 index 00000000..dc9336d9 --- /dev/null +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx @@ -0,0 +1,51 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; +import classes from "./classes.module.scss"; +import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; +import NavTab from "@Front/Components/Elements/NavTab"; +import CheckIcon from "@Assets/Icons/check.svg"; +import Image from "next/image"; +import NumberPicker from "@Front/Components/Elements/NumberPicker"; + +export default function SubscribeIllimity() { + return ( + +
+
+ + + Choisissez le nombre de collaborateurs pour votre abonnement + + {}} min={1} /> +
+
+ Check icon + + Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en + main optimale de l'application + +
+
+ Check icon + + Support technique : notre équipe support est disponible pour vous assister en cas d’incident + +
+
+ Check icon + + Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières fonctionnalités, + améliorations de sécurité et performances optimisées + +
+
+
+
+
+
+ ); +} diff --git a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx index c3b03958..33e3be63 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionFacturation/index.tsx @@ -7,7 +7,7 @@ import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import useOpenable from "@Front/Hooks/useOpenable"; import MessageBox from "@Front/Components/Elements/MessageBox"; -enum EForfeitType { +export enum EForfeitType { "standard", "unlimited", } diff --git a/src/pages/subscription/subscribe/illimity/index.tsx b/src/pages/subscription/subscribe/illimity/index.tsx new file mode 100644 index 00000000..5eb8e37a --- /dev/null +++ b/src/pages/subscription/subscribe/illimity/index.tsx @@ -0,0 +1,5 @@ +import SubscribeIllimity from "@Front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity"; + +export default function Route() { + return ; +} diff --git a/src/pages/subscription/subscribe/standard/index.tsx b/src/pages/subscription/subscribe/standard/index.tsx new file mode 100644 index 00000000..ec4481f0 --- /dev/null +++ b/src/pages/subscription/subscribe/standard/index.tsx @@ -0,0 +1,5 @@ +import SubscribeStandard from "@Front/Components/Layouts/Subscription/Subscribe/SubscribeStandard"; + +export default function Route() { + return ; +} From e94648e2b806146668d7b992371e96cbabc77246 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Tue, 2 Apr 2024 16:07:25 +0200 Subject: [PATCH 07/11] :sparkles: Subscribe page --- .../DefaultTemplate/classes.module.scss | 3 +- .../classes.module.scss | 63 +++++++ .../SubscribeCheckoutTicket/index.tsx | 173 +++++++++++++++++- .../SubscribeIllimity/classes.module.scss | 74 +++++++- .../Subscribe/SubscribeIllimity/index.tsx | 155 +++++++++++----- .../SubscribeStandard/classes.module.scss | 74 +++++++- .../Subscribe/SubscribeStandard/index.tsx | 153 ++++++++++++---- src/front/Themes/modes.scss | 2 + src/front/Themes/variables.scss | 1 + 9 files changed, 611 insertions(+), 87 deletions(-) diff --git a/src/front/Components/LayoutTemplates/DefaultTemplate/classes.module.scss b/src/front/Components/LayoutTemplates/DefaultTemplate/classes.module.scss index 5ed93eb5..41b044a9 100644 --- a/src/front/Components/LayoutTemplates/DefaultTemplate/classes.module.scss +++ b/src/front/Components/LayoutTemplates/DefaultTemplate/classes.module.scss @@ -4,7 +4,6 @@ margin: var(--root-margin); max-width: var(--root-max-width); min-width: 100%; - min-height: calc(100vh - 83px); &.padding { padding: var(--root-padding); @@ -17,4 +16,4 @@ padding: 0 16px; } } -} \ No newline at end of file +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss index e69de29b..f9ced6e5 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/classes.module.scss @@ -0,0 +1,63 @@ +@import "@Themes/constants.scss"; + +.root { + width: 372px; + + @media (max-width: $screen-s) { + width: 100%; + } + .container { + display: flex; + flex-direction: column; + justify-content: center; + gap: 32px; + box-shadow: 0px 8px 10px 0px #00000012; + padding: 22px 40px; + border-radius: 16px; + + @media (max-width: $screen-s) { + box-shadow: none; + padding: 0px; + } + + .forfeit-type { + text-align: center; + } + + .container-frequency { + display: flex; + justify-content: space-between; + } + + .separator { + width: 100%; + height: 1px; + background-color: gray; + } + + .container-line { + display: flex; + flex-direction: column; + gap: 24px; + .line { + display: flex; + justify-content: space-between; + + .line-sub-container { + display: flex; + flex-direction: column; + } + } + } + + .container-tight { + gap: 8px; + } + + .payment-button { + @media (max-width: $screen-s) { + display: none; + } + } + } +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx index 3b567fcc..7c3e7df9 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx @@ -1,11 +1,178 @@ +import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import { EForfeitType } from "../../SubscriptionFacturation"; import classes from "./classes.module.scss"; +import { useEffect, useState } from "react"; +import RadioBox from "@Front/Components/DesignSystem/RadioBox"; +import Button from "@Front/Components/DesignSystem/Button"; +import classnames from "classnames"; + +export const forfeitsPrices: Record = { + [EForfeitType.standard]: 99, + [EForfeitType.unlimited]: 249, +}; + +export const collaboratorPrice = 6.99; type IProps = { forfeitType: EForfeitType; + numberOfCollaborators: number; + defaultFrequency?: EPaymentFrequency; }; -export default function SubscribeCheckoutTicket(props: IProps) { - const { forfeitType } = props; - return
; +export enum EPaymentFrequency { + monthly, + yearly, +} + +export default function SubscribeCheckoutTicket(props: IProps) { + const { forfeitType, numberOfCollaborators } = props; + const [paymentFrequency, setPaymentFrequency] = useState(props.defaultFrequency ?? EPaymentFrequency.monthly); + const [multiplier, setMultiplier] = useState(1); + + useEffect(() => { + setMultiplier(paymentFrequency === EPaymentFrequency.monthly ? 1 : 12); + }, [paymentFrequency]); + + const handleFrequencyChange = (e: React.ChangeEvent) => { + setPaymentFrequency(parseInt(e.target.value) as EPaymentFrequency); + }; + + const formatFloat = (value: number) => { + return value.toFixed(2).replace(".", ","); + }; + + return ( +
+
+
+ + {forfeitType === EForfeitType.standard ? "Forfait standard" : "Forfait illimité"} + +
+
+
+ + Annuel + + + Mensuel + +
+
+
+
+
+ + {forfeitType === EForfeitType.standard ? "Plan individuel" : "Plan illimité"} + + {paymentFrequency === EPaymentFrequency.yearly && ( + + {forfeitType === EForfeitType.standard + ? forfeitsPrices[EForfeitType.standard] + : forfeitsPrices[EForfeitType.unlimited]} +  € x 12 + + )} +
+ + + {forfeitType === EForfeitType.standard + ? forfeitsPrices[EForfeitType.standard] * multiplier + : forfeitsPrices[EForfeitType.unlimited] * multiplier} + € + +
+ {forfeitType === EForfeitType.standard && ( +
+
+ + {numberOfCollaborators} collaborateurs + + + {formatFloat(collaboratorPrice)} € x {numberOfCollaborators} + +
+ + {formatFloat(collaboratorPrice * numberOfCollaborators * multiplier)} € + +
+ )} +
+ {forfeitType === EForfeitType.standard && ( + <> +
+
+
+ + Total HT + + + {formatFloat( + (forfeitsPrices[EForfeitType.standard] + collaboratorPrice * numberOfCollaborators) * multiplier, + )} +  € + +
+
+ + TVA 20% + + + {formatFloat( + (forfeitsPrices[EForfeitType.standard] + collaboratorPrice * numberOfCollaborators) * + 0.2 * + multiplier, + )} +  € + +
+
+ + )} +
+
+ {forfeitType === EForfeitType.unlimited && ( +
+ + TVA 20% + + + {formatFloat(forfeitsPrices[EForfeitType.unlimited] * 0.2 * multiplier)} € + +
+ )} +
+ + Total TTC + + {forfeitType === EForfeitType.standard && ( + + {formatFloat( + (forfeitsPrices[EForfeitType.standard] + collaboratorPrice * numberOfCollaborators) * 1.2 * multiplier, + )} +  € + + )} + {forfeitType === EForfeitType.unlimited && ( + + {formatFloat(forfeitsPrices[EForfeitType.unlimited] * 1.2 * multiplier)} +  € + + )} +
+
+ +
+
+ ); } diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss index 80936b83..9796b980 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss @@ -1,9 +1,20 @@ @import "@Themes/constants.scss"; .root { - max-width: 1024px; display: flex; + justify-content: space-between; gap: 104px; + + @media (max-width: $screen-m) { + margin-top: 40px; + margin-bottom: 40px; + gap: 72px; + } + + @media (max-width: $screen-s) { + margin-bottom: 50px; + } + .left { display: flex; gap: 40px; @@ -13,6 +24,10 @@ flex-direction: column; gap: 16px; .line { + svg { + min-width: 24px; + min-height: 24px; + } display: flex; gap: 16px; } @@ -21,5 +36,62 @@ .right { width: 372px; + @media (max-width: $screen-m) { + margin-top: 50px; + } + + @media (max-width: $screen-s) { + display: none; + } + } + + button { + @media (max-width: $screen-s) { + display: none; + } + } +} + +.bottom { + display: none; + position: sticky; + bottom: 0px; + flex-direction: column; + justify-content: center; + gap: 32px; + box-shadow: 0px 8px 10px 0px #00000012; + padding: 22px 16px; + border-radius: 16px 16px 0 0; + background: white; + + @media (max-width: $screen-s) { + display: flex; + } + + box-shadow: 0px 4px 24px 0px #00000026; + + .forfeit-type { + text-align: center; + } + + .container-frequency { + display: flex; + justify-content: space-between; + } + + .separator { + width: 100%; + height: 1px; + background-color: gray; + } + + .container-line { + display: flex; + justify-content: space-between; + gap: 24px; + } + + .container-tight { + gap: 8px; } } diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx index bf7548fa..e275c50d 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx @@ -2,54 +2,125 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Ty import classes from "./classes.module.scss"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import NavTab from "@Front/Components/Elements/NavTab"; -import CheckIcon from "@Assets/Icons/check.svg"; -import Image from "next/image"; +import SubscribeCheckoutTicket, { EPaymentFrequency, forfeitsPrices } from "../SubscribeCheckoutTicket"; +import { EForfeitType } from "../../SubscriptionFacturation"; +import { useEffect, useState } from "react"; +import Check from "@Front/Components/Elements/Icons/Check"; +import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; +import RadioBox from "@Front/Components/DesignSystem/RadioBox"; +import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; +import useOpenable from "@Front/Hooks/useOpenable"; export default function SubscribeIllimity() { + const { close, isOpen, open } = useOpenable(); + + const formatFloat = (value: number) => { + return value.toFixed(2).replace(".", ","); + }; + + const [paymentFrequency, setPaymentFrequency] = useState(EPaymentFrequency.monthly); + const [multiplier, setMultiplier] = useState(1); + + useEffect(() => { + setMultiplier(paymentFrequency === EPaymentFrequency.monthly ? 1 : 12); + }, [paymentFrequency]); + + const handleFrequencyChange = (e: React.ChangeEvent) => { + setPaymentFrequency(parseInt(e.target.value) as EPaymentFrequency); + }; + return ( - -
-
- - - Nombre de collaborateurs illimités - -
-
- Check icon - - Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en - main optimale de l'application - -
-
- Check icon - - Support technique : notre équipe support est disponible pour vous assister en cas d’incident - -
-
- Check icon - - Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières fonctionnalités, - améliorations de sécurité et performances optimisées - -
-
- Check icon - - Sans limite d'utilisateurs - + <> + +
+
+ + + Nombre de collaborateurs illimité + +
+
+ + + Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en + main optimale de l'application + +
+
+ + + Support technique : notre équipe support est disponible pour vous assister en cas d’incident + +
+
+ + + Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières + fonctionnalités, améliorations de sécurité et performances optimisées + +
+
+ + + Sans limite d'utilisateurs + +
+
+ +
+ +
+
+ + + +
+
+ + Annuel + + + Mensuel + +
+
+
+ + Total TTC + + + {formatFloat(forfeitsPrices[EForfeitType.unlimited] * 1.2 * multiplier)} +  € + +
+
+ +
+
+
-
- + ); } diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss index 80936b83..9796b980 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss @@ -1,9 +1,20 @@ @import "@Themes/constants.scss"; .root { - max-width: 1024px; display: flex; + justify-content: space-between; gap: 104px; + + @media (max-width: $screen-m) { + margin-top: 40px; + margin-bottom: 40px; + gap: 72px; + } + + @media (max-width: $screen-s) { + margin-bottom: 50px; + } + .left { display: flex; gap: 40px; @@ -13,6 +24,10 @@ flex-direction: column; gap: 16px; .line { + svg { + min-width: 24px; + min-height: 24px; + } display: flex; gap: 16px; } @@ -21,5 +36,62 @@ .right { width: 372px; + @media (max-width: $screen-m) { + margin-top: 50px; + } + + @media (max-width: $screen-s) { + display: none; + } + } + + button { + @media (max-width: $screen-s) { + display: none; + } + } +} + +.bottom { + display: none; + position: sticky; + bottom: 0px; + flex-direction: column; + justify-content: center; + gap: 32px; + box-shadow: 0px 8px 10px 0px #00000012; + padding: 22px 16px; + border-radius: 16px 16px 0 0; + background: white; + + @media (max-width: $screen-s) { + display: flex; + } + + box-shadow: 0px 4px 24px 0px #00000026; + + .forfeit-type { + text-align: center; + } + + .container-frequency { + display: flex; + justify-content: space-between; + } + + .separator { + width: 100%; + height: 1px; + background-color: gray; + } + + .container-line { + display: flex; + justify-content: space-between; + gap: 24px; + } + + .container-tight { + gap: 8px; } } diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx index dc9336d9..e30d151e 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx @@ -2,50 +2,127 @@ import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Ty import classes from "./classes.module.scss"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import NavTab from "@Front/Components/Elements/NavTab"; -import CheckIcon from "@Assets/Icons/check.svg"; -import Image from "next/image"; import NumberPicker from "@Front/Components/Elements/NumberPicker"; +import SubscribeCheckoutTicket, { EPaymentFrequency, collaboratorPrice, forfeitsPrices } from "../SubscribeCheckoutTicket"; +import { EForfeitType } from "../../SubscriptionFacturation"; +import { useEffect, useState } from "react"; +import Check from "@Front/Components/Elements/Icons/Check"; +import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; +import RadioBox from "@Front/Components/DesignSystem/RadioBox"; +import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; +import useOpenable from "@Front/Hooks/useOpenable"; + +export default function SubscribeStandard() { + const [numberOfCollaborators, setNumberOfCollaborators] = useState(1); + const { close, isOpen, open } = useOpenable(); + const handleCollaboratorsChange = (value: number) => { + setNumberOfCollaborators(value); + }; + + const formatFloat = (value: number) => { + return value.toFixed(2).replace(".", ","); + }; + + const [paymentFrequency, setPaymentFrequency] = useState(EPaymentFrequency.monthly); + const [multiplier, setMultiplier] = useState(1); + + useEffect(() => { + setMultiplier(paymentFrequency === EPaymentFrequency.monthly ? 1 : 12); + }, [paymentFrequency]); + + const handleFrequencyChange = (e: React.ChangeEvent) => { + setPaymentFrequency(parseInt(e.target.value) as EPaymentFrequency); + }; -export default function SubscribeIllimity() { return ( - -
-
- - - Choisissez le nombre de collaborateurs pour votre abonnement - - {}} min={1} /> -
-
- Check icon - - Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en - main optimale de l'application - -
-
- Check icon - - Support technique : notre équipe support est disponible pour vous assister en cas d’incident - -
-
- Check icon - - Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières fonctionnalités, - améliorations de sécurité et performances optimisées - + <> + +
+
+ + + Choisissez le nombre de collaborateurs pour votre abonnement + + +
+
+ + + Accompagnement facilité : profitez d'un onboarding individualisé, où nous vous guidons pour une prise en + main optimale de l'application + +
+
+ + + Support technique : notre équipe support est disponible pour vous assister en cas d’incident + +
+
+ + + Mises à jour régulières : bénéficiez de mises à jour fréquentes pour profiter des dernières + fonctionnalités, améliorations de sécurité et performances optimisées + +
+
+ +
+ +
+
+ + + +
+
+ + Annuel + + + Mensuel + +
+
+
+ + Total TTC + + + {formatFloat( + (forfeitsPrices[EForfeitType.standard] + collaboratorPrice * numberOfCollaborators) * 1.2 * multiplier, + )} +  € + +
+
+ +
+
+
-
- + ); } diff --git a/src/front/Themes/modes.scss b/src/front/Themes/modes.scss index c5a412e1..be21231a 100644 --- a/src/front/Themes/modes.scss +++ b/src/front/Themes/modes.scss @@ -4,6 +4,8 @@ body.body { // --black: #000000; --green-flash: #{green-flash}; + --black: #{$black}; + // --blue-flash: #005176; // --turquoise-flash: #3fa79e; // --purple-flash: #320756; diff --git a/src/front/Themes/variables.scss b/src/front/Themes/variables.scss index a5740818..f067f836 100644 --- a/src/front/Themes/variables.scss +++ b/src/front/Themes/variables.scss @@ -31,5 +31,6 @@ --grey-medium: #{$grey-medium}; --grey-soft: #{$grey-soft}; + --black: #{$black}; --white: #{$white}; } From 75a279711a6882fae990f576caf4fb0f02bdc967 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Tue, 2 Apr 2024 16:09:25 +0200 Subject: [PATCH 08/11] :bug: Fixing payment --- .../Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx | 1 - .../Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx | 1 - 2 files changed, 2 deletions(-) diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx index e275c50d..8ca0c65b 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/index.tsx @@ -75,7 +75,6 @@ export default function SubscribeIllimity() {
-
diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx index e30d151e..0cb38fa5 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx @@ -75,7 +75,6 @@ export default function SubscribeStandard() {
-
From dbf8259c56afa644b3f7216c37db1f2725eaa193 Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Tue, 2 Apr 2024 16:23:51 +0200 Subject: [PATCH 09/11] :bug: linking pages --- .../Layouts/Subscription/SubscriptionNew/index.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx index 25c11914..dd780c11 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionNew/index.tsx @@ -4,6 +4,7 @@ import CheckIcon from "@Assets/Icons/check.svg"; import Image from "next/image"; import DefaultTemplate from "@Front/Components/LayoutTemplates/DefaultTemplate"; import Button from "@Front/Components/DesignSystem/Button"; +import Link from "next/link"; export default function SubscriptionNew() { return ( @@ -45,7 +46,9 @@ export default function SubscriptionNew() {
- + + +
@@ -71,7 +74,9 @@ export default function SubscriptionNew() {
- + + +
From 8b85f1288433f1cd507f105332535577d22117bb Mon Sep 17 00:00:00 2001 From: Maxime Lalo Date: Thu, 4 Apr 2024 10:04:34 +0200 Subject: [PATCH 10/11] :bug: fix big screens --- .../Subscribe/SubscribeIllimity/classes.module.scss | 3 ++- .../Subscribe/SubscribeStandard/classes.module.scss | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss index 9796b980..c0b1a51d 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeIllimity/classes.module.scss @@ -4,7 +4,8 @@ display: flex; justify-content: space-between; gap: 104px; - + max-width: 1400px; + margin: auto; @media (max-width: $screen-m) { margin-top: 40px; margin-bottom: 40px; diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss index 9796b980..c0b1a51d 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/classes.module.scss @@ -4,7 +4,8 @@ display: flex; justify-content: space-between; gap: 104px; - + max-width: 1400px; + margin: auto; @media (max-width: $screen-m) { margin-top: 40px; margin-bottom: 40px; From 6c687b5dde9a24452c58f0bf8120bb60717497d1 Mon Sep 17 00:00:00 2001 From: Vins Date: Thu, 4 Apr 2024 10:30:47 +0200 Subject: [PATCH 11/11] Subscription --- package-lock.json | 931 ++++++++++-------- package.json | 4 +- .../Api/LeCoffreApi/Admin/Stripe/Stripe.ts | 40 + .../SubscribeCheckoutTicket/index.tsx | 20 +- .../Subscribe/SubscribeStandard/index.tsx | 2 + 5 files changed, 565 insertions(+), 432 deletions(-) create mode 100644 src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts diff --git a/package-lock.json b/package-lock.json index e65d49ab..59e4c5e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "eslint-config-next": "13.2.4", "form-data": "^4.0.0", "jwt-decode": "^3.1.2", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.119", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.126", "next": "13.2.4", "prettier": "^2.8.7", "react": "18.2.0", @@ -45,96 +45,32 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "engines": { "node": ">=6.9.0" } @@ -148,13 +84,14 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -225,9 +162,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -236,9 +173,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -284,9 +221,9 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -297,9 +234,9 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.3", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", - "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", @@ -320,9 +257,9 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", - "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", @@ -337,14 +274,14 @@ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1" }, @@ -501,19 +438,19 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" }, "node_modules/@mui/base": { - "version": "5.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.36.tgz", - "integrity": "sha512-6A8fYiXgjqTO6pgj31Hc8wm1M3rFYCxDRh09dBVk0L0W4cb2lnurRJa3cAyic6hHY+we1S58OdGYRbKmOsDpGQ==", + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", "dependencies": { "@babel/runtime": "^7.23.9", "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.9", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@popperjs/core": "^2.11.8", "clsx": "^2.1.0", "prop-types": "^15.8.1" @@ -537,25 +474,25 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.10", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.10.tgz", - "integrity": "sha512-qPv7B+LeMatYuzRjB3hlZUHqinHx/fX4YFBiaS19oC02A1e9JFuDKDvlyRQQ5oRSbJJt0QlaLTlr0IcauVcJRQ==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.14.tgz", + "integrity": "sha512-on75VMd0XqZfaQW+9pGjSNiqW+ghc5E2ZSLRBXwcXl/C4YzjfyjrLPhrEpKnR9Uym9KXBvxrhoHfPcczYHweyA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/material": { - "version": "5.15.10", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.10.tgz", - "integrity": "sha512-YJJGHjwDOucecjDEV5l9ISTCo+l9YeWrho623UajzoHRYxuKUmwrGVYOW4PKwGvCx9SU9oklZnbbi2Clc5XZHw==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.14.tgz", + "integrity": "sha512-kEbRw6fASdQ1SQ7LVdWR5OlWV3y7Y54ZxkLzd6LV5tmz+NpO3MJKZXSfgR0LHMP7meKsPiMm4AuzV0pXDpk/BQ==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.36", - "@mui/core-downloads-tracker": "^5.15.10", - "@mui/system": "^5.15.9", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.9", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.14", + "@mui/system": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@types/react-transition-group": "^4.4.10", "clsx": "^2.1.0", "csstype": "^3.1.3", @@ -590,12 +527,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.9.tgz", - "integrity": "sha512-/aMJlDOxOTAXyp4F2rIukW1O0anodAMCkv1DfBh/z9vaKHY3bd5fFf42wmP+0GRmwMinC5aWPpNfHXOED1fEtg==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.14.tgz", + "integrity": "sha512-UH0EiZckOWcxiXLX3Jbb0K7rC8mxTr9L9l6QhOZxYc4r8FHUkefltV9VDGLrzCaWh30SQiJvAEd7djX3XXY6Xw==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.9", + "@mui/utils": "^5.15.14", "prop-types": "^15.8.1" }, "engines": { @@ -616,9 +553,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.9", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.9.tgz", - "integrity": "sha512-NRKtYkL5PZDH7dEmaLEIiipd3mxNnQSO+Yo8rFNBNptY8wzQnQ+VjayTq39qH7Sast5cwHKYFusUrQyD+SS4Og==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", "dependencies": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", @@ -647,15 +584,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.9", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.9.tgz", - "integrity": "sha512-SxkaaZ8jsnIJ77bBXttfG//LUf6nTfOcaOuIgItqfHv60ZCQy/Hu7moaob35kBb+guxVJnoSZ+7vQJrA/E7pKg==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.14.tgz", + "integrity": "sha512-auXLXzUaCSSOLqJXmsAaq7P96VPRXg2Rrz6OHNV7lr+kB8lobUF+/N84Vd9C4G/wvCXYPs5TYuuGBRhcGbiBGg==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.9", - "@mui/styled-engine": "^5.15.9", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.9", + "@mui/private-theming": "^5.15.14", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -686,9 +623,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -699,9 +636,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.9.tgz", - "integrity": "sha512-yDYfr61bCYUz1QtwvpqYy/3687Z8/nS4zv7lv/ih/6ZFGMl1iolEvxRmR84v2lOYxlds+kq1IVYbXxDKh8Z9sg==", + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.14.tgz", + "integrity": "sha512-0lF/7Hh/ezDv5X7Pry6enMsbYyGKjADzvHyo3Qrc/SSlTsQ1VkbDMbH0m2t3OR5iIVLwMoxwM7yGd+6FCMtTFA==", "dependencies": { "@babel/runtime": "^7.23.9", "@types/prop-types": "^15.7.11", @@ -975,9 +912,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", - "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", + "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==" }, "node_modules/@swc/helpers": { "version": "0.4.14", @@ -1003,9 +940,9 @@ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { "version": "18.0.28", @@ -1034,9 +971,9 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==" }, "node_modules/@types/uuid": { "version": "8.3.4", @@ -1241,14 +1178,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -1266,16 +1204,17 @@ "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1285,14 +1224,15 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -1336,6 +1276,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", @@ -1374,23 +1325,18 @@ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -1439,15 +1385,15 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", - "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", "optional": true }, "node_modules/bare-fs": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.1.5.tgz", - "integrity": "sha512-5t0nlecX+N2uJqdxe9d18A98cp2u9BETelbjKpiVgQqzzmVNFYWEAjQHqS+2Khgto1vcwhik9cXucaj5ve2WWA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.2.2.tgz", + "integrity": "sha512-X9IqgvyB0/VA5OZJyb5ZstoN62AzD7YxVGog13kkfYWYqJYcK0kcqLZ6TrmH5qr4/8//ejVcX4x/a0UvaogXmA==", "optional": true, "dependencies": { "bare-events": "^2.0.0", @@ -1457,9 +1403,9 @@ } }, "node_modules/bare-os": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.0.tgz", - "integrity": "sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.1.tgz", + "integrity": "sha512-OwPyHgBBMkhC29Hl3O4/YfxW9n7mdTr2+SsO29XBWKKJsbgj3mnorDB80r5TiCQgQstgE5ga1qNYrpes6NvX2w==", "optional": true }, "node_modules/bare-path": { @@ -1491,11 +1437,14 @@ ] }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -1578,9 +1527,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001588", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", - "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", + "version": "1.0.30001605", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", + "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", "funding": [ { "type": "opencollective", @@ -1793,6 +1742,54 @@ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1885,9 +1882,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } @@ -1924,9 +1921,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, @@ -1948,9 +1945,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1968,17 +1965,21 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -1986,15 +1987,16 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -2002,17 +2004,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -2021,11 +2023,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -2046,38 +2043,48 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", - "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", "dependencies": { - "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.4", + "es-abstract": "^1.23.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.0" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -2242,9 +2249,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dependencies": { "debug": "^3.2.7" }, @@ -2352,26 +2359,28 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -2624,9 +2633,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/for-each": { "version": "0.3.3", @@ -2740,9 +2749,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -2892,9 +2901,9 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -2928,9 +2937,9 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -3131,6 +3140,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -3190,17 +3213,20 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "engines": { "node": ">= 0.4" }, @@ -3254,19 +3280,25 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3315,9 +3347,12 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3334,12 +3369,15 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3467,7 +3505,7 @@ } }, "node_modules/le-coffre-resources": { - "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#de8a3be3ddad5e2b583f52f9830e7a10b0fc2e4c", + "resolved": "git+ssh://git@github.com/smart-chain-fr/leCoffre-resources.git#bb3e87116ea3e2682f61ff322b99bae895cc4308", "license": "MIT", "dependencies": { "class-transformer": "^0.5.1", @@ -3488,9 +3526,9 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.10.56", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.56.tgz", - "integrity": "sha512-d0GdKshNnyfl5gM7kZ9rXjGiAbxT/zCXp0k+EAzh8H4zrb2R7GXtMCrULrX7UQxtfx6CLy/vz/lomvW79FAFdA==" + "version": "1.10.59", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.59.tgz", + "integrity": "sha512-HeTsOrDF/hWhEiKqZVwg9Cqlep5x2T+IYDENvT2VRj3iX8JQ7Y+omENv+AIn0vC8m6GYhivfCed5Cgfw27r5SA==" }, "node_modules/lines-and-columns": { "version": "1.2.4", @@ -3705,9 +3743,9 @@ } }, "node_modules/node-abi": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", - "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.57.0.tgz", + "integrity": "sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==", "dependencies": { "semver": "^7.3.5" }, @@ -3770,26 +3808,27 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3799,37 +3838,42 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3971,6 +4015,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", @@ -3995,9 +4047,9 @@ } }, "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -4258,15 +4310,15 @@ "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" }, "node_modules/reflect.getprototypeof": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", - "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "get-intrinsic": "^1.2.3", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -4377,12 +4429,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -4429,9 +4481,9 @@ } }, "node_modules/sass": { - "version": "1.71.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.0.tgz", - "integrity": "sha512-HKKIKf49Vkxlrav3F/w6qRuPcmImGVbIXJ2I3Kg0VMA+3Bav+8yE9G5XmP5lMj6nl4OlqbPftGAscNaNu28b8w==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", + "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -4467,29 +4519,30 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4537,11 +4590,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -4626,17 +4679,17 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } }, "node_modules/streamx": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.0.tgz", - "integrity": "sha512-a7Fi0PoUeusrUcMS4+HxivnZqYsw2MFEP841TIyLxTcEIucHcJsk+0ARcq3tGq1xDn+xK7sKHetvfMzI1/CzMA==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", "dependencies": { "fast-fifo": "^1.1.0", "queue-tick": "^1.0.1" @@ -4654,32 +4707,39 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4689,26 +4749,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4917,11 +4980,11 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", - "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" }, @@ -4930,14 +4993,15 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -4947,15 +5011,15 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.1.tgz", - "integrity": "sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dependencies": { - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "is-typed-array": "^1.1.13" }, "engines": { @@ -4966,13 +5030,19 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5110,29 +5180,32 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index 90100406..870848ea 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev -p 5005", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", @@ -25,7 +25,7 @@ "eslint-config-next": "13.2.4", "form-data": "^4.0.0", "jwt-decode": "^3.1.2", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.119", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.126", "next": "13.2.4", "prettier": "^2.8.7", "react": "18.2.0", diff --git a/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts b/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts new file mode 100644 index 00000000..95e41e74 --- /dev/null +++ b/src/front/Api/LeCoffreApi/Admin/Stripe/Stripe.ts @@ -0,0 +1,40 @@ +import { EType } from "le-coffre-resources/dist/Admin/Subscription"; +import BaseAdmin from "../BaseAdmin"; + +export interface IPostStripeParams { + type: EType; + nb_seats: number; +} + +export type IPostStripeResponse = { + url: string; +}; + +export default class Stripe extends BaseAdmin { + private static instance: Stripe; + private readonly baseURl = this.namespaceUrl.concat("/stripe"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new Stripe(); + } else { + return this.instance; + } + } + + public async post(body: IPostStripeParams) { + const url = new URL(this.baseURl); + try { + console.log(body); + + return await this.postRequest(url, body as any); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx index 7c3e7df9..1122913b 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeCheckoutTicket/index.tsx @@ -5,6 +5,9 @@ import { useEffect, useState } from "react"; import RadioBox from "@Front/Components/DesignSystem/RadioBox"; import Button from "@Front/Components/DesignSystem/Button"; import classnames from "classnames"; +import { EType } from "le-coffre-resources/dist/Admin/Subscription"; +import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe"; +import { useRouter } from "next/router"; export const forfeitsPrices: Record = { [EForfeitType.standard]: 99, @@ -25,6 +28,7 @@ export enum EPaymentFrequency { } export default function SubscribeCheckoutTicket(props: IProps) { + const router = useRouter(); const { forfeitType, numberOfCollaborators } = props; const [paymentFrequency, setPaymentFrequency] = useState(props.defaultFrequency ?? EPaymentFrequency.monthly); const [multiplier, setMultiplier] = useState(1); @@ -41,6 +45,20 @@ export default function SubscribeCheckoutTicket(props: IProps) { return value.toFixed(2).replace(".", ","); }; + const handleSubmitPayment = async () => { + console.log("handleSubmitPayment"); + + const stripeCheckout = { + type: EType.Standard, + nb_seats: numberOfCollaborators, + }; + + try { + const newStripeCheckout = await Stripe.getInstance().post(stripeCheckout); + router.push(newStripeCheckout.url); + } catch (error) {} + }; + return (
@@ -169,7 +187,7 @@ export default function SubscribeCheckoutTicket(props: IProps) { )}
-
diff --git a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx index 0cb38fa5..7486cfbf 100644 --- a/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx +++ b/src/front/Components/Layouts/Subscription/Subscribe/SubscribeStandard/index.tsx @@ -11,6 +11,8 @@ import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import RadioBox from "@Front/Components/DesignSystem/RadioBox"; import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import useOpenable from "@Front/Hooks/useOpenable"; +// import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe"; +// import { EType } from "le-coffre-resources/dist/Admin/Subscription"; export default function SubscribeStandard() { const [numberOfCollaborators, setNumberOfCollaborators] = useState(1);