From 5924aa10c4275af224a12f41e8f09c04deb79426 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 2 Aug 2023 11:01:03 +0530 Subject: [PATCH 01/29] docs: adds explanation (handleStripeSCAPayment) --- src/Donations/PaymentMethods/PaymentFunctions.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Donations/PaymentMethods/PaymentFunctions.ts b/src/Donations/PaymentMethods/PaymentFunctions.ts index e0495966..e3693638 100644 --- a/src/Donations/PaymentMethods/PaymentFunctions.ts +++ b/src/Donations/PaymentMethods/PaymentFunctions.ts @@ -466,6 +466,7 @@ export async function handleStripeSCAPayment({ } try { const payDonationData = { + // method not sent here as it was already captured in the 1st request. paymentProviderRequest: { account: paymentSetup.gateways.stripe.account, gateway: "stripe" as const, From 53345a01bedec103357dd3df1973b74b53b0987f Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 2 Aug 2023 11:45:56 +0530 Subject: [PATCH 02/29] chore: updates planet-sdk --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1fd66929..3efee66b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@mui/material": "^5.11.8", "@next/bundle-analyzer": "^10.1.3", "@paypal/react-paypal-js": "^7.8.2", - "@planet-sdk/common": "^0.1.8", + "@planet-sdk/common": "^0.1.21", "@sentry/browser": "^6.2.5", "@sentry/integrations": "^6.2.5", "@sentry/node": "^6.2.5", @@ -1078,9 +1078,9 @@ "dev": true }, "node_modules/@planet-sdk/common": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.8.tgz", - "integrity": "sha512-1K3NACqgom4ZgA0GRWPXWRnTA72I4HHwBDbWOSTnRZkKE7Pl9fAwWjYyy72xJ5D654q66KmLSy4dMvRmcvBUMA==", + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.21.tgz", + "integrity": "sha512-XDrA0eylGezdA+Y4WcJVV9kzQ9HtlYIf5w7t+HMdsIXKV6UCc1Rb65J/rQPp4YKaUIYhCkmF9Sgd+BlVt5R1Ew==", "dependencies": { "@types/geojson": "^7946.0.10" } @@ -8722,9 +8722,9 @@ } }, "@planet-sdk/common": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.8.tgz", - "integrity": "sha512-1K3NACqgom4ZgA0GRWPXWRnTA72I4HHwBDbWOSTnRZkKE7Pl9fAwWjYyy72xJ5D654q66KmLSy4dMvRmcvBUMA==", + "version": "0.1.21", + "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.21.tgz", + "integrity": "sha512-XDrA0eylGezdA+Y4WcJVV9kzQ9HtlYIf5w7t+HMdsIXKV6UCc1Rb65J/rQPp4YKaUIYhCkmF9Sgd+BlVt5R1Ew==", "requires": { "@types/geojson": "^7946.0.10" } diff --git a/package.json b/package.json index 9a8a1186..4d99351b 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@mui/material": "^5.11.8", "@next/bundle-analyzer": "^10.1.3", "@paypal/react-paypal-js": "^7.8.2", - "@planet-sdk/common": "^0.1.8", + "@planet-sdk/common": "^0.1.21", "@sentry/browser": "^6.2.5", "@sentry/integrations": "^6.2.5", "@sentry/node": "^6.2.5", From 476b00fa21c5c3e6aa233d1c8899ea5d4a1e1fce Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 2 Aug 2023 11:54:16 +0530 Subject: [PATCH 03/29] feat: adds `unitType` (`PaymentOptions` interface) - marks `unit` as deprecated - updates to `unitType` throughout code --- src/Common/Types/index.tsx | 4 ++-- src/Donations/Micros/DonationTypes/BouquetDonations.tsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Common/Types/index.tsx b/src/Common/Types/index.tsx index c2d6dacd..4aba52c9 100644 --- a/src/Common/Types/index.tsx +++ b/src/Common/Types/index.tsx @@ -143,12 +143,12 @@ export interface PaymentOptions extends FetchedProjectDetails { frequencies: Frequencies; gateways: Gateways; recurrency: Recurrency; + /** @deprecated - use unitType instead */ unit: string; + unitType: string; unitCost: number; currency: string; destination: string; - isApproved: boolean; - isTopProject: boolean; } interface Frequencies { diff --git a/src/Donations/Micros/DonationTypes/BouquetDonations.tsx b/src/Donations/Micros/DonationTypes/BouquetDonations.tsx index 4bf8a149..f368d7e8 100644 --- a/src/Donations/Micros/DonationTypes/BouquetDonations.tsx +++ b/src/Donations/Micros/DonationTypes/BouquetDonations.tsx @@ -108,7 +108,7 @@ function BouquetDonations({ setopenCurrencyModal }: Props): ReactElement { setCustomInputValue( getFormattedNumber( i18n.language, - paymentSetup.unit !== "currency" + paymentSetup.unitType !== "currency" ? newQuantity : newQuantity * paymentSetup.unitCost ) @@ -227,7 +227,7 @@ function BouquetDonations({ setopenCurrencyModal }: Props): ReactElement { }} > {paymentSetup.purpose === "conservation" - ? t(paymentSetup.unit) + ? t(paymentSetup.unitType) : []}

@@ -238,7 +238,7 @@ function BouquetDonations({ setopenCurrencyModal }: Props): ReactElement { >

{" "} - {paymentSetup.unit === "currency" + {paymentSetup.unitType === "currency" ? t("customAmount") : t("custom")}

From a04b1f157d46a42bf828c4c722af52fac20a40df Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 4 Aug 2023 11:51:33 +0530 Subject: [PATCH 04/29] feat: integrate unitType in DonationsForm - only for tree/conservation projects --- public/locales/en/common.json | 6 ++++++ src/Common/Types/index.tsx | 3 ++- src/Donations/Micros/DonationAmount.tsx | 4 ++-- .../Micros/DonationTypes/BouquetDonations.tsx | 16 +++++++++++++--- .../Micros/DonationTypes/TreeDonation.tsx | 16 ++++++++++++---- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 7bb657ef..fc22f358 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -3,6 +3,8 @@ "fortreeCountTrees_other": "for {{treeCount}} Trees", "forQuantitym2": "for {{quantity}} m²", "m2": "m²", + "tree_one": "tree", + "tree_other": "trees", "recipientName": "Recipient Name", "recipientNameRequired": "Recipient Name is required", "email": "Email", @@ -37,6 +39,10 @@ "orgNamePublishedTax": "Company name is visible on our leaderboard and app. Tax-deduction receipts will be issued for the same name.", "orgNamePublished": "Company name is visible on our leaderboard and app.", "paymentDetails": "Payment Details", + "perUnit": { + "tree": "per tree", + "m2": "per m²" + }, "perTree": "per tree", "perm2": "per m²", "youWillReceiveTaxDeduction": "You will receive a tax deduction receipt for ", diff --git a/src/Common/Types/index.tsx b/src/Common/Types/index.tsx index 4aba52c9..01c1df9b 100644 --- a/src/Common/Types/index.tsx +++ b/src/Common/Types/index.tsx @@ -10,6 +10,7 @@ import { ContactDetails, BankTransferDetails, PaymentGateway, + CurrencyCode, } from "@planet-sdk/common"; /** planet-donations only allows direct or invitation gifts */ @@ -145,7 +146,7 @@ export interface PaymentOptions extends FetchedProjectDetails { recurrency: Recurrency; /** @deprecated - use unitType instead */ unit: string; - unitType: string; + unitType: "tree" | "m2" | "currency" | CurrencyCode; unitCost: number; currency: string; destination: string; diff --git a/src/Donations/Micros/DonationAmount.tsx b/src/Donations/Micros/DonationAmount.tsx index 3fcd60ec..454837a1 100644 --- a/src/Donations/Micros/DonationAmount.tsx +++ b/src/Donations/Micros/DonationAmount.tsx @@ -21,12 +21,12 @@ function DonationAmount(): ReactElement { paymentSetup.unitCost * quantity )} - {paymentSetup.purpose === "trees" + {paymentSetup.unitType === "tree" ? t("fortreeCountTrees", { count: Number(quantity), treeCount: getFormattedNumber(i18n.language, Number(quantity)), }) - : paymentSetup.purpose === "conservation" + : paymentSetup.unitType === "m2" ? t("forQuantitym2", { quantity: getFormattedNumber(i18n.language, Number(quantity)), }) diff --git a/src/Donations/Micros/DonationTypes/BouquetDonations.tsx b/src/Donations/Micros/DonationTypes/BouquetDonations.tsx index f368d7e8..3893f92d 100644 --- a/src/Donations/Micros/DonationTypes/BouquetDonations.tsx +++ b/src/Donations/Micros/DonationTypes/BouquetDonations.tsx @@ -165,7 +165,11 @@ function BouquetDonations({ setopenCurrencyModal }: Props): ReactElement { currency, option.quantity * paymentSetup.unitCost )}{" "} - {paymentSetup.purpose === "conservation" ? t("m2") : []} + {/* Below condition is redundant currently, but is left here as a reminder while refactoring */} + {paymentSetup.purpose === "conservation" && + paymentSetup.unitType === "m2" + ? t(paymentSetup.unitType) + : []} @@ -226,7 +230,9 @@ function BouquetDonations({ setopenCurrencyModal }: Props): ReactElement { fontWeight: "800", }} > - {paymentSetup.purpose === "conservation" + {/* Below condition is redundant currently, but is left here as a reminder while refactoring */} + {paymentSetup.purpose === "conservation" && + paymentSetup.unitType === "m2" ? t(paymentSetup.unitType) : []}

@@ -282,7 +288,11 @@ function BouquetDonations({ setopenCurrencyModal }: Props): ReactElement { ) : []}{" "} - {paymentSetup.purpose === "conservation" ? t("perm2") : []} + {/* Below condition is redundant currently, but is left here as a reminder while refactoring */} + {paymentSetup.purpose === "conservation" && + paymentSetup.unitType === "m2" + ? t("perUnit.m2") + : []}

) : (
diff --git a/src/Donations/Micros/DonationTypes/TreeDonation.tsx b/src/Donations/Micros/DonationTypes/TreeDonation.tsx index f09cf700..3d812c93 100644 --- a/src/Donations/Micros/DonationTypes/TreeDonation.tsx +++ b/src/Donations/Micros/DonationTypes/TreeDonation.tsx @@ -74,7 +74,7 @@ function TreeDonation({ setopenCurrencyModal }: Props): ReactElement { }, [quantity]); const customInputRef = React.useRef(null); - return ( + return paymentSetup !== null ? (

{option.quantity}

- {t("trees")} + + {t(paymentSetup.unitType, { count: option.quantity })} +
); @@ -136,7 +138,11 @@ function TreeDonation({ setopenCurrencyModal }: Props): ReactElement { }} ref={customInputRef} /> - {t("trees")} + + {t(paymentSetup.unitType, { + count: parseInt(customTreeInputValue), + })} + @@ -165,7 +171,7 @@ function TreeDonation({ setopenCurrencyModal }: Props): ReactElement { Number(paymentSetup.unitCost) )}{" "} - {t("perTree")} + {t(`perUnit.${paymentSetup.unitType}`)}

) : (
@@ -173,6 +179,8 @@ function TreeDonation({ setopenCurrencyModal }: Props): ReactElement {
)} + ) : ( +
Payment Setup Failed
); } From 39d2cb81f108d0d03ef94c8c4832d5a13c0c07ae Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 4 Aug 2023 15:22:52 +0530 Subject: [PATCH 05/29] feat: use unitType in TransactionSummary - this is seen in the Left Panel - Also converts `getAdditionalInfo` into a pure function - Also adds a separate type definition for UnitType --- src/Common/Types/index.tsx | 4 ++- .../LeftPanel/TransactionSummary.tsx | 25 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/Common/Types/index.tsx b/src/Common/Types/index.tsx index 01c1df9b..25fea83d 100644 --- a/src/Common/Types/index.tsx +++ b/src/Common/Types/index.tsx @@ -146,12 +146,14 @@ export interface PaymentOptions extends FetchedProjectDetails { recurrency: Recurrency; /** @deprecated - use unitType instead */ unit: string; - unitType: "tree" | "m2" | "currency" | CurrencyCode; + unitType: UnitType; unitCost: number; currency: string; destination: string; } +export type UnitType = "tree" | "m2" | "currency" | CurrencyCode; + interface Frequencies { [key: string]: Frequency; } diff --git a/src/Donations/LeftPanel/TransactionSummary.tsx b/src/Donations/LeftPanel/TransactionSummary.tsx index 3b3cf673..f0598d49 100644 --- a/src/Donations/LeftPanel/TransactionSummary.tsx +++ b/src/Donations/LeftPanel/TransactionSummary.tsx @@ -2,7 +2,7 @@ import { ReactElement } from "react"; import { useTranslation } from "next-i18next"; import getFormatedCurrency from "src/Utils/getFormattedCurrency"; import { getFormattedNumber } from "src/Utils/getFormattedNumber"; -import { PaymentOptions, ProjectPurpose } from "src/Common/Types"; +import { PaymentOptions, ProjectPurpose, UnitType } from "src/Common/Types"; import styles from "./LeftPanel.module.scss"; interface Props { @@ -22,26 +22,28 @@ const TransactionSummary = ({ /** Generates unit/frequency info when needed */ const getAdditionalInfo = ( - purpose: ProjectPurpose, - frequency: string + unitType: UnitType, + frequency: string, + language: string, + quantity: number ): string => { let info = ""; - switch (purpose) { - case "trees": + switch (unitType) { + case "tree": info = info + " " + t("fortreeCountTrees", { count: Number(quantity), - treeCount: getFormattedNumber(i18n.language, Number(quantity)), + treeCount: getFormattedNumber(language, Number(quantity)), }); break; - case "conservation": + case "m2": info = info + " " + t("forQuantitym2", { - quantity: getFormattedNumber(i18n.language, Number(quantity)), + quantity: getFormattedNumber(language, Number(quantity)), }); break; default: @@ -72,7 +74,12 @@ const TransactionSummary = ({ paymentSetup.unitCost * quantity )} - {getAdditionalInfo(paymentSetup.purpose, frequency)} + {getAdditionalInfo( + paymentSetup.unitType, + frequency, + i18n.language, + quantity + )} ); }; From e66fd6c96f57afb2e8416a03837e67a76587df6a Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:54:21 +0530 Subject: [PATCH 06/29] feat: allows PC* payment only for unitType=tree * PC = PlanetCash --- src/Donations/Components/DonationsForm.tsx | 3 ++- src/Donations/Micros/DonationTypes/TreeDonation.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Donations/Components/DonationsForm.tsx b/src/Donations/Components/DonationsForm.tsx index b4ac75a8..bb202657 100644 --- a/src/Donations/Components/DonationsForm.tsx +++ b/src/Donations/Components/DonationsForm.tsx @@ -326,7 +326,8 @@ function DonationsForm(): ReactElement {

{t("donate")}

)} {/* show PlanetCashSelector only if user is signed up and have a planetCash account */} - {projectDetails.purpose !== "funds" && + {paymentSetup?.unitType === "tree" && + projectDetails.purpose !== "funds" && projectDetails.purpose !== "planet-cash" && !(isGift && giftDetails.recipientName === "") && !(onBehalf && onBehalfDonor.firstName === "") && diff --git a/src/Donations/Micros/DonationTypes/TreeDonation.tsx b/src/Donations/Micros/DonationTypes/TreeDonation.tsx index 3d812c93..b959dabe 100644 --- a/src/Donations/Micros/DonationTypes/TreeDonation.tsx +++ b/src/Donations/Micros/DonationTypes/TreeDonation.tsx @@ -180,7 +180,7 @@ function TreeDonation({ setopenCurrencyModal }: Props): ReactElement { )} ) : ( -
Payment Setup Failed
+ <> ); } From 976b0368dc40fc47247f0f6bb96135ce164d0b40 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 18 Aug 2023 11:57:01 +0530 Subject: [PATCH 07/29] fix: removes unused ProjectPurpose type --- src/Donations/LeftPanel/TransactionSummary.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Donations/LeftPanel/TransactionSummary.tsx b/src/Donations/LeftPanel/TransactionSummary.tsx index f0598d49..57bffc07 100644 --- a/src/Donations/LeftPanel/TransactionSummary.tsx +++ b/src/Donations/LeftPanel/TransactionSummary.tsx @@ -2,7 +2,7 @@ import { ReactElement } from "react"; import { useTranslation } from "next-i18next"; import getFormatedCurrency from "src/Utils/getFormattedCurrency"; import { getFormattedNumber } from "src/Utils/getFormattedNumber"; -import { PaymentOptions, ProjectPurpose, UnitType } from "src/Common/Types"; +import { PaymentOptions, UnitType } from "src/Common/Types"; import styles from "./LeftPanel.module.scss"; interface Props { From 5f11d711247f25b13b33bca94f0e8c6053b68c85 Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Tue, 12 Sep 2023 14:18:53 +0530 Subject: [PATCH 08/29] add new icon --- public/assets/icons/share/Twitter.tsx | 73 +++++++++++++++++++++++---- src/Donations/Micros/ShareOptions.tsx | 3 +- 2 files changed, 66 insertions(+), 10 deletions(-) diff --git a/public/assets/icons/share/Twitter.tsx b/public/assets/icons/share/Twitter.tsx index ea06ce65..fc9b765a 100644 --- a/public/assets/icons/share/Twitter.tsx +++ b/public/assets/icons/share/Twitter.tsx @@ -1,21 +1,76 @@ import React, { ReactElement } from "react"; interface Props { - color: string; + backGroundColor: string; + fontColor: string; } -function Icon({ color }: Props): ReactElement { +function Icon({ backGroundColor, fontColor }: Props): ReactElement { return ( - + + + + + + + + ); } diff --git a/src/Donations/Micros/ShareOptions.tsx b/src/Donations/Micros/ShareOptions.tsx index ca4f811d..abcdb61d 100644 --- a/src/Donations/Micros/ShareOptions.tsx +++ b/src/Donations/Micros/ShareOptions.tsx @@ -161,7 +161,8 @@ const ShareOptions = ({ } > From e46458d6b22c609468fa905534108ebe0a22ab64 Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Mon, 9 Oct 2023 21:28:06 +0530 Subject: [PATCH 09/29] style: replace color of icon --- src/Donations/Micros/ShareOptions.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Donations/Micros/ShareOptions.tsx b/src/Donations/Micros/ShareOptions.tsx index abcdb61d..93c97594 100644 --- a/src/Donations/Micros/ShareOptions.tsx +++ b/src/Donations/Micros/ShareOptions.tsx @@ -161,8 +161,8 @@ const ShareOptions = ({ } > From aa04a4242b60649e0f962973f8f9eb8603c13f7d Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:39:00 +0530 Subject: [PATCH 10/29] chore: add zor for email validation --- package-lock.json | 268 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 3 +- 2 files changed, 269 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a02d66f2..0ef25aef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,8 @@ "react-i18next": "^12.1.5", "sass": "^1.35.1", "styled-jsx": "^5.1.0", - "uuid": "^8.3.2" + "uuid": "^8.3.2", + "zod": "^3.22.4" }, "devDependencies": { "@types/dom-to-image": "^2.6.2", @@ -792,6 +793,36 @@ "glob": "7.1.7" } }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz", + "integrity": "sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz", + "integrity": "sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-darwin-arm64": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz", @@ -807,6 +838,156 @@ "node": ">= 10" } }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz", + "integrity": "sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz", + "integrity": "sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz", + "integrity": "sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz", + "integrity": "sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz", + "integrity": "sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz", + "integrity": "sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz", + "integrity": "sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz", + "integrity": "sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz", + "integrity": "sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz", + "integrity": "sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -8022,6 +8203,14 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -8511,12 +8700,84 @@ "glob": "7.1.7" } }, + "@next/swc-android-arm-eabi": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz", + "integrity": "sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz", + "integrity": "sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg==", + "optional": true + }, "@next/swc-darwin-arm64": { "version": "13.2.4", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz", "integrity": "sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A==", "optional": true }, + "@next/swc-darwin-x64": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz", + "integrity": "sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz", + "integrity": "sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz", + "integrity": "sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz", + "integrity": "sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz", + "integrity": "sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz", + "integrity": "sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz", + "integrity": "sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz", + "integrity": "sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz", + "integrity": "sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz", + "integrity": "sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw==", + "optional": true + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -13859,6 +14120,11 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==" } } } diff --git a/package.json b/package.json index de51f16f..2dc58fe0 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,8 @@ "react-i18next": "^12.1.5", "sass": "^1.35.1", "styled-jsx": "^5.1.0", - "uuid": "^8.3.2" + "uuid": "^8.3.2", + "zod": "^3.22.4" }, "devDependencies": { "@types/dom-to-image": "^2.6.2", From 3c6c78632ffe437e5068df5b52a8ca4627df4089 Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:39:19 +0530 Subject: [PATCH 11/29] refactor: implement zor email vaidation --- src/Donations/Components/ContactsForm.tsx | 41 +++++++++++++++++------ 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 7f07ca7a..1aaf8835 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -18,6 +18,7 @@ import { ContactDetails } from "@planet-sdk/common"; import { AddressCandidate, GeocodeSuggestion } from "src/Common/Types/arcgis"; import GiftIcon from "public/assets/icons/GiftIcon"; import { euCountries } from "src/Utils/countryUtils"; +import { z } from "zod"; interface FormData extends ContactDetails { isPackageWanted: boolean; @@ -39,7 +40,7 @@ function ContactsForm(): ReactElement { client_id: process.env.ESRI_CLIENT_ID, client_secret: process.env.ESRI_CLIENT_SECRET, } - : {}, + : {} ); const { profile, @@ -62,7 +63,10 @@ function ContactsForm(): ReactElement { React.useEffect(() => { if (contactDetails) { - reset({ ...contactDetails, isPackageWanted: isPackageWanted !== false && isEligibleForPackage }); + reset({ + ...contactDetails, + isPackageWanted: isPackageWanted !== false && isEligibleForPackage, + }); if (contactDetails.companyname) { setIsCompany(true); } @@ -83,7 +87,7 @@ function ContactsForm(): ReactElement { React.useEffect(() => { const fiteredCountry = COUNTRY_ADDRESS_POSTALS.filter( - (country) => country.abbrev === contactDetails.country, + (country) => country.abbrev === contactDetails.country ); setPostalRegex(fiteredCountry[0]?.postal); }, [contactDetails.country]); @@ -95,7 +99,7 @@ function ContactsForm(): ReactElement { query: { ...router.query, step: PAYMENT }, }, undefined, - { shallow: true }, + { shallow: true } ); setContactDetails({ ...enteredContactDetails, @@ -108,8 +112,8 @@ function ContactsForm(): ReactElement { const [postalRegex, setPostalRegex] = React.useState( COUNTRY_ADDRESS_POSTALS.filter( - (country) => country.abbrev === contactDetails.country, - )[0]?.postal, + (country) => country.abbrev === contactDetails.country + )[0]?.postal ); const changeCountry = (country: string) => { @@ -187,6 +191,16 @@ function ContactsForm(): ReactElement { } }, [projectDetails, country]); + const isEmailValid = (value: string): boolean => { + try { + const emailSchema = z.string().email(); + emailSchema.parse(value); + } catch (err) { + return false; + } + return true; + }; + const { theme } = React.useContext(ThemeContext); let suggestion_counter = 0; return ( @@ -201,7 +215,7 @@ function ContactsForm(): ReactElement { query: { ...router.query, step: DONATE }, }, undefined, - { shallow: true }, + { shallow: true } ); }} style={{ marginRight: "12px" }} @@ -275,9 +289,14 @@ function ContactsForm(): ReactElement { name="email" control={control} rules={{ - required: true, - pattern: - /^([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/i, + required: { + value: true, + message: t("emailRequired"), + }, + validate: { + emailInvalid: (value) => + value.length === 0 || isEmailValid(value), + }, }} render={({ field: { onChange, value } }) => ( Date: Thu, 19 Oct 2023 14:58:49 +0530 Subject: [PATCH 12/29] refactor: change error message --- public/locales/en/common.json | 3 ++- src/Donations/Components/ContactsForm.tsx | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index def2e6c0..732104c5 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -208,5 +208,6 @@ "loading": "Loading...", "topProject": "Top Project", "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", - "standardsLink": "https://www.plant-for-the-planet.org/standards/" + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "wrongEmailEntered": "Email id incorrect!" } \ No newline at end of file diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 1aaf8835..3c9cfd0f 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -309,9 +309,12 @@ function ContactsForm(): ReactElement { /> )} /> - {errors.email && errors.email.type !== "validate" && ( + {errors.email && errors.email.type === "required" && ( {t("emailRequired")} )} + {errors.email && errors.email.type === "emailInvalid" && ( + {t("wrongEmailEntered")} + )} {/* {errors.email && errors.email.type === "validate" && ( {t("useSameEmail")} )} */} From b9cfae5dbc6987c22c4e286d3c0cd8c254ba0707 Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Thu, 19 Oct 2023 15:10:26 +0530 Subject: [PATCH 13/29] Changes made: 1. add common function for email validation 2. add INVALID_DOMAIN_LIST check --- src/Donations/Components/ContactsForm.tsx | 11 +---------- src/Utils/isEmailValid.ts | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 src/Utils/isEmailValid.ts diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 3c9cfd0f..ef11f7f0 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -19,6 +19,7 @@ import { AddressCandidate, GeocodeSuggestion } from "src/Common/Types/arcgis"; import GiftIcon from "public/assets/icons/GiftIcon"; import { euCountries } from "src/Utils/countryUtils"; import { z } from "zod"; +import { isEmailValid } from "src/Utils/isEmailValid"; interface FormData extends ContactDetails { isPackageWanted: boolean; @@ -191,16 +192,6 @@ function ContactsForm(): ReactElement { } }, [projectDetails, country]); - const isEmailValid = (value: string): boolean => { - try { - const emailSchema = z.string().email(); - emailSchema.parse(value); - } catch (err) { - return false; - } - return true; - }; - const { theme } = React.useContext(ThemeContext); let suggestion_counter = 0; return ( diff --git a/src/Utils/isEmailValid.ts b/src/Utils/isEmailValid.ts new file mode 100644 index 00000000..c7d3fc90 --- /dev/null +++ b/src/Utils/isEmailValid.ts @@ -0,0 +1,20 @@ +import { z } from "zod"; + +const INVALID_DOMAIN_LIST = ["dummy.de", "example.com", "company.de"]; + +export const isEmailValid = (value: string): boolean => { + try { + const emailSchema = z.string().email(); + const parsedEmail = emailSchema.parse(value); + + const domain = parsedEmail.split("@")[1]; + + // Check if the domain is in the INVALID_DOMAIN_LIST + if (INVALID_DOMAIN_LIST.includes(domain)) { + return false; + } + } catch (err) { + return false; + } + return true; +}; From a173f281422e1453695d18a7b692c4849bd05834 Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Thu, 19 Oct 2023 15:15:57 +0530 Subject: [PATCH 14/29] refactor: add email validation in GiftForm --- src/Donations/Micros/GiftForm.tsx | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/Donations/Micros/GiftForm.tsx b/src/Donations/Micros/GiftForm.tsx index 4cd20472..4c6a756d 100644 --- a/src/Donations/Micros/GiftForm.tsx +++ b/src/Donations/Micros/GiftForm.tsx @@ -8,6 +8,7 @@ import ToggleSwitch from "../../Common/InputTypes/ToggleSwitch"; import { useRouter } from "next/router"; import GiftIcon from "public/assets/icons/GiftIcon"; import { NoGift } from "@planet-sdk/common/build/types/donation"; +import { isEmailValid } from "src/Utils/isEmailValid"; type GiftFormData = { recipientName: string; @@ -130,9 +131,14 @@ export default function GiftForm(): ReactElement { name="recipientEmail" control={control} rules={{ - required: true, - pattern: - /^([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/i, + required: { + value: true, + message: t("emailRequired"), + }, + validate: { + emailInvalid: (value) => + value.length === 0 || isEmailValid(value), + }, }} render={({ field: { onChange, value } }) => ( )} /> - - {errors.recipientEmail && ( - {t("emailRequired")} - )} + {errors.recipientEmail && + errors.recipientEmail.type === "required" && ( + + {t("emailRequired")} + + )} + {errors.recipientEmail && + errors.recipientEmail.type === "emailInvalid" && ( + + {t("wrongEmailEntered")} + + )}
Date: Thu, 19 Oct 2023 15:19:51 +0530 Subject: [PATCH 15/29] refactor: add email validation for OnBehalf --- src/Donations/Micros/OnBehalf.tsx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Donations/Micros/OnBehalf.tsx b/src/Donations/Micros/OnBehalf.tsx index ceeefdb2..c4ceaccc 100644 --- a/src/Donations/Micros/OnBehalf.tsx +++ b/src/Donations/Micros/OnBehalf.tsx @@ -6,6 +6,7 @@ import MaterialTextField from "src/Common/InputTypes/MaterialTextField"; import ToggleSwitch from "src/Common/InputTypes/ToggleSwitch"; import { QueryParamContext } from "src/Layout/QueryParamContext"; import { OnBehalfDonor } from "src/Common/Types"; +import { isEmailValid } from "src/Utils/isEmailValid"; const OnBehalf: FC = () => { const { t } = useTranslation("common"); @@ -108,8 +109,14 @@ const OnBehalf: FC = () => { name="email" control={control} rules={{ - pattern: - /^([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/i, + required: { + value: true, + message: t("emailRequired"), + }, + validate: { + emailInvalid: (value) => + value.length === 0 || isEmailValid(value), + }, }} render={({ field: { onChange, value } }) => ( { /> )} /> - {errors.email && ( + {errors.email && errors.email.type === "required" && ( + {t("emailRequired")} + )} + {errors.email && errors.email.type === "emailInvalid" && ( {t("inValidField", { fieldName: "Email", From 74ca7104944e2e5d42c1cffef8ef1da9a2198e4a Mon Sep 17 00:00:00 2001 From: prachigarg19 <72646230+prachigarg19@users.noreply.github.com> Date: Fri, 20 Oct 2023 15:57:08 +0530 Subject: [PATCH 16/29] changes made: 1. remove unused import 2. combine and update error messages --- public/locales/en/common.json | 2 +- src/Donations/Components/ContactsForm.tsx | 12 ++++++------ src/Donations/Micros/GiftForm.tsx | 19 +++++++------------ src/Donations/Micros/OnBehalf.tsx | 11 +++++------ 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 732104c5..263fbf8e 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -209,5 +209,5 @@ "topProject": "Top Project", "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", - "wrongEmailEntered": "Email id incorrect!" + "enterValidEmail": "Please enter a valid email" } \ No newline at end of file diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index ef11f7f0..6dbe254c 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -18,7 +18,6 @@ import { ContactDetails } from "@planet-sdk/common"; import { AddressCandidate, GeocodeSuggestion } from "src/Common/Types/arcgis"; import GiftIcon from "public/assets/icons/GiftIcon"; import { euCountries } from "src/Utils/countryUtils"; -import { z } from "zod"; import { isEmailValid } from "src/Utils/isEmailValid"; interface FormData extends ContactDetails { @@ -300,11 +299,12 @@ function ContactsForm(): ReactElement { /> )} /> - {errors.email && errors.email.type === "required" && ( - {t("emailRequired")} - )} - {errors.email && errors.email.type === "emailInvalid" && ( - {t("wrongEmailEntered")} + {errors.email && ( + + {errors.email.type === "required" + ? t("emailRequired") + : t("enterValidEmail")} + )} {/* {errors.email && errors.email.type === "validate" && ( {t("useSameEmail")} diff --git a/src/Donations/Micros/GiftForm.tsx b/src/Donations/Micros/GiftForm.tsx index 4c6a756d..a525cd46 100644 --- a/src/Donations/Micros/GiftForm.tsx +++ b/src/Donations/Micros/GiftForm.tsx @@ -150,18 +150,13 @@ export default function GiftForm(): ReactElement { /> )} /> - {errors.recipientEmail && - errors.recipientEmail.type === "required" && ( - - {t("emailRequired")} - - )} - {errors.recipientEmail && - errors.recipientEmail.type === "emailInvalid" && ( - - {t("wrongEmailEntered")} - - )} + {errors.recipientEmail && ( + + {errors.recipientEmail.type === "required" + ? t("emailRequired") + : t("enterValidEmail")} + + )}
{ )} /> {errors.email && errors.email.type === "required" && ( - {t("emailRequired")} - )} - {errors.email && errors.email.type === "emailInvalid" && ( - {t("inValidField", { - fieldName: "Email", - })} + {errors.email.type === "required" + ? t("emailRequired") + : t("inValidField", { + fieldName: "Email", + })} )} From 238f907c83cbc01a357632b1c0568cfe67b57923 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:41:30 +0530 Subject: [PATCH 17/29] feat: updates Thank you screen for m2 donations - updates planet-sdk to get latest `Donation` type - adapts thank you message and image text for donations with unitType = m2 and purpose = trees --- package-lock.json | 14 ++++----- package.json | 2 +- public/locales/en/common.json | 7 +++-- .../Micros/PaymentStatus/ImageComponent.tsx | 29 +++++++++++++------ .../Micros/PaymentStatus/ThankyouMessage.tsx | 22 +++++++------- 5 files changed, 42 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ef25aef..bb9bab44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@mui/material": "^5.11.8", "@next/bundle-analyzer": "^10.1.3", "@paypal/react-paypal-js": "^7.8.2", - "@planet-sdk/common": "^0.1.27", + "@planet-sdk/common": "^0.1.29", "@sentry/browser": "^6.2.5", "@sentry/integrations": "^6.2.5", "@sentry/node": "^6.2.5", @@ -1079,9 +1079,9 @@ "dev": true }, "node_modules/@planet-sdk/common": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.28.tgz", - "integrity": "sha512-8SAoDEhX2dsSXuRfcIlNR10ptGntsTb14YHkOuLvXkNCdHrYB4gtZ365EmxsziQqoEk+4QhMVZD1yikbmRgh9w==", + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.29.tgz", + "integrity": "sha512-hNmkxfYcqmUuYGm0BLWSvr+sIbZxOXCy1AEhpClTTcfQjpofyqfHfrgkmgoFzZqK9WXPEq0Tn2uSDfqPPcRpFg==", "dependencies": { "@types/geojson": "^7946.0.10" } @@ -8852,9 +8852,9 @@ } }, "@planet-sdk/common": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.28.tgz", - "integrity": "sha512-8SAoDEhX2dsSXuRfcIlNR10ptGntsTb14YHkOuLvXkNCdHrYB4gtZ365EmxsziQqoEk+4QhMVZD1yikbmRgh9w==", + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.29.tgz", + "integrity": "sha512-hNmkxfYcqmUuYGm0BLWSvr+sIbZxOXCy1AEhpClTTcfQjpofyqfHfrgkmgoFzZqK9WXPEq0Tn2uSDfqPPcRpFg==", "requires": { "@types/geojson": "^7946.0.10" } diff --git a/package.json b/package.json index 2dc58fe0..90549fd4 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@mui/material": "^5.11.8", "@next/bundle-analyzer": "^10.1.3", "@paypal/react-paypal-js": "^7.8.2", - "@planet-sdk/common": "^0.1.27", + "@planet-sdk/common": "^0.1.29", "@sentry/browser": "^6.2.5", "@sentry/integrations": "^6.2.5", "@sentry/node": "^6.2.5", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index cd0f6d60..a166f478 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -78,9 +78,10 @@ "contributionMessage": "Maybe you'll visit them some day? In the mean time, maybe hook up your friends with some trees of their own by telling them about yours?", "fundingDonationSuccess": "Thank you for your contribution! You’ll receive a confirmation for your contribution on your email.", "fundingContributionMessage": "We will keep you posted about our actions, in the mean time maybe share with your friends about your contribution.", - "yourTreesPlantedByOnLocation": "Your {{treeCount}} trees will be planted by {{projectName}} in {{location}}.", + "restorationDonationUsage": "Your donation will be used to restore {{units}} {{unitType}} by {{projectName}} in {{location}}.", "m2conservedByOnLocation": "{{quantity}} m² forest will be conserved by {{projectName}} in {{location}}.", "myTreesPlantedByOnLocation": "My {{treeCount}} trees are being planted in {{location}}.", + "restorationDonationShareDetails": "I donated {{amount}} for forest restoration in {{location}}.", "iDonatedForestOnLocation": "I donated {{amount}} for forest conservation in {{location}}.", "weDonatedForestOnLocation": "We donated {{amount}} for forest conservation in {{location}}.", "plantTreesAtURL": "Restore & protect trees at {{url}}", @@ -172,7 +173,7 @@ "lowBalance": "Balance is low", "oneTimePay": "Donation with PlanetCash is a one time payment", "currency": "Currency", - "treesPurpose": "tree donation", + "treesPurpose": "restoration donation", "fundsPurpose": "donation", "bouquetPurpose": "donation", "conservationPurpose": "conservation donation", @@ -216,4 +217,4 @@ "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", "enterValidEmail": "Please enter a valid email" -} \ No newline at end of file +} diff --git a/src/Donations/Micros/PaymentStatus/ImageComponent.tsx b/src/Donations/Micros/PaymentStatus/ImageComponent.tsx index 0c43a31c..382ca014 100644 --- a/src/Donations/Micros/PaymentStatus/ImageComponent.tsx +++ b/src/Donations/Micros/PaymentStatus/ImageComponent.tsx @@ -60,15 +60,26 @@ const ImageComponent = ({ return (
{projectDetails?.purpose === "trees" && - t("common:myTreesPlantedByOnLocation", { - treeCount: getFormattedNumber( - i18n.language, - Number(donation.treeCount) - ), - location: t( - "country:" + donation.destination.country.toLowerCase() - ), - })} + (donation.unitType === "tree" + ? t("common:myTreesPlantedByOnLocation", { + treeCount: getFormattedNumber( + i18n.language, + Number(donation.treeCount) + ), + location: t( + "country:" + donation.destination.country.toLowerCase() + ), + }) + : t("common:restorationDonationShareDetails", { + amount: getFormattedCurrency( + i18n.language, + donation.currency, + Number(donation.amount) + ), + location: t( + "country:" + donation.destination.country.toLowerCase() + ), + }))} {projectDetails?.purpose === "conservation" && t( `common:${ diff --git a/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx b/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx index 3af17716..cf3a700e 100644 --- a/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx +++ b/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx @@ -1,7 +1,6 @@ import React, { ReactElement } from "react"; import { useTranslation } from "next-i18next"; import getFormatedCurrency from "src/Utils/getFormattedCurrency"; -import { getFormattedNumber } from "src/Utils/getFormattedNumber"; import { QueryParamContext } from "src/Layout/QueryParamContext"; import { FetchedProjectDetails } from "src/Common/Types"; import { Donation } from "@planet-sdk/common/build/types/donation"; @@ -49,17 +48,16 @@ function ThankyouMessage({ : null; // EXAMPLE: Your 50 trees will be planted by AMU EcoVillage Project, Ethiopia in Ethiopia. - const donationProjectMessage = donation.destination - ? " " + - t("common:yourTreesPlantedByOnLocation", { - treeCount: getFormattedNumber( - i18n.language, - Number(donation.treeCount) - ), - projectName: donation.destination.name, - location: t("country:" + donation.destination.country.toLowerCase()), - }) - : null; + const donationProjectMessage = + donation.destination && donation.units + ? " " + + t("common:restorationDonationUsage", { + units: donation.units, + unitType: t(`common:${donation.unitType}`, { count: donation.units }), + projectName: donation.destination.name, + location: t("country:" + donation.destination.country.toLowerCase()), + }) + : null; const Message = () => { return ( From 3976a99ba976a03cb7fabc12fdc390afefa1acce Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:08:45 +0530 Subject: [PATCH 18/29] feat: temp adjustments for tree + m2 donations - disables inv. gifts for "trees+m2" donations - enables PC payment only for "unitType: tree" donations --- src/Donations/Components/DonationsForm.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Donations/Components/DonationsForm.tsx b/src/Donations/Components/DonationsForm.tsx index c466c684..be22af4c 100644 --- a/src/Donations/Components/DonationsForm.tsx +++ b/src/Donations/Components/DonationsForm.tsx @@ -109,6 +109,7 @@ function DonationsForm(): ReactElement { projectDetails !== null && projectDetails.purpose !== "funds" && projectDetails.purpose !== "planet-cash" && + paymentSetup?.unitType === "tree" && //Enables planetcash for restoration projects with unitType tree only (TEMP) profile !== null && isSignedUp && profile.planetCash !== null && @@ -339,7 +340,9 @@ function DonationsForm(): ReactElement { {/* show PlanetCashSelector only if user is signed up and have a planetCash account */} {canPayWithPlanetCash && } {!(onBehalf && onBehalfDonor.firstName === "") && - (projectDetails.purpose === "trees" ? ( + (projectDetails.purpose === "trees" && + (paymentSetup?.unitType !== "m2" || + giftDetails.type === "direct") ? (
From 3a59d74ec2e73485d265934392750675674722b5 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:11:08 +0530 Subject: [PATCH 19/29] chore: installs dev dependencies - hookform/devtools to debug the rhf forms - babel/plugin-transform-unicode-regex to enable unicode regexp --- .babelrc | 3 +- package-lock.json | 1892 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 + 3 files changed, 1813 insertions(+), 84 deletions(-) diff --git a/.babelrc b/.babelrc index 1ff94f7e..46408c37 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,4 @@ { - "presets": ["next/babel"] + "presets": ["next/babel"], + "plugins": ["@babel/plugin-transform-unicode-regex"] } diff --git a/package-lock.json b/package-lock.json index 0ef25aef..a676e9a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,8 @@ "zod": "^3.22.4" }, "devDependencies": { + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@hookform/devtools": "^4.3.1", "@types/dom-to-image": "^2.6.2", "@types/react": "^17.0.40", "@types/react-dom": "^17.0.3", @@ -68,6 +70,20 @@ "validate-branch-name": "^1.3.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@auth0/auth0-react": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@auth0/auth0-react/-/auth0-react-1.12.1.tgz", @@ -80,72 +96,591 @@ "react-dom": "^16.11.0 || ^17 || ^18" } }, - "node_modules/@auth0/auth0-spa-js": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-1.22.6.tgz", - "integrity": "sha512-iL3O0vWanfKFVgy1J2ZHDPlAUK6EVHWEHWS6mUXwHEuPiK39tjlQtyUKQIJI1F5YsZB75ijGgRWMTawSDXlwCA==", - "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "browser-tabs-lock": "^1.2.15", - "core-js": "^3.25.4", - "es-cookie": "~1.3.2", - "fast-text-encoding": "^1.0.6", - "promise-polyfill": "^8.2.3", - "unfetch": "^4.2.0" + "node_modules/@auth0/auth0-spa-js": { + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/@auth0/auth0-spa-js/-/auth0-spa-js-1.22.6.tgz", + "integrity": "sha512-iL3O0vWanfKFVgy1J2ZHDPlAUK6EVHWEHWS6mUXwHEuPiK39tjlQtyUKQIJI1F5YsZB75ijGgRWMTawSDXlwCA==", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "browser-tabs-lock": "^1.2.15", + "core-js": "^3.25.4", + "es-cookie": "~1.3.2", + "fast-text-encoding": "^1.0.6", + "promise-polyfill": "^8.2.3", + "unfetch": "^4.2.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dev": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/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==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "peer": true + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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/highlight/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/highlight/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/highlight/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/highlight/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/highlight/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": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/@babel/highlight/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": { - "@babel/highlight": "^7.10.4" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "peer": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { + "node_modules/@babel/template/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==", + "dev": true, + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -153,10 +688,12 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/chalk": { + "node_modules/@babel/template/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==", + "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -166,39 +703,49 @@ "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { + "node_modules/@babel/template/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==", + "dev": true, + "peer": true, "dependencies": { "color-name": "1.1.3" } }, - "node_modules/@babel/highlight/node_modules/color-name": { + "node_modules/@babel/template/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==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "node_modules/@babel/template/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==", + "dev": true, + "peer": true, "engines": { "node": ">=0.8.0" } }, - "node_modules/@babel/highlight/node_modules/has-flag": { + "node_modules/@babel/template/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==", + "dev": true, + "peer": true, "engines": { "node": ">=4" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { + "node_modules/@babel/template/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==", + "dev": true, + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -206,24 +753,137 @@ "node": ">=4" } }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "peer": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -469,6 +1129,26 @@ "node": ">= 4" } }, + "node_modules/@hookform/devtools": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.1.tgz", + "integrity": "sha512-CrWxEoHQZaOXJZVQ8KBgOuAa8p2LI8M0DAN5GTRTmdCieRwFVjVDEmuTAVazWVRRkpEQSgSt3KYp7VmmqXdEnw==", + "dev": true, + "dependencies": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12", + "use-deep-compare-effect": "^1.8.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -489,6 +1169,59 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@mui/base": { "version": "5.0.0-alpha.121", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.121.tgz", @@ -1355,6 +2088,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.201", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz", + "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==", + "dev": true + }, "node_modules/@types/node": { "version": "14.18.38", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.38.tgz", @@ -2137,6 +2876,39 @@ "lodash": ">=4.17.21" } }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2204,9 +2976,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001467", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001467.tgz", - "integrity": "sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q==", + "version": "1.0.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==", "funding": [ { "type": "opencollective", @@ -2215,6 +2987,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -2857,6 +3633,15 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/devtools-protocol": { "version": "0.0.1159816", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1159816.tgz", @@ -2964,6 +3749,13 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.579", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.579.tgz", + "integrity": "sha512-bJKvA+awBIzYR0xRced7PrQuRIwGQPpo6ZLP62GAShahU9fWpsNN2IP6BSP1BLDDSbxvBVRGAMWlvVVq3npmLA==", + "dev": true, + "peer": true + }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -4264,6 +5056,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/geocoder-arcgis": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/geocoder-arcgis/-/geocoder-arcgis-2.0.5.tgz", @@ -5448,6 +6250,19 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5611,6 +6426,15 @@ } } }, + "node_modules/little-state-machine": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/little-state-machine/-/little-state-machine-4.8.0.tgz", + "integrity": "sha512-xfi5+iDxTLhu0hbnNubUs+qoQQqxhtEZeObP5ELjUlHnl74bbasY7mOonsGQrAouyrbag3ebNLSse5xX1T7buQ==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/localforage": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", @@ -6039,6 +6863,13 @@ } } }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true, + "peer": true + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6782,6 +7613,15 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/react-simple-animate": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.5.2.tgz", + "integrity": "sha512-xLE65euP920QMTOmv5haPlml+hmOPDkbIr5WeF7ADIXWBYt5kW/vwpNfWg8EKMab8aeDxIZ6QjffVh8v2dUyhg==", + "dev": true, + "peerDependencies": { + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -6824,6 +7664,24 @@ "node": ">=8.10.0" } }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -6858,6 +7716,44 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -7836,6 +8732,46 @@ "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -7854,6 +8790,37 @@ "node": ">=8" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7879,6 +8846,23 @@ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", "dev": true }, + "node_modules/use-deep-compare-effect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", + "integrity": "sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "dequal": "^2.0.2" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8214,6 +9198,17 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@auth0/auth0-react": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@auth0/auth0-react/-/auth0-react-1.12.1.tgz", @@ -8241,34 +9236,330 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "dev": true, + "peer": true + }, + "@babel/core": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dev": true, + "peer": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "peer": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "peer": true, + "requires": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "peer": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "peer": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@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==", + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, + "peer": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "peer": true, + "requires": { + "@babel/types": "^7.22.5" } }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "peer": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + }, + "@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "peer": true + }, + "@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -8323,6 +9614,29 @@ } } }, + "@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "peer": true + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "@babel/runtime": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", @@ -8331,13 +9645,203 @@ "regenerator-runtime": "^0.13.11" } }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "peer": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "peer": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "peer": true + }, + "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==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -8545,6 +10049,22 @@ } } }, + "@hookform/devtools": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@hookform/devtools/-/devtools-4.3.1.tgz", + "integrity": "sha512-CrWxEoHQZaOXJZVQ8KBgOuAa8p2LI8M0DAN5GTRTmdCieRwFVjVDEmuTAVazWVRRkpEQSgSt3KYp7VmmqXdEnw==", + "dev": true, + "requires": { + "@emotion/react": "^11.1.5", + "@emotion/styled": "^11.3.0", + "@types/lodash": "^4.14.168", + "little-state-machine": "^4.1.0", + "lodash": "^4.17.21", + "react-simple-animate": "^3.3.12", + "use-deep-compare-effect": "^1.8.1", + "uuid": "^8.3.2" + } + }, "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -8562,6 +10082,50 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "@mui/base": { "version": "5.0.0-alpha.121", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.121.tgz", @@ -9080,6 +10644,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.201", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz", + "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==", + "dev": true + }, "@types/node": { "version": "14.18.38", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.38.tgz", @@ -9653,6 +11223,19 @@ "lodash": ">=4.17.21" } }, + "browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + } + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -9694,9 +11277,9 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "caniuse-lite": { - "version": "1.0.30001467", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001467.tgz", - "integrity": "sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q==" + "version": "1.0.30001561", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz", + "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==" }, "caseless": { "version": "0.12.0", @@ -10196,6 +11779,12 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true + }, "devtools-protocol": { "version": "0.0.1159816", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1159816.tgz", @@ -10296,6 +11885,13 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.4.579", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.579.tgz", + "integrity": "sha512-bJKvA+awBIzYR0xRced7PrQuRIwGQPpo6ZLP62GAShahU9fWpsNN2IP6BSP1BLDDSbxvBVRGAMWlvVVq3npmLA==", + "dev": true, + "peer": true + }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -11261,6 +12857,13 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true + }, "geocoder-arcgis": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/geocoder-arcgis/-/geocoder-arcgis-2.0.5.tgz", @@ -12107,6 +13710,13 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "peer": true + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -12242,6 +13852,13 @@ "wrap-ansi": "^7.0.0" } }, + "little-state-machine": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/little-state-machine/-/little-state-machine-4.8.0.tgz", + "integrity": "sha512-xfi5+iDxTLhu0hbnNubUs+qoQQqxhtEZeObP5ELjUlHnl74bbasY7mOonsGQrAouyrbag3ebNLSse5xX1T7buQ==", + "dev": true, + "requires": {} + }, "localforage": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", @@ -12530,6 +14147,13 @@ "whatwg-url": "^5.0.0" } }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true, + "peer": true + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -13047,6 +14671,13 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "react-simple-animate": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/react-simple-animate/-/react-simple-animate-3.5.2.tgz", + "integrity": "sha512-xLE65euP920QMTOmv5haPlml+hmOPDkbIr5WeF7ADIXWBYt5kW/vwpNfWg8EKMab8aeDxIZ6QjffVh8v2dUyhg==", + "dev": true, + "requires": {} + }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -13084,6 +14715,21 @@ "picomatch": "^2.2.1" } }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -13106,6 +14752,37 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, "request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -13838,6 +15515,34 @@ "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==" }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -13850,6 +15555,17 @@ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "peer": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -13877,6 +15593,16 @@ } } }, + "use-deep-compare-effect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", + "integrity": "sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "dequal": "^2.0.2" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 2dc58fe0..306dddd9 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,8 @@ "zod": "^3.22.4" }, "devDependencies": { + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@hookform/devtools": "^4.3.1", "@types/dom-to-image": "^2.6.2", "@types/react": "^17.0.40", "@types/react-dom": "^17.0.3", From bbb9b2822efaa9e4b1a0573ca0b0b54f28945f7f Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:12:11 +0530 Subject: [PATCH 20/29] feat: matches contact form validation to backend - updates contact form validation rules - updates error text - stores error messages in error.fieldname.message to reduce duplication - updates form-error styles to enable longer messages --- public/locales/en/common.json | 12 +- src/Donations/Components/ContactsForm.tsx | 155 +++++++++++++--------- styles/globals.scss | 4 +- 3 files changed, 102 insertions(+), 69 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 263fbf8e..c987d7f2 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -17,21 +17,27 @@ "contactDetails": "Contact Details", "firstName": "First Name", "firstNameRequired": "First Name is required", + "firstNameInvalid": "First name is invalid. Only these special characters are allowed: space ' . -", "lastName": "Last Name", "lastNameRequired": "Last Name is required", - "atLeast3LettersRequired": "At least 3 letters required", + "lastNameInvalid": "Last name is invalid. Only these special characters are allowed: space ' -", + "max50Chars": "Should be 50 characters or less", "address": "Address", "addressRequired": "Address is required", + "addressInvalid": "Address is invalid. Only these special characters are allowed: space . , # - /", "city": "City", "cityRequired": "City is required", + "cityInvalid": "City is invalid. Only letters and these special characters are allowed: space . , ( ) -", "zipCode": "Zip Code", - "zipCodeAlphaNumValidation": "ZipCode is invalid", + "zipCodeRequired": "Zip Code is required", + "zipCodeInvalid": "Zip Code is invalid", "country": "Country", "countryRequired": "Country is required", "welcomePackageConsent": "Yes, please send me the Welcome Package (only EU countries).", "isACompanyDonation": "This donation is made by a company", "companyName": "Company Name", "companyRequired": "Company Name is required", + "companyNameInvalid": "Company name is invalid. Only these special characters are allowed: space . , ' & ( ) ! -", "companyUneditableHelpText": "Edit your profile if you need to update company name", "askPublishName": "Show my full name on the Plant-for-the-Planet platform & leaderboards.", "nameAlreadyPublished": "Your full name will appear in leaderboard as your Plant-for-the-Planet profile is currently public.", @@ -210,4 +216,4 @@ "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", "enterValidEmail": "Please enter a valid email" -} \ No newline at end of file +} diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 6dbe254c..9a527d06 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -19,6 +19,7 @@ import { AddressCandidate, GeocodeSuggestion } from "src/Common/Types/arcgis"; import GiftIcon from "public/assets/icons/GiftIcon"; import { euCountries } from "src/Utils/countryUtils"; import { isEmailValid } from "src/Utils/isEmailValid"; +// import { DevTool } from "@hookform/devtools"; interface FormData extends ContactDetails { isPackageWanted: boolean; @@ -81,7 +82,7 @@ function ContactsForm(): ReactElement { setValue, formState: { errors }, } = useForm({ - mode: "all", + mode: "onTouched", defaultValues: contactDetails, }); @@ -227,10 +228,21 @@ function ContactsForm(): ReactElement { ( + rules={{ + required: t("firstNameRequired"), + maxLength: { + value: 50, + message: t("max50Chars"), + }, + pattern: { + value: /^[\p{L}\p{N}\sß.'-]+$/u, + message: t("firstNameInvalid"), + }, + }} + render={({ field: { onChange, value, onBlur } }) => ( )} /> - {errors.firstname && errors.firstname.type === "required" && ( - {t("firstNameRequired")} - )} - {errors.firstname && errors.firstname.type === "minLength" && ( - - {t("atLeast3LettersRequired")} - + {errors.firstname !== undefined && ( +
{errors.firstname.message}
)}
@@ -252,10 +259,21 @@ function ContactsForm(): ReactElement { ( + rules={{ + required: t("lastNameRequired"), + maxLength: { + value: 50, + message: t("max50Chars"), + }, + pattern: { + value: /^[\p{L}\p{N}\sß'-]+$/u, + message: t("lastNameInvalid"), + }, + }} + render={({ field: { onChange, value, onBlur } }) => ( )} /> - {errors.lastname && errors.lastname.type === "required" && ( - {t("lastNameRequired")} - )} - {errors.lastname && errors.lastname.type === "minLength" && ( - - {t("atLeast3LettersRequired")} - + {errors.lastname !== undefined && ( +
{errors.lastname.message}
)}
@@ -279,18 +292,18 @@ function ContactsForm(): ReactElement { name="email" control={control} rules={{ - required: { - value: true, - message: t("emailRequired"), - }, + required: t("emailRequired"), validate: { emailInvalid: (value) => - value.length === 0 || isEmailValid(value), + value.length === 0 || + isEmailValid(value) || + t("enterValidEmail"), }, }} - render={({ field: { onChange, value } }) => ( + render={({ field: { onChange, value, onBlur } }) => ( )} /> - {errors.email && ( - - {errors.email.type === "required" - ? t("emailRequired") - : t("enterValidEmail")} - + {errors.email !== undefined && ( +
{errors.email.message}
)} - {/* {errors.email && errors.email.type === "validate" && ( - {t("useSameEmail")} - )} */}
( { @@ -352,8 +364,8 @@ function ContactsForm(): ReactElement {
) : null} - {errors.address && ( - {t("addressRequired")} + {errors.address !== undefined && ( +
{errors.address.message}
)} @@ -363,11 +375,19 @@ function ContactsForm(): ReactElement { name="city" control={control} rules={{ - required: true, + required: { + value: true, + message: t("cityRequired"), + }, + pattern: { + value: /^[\p{L}\sß.,()-]+$/u, + message: t("cityInvalid"), + }, }} - render={({ field: { onChange, value } }) => ( + render={({ field: { onChange, value, onBlur } }) => ( )} /> - {errors.city && ( - {t("cityRequired")} + {errors.city !== undefined && ( +
{errors.city.message}
)}
@@ -386,12 +406,16 @@ function ContactsForm(): ReactElement { name="zipCode" control={control} rules={{ - required: true, - pattern: postalRegex, + required: t("zipCodeRequired"), + pattern: { + value: postalRegex as RegExp, + message: t("zipCodeInvalid"), + }, }} - render={({ field: { onChange, value } }) => ( + render={({ field: { onChange, value, onBlur } }) => ( )} - {errors.zipCode && ( - - {t("zipCodeAlphaNumValidation")} - + {errors.zipCode !== undefined && ( +
{errors.zipCode.message}
)}
)} /> - {errors.country && ( - {t("countryRequired")} +
{errors.country.message}
)}
@@ -446,18 +464,19 @@ function ContactsForm(): ReactElement { ( + rules={{ required: t("tinRequired") }} + render={({ field: { onChange, value, onBlur } }) => ( )} /> - {errors.tin && errors.tin.type !== "validate" && ( - {t("tinRequired")} + {errors.tin !== undefined && ( +
{errors.tin.message}
)} ) : ( @@ -518,10 +537,17 @@ function ContactsForm(): ReactElement { ( + rules={{ + required: t("companyRequired"), + pattern: { + value: /^[\p{L}\p{N}\sß.,'&()!-]+$/u, + message: t("firstNameInvalid"), + }, + }} + render={({ field: { onChange, value, onBlur } }) => ( )} /> - {errors.companyname && ( - {t("companyRequired")} + {errors.companyname !== undefined && ( +
+ {errors.companyname.message} +
)} ) : null} @@ -571,6 +599,7 @@ function ContactsForm(): ReactElement { )} + {/* */} ); diff --git a/styles/globals.scss b/styles/globals.scss index 26838e86..36d60e1a 100644 --- a/styles/globals.scss +++ b/styles/globals.scss @@ -165,13 +165,11 @@ button { .form-field { position: relative; .form-errors { - position: absolute; - bottom: -20px; - left: 0px; font-family: $primaryFontFamily; font-size: 12px; color: $dangerColor; margin-left: 6px; + margin-bottom: -1.43em; } } From ab46edd695e8ad988e9581635282933b9938038b Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:15:23 +0530 Subject: [PATCH 21/29] fix: resolves UX issues in "form-error" blocks - GiftForm.tsx - OnBehalf.tsx --- src/Donations/Micros/GiftForm.tsx | 8 ++++---- src/Donations/Micros/OnBehalf.tsx | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Donations/Micros/GiftForm.tsx b/src/Donations/Micros/GiftForm.tsx index a525cd46..b6006674 100644 --- a/src/Donations/Micros/GiftForm.tsx +++ b/src/Donations/Micros/GiftForm.tsx @@ -109,9 +109,9 @@ export default function GiftForm(): ReactElement { )} /> {errors.recipientName && ( - +
{t("recipientNameRequired")} - +
)} @@ -151,11 +151,11 @@ export default function GiftForm(): ReactElement { )} /> {errors.recipientEmail && ( - +
{errors.recipientEmail.type === "required" ? t("emailRequired") : t("enterValidEmail")} - +
)}
diff --git a/src/Donations/Micros/OnBehalf.tsx b/src/Donations/Micros/OnBehalf.tsx index 855f3501..264d83d0 100644 --- a/src/Donations/Micros/OnBehalf.tsx +++ b/src/Donations/Micros/OnBehalf.tsx @@ -73,7 +73,7 @@ const OnBehalf: FC = () => { )} /> {errors.firstName && ( - {t("firstNameRequired")} +
{t("firstNameRequired")}
)} @@ -91,7 +91,7 @@ const OnBehalf: FC = () => { )} /> {errors.lastName && ( - {t("lastNameRequired")} +
{t("lastNameRequired")}
)}
{shouldNotify ? ( @@ -128,13 +128,13 @@ const OnBehalf: FC = () => { )} /> {errors.email && errors.email.type === "required" && ( - +
{errors.email.type === "required" ? t("emailRequired") : t("inValidField", { fieldName: "Email", })} - +
)} ) : ( From 560e97156463b8a9e7f7ec34366761b2358ea064 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:29:12 +0530 Subject: [PATCH 22/29] fix: fixes overly permissive regexp range --- src/Donations/Components/ContactsForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 9a527d06..118420a9 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -324,7 +324,7 @@ function ContactsForm(): ReactElement { rules={{ required: t("addressRequired"), pattern: { - value: /^[\p{L}\p{N}\sß.,#-/]+$/u, + value: /^[\p{L}\p{N}\sß.,#/-]+$/u, message: t("addressInvalid"), }, }} From 754e10708ebee16b94b07578111bd23dc93a7012 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Fri, 10 Nov 2023 15:36:26 +0530 Subject: [PATCH 23/29] fix: corrects error message for companyName --- src/Donations/Components/ContactsForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 118420a9..263a1849 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -541,7 +541,7 @@ function ContactsForm(): ReactElement { required: t("companyRequired"), pattern: { value: /^[\p{L}\p{N}\sß.,'&()!-]+$/u, - message: t("firstNameInvalid"), + message: t("companyNameInvalid"), }, }} render={({ field: { onChange, value, onBlur } }) => ( From 83413f137e91d2de08af48847c1f21fda889156a Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 20 Nov 2023 10:08:36 -0500 Subject: [PATCH 24/29] feat: updates contact form val. (first/last name) - disallows entries beginning with special characters --- public/locales/en/common.json | 4 ++-- src/Donations/Components/ContactsForm.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index c987d7f2..ba54bac7 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -17,10 +17,10 @@ "contactDetails": "Contact Details", "firstName": "First Name", "firstNameRequired": "First Name is required", - "firstNameInvalid": "First name is invalid. Only these special characters are allowed: space ' . -", + "firstNameInvalid": "First name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' . -", "lastName": "Last Name", "lastNameRequired": "Last Name is required", - "lastNameInvalid": "Last name is invalid. Only these special characters are allowed: space ' -", + "lastNameInvalid": "Last name is invalid. It cannot start with a special character, and only these special characters are allowed: space ' -", "max50Chars": "Should be 50 characters or less", "address": "Address", "addressRequired": "Address is required", diff --git a/src/Donations/Components/ContactsForm.tsx b/src/Donations/Components/ContactsForm.tsx index 263a1849..069ac3d5 100644 --- a/src/Donations/Components/ContactsForm.tsx +++ b/src/Donations/Components/ContactsForm.tsx @@ -235,7 +235,7 @@ function ContactsForm(): ReactElement { message: t("max50Chars"), }, pattern: { - value: /^[\p{L}\p{N}\sß.'-]+$/u, + value: /^[\p{L}\p{N}ß][\p{L}\p{N}\sß.'-]*$/u, message: t("firstNameInvalid"), }, }} @@ -266,7 +266,7 @@ function ContactsForm(): ReactElement { message: t("max50Chars"), }, pattern: { - value: /^[\p{L}\p{N}\sß'-]+$/u, + value: /^[\p{L}\p{N}ß][\p{L}\p{N}\sß'-]*$/u, message: t("lastNameInvalid"), }, }} From f01b7e8f0880abc590d064488612ad891e179adf Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 20 Nov 2023 12:07:22 -0500 Subject: [PATCH 25/29] fix: formats donation.units in ThankyouMessage --- src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx b/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx index cf3a700e..73d036c1 100644 --- a/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx +++ b/src/Donations/Micros/PaymentStatus/ThankyouMessage.tsx @@ -1,6 +1,7 @@ import React, { ReactElement } from "react"; import { useTranslation } from "next-i18next"; import getFormatedCurrency from "src/Utils/getFormattedCurrency"; +import { getFormattedNumber } from "src/Utils/getFormattedNumber"; import { QueryParamContext } from "src/Layout/QueryParamContext"; import { FetchedProjectDetails } from "src/Common/Types"; import { Donation } from "@planet-sdk/common/build/types/donation"; @@ -47,12 +48,13 @@ function ThankyouMessage({ }) : null; - // EXAMPLE: Your 50 trees will be planted by AMU EcoVillage Project, Ethiopia in Ethiopia. + // EXAMPLE: Your donation will be used to restore 1,000 trees by Yucatán Restoration in Mexico. + // EXAMPLE: Your donation will be used to restore 2,000 m² by Saving Sumatra’s Last Refuge in Indonesia. const donationProjectMessage = donation.destination && donation.units ? " " + t("common:restorationDonationUsage", { - units: donation.units, + units: getFormattedNumber(i18n.language, donation.units), unitType: t(`common:${donation.unitType}`, { count: donation.units }), projectName: donation.destination.name, location: t("country:" + donation.destination.country.toLowerCase()), From 451c04bb20ca42238c0a7ba176530a3254cbe686 Mon Sep 17 00:00:00 2001 From: Norbert Schuler Date: Sun, 26 Nov 2023 09:24:29 +0000 Subject: [PATCH 26/29] =?UTF-8?q?Language=20update=20from=20LingoHub=20?= =?UTF-8?q?=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Planet Donations Project Link: https://translate.lingohub.com/plant-for-the-planet/dashboard/planet-donations User: Norbert Schuler Easy language translations with LingoHub 🚀 --- public/locales/de/common.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/locales/de/common.json b/public/locales/de/common.json index a2b4c8b5..8214a67e 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -208,5 +208,6 @@ "loading": "Laden ...", "topProject": "Top-Projekt", "top_project_standards_fulfilled": "Die Projektinspektion ergab, dass dieses Projekt mindestens 12 der 19 wichtigsten <2>Projektstandards erfüllte.", - "standardsLink": "https://www.plant-for-the-planet.org/standards/" + "standardsLink": "https://www.plant-for-the-planet.org/standards/", + "enterValidEmail": "Bitte gibt eine gültige E-Mail-Adresse ein" } \ No newline at end of file From 50f8f3c6e10d3d330bc02bfd2e6fd46d3b14e02c Mon Sep 17 00:00:00 2001 From: Maria Hosfeld Date: Wed, 29 Nov 2023 09:50:48 +0000 Subject: [PATCH 27/29] =?UTF-8?q?Language=20update=20from=20LingoHub=20?= =?UTF-8?q?=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Planet Donations Project Link: https://translate.lingohub.com/plant-for-the-planet/dashboard/planet-donations User: Maria Hosfeld Easy language translations with LingoHub 🚀 --- public/locales/cs/common.json | 2 -- public/locales/de/common.json | 10 ++++++++-- public/locales/en/common.json | 2 +- public/locales/es/common.json | 2 -- public/locales/fr/common.json | 2 -- public/locales/it/common.json | 2 -- public/locales/pt-BR/common.json | 2 -- 7 files changed, 9 insertions(+), 13 deletions(-) diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 348476c8..3123d367 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -19,13 +19,11 @@ "firstNameRequired": "Křestní jméno je vyžadováno", "lastName": "Příjmení", "lastNameRequired": "Příjmení je vyžadováno", - "atLeast3LettersRequired": "Alespoň 3 písmena vyžadovány", "address": "Adresa", "addressRequired": "Adresa je vyžadována", "city": "Město", "cityRequired": "Město je vyžadováno", "zipCode": "PSČ", - "zipCodeAlphaNumValidation": "PSČ je neplatné", "country": "Země", "countryRequired": "Země je vyžadována", "isACompanyDonation": "Dar je učiněn firmou", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 8214a67e..32cdb480 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -17,21 +17,27 @@ "contactDetails": "Kontaktdetails", "firstName": "Vorname", "firstNameRequired": "Vorname ist erforderlich", + "firstNameInvalid": "Vorname ist ungültig. Er kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", "lastName": "Nachname", "lastNameRequired": "Nachname ist erforderlich", - "atLeast3LettersRequired": "Mindestens drei Buchstaben erforderlich", + "lastNameInvalid": "Nachname ist ungültig. Er kann kann nicht mit einem Sonderzeichen beginnen, und nur diese Sonderzeichen sind erlaubt: Leerzeichen ' . -", + "max50Chars": "Maximal 50 Buchstaben.", "address": "Adresse", "addressRequired": "Adresse ist erforderlich", + "addressInvalid": "Adresse ist ungültig. Nur diese Sonderzeichen sind erlaubt: Leerzeichen . , # - /", "city": "Stadt", "cityRequired": "Stadt ist erforderlich", + "cityInvalid": "Stadt ist ungültig. Nur Buchstaben und diese Sonderzeichen sind erlaubt: Leerzeichen . , ( ) -", "zipCode": "PLZ", - "zipCodeAlphaNumValidation": "PLZ ist ungültig", + "zipCodeRequired": "Postleitzahl ist ein Pflichtfeld", + "zipCodeInvalid": "Postleitzahl ist ungültig", "country": "Land", "countryRequired": "Land ist erforderlich", "welcomePackageConsent": "Ja, bitte sendet mir das Willkommenspaket (nur EU-Länder).", "isACompanyDonation": "Dies ist eine Firmenspende", "companyName": "Name der Firma", "companyRequired": "Firmenname ist erforderlich", + "companyNameInvalid": "Firmenname ist ungültig. Nur diese Sonderzeichen sind erlaubt: Leerzeichen . , ' & ( ) ! -", "companyUneditableHelpText": "Editiere dein Profil, um den Firmennamen zu aktualisieren.", "askPublishName": "Zeige meinen vollen Namen in der Plant-for-the-Planet-Plattform und Bestenliste an.", "nameAlreadyPublished": "Dein vollständiger Name wird in der Bestenliste angezeigt, da dein Plant-for-the-Planet-Profil derzeit öffentlich ist.", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index ba54bac7..5e202d0a 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -216,4 +216,4 @@ "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", "enterValidEmail": "Please enter a valid email" -} +} \ No newline at end of file diff --git a/public/locales/es/common.json b/public/locales/es/common.json index d94240be..b09a135c 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -15,13 +15,11 @@ "firstNameRequired": "Se requiere el nombre de pila", "lastName": "Apellido", "lastNameRequired": "El apellido es obligatorio", - "atLeast3LettersRequired": "Se requieren al menos 3 letras", "address": "Dirección", "addressRequired": "Se requiere la dirección", "city": "Ciudad", "cityRequired": "La ciudad es requerida", "zipCode": "Código postal", - "zipCodeAlphaNumValidation": "El código postal no es válido", "country": "País", "countryRequired": "Se requiere el país", "isACompanyDonation": "Esta donación la realiza una empresa", diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 32aa8107..02aa0918 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -17,13 +17,11 @@ "firstNameRequired": "Prénom requis", "lastName": "Nom de famille", "lastNameRequired": "Nom de famille requis", - "atLeast3LettersRequired": "Au moins 3 lettres requises", "address": "Adresse", "addressRequired": "Adresse requise", "city": "Ville", "cityRequired": "Ville requise", "zipCode": "Code postal", - "zipCodeAlphaNumValidation": "Le code postal n'est pas valide", "country": "Pays", "countryRequired": "Pays requis", "isACompanyDonation": "Ce don est effectué par une entreprise", diff --git a/public/locales/it/common.json b/public/locales/it/common.json index f30c2e6c..2e67e0c4 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -15,13 +15,11 @@ "firstNameRequired": "Il nome è richiesto", "lastName": "Nome", "lastNameRequired": "Il cognome è richiesto", - "atLeast3LettersRequired": "Almeno 3 lettere richieste", "address": "Indirizzo", "addressRequired": "L'indirizzo è richiesto", "city": "Città", "cityRequired": "La città è richiesta", "zipCode": "Codice postale", - "zipCodeAlphaNumValidation": "Il codice postale non è valido", "country": "Paese", "countryRequired": "Il paese è richiesto", "isACompanyDonation": "Questa donazione è fatta da una società", diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 70d601a1..794dce13 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -19,13 +19,11 @@ "firstNameRequired": "O primeiro nome é obrigatório", "lastName": "Sobrenome", "lastNameRequired": "Sobrenome é obrigatório", - "atLeast3LettersRequired": "Pelo menos 3 letras são necessárias", "address": "Endereço", "addressRequired": "O endereço é obrigatório", "city": "Cidade", "cityRequired": "Cidade é obrigatória", "zipCode": "Código Postal", - "zipCodeAlphaNumValidation": "O código postal é inválido", "country": "País", "countryRequired": "O país é exigido", "isACompanyDonation": "Esta doação é feita por uma empresa", From 61644e9ea641ffe3f7d6fe034ce603bde6292920 Mon Sep 17 00:00:00 2001 From: Maria Hosfeld Date: Wed, 29 Nov 2023 09:59:42 +0000 Subject: [PATCH 28/29] =?UTF-8?q?Language=20update=20from=20LingoHub=20?= =?UTF-8?q?=F0=9F=A4=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Project Name: Planet Donations Project Link: https://translate.lingohub.com/plant-for-the-planet/dashboard/planet-donations User: Maria Hosfeld Easy language translations with LingoHub 🚀 --- public/locales/cs/common.json | 1 - public/locales/de/common.json | 9 ++++++++- public/locales/en/common.json | 2 +- public/locales/es/common.json | 1 - public/locales/fr/common.json | 1 - public/locales/it/common.json | 1 - public/locales/pt-BR/common.json | 1 - 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index 3123d367..2afd34af 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -68,7 +68,6 @@ "contributionMessage": "Možná je jednou navštívíte? Mezitím možná pozvěte pár přátel, aby si zasadili pár stromů taky, tím, že jim řeknete o Vašich?", "fundingDonationSuccess": "Děkujeme za váš příspěvek! Dostsanete potvrzení o vašem příspěvku na e-mail.", "fundingContributionMessage": "Budeme vás informovat o našich krocích; mezitím se třeba pochlubte s vaším příspěvkem přátelům.", - "yourTreesPlantedByOnLocation": "Vašich {{treeCount}} stromů bude zasazeno {{projectName}} v {{location}}.", "m2conservedByOnLocation": "{{quantity}} m² lesa bude konzervováno {{projectName}} v{{location}}.", "myTreesPlantedByOnLocation": "Mých {{treeCount}} stromů bude zasazeno v {{location}}.", "iDonatedForestOnLocation": "Daroval jsem{{amount}} na konzervaci lesů v {{location}}.", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 32cdb480..a26f6b4a 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -3,6 +3,8 @@ "fortreeCountTrees_other": "für {{treeCount}} Bäume", "forQuantitym2": "für {{quantity}} m²", "m2": "m²", + "tree_one": "Baum", + "tree_other": "Bäume", "recipientName": "Name des Empfängers", "recipientNameRequired": "Name des Empfängers ist erforderlich", "email": "E-Mail", @@ -44,6 +46,10 @@ "orgNamePublishedTax": "Der Firmenname ist in unserer Bestenliste und App sichtbar. Spendenbescheinigungen werden auf denselben Namen ausgestellt.", "orgNamePublished": "Der Firmenname ist in unserer Bestenliste und App sichtbar.", "paymentDetails": "Zahlungsdaten", + "perUnit": { + "tree": "pro Baum", + "m2": "pro m²" + }, "perTree": "pro Baum", "perm2": "pro m²", "youWillReceiveTaxDeduction": "Du erhältst eine Spendenbescheinigung für ", @@ -78,9 +84,10 @@ "contributionMessage": "Vielleicht wirst du sie eines Tages besuchen? Bis dahin könntest du deinen Freunden von deinen Bäumen erzählen, falls sie auch ein paar eigene Bäume spenden möchten?", "fundingDonationSuccess": "Vielen Dank für deinen Beitrag! Du erhältst eine Bestätigung für deine Spende per E-Mail.", "fundingContributionMessage": "Wir werden dich über unsere Aktionen auf dem Laufenden halten, und in der Zwischenzeit kannst du deinen Freunden von deinem Beitrag berichten.", - "yourTreesPlantedByOnLocation": "Deine {{treeCount}} Bäume werden von {{projectName}} in {{location}} gepflanzt.", + "restorationDonationUsage": "Mit deiner Spende werden {{units}} {{unitType}} von {{projectName}} in {{location}} renaturiert.", "m2conservedByOnLocation": "{{quantity}} m² Wald werden durch {{projectName}} in {{location}} erhalten.", "myTreesPlantedByOnLocation": "Meine {{treeCount}} Bäume werden in {{location}} gepflanzt.", + "restorationDonationShareDetails": "Ich habe {{amount}} für die Wald Renaturierung in {{location}} gespendet", "iDonatedForestOnLocation": "Ich habe {{amount}} für die Erhaltung der Wälder in {{location}} gespendet.", "weDonatedForestOnLocation": "Wir haben {{amount}} für die Erhaltung der Wälder in {{location}} gespendet.", "plantTreesAtURL": "Pflanze & beschütze Bäume mit! {{url}}", diff --git a/public/locales/en/common.json b/public/locales/en/common.json index ffaa9dd6..73bccbd0 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -223,4 +223,4 @@ "top_project_standards_fulfilled": "The project inspection revealed that this project fulfilled at least 12 of the 19 Top Project <2>standards.", "standardsLink": "https://www.plant-for-the-planet.org/standards/", "enterValidEmail": "Please enter a valid email" -} +} \ No newline at end of file diff --git a/public/locales/es/common.json b/public/locales/es/common.json index b09a135c..ab92b234 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -57,7 +57,6 @@ "contributionMessage": "¿Quizás los visites algún día? Mientras tanto, ¿podrías convencer a tus amigos de que tengan sus propios árboles hablándoles de los tuyos?", "fundingDonationSuccess": "Gracias por su contribución", "fundingContributionMessage": "Les mantendremos informados de nuestras acciones, mientras tanto, quizás compartan con sus amigos su contribución.", - "yourTreesPlantedByOnLocation": "Tus árboles de {{treeCount}} serán plantados por {{projectName}} en {{location}} .", "myTreesPlantedByOnLocation": "Mis árboles de {{treeCount}} se están plantando en {{location}} .", "plantTreesAtURL": "Plantar árboles en {{url}}", "thankYou": "Gracias", diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 02aa0918..5b9ec533 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -59,7 +59,6 @@ "contributionMessage": "Peut-être iras-tu leur rendre visite un jour ? En attendant, vous pouvez peut-être faire découvrir à vos amis leurs propres arbres en leur parlant des vôtres ?", "fundingDonationSuccess": "Merci pour votre contribution ! Vous recevrez un certificat pour votre contribution par email.", "fundingContributionMessage": "Nous vous tiendrons au courant de nos actions. En attendant, vous pouvez partager votre contribution avec vos amis.", - "yourTreesPlantedByOnLocation": "Vos {{treeCount}} arbres seront plantés par {{projectName}} à {{location}} .", "myTreesPlantedByOnLocation": "Mes arbres {{treeCount}} sont plantés sur {{location}} .", "plantTreesAtURL": "Restaurer et protéger les arbres à {{url}}", "thankYou": "Merci", diff --git a/public/locales/it/common.json b/public/locales/it/common.json index 2e67e0c4..3501d3f6 100644 --- a/public/locales/it/common.json +++ b/public/locales/it/common.json @@ -57,7 +57,6 @@ "contributionMessage": "Forse un giorno andrai a trovarli? Nel frattempo, magari, fai in modo che i tuoi amici abbiano qualche albero tutto per loro raccontando loro del tuo?", "fundingDonationSuccess": "Grazie per il vostro contributo", "fundingContributionMessage": "Vi terremo informati sulle nostre azioni, nel frattempo magari condividete con i vostri amici il vostro contributo.", - "yourTreesPlantedByOnLocation": "I tuoi alberi {{treeCount}} saranno piantati da {{projectName}} in {{location}} .", "myTreesPlantedByOnLocation": "I miei alberi {{treeCount}} sono stati piantati in {{location}} .", "plantTreesAtURL": "Piantare alberi a {{url}}", "thankYou": "Grazie", diff --git a/public/locales/pt-BR/common.json b/public/locales/pt-BR/common.json index 794dce13..e6c13a1b 100644 --- a/public/locales/pt-BR/common.json +++ b/public/locales/pt-BR/common.json @@ -67,7 +67,6 @@ "contributionMessage": "Talvez você vai visitá-los um dia destes? Nesse meio tempo, que tal contar aos seus amigos sobre suas árvores, para incentivá-los a plantar as árvores deles?", "fundingDonationSuccess": "Obrigado pela sua contribuição! Você receberá uma confirmação de sua contribuição no seu e-mail.", "fundingContributionMessage": "Vamos mantê-lo informado sobre as nossas ações, enquanto isso, compartilhe com os seus amigos sobre a sua contribuição.", - "yourTreesPlantedByOnLocation": "As suas árvores {{treeCount}} serão plantadas por {{projectName}} em {{location}} .", "m2conservedByOnLocation": "{{quantity}} m² de floresta será conservada por {{projectName}} em {{location}}.", "myTreesPlantedByOnLocation": "As minhas {{treeCount}} árvores estão sendo plantadas em {{location}} .", "iDonatedForestOnLocation": "Eu doei {{amount}} para a conservação da floresta em {{location}}.", From 3219d25b15c73446030d0eeeccd985bfc0f5a286 Mon Sep 17 00:00:00 2001 From: mohitb35 <44917347+mohitb35@users.noreply.github.com> Date: Mon, 11 Dec 2023 15:50:50 -0500 Subject: [PATCH 29/29] chore: updates planet sdk --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7b5d53fd..e9254966 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@mui/material": "^5.11.8", "@next/bundle-analyzer": "^10.1.3", "@paypal/react-paypal-js": "^7.8.2", - "@planet-sdk/common": "^0.1.29", + "@planet-sdk/common": "^0.1.34", "@sentry/browser": "^6.2.5", "@sentry/integrations": "^6.2.5", "@sentry/node": "^6.2.5", @@ -1812,9 +1812,9 @@ "dev": true }, "node_modules/@planet-sdk/common": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.29.tgz", - "integrity": "sha512-hNmkxfYcqmUuYGm0BLWSvr+sIbZxOXCy1AEhpClTTcfQjpofyqfHfrgkmgoFzZqK9WXPEq0Tn2uSDfqPPcRpFg==", + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.34.tgz", + "integrity": "sha512-oMPD7QvXVkLYVz5Q3OhU+mFypfs407aKqCGprHo0M9ALvDTDoOKT2HsjiETCXkuu4nJcGOYmLdwGyXbWXWyZGQ==", "dependencies": { "@types/geojson": "^7946.0.10" } @@ -10416,9 +10416,9 @@ } }, "@planet-sdk/common": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.29.tgz", - "integrity": "sha512-hNmkxfYcqmUuYGm0BLWSvr+sIbZxOXCy1AEhpClTTcfQjpofyqfHfrgkmgoFzZqK9WXPEq0Tn2uSDfqPPcRpFg==", + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/@planet-sdk/common/-/common-0.1.34.tgz", + "integrity": "sha512-oMPD7QvXVkLYVz5Q3OhU+mFypfs407aKqCGprHo0M9ALvDTDoOKT2HsjiETCXkuu4nJcGOYmLdwGyXbWXWyZGQ==", "requires": { "@types/geojson": "^7946.0.10" } diff --git a/package.json b/package.json index bca37a1f..af29d68b 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@mui/material": "^5.11.8", "@next/bundle-analyzer": "^10.1.3", "@paypal/react-paypal-js": "^7.8.2", - "@planet-sdk/common": "^0.1.29", + "@planet-sdk/common": "^0.1.34", "@sentry/browser": "^6.2.5", "@sentry/integrations": "^6.2.5", "@sentry/node": "^6.2.5",