From a2bade7b2f6550607acbca02dc94d9b90ae51387 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Mon, 7 Oct 2024 16:13:19 +0300 Subject: [PATCH 01/31] Remove app board (#70) --- _codux/boards/app.board.tsx | 50 ------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 _codux/boards/app.board.tsx diff --git a/_codux/boards/app.board.tsx b/_codux/boards/app.board.tsx deleted file mode 100644 index 7b77b82..0000000 --- a/_codux/boards/app.board.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { createRemixStub } from '@remix-run/testing'; -import { createBoard } from '@wixc3/react-board'; -import App, { ErrorBoundary as rootErrorBoundary, loader as rootLoader } from 'app/root'; -import HomePage, { loader as homePageLoader } from 'app/routes/_index/route'; -import AboutPage from 'app/routes/about/route'; -import ProductsCategoryPage, { loader as productsCategoryPageLoader } from 'app/routes/category.$categorySlug/route'; -import ProductDetailsPage, { - ErrorBoundary as productDetailsErrorBoundary, - loader as productDetailsPageLoader, -} from 'app/routes/products.$productSlug/route'; -import { ROUTES } from '~/router/config'; -import { sleep } from './utils'; - -const AppWrapper = createRemixStub([ - { - Component: () => { - return ; - }, - loader: rootLoader, - ErrorBoundary: rootErrorBoundary, - children: [ - { - path: ROUTES.home.path, - Component: HomePage, - loader: homePageLoader, - }, - { - path: ROUTES.about.path, - Component: AboutPage, - }, - { - path: ROUTES.category.path, - Component: ProductsCategoryPage, - loader: productsCategoryPageLoader, - }, - { - path: ROUTES.product.path, - Component: ProductDetailsPage, - loader: productDetailsPageLoader, - ErrorBoundary: productDetailsErrorBoundary, - }, - ], - }, -]); - -export default createBoard({ - name: 'App', - Board: () => , - readyToSnapshot: () => sleep(3000), -}); From 753613eb7af397d087c277dc66c0666f89137d59 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Mon, 7 Oct 2024 17:50:34 +0300 Subject: [PATCH 02/31] Update error handling (#72) * Remove app board (#70) (#71) * Update error handling --- app/root.tsx | 2 +- app/routes/category.$categorySlug/route.tsx | 34 ++++++++----------- app/routes/products.$productSlug/route.tsx | 34 ++++++++----------- app/routes/thank-you/route.tsx | 12 +++++-- src/utils/common.ts | 37 +++++++++++++-------- 5 files changed, 62 insertions(+), 57 deletions(-) diff --git a/app/root.tsx b/app/root.tsx index 77888cc..7a0039a 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -86,7 +86,7 @@ export function ErrorBoundary() { title={isPageNotFoundError ? 'Page Not Found' : 'Oops, something went wrong'} message={isPageNotFoundError ? undefined : getErrorMessage(error)} actionButtonText="Back to shopping" - onActionButtonClick={() => navigate(ROUTES.category.to())} + onActionButtonClick={() => navigate(ROUTES.category.to('all-products'))} /> ); diff --git a/app/routes/category.$categorySlug/route.tsx b/app/routes/category.$categorySlug/route.tsx index 4c17eed..f562f39 100644 --- a/app/routes/category.$categorySlug/route.tsx +++ b/app/routes/category.$categorySlug/route.tsx @@ -6,7 +6,7 @@ import { EcomApiErrorCodes } from '~/api/types'; import { getImageHttpUrl } from '~/api/wix-image'; import { ProductCard } from '~/components/product-card/product-card'; import { ROUTES } from '~/router/config'; -import { getUrlOriginWithPath, isOutOfStock } from '~/utils'; +import { getErrorMessage, getUrlOriginWithPath, isOutOfStock } from '~/utils'; import { ErrorComponent } from '~/components/error-component/error-component'; import styles from './category.module.scss'; @@ -96,28 +96,22 @@ export function ErrorBoundary() { const error = useRouteError(); const navigate = useNavigate(); - if (isRouteErrorResponse(error)) { - let title: string; - let message: string | undefined; - if (error.data.code === EcomApiErrorCodes.CategoryNotFound) { - title = 'Category Not Found'; - message = "Unfortunately category you trying to open doesn't exist"; - } else { - title = 'Failed to load category products'; - message = error.data.message; - } + let title = 'Error'; + let message = getErrorMessage(error); - return ( - navigate(ROUTES.category.to())} - /> - ); + if (isRouteErrorResponse(error) && error.data.code === EcomApiErrorCodes.CategoryNotFound) { + title = 'Category Not Found'; + message = "Unfortunately, the category page you're trying to open does not exist"; } - throw error; + return ( + navigate(ROUTES.category.to('all-products'))} + /> + ); } export const meta: MetaFunction = ({ data }) => { diff --git a/app/routes/products.$productSlug/route.tsx b/app/routes/products.$productSlug/route.tsx index 64df7f1..5a42181 100644 --- a/app/routes/products.$productSlug/route.tsx +++ b/app/routes/products.$productSlug/route.tsx @@ -13,7 +13,7 @@ import { ProductOption } from '~/components/product-option/product-option'; import { UnsafeRichText } from '~/components/rich-text/rich-text'; import { getChoiceValue } from '~/components/product-option/product-option-utils'; import { ROUTES } from '~/router/config'; -import { getPriceData, getSelectedVariant, getSKU, getUrlOriginWithPath, isOutOfStock } from '~/utils'; +import { getErrorMessage, getPriceData, getSelectedVariant, getSKU, getUrlOriginWithPath, isOutOfStock } from '~/utils'; import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; import styles from './product-details.module.scss'; @@ -166,28 +166,22 @@ export function ErrorBoundary() { const error = useRouteError(); const navigate = useNavigate(); - if (isRouteErrorResponse(error)) { - let title: string; - let message: string | undefined; - if (error.data.code === EcomApiErrorCodes.ProductNotFound) { - title = 'Product Not Found'; - message = "Unfortunately product you trying to open doesn't exist"; - } else { - title = 'Failed to load product details'; - message = error.data.message; - } + let title = 'Error'; + let message = getErrorMessage(error); - return ( - navigate(ROUTES.category.to())} - /> - ); + if (isRouteErrorResponse(error) && error.data.code === EcomApiErrorCodes.ProductNotFound) { + title = 'Product Not Found'; + message = "Unfortunately a product page you trying to open doesn't exist"; } - throw error; + return ( + navigate(ROUTES.category.to('all-products'))} + /> + ); } export const meta: MetaFunction = ({ data }) => { diff --git a/app/routes/thank-you/route.tsx b/app/routes/thank-you/route.tsx index 118d70b..eddcb6e 100644 --- a/app/routes/thank-you/route.tsx +++ b/app/routes/thank-you/route.tsx @@ -1,11 +1,12 @@ import { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; -import { Link, useSearchParams } from '@remix-run/react'; +import { isRouteErrorResponse, Link, useRouteError, useSearchParams } from '@remix-run/react'; import { useEffect, useState } from 'react'; import { getEcomApi } from '~/api/ecom-api'; import { OrderDetails } from '~/api/types'; +import { ErrorComponent } from '~/components/error-component/error-component'; import { OrderSummary } from '~/components/order-summary/order-summary'; import { ROUTES } from '~/router/config'; -import { getUrlOriginWithPath } from '~/utils'; +import { getErrorMessage, getUrlOriginWithPath } from '~/utils'; import styles from './thank-you.module.scss'; export const loader = async ({ request }: LoaderFunctionArgs) => { @@ -61,6 +62,13 @@ export default function ThankYouPage() { ); } +export function ErrorBoundary() { + const error = useRouteError(); + const title = isRouteErrorResponse(error) ? 'Failed to load order details' : 'Error'; + const message = getErrorMessage(error); + return ; +} + export const meta: MetaFunction = ({ data }) => { const title = 'E-Commerce App - Thank You'; const description = 'Thank You for your purchase'; diff --git a/src/utils/common.ts b/src/utils/common.ts index 17e72d4..ae3cf9c 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -10,30 +10,39 @@ export function getUrlOriginWithPath(url: string) { * Retrieves the message from a thrown error. * - Handles Remix ErrorResponse (non-Error instance). * - Handles Wix eCom SDK errors (non-Error instance). - * - Converts plain objects to a JSON string as a measure - * to help identify the origin of such improper errors. - * - Falls back on converting the value to a string. + * - Handles plain objects structured like an Error. + * - Converts plain objects with unknown structure into + * a JSON string to help in debugging their source. + * - Falls back to converting the value to a string. */ -export function getErrorMessage(value: unknown): string { - if (value instanceof Error) { - return value.message; +export function getErrorMessage(error: unknown): string { + if (error instanceof Error) { + return error.message; } - if (isRouteErrorResponse(value)) { - return value.data; + if (isEcomSDKError(error)) { + return error.message; } - if (isEcomSDKError(value)) { - return value.message; + // Remix ErrorResponse thrown from an action or loader: + // - throw new Response('oops'); + // - throw json('oops') + // - throw json({message: 'oops'}) + if (isRouteErrorResponse(error)) { + error = error.data; } - if (typeof value == 'object' && value !== null) { + if (typeof error == 'object' && error !== null) { + if ('message' in error && typeof error.message === 'string') { + return error.message; + } + try { - return JSON.stringify(value); + return JSON.stringify(error); } catch { - // ignore serialization failure + // Fall through. } } - return String(value); + return String(error); } From c9161434edb720e5b099154fd39bee57f24b61b4 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Tue, 8 Oct 2024 09:34:29 +0300 Subject: [PATCH 03/31] Create CartItemView component, update ProductCard board (#74) * Create CartItemView component * Update product card board * Updated UI kit components board * Resolve comments * Resolve comments 2 --- ...tem.board.tsx => cart-item-view.board.tsx} | 10 +-- .../product-card-out-of-stock.board.tsx | 16 ----- .../product-card-without-image.board.tsx | 11 --- .../product-card/product-card.board.tsx | 15 ---- .../ui-kits/ui-kit-components.board.tsx | 26 ++++++- ...module.scss => cart-item-view.module.scss} | 0 .../cart/cart-item/cart-item-view.tsx | 70 +++++++++++++++++++ src/components/cart/cart-item/cart-item.tsx | 68 ++++-------------- 8 files changed, 113 insertions(+), 103 deletions(-) rename _codux/boards/components/cart/{cart-item.board.tsx => cart-item-view.board.tsx} (58%) delete mode 100644 _codux/boards/components/product-card/product-card-out-of-stock.board.tsx delete mode 100644 _codux/boards/components/product-card/product-card-without-image.board.tsx delete mode 100644 _codux/boards/components/product-card/product-card.board.tsx rename src/components/cart/cart-item/{cart-item.module.scss => cart-item-view.module.scss} (100%) create mode 100644 src/components/cart/cart-item/cart-item-view.tsx diff --git a/_codux/boards/components/cart/cart-item.board.tsx b/_codux/boards/components/cart/cart-item-view.board.tsx similarity index 58% rename from _codux/boards/components/cart/cart-item.board.tsx rename to _codux/boards/components/cart/cart-item-view.board.tsx index c06c347..28746c0 100644 --- a/_codux/boards/components/cart/cart-item.board.tsx +++ b/_codux/boards/components/cart/cart-item-view.board.tsx @@ -1,15 +1,17 @@ import { createBoard } from '@wixc3/react-board'; import ComponentWrapper from '_codux/board-wrappers/component-wrapper'; import { mockCartItem, mockOutOfStockCartItem } from '_codux/mocks/cart-item'; -import { CartItem } from '~/components/cart/cart-item/cart-item'; +import { CartItemView } from '~/components/cart/cart-item/cart-item-view'; + +const noop = () => {}; export default createBoard({ - name: 'Cart Item', + name: 'Cart Item View', Board: () => { return ( - - + + ); }, diff --git a/_codux/boards/components/product-card/product-card-out-of-stock.board.tsx b/_codux/boards/components/product-card/product-card-out-of-stock.board.tsx deleted file mode 100644 index f0f0303..0000000 --- a/_codux/boards/components/product-card/product-card-out-of-stock.board.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { createBoard } from '@wixc3/react-board'; -import { ProductCard } from '~/components/product-card/product-card'; - -export default createBoard({ - name: 'Product Card - Out of stock', - Board: () => ( - - ), - tags: ['Component'], -}); diff --git a/_codux/boards/components/product-card/product-card-without-image.board.tsx b/_codux/boards/components/product-card/product-card-without-image.board.tsx deleted file mode 100644 index 79207c6..0000000 --- a/_codux/boards/components/product-card/product-card-without-image.board.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { createBoard } from '@wixc3/react-board'; -import { ProductCard } from '~/components/product-card/product-card'; - -export default createBoard({ - name: 'Product Card No Image', - Board: () => , - tags: ['Component'], - environmentProps: { - windowWidth: 578, - }, -}); diff --git a/_codux/boards/components/product-card/product-card.board.tsx b/_codux/boards/components/product-card/product-card.board.tsx deleted file mode 100644 index 19005d1..0000000 --- a/_codux/boards/components/product-card/product-card.board.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { createBoard } from '@wixc3/react-board'; -import { ProductCard } from '~/components/product-card/product-card'; - -export default createBoard({ - name: 'Product Card', - Board: () => ( - - ), - tags: ['Component'], -}); diff --git a/_codux/boards/ui-kits/ui-kit-components.board.tsx b/_codux/boards/ui-kits/ui-kit-components.board.tsx index 80b8de6..6dff79b 100644 --- a/_codux/boards/ui-kits/ui-kit-components.board.tsx +++ b/_codux/boards/ui-kits/ui-kit-components.board.tsx @@ -23,6 +23,7 @@ export default createBoard({ />

Product Card

+ -

Product Card No Image

+

Product Card - No Image

+ + + + +

Product Card - Out Of Stock

+ + + + +

Product Card - With Discount

), isSnippet: true, environmentProps: { - windowWidth: 320, + windowWidth: 421, windowHeight: 525, }, tags: ['UI Kit'], diff --git a/src/components/cart/cart-item/cart-item.module.scss b/src/components/cart/cart-item/cart-item-view.module.scss similarity index 100% rename from src/components/cart/cart-item/cart-item.module.scss rename to src/components/cart/cart-item/cart-item-view.module.scss diff --git a/src/components/cart/cart-item/cart-item-view.tsx b/src/components/cart/cart-item/cart-item-view.tsx new file mode 100644 index 0000000..59de947 --- /dev/null +++ b/src/components/cart/cart-item/cart-item-view.tsx @@ -0,0 +1,70 @@ +import { Cross2Icon } from '@radix-ui/react-icons'; +import type { cart } from '@wix/ecom'; +import classNames from 'classnames'; +import { getImageHttpUrl } from '~/api/wix-image'; +import { Price } from '~/components/price/price'; +import { isCartItemAvailable } from '~/utils'; +import styles from './cart-item-view.module.scss'; + +const IMAGE_SIZE = 120; +export interface CartItemViewProps { + className?: string; + isLast?: boolean; + cartItem: cart.LineItem; + onRemoveButtonClick: () => void; + onQuantityChange: React.ChangeEventHandler; +} + +export const CartItemView = ({ + cartItem, + className, + isLast, + onRemoveButtonClick, + onQuantityChange, +}: CartItemViewProps) => { + const name = cartItem.productName?.translated ?? ''; + const imageUrl = getImageHttpUrl(cartItem.image, IMAGE_SIZE, IMAGE_SIZE); + const isAvailable = isCartItemAvailable(cartItem); + + return ( +
+ {name} +
+
+
+

{name}

+ {cartItem.fullPrice?.formattedConvertedAmount && ( + + )} +
+ +
+ + {isAvailable ? ( +
+ +
+ ) : ( +
Out of stock
+ )} +
+
+ ); +}; diff --git a/src/components/cart/cart-item/cart-item.tsx b/src/components/cart/cart-item/cart-item.tsx index 7a71b24..cbdfe2a 100644 --- a/src/components/cart/cart-item/cart-item.tsx +++ b/src/components/cart/cart-item/cart-item.tsx @@ -1,12 +1,7 @@ -import { Cross2Icon } from '@radix-ui/react-icons'; import { cart } from '@wix/ecom'; -import classNames from 'classnames'; import { ChangeEvent } from 'react'; import { useRemoveItemFromCart, useUpdateCartItemQuantity } from '~/api/api-hooks'; -import { getImageHttpUrl } from '~/api/wix-image'; -import { Price } from '~/components/price/price'; -import { isCartItemAvailable } from '~/utils'; -import styles from './cart-item.module.scss'; +import { CartItemView } from './cart-item-view'; export interface CartItemProps { className?: string; @@ -15,13 +10,10 @@ export interface CartItemProps { } export const CartItem = ({ cartItem, className, isLast }: CartItemProps) => { - const name = cartItem.productName?.translated || ''; - const imageUrl = getImageHttpUrl(cartItem.image, 120, 120); - const { trigger: updateQuantity } = useUpdateCartItemQuantity(); const { trigger: removeItem } = useRemoveItemFromCart(); - function updateQuantityHandler(e: ChangeEvent) { + const handleQuantityChange = (e: ChangeEvent) => { if (!cartItem._id) { return; } @@ -29,53 +21,19 @@ export const CartItem = ({ cartItem, className, isLast }: CartItemProps) => { if (newQuantity > 0) { updateQuantity({ id: cartItem._id, quantity: newQuantity }); } - } + }; - const isAvailable = isCartItemAvailable(cartItem); + const handleRemoveItem = () => { + return removeItem(cartItem._id!); + }; return ( -
- {name -
-
-
-

{name}

- {cartItem.fullPrice?.formattedConvertedAmount && ( - - )} -
- -
- - {isAvailable ? ( -
- -
- ) : ( -
Out of stock
- )} -
-
+ ); }; From b36b9fb07c054271d70089021692277763c3dfc3 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:51:18 +0300 Subject: [PATCH 04/31] Update codux config to use .env file (#76) --- codux.config.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/codux.config.json b/codux.config.json index 6b9161a..f6aa8bf 100644 --- a/codux.config.json +++ b/codux.config.json @@ -48,8 +48,7 @@ }, "svgLoader": "both", "previewConfiguration": { - "environmentVariables": { - "WIX_CLIENT_ID": "0c9d1ef9-f496-4149-b246-75a2514b8c99" - } + "environmentVariables": {}, + "envFile": ".env" } } From 2d2546f20671740e600177897532d62c044b61dd Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:03:39 +0300 Subject: [PATCH 05/31] Handle trackQuantity property for out of stock indication (#80) --- src/utils/product-utils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/utils/product-utils.ts b/src/utils/product-utils.ts index 26b3d85..541defa 100644 --- a/src/utils/product-utils.ts +++ b/src/utils/product-utils.ts @@ -9,8 +9,10 @@ export function isOutOfStock( ): boolean { if (product.manageVariants) { const selectedVariant = getSelectedVariant(product, selectedOptions); - if (selectedVariant?.stock?.inStock !== undefined) { - return !selectedVariant?.stock?.inStock; + if (selectedVariant?.stock?.trackQuantity === true) { + return selectedVariant?.stock?.quantity === 0; + } else { + return selectedVariant?.stock?.inStock === false; } } From f05cc2bce730e0be38871d550e0b14933e8edef7 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Wed, 9 Oct 2024 15:19:55 +0300 Subject: [PATCH 06/31] Keep entire selected choice object in route state (#81) * Keep entire selected choice object in route state * Remove console.log * Add return types, update comment * Update helper name and added comment --- app/routes/products.$productSlug/route.tsx | 45 ++++++++++------- .../product-option/product-option-utils.ts | 16 ------ .../product-option/product-option.tsx | 27 ++++++---- src/utils/product-utils.ts | 49 ++++++++++++++++--- 4 files changed, 85 insertions(+), 52 deletions(-) delete mode 100644 src/components/product-option/product-option-utils.ts diff --git a/app/routes/products.$productSlug/route.tsx b/app/routes/products.$productSlug/route.tsx index 5a42181..156ae93 100644 --- a/app/routes/products.$productSlug/route.tsx +++ b/app/routes/products.$productSlug/route.tsx @@ -1,5 +1,6 @@ import type { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; import { isRouteErrorResponse, json, useLoaderData, useNavigate, useRouteError } from '@remix-run/react'; +import type { products } from '@wix/stores'; import classNames from 'classnames'; import { useRef, useState } from 'react'; import { useAddToCart } from '~/api/api-hooks'; @@ -11,9 +12,16 @@ import { ProductAdditionalInfo } from '~/components/product-additional-info/prod import { ProductImages } from '~/components/product-images/product-images'; import { ProductOption } from '~/components/product-option/product-option'; import { UnsafeRichText } from '~/components/rich-text/rich-text'; -import { getChoiceValue } from '~/components/product-option/product-option-utils'; import { ROUTES } from '~/router/config'; -import { getErrorMessage, getPriceData, getSelectedVariant, getSKU, getUrlOriginWithPath, isOutOfStock } from '~/utils'; +import { + getErrorMessage, + getPriceData, + selectedChoicesToVariantChoices, + getSelectedVariant, + getSKU, + getUrlOriginWithPath, + isOutOfStock, +} from '~/utils'; import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; import styles from './product-details.module.scss'; @@ -38,25 +46,24 @@ export default function ProductDetailsPage() { const { trigger: addToCart } = useAddToCart(); const quantityInput = useRef(null); - const getInitialSelectedOptions = () => { - const result: Record = {}; + const getInitialSelectedChoices = () => { + const result: Record = {}; for (const option of product.productOptions ?? []) { if (option.name) { - const initialChoice = option?.choices?.length === 1 ? option.choices[0] : undefined; - result[option.name] = getChoiceValue(option, initialChoice); + result[option.name] = option?.choices?.length === 1 ? option.choices[0] : undefined; } } return result; }; - const [selectedOptions, setSelectedOptions] = useState>( - getInitialSelectedOptions() + const [selectedChoices, setSelectedChoices] = useState>( + getInitialSelectedChoices() ); - const outOfStock = isOutOfStock(product, selectedOptions); - const priceData = getPriceData(product, selectedOptions); - const sku = getSKU(product, selectedOptions); + const outOfStock = isOutOfStock(product, selectedChoices); + const priceData = getPriceData(product, selectedChoices); + const sku = getSKU(product, selectedChoices); async function addToCartHandler() { if (!product?._id || outOfStock) { @@ -64,14 +71,14 @@ export default function ProductDetailsPage() { } setAddToCartAttempted(true); - if (Object.values(selectedOptions).includes(undefined)) { + if (Object.values(selectedChoices).includes(undefined)) { return; } const quantity = parseInt(quantityInput.current?.value ?? '1', 10); - const selectedVariant = getSelectedVariant(product, selectedOptions); + const selectedVariant = getSelectedVariant(product, selectedChoices); - let options: AddToCartOptions = { options: selectedOptions }; + let options: AddToCartOptions = { options: selectedChoicesToVariantChoices(product, selectedChoices) }; if (product.manageVariants && selectedVariant?._id) { options = { variantId: selectedVariant._id }; } @@ -114,16 +121,16 @@ export default function ProductDetailsPage() { { - setSelectedOptions((prev) => ({ + selectedChoice={selectedChoices[option.name!]} + onChange={(newSelectedChoice) => { + setSelectedChoices((prev) => ({ ...prev, - [option.name!]: value, + [option.name!]: newSelectedChoice, })); }} /> diff --git a/src/components/product-option/product-option-utils.ts b/src/components/product-option/product-option-utils.ts deleted file mode 100644 index 65845a2..0000000 --- a/src/components/product-option/product-option-utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { products } from '@wix/stores'; - -export function getChoiceValue( - option: products.ProductOption | undefined, - choice: products.Choice | undefined -): string | undefined { - if (option !== undefined && choice !== undefined) { - /** - * for color options, `description` field contains color value - * and `value` field contains hex color representation - */ - return option.optionType === products.OptionType.color ? choice.description : choice.value; - } - - return undefined; -} diff --git a/src/components/product-option/product-option.tsx b/src/components/product-option/product-option.tsx index 98dee13..5465b08 100644 --- a/src/components/product-option/product-option.tsx +++ b/src/components/product-option/product-option.tsx @@ -1,24 +1,33 @@ import { products } from '@wix/stores'; import { ColorSelect } from '~/components/color-select/color-select'; import { Select } from '~/components/select/select'; -import { getChoiceValue } from './product-option-utils'; import styles from './product-option.module.scss'; +import { getChoiceValue } from '~/utils'; export interface ProductOptionProps { option: products.ProductOption; - selectedValue: string | undefined; + selectedChoice: products.Choice | undefined; error: string | undefined; - onChange: (value: string) => void; + onChange: (value: products.Choice) => void; } -export const ProductOption = ({ option, selectedValue, error, onChange }: ProductOptionProps) => { +export const ProductOption = ({ option, selectedChoice, error, onChange }: ProductOptionProps) => { const { name, optionType, choices } = option; if (name === undefined || choices === undefined) { return null; } - const selectedChoice = choices.find((c) => getChoiceValue(option, c) === selectedValue); + const handleChange = (value: string) => { + if (!optionType) { + return; + } + + const newSelectedChoice = choices.find((c) => getChoiceValue(optionType, c) === value); + if (newSelectedChoice) { + onChange(newSelectedChoice); + } + }; return (
@@ -36,8 +45,8 @@ export const ProductOption = ({ option, selectedValue, error, onChange }: Produc name: c.description!, hexValue: c.value!, }))} - onChange={onChange} - selectedName={selectedValue} + onChange={handleChange} + selectedName={selectedChoice?.description} /> ) : ( -
- ) : ( -
Out of stock
- )} - - - ); -}; diff --git a/src/components/cart/cart-item/cart-item-view.module.scss b/src/components/cart/cart-item/cart-item.module.scss similarity index 100% rename from src/components/cart/cart-item/cart-item-view.module.scss rename to src/components/cart/cart-item/cart-item.module.scss diff --git a/src/components/cart/cart-item/cart-item.tsx b/src/components/cart/cart-item/cart-item.tsx index cbdfe2a..62e0372 100644 --- a/src/components/cart/cart-item/cart-item.tsx +++ b/src/components/cart/cart-item/cart-item.tsx @@ -1,17 +1,25 @@ -import { cart } from '@wix/ecom'; +import { Cross2Icon } from '@radix-ui/react-icons'; +import type { cart } from '@wix/ecom'; +import classNames from 'classnames'; import { ChangeEvent } from 'react'; -import { useRemoveItemFromCart, useUpdateCartItemQuantity } from '~/api/api-hooks'; -import { CartItemView } from './cart-item-view'; +import { getImageHttpUrl } from '~/api/wix-image'; +import { Price } from '~/components/price/price'; +import { isCartItemAvailable } from '~/utils'; +import styles from './cart-item.module.scss'; +const IMAGE_SIZE = 120; export interface CartItemProps { className?: string; isLast?: boolean; cartItem: cart.LineItem; + onRemove: () => void; + onQuantityChange: (newQuantity: number) => void; } -export const CartItem = ({ cartItem, className, isLast }: CartItemProps) => { - const { trigger: updateQuantity } = useUpdateCartItemQuantity(); - const { trigger: removeItem } = useRemoveItemFromCart(); +export const CartItem = ({ cartItem, className, isLast, onRemove, onQuantityChange }: CartItemProps) => { + const name = cartItem.productName?.translated ?? ''; + const imageUrl = getImageHttpUrl(cartItem.image, IMAGE_SIZE, IMAGE_SIZE); + const isAvailable = isCartItemAvailable(cartItem); const handleQuantityChange = (e: ChangeEvent) => { if (!cartItem._id) { @@ -19,21 +27,49 @@ export const CartItem = ({ cartItem, className, isLast }: CartItemProps) => { } const newQuantity = parseInt(e.target.value, 10); if (newQuantity > 0) { - updateQuantity({ id: cartItem._id, quantity: newQuantity }); + onQuantityChange(newQuantity); } }; - const handleRemoveItem = () => { - return removeItem(cartItem._id!); - }; - return ( - +
+ {name} +
+
+
+

{name}

+ {cartItem.fullPrice?.formattedConvertedAmount && ( + + )} +
+ +
+ + {isAvailable ? ( +
+ +
+ ) : ( +
Out of stock
+ )} +
+
); }; diff --git a/src/components/cart/cart.module.scss b/src/components/cart/cart-view/cart-view.module.scss similarity index 100% rename from src/components/cart/cart.module.scss rename to src/components/cart/cart-view/cart-view.module.scss diff --git a/src/components/cart/cart-view/cart-view.tsx b/src/components/cart/cart-view/cart-view.tsx new file mode 100644 index 0000000..4b73647 --- /dev/null +++ b/src/components/cart/cart-view/cart-view.tsx @@ -0,0 +1,53 @@ +import classnames from 'classnames'; +import { Cart, CartTotals } from '~/api/types'; +import { CartItem } from '../cart-item/cart-item'; +import styles from './cart-view.module.scss'; + +export interface CartViewProps { + cart: Cart; + cartTotals?: CartTotals; + errorMessage?: string; + onCheckout: () => void; + onItemQuantityChange: (args: { id: string; quantity: number }) => void; + onItemRemove: (id: string) => void; +} + +export const CartView = ({ + cart, + cartTotals, + errorMessage, + onCheckout, + onItemQuantityChange, + onItemRemove, +}: CartViewProps) => { + if (cart.lineItems.length === 0) { + return
Cart is empty
; + } + + return ( +
+
+ {cart.lineItems?.map((item) => ( + onItemQuantityChange({ id: item._id!, quantity })} + onRemove={() => onItemRemove(item._id!)} + /> + ))} +
+
+ {errorMessage &&
{errorMessage}
} + {cartTotals?.priceSummary?.subtotal?.formattedConvertedAmount && ( + + )} + +
+
+ ); +}; diff --git a/src/components/cart/cart.tsx b/src/components/cart/cart.tsx index cfa2652..1afe789 100644 --- a/src/components/cart/cart.tsx +++ b/src/components/cart/cart.tsx @@ -1,24 +1,23 @@ -import classnames from 'classnames'; import { useState } from 'react'; -import { useCart, useCartTotals } from '~/api/api-hooks'; +import { useCart, useCartTotals, useRemoveItemFromCart, useUpdateCartItemQuantity } from '~/api/api-hooks'; import { useEcomAPI } from '~/api/ecom-api-context-provider'; import { Drawer } from '~/components/drawer/drawer'; import { isCartItemAvailable } from '~/utils'; -import { CartItem } from './cart-item/cart-item'; import { useCartOpen } from './cart-open-context'; -import styles from './cart.module.scss'; +import { CartView } from './cart-view/cart-view'; export const Cart = () => { + const ecomAPI = useEcomAPI(); const { isOpen, setIsOpen } = useCartOpen(); const { data: cart } = useCart(); const { data: cartTotals } = useCartTotals(); + const { trigger: updateQuantity } = useUpdateCartItemQuantity(); + const { trigger: removeItem } = useRemoveItemFromCart(); const [checkoutAttempted, setCheckoutAttempted] = useState(false); - const ecomAPI = useEcomAPI(); - const isEmpty = !cart?.lineItems || cart.lineItems.length === 0; const someItemsOutOfStock = cart?.lineItems.some((item) => !isCartItemAvailable(item)); - async function checkout() { + const handleCheckout = async () => { setCheckoutAttempted(true); if (someItemsOutOfStock) { @@ -32,32 +31,23 @@ export const Cart = () => { } else { alert('checkout is not configured'); } - } + }; + + const errorMessage = checkoutAttempted && someItemsOutOfStock ? 'Some items are out of stock' : undefined; return ( setIsOpen(false)} isOpen={isOpen}> - {isEmpty ? ( -
Cart is empty
+ {cart === undefined ? ( +
Loading...
) : ( -
-
- {cart?.lineItems?.map((item) => ( - - ))} -
-
- {checkoutAttempted && someItemsOutOfStock && ( -
Some items are out of stock
- )} - - -
-
+ )}
); From b64c859ac821cfb8e669fa18ef4aae8591111317 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Fri, 11 Oct 2024 12:06:27 +0300 Subject: [PATCH 15/31] Update cart related boards (#91) --- .../components/cart/cart-item.board.tsx | 12 +- .../components/cart/cart-view.board.tsx | 22 ++ _codux/boards/components/cart/cart.board.tsx | 26 --- .../components/cart/empty-cart.board.tsx | 25 --- _codux/mocks/cart-item.ts | 31 --- _codux/mocks/cart.ts | 70 +++++++ _codux/mocks/fakers.ts | 190 ------------------ .../mocks/mock-ecom-api-context-provider.tsx | 109 ---------- 8 files changed, 98 insertions(+), 387 deletions(-) create mode 100644 _codux/boards/components/cart/cart-view.board.tsx delete mode 100644 _codux/boards/components/cart/cart.board.tsx delete mode 100644 _codux/boards/components/cart/empty-cart.board.tsx delete mode 100644 _codux/mocks/cart-item.ts create mode 100644 _codux/mocks/cart.ts delete mode 100644 _codux/mocks/fakers.ts delete mode 100644 _codux/mocks/mock-ecom-api-context-provider.tsx diff --git a/_codux/boards/components/cart/cart-item.board.tsx b/_codux/boards/components/cart/cart-item.board.tsx index b20c12b..267e301 100644 --- a/_codux/boards/components/cart/cart-item.board.tsx +++ b/_codux/boards/components/cart/cart-item.board.tsx @@ -1,6 +1,5 @@ import { createBoard } from '@wixc3/react-board'; -import ComponentWrapper from '_codux/board-wrappers/component-wrapper'; -import { mockCartItem, mockOutOfStockCartItem } from '_codux/mocks/cart-item'; +import { cartItem, cartItemOutOfStock, cartItemWithDiscount } from '_codux/mocks/cart'; import { CartItem } from '~/components/cart/cart-item/cart-item'; const noop = () => {}; @@ -9,10 +8,11 @@ export default createBoard({ name: 'Cart Item', Board: () => { return ( - - - - +
+ + + +
); }, tags: ['Component', 'Cart'], diff --git a/_codux/boards/components/cart/cart-view.board.tsx b/_codux/boards/components/cart/cart-view.board.tsx new file mode 100644 index 0000000..4514603 --- /dev/null +++ b/_codux/boards/components/cart/cart-view.board.tsx @@ -0,0 +1,22 @@ +import { createBoard } from '@wixc3/react-board'; +import { CartView } from '~/components/cart/cart-view/cart-view'; +import { cart, cartTotals } from '_codux/mocks/cart'; + +const noop = () => {}; + +export default createBoard({ + name: 'Cart', + Board: () => ( + + ), + tags: ['Component', 'Cart'], + environmentProps: { + windowWidth: 471, + }, +}); diff --git a/_codux/boards/components/cart/cart.board.tsx b/_codux/boards/components/cart/cart.board.tsx deleted file mode 100644 index 20db940..0000000 --- a/_codux/boards/components/cart/cart.board.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { createBoard } from '@wixc3/react-board'; -import ComponentWrapper from '_codux/board-wrappers/component-wrapper'; -import { sleep } from '_codux/boards/utils'; -import { MockEcomAPIContextProvider } from '_codux/mocks/mock-ecom-api-context-provider'; -import { Cart } from '~/components/cart/cart'; -import { CartOpenContextProvider } from '~/components/cart/cart-open-context'; -import { CartOpener } from './cart-opener'; - -export default createBoard({ - name: 'Cart', - Board: () => ( - - - - - - - - - ), - tags: ['Component', 'Cart'], - environmentProps: { - windowWidth: 350, - }, - readyToSnapshot: () => sleep(10), -}); diff --git a/_codux/boards/components/cart/empty-cart.board.tsx b/_codux/boards/components/cart/empty-cart.board.tsx deleted file mode 100644 index 47448d6..0000000 --- a/_codux/boards/components/cart/empty-cart.board.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { createBoard } from '@wixc3/react-board'; -import ComponentWrapper from '_codux/board-wrappers/component-wrapper'; -import { MockEcomAPIContextProvider } from '_codux/mocks/mock-ecom-api-context-provider'; -import { Cart } from '~/components/cart/cart'; -import { CartOpenContextProvider } from '~/components/cart/cart-open-context'; -import { CartOpener } from './cart-opener'; - -export default createBoard({ - name: 'Cart - Empty', - Board: () => ( - - - - - - - - - ), - tags: ['Component', 'Cart'], - environmentProps: { - windowWidth: 350, - windowHeight: 800, - }, -}); diff --git a/_codux/mocks/cart-item.ts b/_codux/mocks/cart-item.ts deleted file mode 100644 index 79858cb..0000000 --- a/_codux/mocks/cart-item.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { cart } from '@wix/ecom'; - -export const mockCartItem: cart.LineItem = { - availability: { status: cart.ItemAvailabilityStatus.AVAILABLE }, - productName: { - translated: "I'm a product", - }, - image: `https://static.wixstatic.com/media/22e53e_1addd1e1b4c64c9abd47dbc5f36d4b01~mv2.jpg/v1/fit/w_50,h_50,q_90/file.jpg`, - price: { - formattedConvertedAmount: '$10', - }, - fullPrice: { - formattedConvertedAmount: '$20', - }, - quantity: 2, -}; - -export const mockOutOfStockCartItem: cart.LineItem = { - availability: { status: cart.ItemAvailabilityStatus.NOT_AVAILABLE }, - productName: { - translated: "I'm a product 2", - }, - image: `https://static.wixstatic.com/media/22e53e_1addd1e1b4c64c9abd47dbc5f36d4b01~mv2.jpg/v1/fit/w_50,h_50,q_90/file.jpg`, - price: { - formattedConvertedAmount: '$40', - }, - fullPrice: { - formattedConvertedAmount: '$60', - }, - quantity: 0, -}; diff --git a/_codux/mocks/cart.ts b/_codux/mocks/cart.ts new file mode 100644 index 0000000..8905a5c --- /dev/null +++ b/_codux/mocks/cart.ts @@ -0,0 +1,70 @@ +import { faker } from '@faker-js/faker'; +import { cart as wixEcomCart } from '@wix/ecom'; +import { Cart, CartItemDetails, CartTotals } from '~/api/types'; + +export const cartItem = createCartItem(); +export const cartItemWithDiscount = createCartItem({ + price: createPriceObject(200), + fullPrice: createPriceObject(400), + image: 'https://static.wixstatic.com/media/22e53e_b53f9a53db034e178a3f2d794ae70f1c~mv2.jpg/v1/fit/w_200,h_200,q_90/file.jpg', +}); +export const cartItemOutOfStock = createCartItem({ + availability: { status: wixEcomCart.ItemAvailabilityStatus.NOT_AVAILABLE }, + image: 'https://static.wixstatic.com/media/22e53e_7066c7318bb34be38d3a4f2e3a256021~mv2.jpg/v1/fit/w_240,h_4000,q_90/file.jpg', +}); + +export const cart: Cart = { + _id: faker.string.uuid(), + currency: '$', + lineItems: [cartItem, cartItemWithDiscount, cartItemOutOfStock], + appliedDiscounts: [], + conversionCurrency: 'USD', + weightUnit: wixEcomCart.WeightUnit.KG, +}; + +export const cartTotals: CartTotals = { + currency: '$', + additionalFees: [], + appliedDiscounts: [], + calculatedLineItems: [], + violations: [], + weightUnit: wixEcomCart.WeightUnit.KG, + priceSummary: { + subtotal: createPriceObject(1650), + }, +}; + +function createCartItem(overrides: Partial = {}): CartItemDetails { + return { + _id: faker.string.uuid(), + availability: { + status: wixEcomCart.ItemAvailabilityStatus.AVAILABLE, + }, + productName: { + original: faker.lorem.words(2), + translated: faker.lorem.words(2), + }, + quantity: faker.number.int({ min: 1, max: 10 }), + image: 'https://static.wixstatic.com/media/22e53e_1addd1e1b4c64c9abd47dbc5f36d4b01~mv2.jpg/v1/fit/w_100,h_100,q_90/file.jpg', + paymentOption: wixEcomCart.PaymentOptionType.FULL_PAYMENT_ONLINE, + price: createPriceObject(), + fullPrice: createPriceObject(), + descriptionLines: [], + url: '', + couponScopes: [], + savePaymentMethod: false, + fixedQuantity: false, + priceUndetermined: false, + customLineItem: false, + ...overrides, + }; +} + +function createPriceObject(amount: number = 500, convertedAmount: number = amount) { + return { + amount: amount.toString(), + convertedAmount: convertedAmount.toString(), + formattedAmount: `$${amount}`, + formattedConvertedAmount: `$${convertedAmount}`, + }; +} diff --git a/_codux/mocks/fakers.ts b/_codux/mocks/fakers.ts deleted file mode 100644 index c6e09df..0000000 --- a/_codux/mocks/fakers.ts +++ /dev/null @@ -1,190 +0,0 @@ -import { faker } from '@faker-js/faker'; -import { cart, orders } from '@wix/ecom'; -import { products } from '@wix/stores'; -import type { Cart, CartItemDetails, CollectionDetails, OrderDetails, Product } from '~/api/types'; -import { CartTotals } from '~/api/types'; - -export type FakeDataSettings = { - numberOfCartItems?: number; - /** @important */ - numberOfProducts?: number; - /** @important */ - numberOfWordsInTitle?: number; - /** @important */ - priceMinValue?: number; - /** @important */ - priceMaxValue?: number; -}; - -export function createProducts(settings?: FakeDataSettings): Product[] { - return Array.from(new Array(settings?.numberOfProducts ?? 10)).map((id) => createProduct({ id, settings })); -} - -export function createProduct(args: { id?: string; slug?: string; settings?: FakeDataSettings }): Product { - const { id, slug, settings } = args; - const numOfImages = faker.number.int({ min: 2, max: 4 }); - const images = Array.from(new Array(numOfImages)).map(() => createImage()); - const mainImage = images[faker.number.int({ min: 0, max: numOfImages - 1 })]; - - const price = faker.commerce.price({ - symbol: '$', - min: settings?.priceMinValue, - max: settings?.priceMaxValue, - }); - return { - _id: id ?? faker.string.uuid(), - slug: slug ?? faker.lorem.word(), - name: faker.lorem.words(settings?.numberOfWordsInTitle || 2), - description: faker.commerce.productDescription(), - media: { - items: images, - mainMedia: mainImage, - }, - price: { - formatted: { - price: price, - discountedPrice: price, - }, - currency: 'USD', - discountedPrice: parseFloat(price), - }, - productType: products.ProductType.digital, - additionalInfoSections: [ - { title: 'PRODUCT INFO', description: faker.lorem.paragraph() }, - { title: 'RETURN & REFUND POLICY', description: faker.lorem.paragraph() }, - { title: 'SHIPPING INFO', description: faker.lorem.paragraph() }, - ], - collectionIds: [], - customTextFields: [], - inventoryItemId: '', - numericId: '', - productOptions: [], - ribbons: [], - variants: [], - }; -} - -function createImage(): products.MediaItem { - const image = faker.image.dataUri(); - - return { - _id: faker.string.uuid(), - image: { - url: image, - }, - title: faker.lorem.word(), - mediaType: products.MediaItemType.image, - }; -} - -export function createCart(items: products.Product[]): Cart { - return { - _id: faker.string.uuid(), - currency: '$', - lineItems: items.map(createCartItem), - appliedDiscounts: [], - conversionCurrency: 'USD', - weightUnit: cart.WeightUnit.KG, - }; -} - -export function createCartItem(product: products.Product): CartItemDetails { - return { - _id: faker.string.uuid(), - availability: { status: cart.ItemAvailabilityStatus.AVAILABLE }, - productName: { - original: product.name!, - translated: product.name, - }, - quantity: faker.number.int({ min: 1, max: 10 }), - image: product.media!.mainMedia!.image!.url!, - paymentOption: cart.PaymentOptionType.FULL_PAYMENT_ONLINE, - price: createPrice(), - fullPrice: createPrice(), - descriptionLines: [], - url: '', - couponScopes: [], - savePaymentMethod: false, - fixedQuantity: false, - priceUndetermined: false, - customLineItem: false, - }; -} - -function createPrice() { - const priceStr = faker.commerce.price({ symbol: '$' }); - const price = parseFloat(priceStr.replace('$', '')); - - return { - amount: price.toString(), - convertedAmount: price.toString(), - formattedConvertedAmount: priceStr, - formattedAmount: priceStr, - }; -} - -export function getCartTotals(): CartTotals { - return { - currency: '$', - additionalFees: [], - appliedDiscounts: [], - calculatedLineItems: [], - violations: [], - weightUnit: cart.WeightUnit.KG, - priceSummary: { - subtotal: createPrice(), - }, - }; -} - -export function createCategory(settings?: FakeDataSettings): CollectionDetails { - return { - _id: faker.string.uuid(), - numberOfProducts: 1, - name: faker.lorem.words(), - description: faker.lorem.words(settings?.numberOfWordsInTitle || 2), - media: { items: [] }, - slug: faker.lorem.words(), - }; -} - -export function createOrder(id: string): OrderDetails { - return { - _id: id, - number: `${faker.number.int({ min: 1000, max: 9999 })}`, - appliedDiscounts: [], - attributionSource: orders.AttributionSource.UNSPECIFIED, - activities: [], - additionalFees: [], - customFields: [], - fulfillmentStatus: orders.FulfillmentStatus.NOT_FULFILLED, - isInternalOrderCreate: false, - status: orders.OrderStatus.APPROVED, - paymentStatus: orders.PaymentStatus.NOT_PAID, - taxIncludedInPrices: false, - weightUnit: orders.WeightUnit.UNSPECIFIED_WEIGHT_UNIT, - lineItems: [ - { - _id: faker.string.uuid(), - quantity: 1, - paymentOption: orders.PaymentOptionType.FULL_PAYMENT_OFFLINE, - productName: { - original: faker.lorem.paragraph(), - translated: faker.lorem.paragraph(), - }, - image: 'https://static.wixstatic.com/media/22e53e_efc1552d8050407f82ea158302d0debd~mv2.jpg/v1/fit/w_200,h_200,q_90/file.jpg', - locations: [], - descriptionLines: [ - { - color: 'Black', - name: { - translated: 'Color', - original: 'Color', - }, - lineType: orders.DescriptionLineType.COLOR, - }, - ], - }, - ], - }; -} diff --git a/_codux/mocks/mock-ecom-api-context-provider.tsx b/_codux/mocks/mock-ecom-api-context-provider.tsx deleted file mode 100644 index 631c90b..0000000 --- a/_codux/mocks/mock-ecom-api-context-provider.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import { faker } from '@faker-js/faker'; -import React, { FC, useMemo, useState } from 'react'; -import { SWRConfig } from 'swr'; -import type { EcomAPI } from '~/api/types'; -import { EcomAPIContext } from '~/api/ecom-api-context-provider'; -import { - createCart, - createOrder, - createCategory, - createProduct, - createProducts, - getCartTotals, - FakeDataSettings as Settings, -} from './fakers'; - -export type FakeDataSettings = Settings; - -function getEcomApi(settings?: Settings): EcomAPI { - faker.seed(123); - const products = createProducts(settings); - - const api: EcomAPI = { - getProductsByCategory: () => { - return Promise.resolve({ status: 'success', body: products }); - }, - getProductBySlug: async (slug: string | undefined) => { - faker.seed(123); - return Promise.resolve({ - status: 'success', - body: createProduct({ slug, settings }), - }); - }, - getPromotedProducts: async () => { - return Promise.resolve({ - status: 'success', - body: products.slice(0, 4), - }); - }, - getCart: () => { - faker.seed(123); - const productsInCart = - settings?.numberOfCartItems === 0 ? [] : products.slice(0, settings?.numberOfCartItems ?? 2); - return Promise.resolve({ - status: 'success', - body: createCart(productsInCart), - }); - }, - getCartTotals: () => { - faker.seed(123); - return Promise.resolve({ - status: 'success', - body: getCartTotals(), - }); - }, - addToCart: (id: string, quantity: number) => { - alert(`Add item ${id} to cart with quantity ${quantity}`); - return api.getCart(); - }, - updateCartItemQuantity: (id: string | undefined | null, quantity: number) => { - alert(`Update item ${id} to quantity ${quantity}`); - return api.getCart(); - }, - removeItemFromCart: (id: string) => { - alert(`Remove item ${id}`); - return api.getCart(); - }, - checkout: () => { - alert('Checkout'); - return Promise.resolve({ status: 'success', body: { checkoutUrl: '' } }); - }, - getAllCategories: () => { - return Promise.resolve({ - status: 'success', - body: [createCategory(settings)], - }); - }, - getCategoryBySlug: () => { - return Promise.resolve({ - status: 'success', - body: createCategory(settings), - }); - }, - getOrder: (id: string) => { - return Promise.resolve({ - status: 'success', - body: createOrder(id), - }); - }, - }; - - return api; -} - -export const MockEcomAPIContextProvider: FC<{ - children: React.ReactElement; - settings?: Settings; -}> = ({ children, settings }) => { - const [cache, setCache] = useState(new Map()); - const api = useMemo(() => { - setCache(new Map()); - return getEcomApi(settings); - }, [settings]); - - return ( - cache }}> - {children} - - ); -}; From 8af097dbd5491d089755a243ad9d99184df2fd76 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:32:09 +0300 Subject: [PATCH 16/31] Added useCart hook (#92) --- src/api/api-hooks.ts | 6 +++--- src/components/cart/cart.tsx | 25 +++++++------------------ src/hooks/use-cart.ts | 28 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 21 deletions(-) create mode 100644 src/hooks/use-cart.ts diff --git a/src/api/api-hooks.ts b/src/api/api-hooks.ts index 85a49eb..ad55dcb 100644 --- a/src/api/api-hooks.ts +++ b/src/api/api-hooks.ts @@ -5,7 +5,7 @@ import { findItemIdInCart } from './cart-helpers'; import { useEcomAPI } from './ecom-api-context-provider'; import { AddToCartOptions } from './types'; -export const useCart = () => { +export const useCartData = () => { const ecomApi = useEcomAPI(); return useSwr('cart', async () => { const response = await ecomApi.getCart(); @@ -19,7 +19,7 @@ export const useCart = () => { export const useCartTotals = () => { const ecomApi = useEcomAPI(); - const { data } = useCart(); + const { data } = useCartData(); const cartTotals = useSwr('cart-totals', async () => { const response = await ecomApi.getCartTotals(); @@ -46,7 +46,7 @@ type AddToCartArgs = { export const useAddToCart = () => { const ecomApi = useEcomAPI(); - const { data: cart } = useCart(); + const { data: cart } = useCartData(); return useSWRMutation( 'cart', async (_key: Key, { arg }: { arg: AddToCartArgs }) => { diff --git a/src/components/cart/cart.tsx b/src/components/cart/cart.tsx index 1afe789..e2cf21c 100644 --- a/src/components/cart/cart.tsx +++ b/src/components/cart/cart.tsx @@ -1,21 +1,16 @@ import { useState } from 'react'; -import { useCart, useCartTotals, useRemoveItemFromCart, useUpdateCartItemQuantity } from '~/api/api-hooks'; -import { useEcomAPI } from '~/api/ecom-api-context-provider'; import { Drawer } from '~/components/drawer/drawer'; import { isCartItemAvailable } from '~/utils'; +import { useCart } from '~/hooks/use-cart'; import { useCartOpen } from './cart-open-context'; import { CartView } from './cart-view/cart-view'; export const Cart = () => { - const ecomAPI = useEcomAPI(); const { isOpen, setIsOpen } = useCartOpen(); - const { data: cart } = useCart(); - const { data: cartTotals } = useCartTotals(); - const { trigger: updateQuantity } = useUpdateCartItemQuantity(); - const { trigger: removeItem } = useRemoveItemFromCart(); + const { cartData, cartTotals, checkout, removeItem, updateItemQuantity } = useCart(); const [checkoutAttempted, setCheckoutAttempted] = useState(false); - const someItemsOutOfStock = cart?.lineItems.some((item) => !isCartItemAvailable(item)); + const someItemsOutOfStock = cartData?.lineItems.some((item) => !isCartItemAvailable(item)); const handleCheckout = async () => { setCheckoutAttempted(true); @@ -24,29 +19,23 @@ export const Cart = () => { return; } - const checkoutResponse = await ecomAPI.checkout(); - - if (checkoutResponse.status === 'success') { - window.location.href = checkoutResponse.body.checkoutUrl; - } else { - alert('checkout is not configured'); - } + checkout(); }; const errorMessage = checkoutAttempted && someItemsOutOfStock ? 'Some items are out of stock' : undefined; return ( setIsOpen(false)} isOpen={isOpen}> - {cart === undefined ? ( + {cartData === undefined ? (
Loading...
) : ( )}
diff --git a/src/hooks/use-cart.ts b/src/hooks/use-cart.ts new file mode 100644 index 0000000..735abb0 --- /dev/null +++ b/src/hooks/use-cart.ts @@ -0,0 +1,28 @@ +import { useCartTotals, useCartData, useUpdateCartItemQuantity, useRemoveItemFromCart } from '~/api/api-hooks'; +import { useEcomAPI } from '~/api/ecom-api-context-provider'; + +export const useCart = () => { + const ecomAPI = useEcomAPI(); + const { data: cartData } = useCartData(); + const { data: cartTotals } = useCartTotals(); + const { trigger: updateItemQuantity } = useUpdateCartItemQuantity(); + const { trigger: removeItem } = useRemoveItemFromCart(); + + const checkout = async () => { + const checkoutResponse = await ecomAPI.checkout(); + + if (checkoutResponse.status === 'success') { + window.location.href = checkoutResponse.body.checkoutUrl; + } else { + alert('checkout is not configured'); + } + }; + + return { + cartData, + cartTotals, + updateItemQuantity, + removeItem, + checkout, + }; +}; From fbf9a59cd30db7a200e118551eef0b06eee81bc8 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:11:12 +0300 Subject: [PATCH 17/31] Remove cart loading state (#93) --- src/components/cart/cart-view/cart-view.tsx | 4 ++-- src/components/cart/cart.tsx | 20 ++++++++------------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/components/cart/cart-view/cart-view.tsx b/src/components/cart/cart-view/cart-view.tsx index 4b73647..5dc67db 100644 --- a/src/components/cart/cart-view/cart-view.tsx +++ b/src/components/cart/cart-view/cart-view.tsx @@ -4,7 +4,7 @@ import { CartItem } from '../cart-item/cart-item'; import styles from './cart-view.module.scss'; export interface CartViewProps { - cart: Cart; + cart?: Cart; cartTotals?: CartTotals; errorMessage?: string; onCheckout: () => void; @@ -20,7 +20,7 @@ export const CartView = ({ onItemQuantityChange, onItemRemove, }: CartViewProps) => { - if (cart.lineItems.length === 0) { + if (!cart || cart.lineItems.length === 0) { return
Cart is empty
; } diff --git a/src/components/cart/cart.tsx b/src/components/cart/cart.tsx index e2cf21c..36c74cb 100644 --- a/src/components/cart/cart.tsx +++ b/src/components/cart/cart.tsx @@ -26,18 +26,14 @@ export const Cart = () => { return ( setIsOpen(false)} isOpen={isOpen}> - {cartData === undefined ? ( -
Loading...
- ) : ( - - )} +
); }; From b302590e2a4885f49e0b9dedddb96da44f7cf62c Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Mon, 14 Oct 2024 13:24:00 +0300 Subject: [PATCH 18/31] Update drawer component (#94) --- _codux/boards/components/cart/cart-opener.tsx | 11 - .../components/cart/cart-view.board.tsx | 1 + .../boards/components/drawer/drawer.board.tsx | 20 -- package-lock.json | 216 +++++++++++++++++- package.json | 3 + .../cart/cart-view/cart-view.module.scss | 34 ++- src/components/cart/cart-view/cart-view.tsx | 59 +++-- src/components/cart/cart.tsx | 3 +- src/components/drawer/drawer.module.scss | 54 +---- src/components/drawer/drawer.tsx | 90 ++++---- 10 files changed, 346 insertions(+), 145 deletions(-) delete mode 100644 _codux/boards/components/cart/cart-opener.tsx delete mode 100644 _codux/boards/components/drawer/drawer.board.tsx diff --git a/_codux/boards/components/cart/cart-opener.tsx b/_codux/boards/components/cart/cart-opener.tsx deleted file mode 100644 index d7f9714..0000000 --- a/_codux/boards/components/cart/cart-opener.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { useCartOpen } from '~/components/cart/cart-open-context'; - -export const CartOpener = () => { - const { setIsOpen } = useCartOpen(); - - return ( - - ); -}; diff --git a/_codux/boards/components/cart/cart-view.board.tsx b/_codux/boards/components/cart/cart-view.board.tsx index 4514603..b0d7500 100644 --- a/_codux/boards/components/cart/cart-view.board.tsx +++ b/_codux/boards/components/cart/cart-view.board.tsx @@ -13,6 +13,7 @@ export default createBoard({ onCheckout={noop} onItemRemove={noop} onItemQuantityChange={noop} + onClose={noop} /> ), tags: ['Component', 'Cart'], diff --git a/_codux/boards/components/drawer/drawer.board.tsx b/_codux/boards/components/drawer/drawer.board.tsx deleted file mode 100644 index fa69683..0000000 --- a/_codux/boards/components/drawer/drawer.board.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { createBoard } from '@wixc3/react-board'; -import { useState } from 'react'; -import { Drawer } from '~/components/drawer/drawer'; - -export default createBoard({ - name: 'Drawer', - Board: () => { - const [isOpen, setIsOpen] = useState(true); - return ( -
- - - setIsOpen(false)} isOpen={isOpen}> -
this is a drawer inner content
-
-
- ); - }, - tags: ['Component'], -}); diff --git a/package-lock.json b/package-lock.json index 4172484..774007f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,11 +20,14 @@ "@wix/stores": "^1.0.239", "classnames": "^2.5.1", "fast-deep-equal": "^3.1.3", + "framer-motion": "^11.11.1", "isbot": "^5.1.17", "js-cookie": "^3.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-remove-scroll": "^2.6.0", "react-router-dom": "^6.26.2", + "remix-utils": "^7.7.0", "swr": "^2.2.5" }, "devDependencies": { @@ -2488,14 +2491,14 @@ "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.11", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -4822,7 +4825,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -5085,6 +5088,11 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, "node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", @@ -6612,6 +6620,30 @@ "node": ">= 0.6" } }, + "node_modules/framer-motion": { + "version": "11.11.8", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.8.tgz", + "integrity": "sha512-mnGQNEoz99GtFXBBPw+Ag5K4FcfP5XrXxrxHz+iE4Lmg7W3sf2gKmGuvfkZCW/yIfcdv5vJd6KiSPETH1Pw68Q==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -6754,6 +6786,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/get-port": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", @@ -7248,6 +7288,14 @@ "node": ">= 0.4" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -10635,6 +10683,51 @@ "node": ">=0.10.0" } }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/react-router": { "version": "6.26.2", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", @@ -10667,6 +10760,28 @@ "react-dom": ">=16.8" } }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -10833,6 +10948,60 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/remix-utils": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/remix-utils/-/remix-utils-7.7.0.tgz", + "integrity": "sha512-J8NhP044nrNIam/xOT1L9a4RQ9FSaA2wyrUwmN8ZT+c/+CdAAf70yfaLnvMyKcV5U+8BcURQ/aVbth77sT6jGA==", + "funding": [ + "https://github.com/sponsors/sergiodxa" + ], + "dependencies": { + "type-fest": "^4.18.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@remix-run/cloudflare": "^2.0.0", + "@remix-run/node": "^2.0.0", + "@remix-run/react": "^2.0.0", + "@remix-run/router": "^1.7.2", + "crypto-js": "^4.1.1", + "intl-parse-accept-language": "^1.0.0", + "is-ip": "^5.0.1", + "react": "^18.0.0", + "zod": "^3.22.4" + }, + "peerDependenciesMeta": { + "@remix-run/cloudflare": { + "optional": true + }, + "@remix-run/node": { + "optional": true + }, + "@remix-run/react": { + "optional": true + }, + "@remix-run/router": { + "optional": true + }, + "crypto-js": { + "optional": true + }, + "intl-parse-accept-language": { + "optional": true + }, + "is-ip": { + "optional": true + }, + "react": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -12526,6 +12695,47 @@ "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", "license": "MIT" }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/use-sync-external-store": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", diff --git a/package.json b/package.json index 2bc1fa5..facd549 100644 --- a/package.json +++ b/package.json @@ -24,11 +24,14 @@ "@wix/stores": "^1.0.239", "classnames": "^2.5.1", "fast-deep-equal": "^3.1.3", + "framer-motion": "^11.11.1", "isbot": "^5.1.17", "js-cookie": "^3.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.26.2", + "react-remove-scroll": "^2.6.0", + "remix-utils": "^7.7.0", "swr": "^2.2.5" }, "devDependencies": { diff --git a/src/components/cart/cart-view/cart-view.module.scss b/src/components/cart/cart-view/cart-view.module.scss index b469c35..d930301 100644 --- a/src/components/cart/cart-view/cart-view.module.scss +++ b/src/components/cart/cart-view/cart-view.module.scss @@ -1,12 +1,41 @@ @use '@styles/variables.scss' as *; .cart { + display: flex; + flex-direction: column; background: var(--white); - padding: 15px 10px 10px; + height: 100%; +} + +.header { + height: 80px; + background: var(--black); + color: var(--white); + position: relative; + display: flex; + align-items: center; + justify-content: center; +} + +.title { + font: var(--heading2); + letter-spacing: 2px; +} + +.arrowIcon { + position: absolute; + left: 0px; + margin: 0 0 0 16px; + cursor: pointer; +} + +.content { display: flex; flex-direction: column; justify-content: space-between; - height: 100%; + flex-grow: 1; + padding: 10px; + letter-spacing: 2px; } .emptyCart { @@ -14,6 +43,7 @@ text-align: center; display: flex; align-items: center; + justify-content: center; height: 100%; padding: 20px; } diff --git a/src/components/cart/cart-view/cart-view.tsx b/src/components/cart/cart-view/cart-view.tsx index 5dc67db..e57edfa 100644 --- a/src/components/cart/cart-view/cart-view.tsx +++ b/src/components/cart/cart-view/cart-view.tsx @@ -2,6 +2,7 @@ import classnames from 'classnames'; import { Cart, CartTotals } from '~/api/types'; import { CartItem } from '../cart-item/cart-item'; import styles from './cart-view.module.scss'; +import { ChevronRightIcon } from '@radix-ui/react-icons'; export interface CartViewProps { cart?: Cart; @@ -10,6 +11,7 @@ export interface CartViewProps { onCheckout: () => void; onItemQuantityChange: (args: { id: string; quantity: number }) => void; onItemRemove: (id: string) => void; + onClose: () => void; } export const CartView = ({ @@ -19,34 +21,45 @@ export const CartView = ({ onCheckout, onItemQuantityChange, onItemRemove, + onClose, }: CartViewProps) => { - if (!cart || cart.lineItems.length === 0) { - return
Cart is empty
; - } - return (
-
- {cart.lineItems?.map((item) => ( - onItemQuantityChange({ id: item._id!, quantity })} - onRemove={() => onItemRemove(item._id!)} - /> - ))} +
+
Cart
+
-
- {errorMessage &&
{errorMessage}
} - {cartTotals?.priceSummary?.subtotal?.formattedConvertedAmount && ( - +
+ {!cart || cart.lineItems.length === 0 ? ( +
Cart is empty
+ ) : ( + <> +
+ {cart.lineItems?.map((item) => ( + + onItemQuantityChange({ id: item._id!, quantity }) + } + onRemove={() => onItemRemove(item._id!)} + /> + ))} +
+
+ {errorMessage &&
{errorMessage}
} + {cartTotals?.priceSummary?.subtotal?.formattedConvertedAmount && ( + + )} + +
+ )} -
); diff --git a/src/components/cart/cart.tsx b/src/components/cart/cart.tsx index 36c74cb..0123a41 100644 --- a/src/components/cart/cart.tsx +++ b/src/components/cart/cart.tsx @@ -25,7 +25,7 @@ export const Cart = () => { const errorMessage = checkoutAttempted && someItemsOutOfStock ? 'Some items are out of stock' : undefined; return ( - setIsOpen(false)} isOpen={isOpen}> + setIsOpen(false)} open={isOpen}> { onCheckout={handleCheckout} onItemRemove={removeItem} onItemQuantityChange={updateItemQuantity} + onClose={() => setIsOpen(false)} /> ); diff --git a/src/components/drawer/drawer.module.scss b/src/components/drawer/drawer.module.scss index 0575521..b0e5e84 100644 --- a/src/components/drawer/drawer.module.scss +++ b/src/components/drawer/drawer.module.scss @@ -1,53 +1,15 @@ -@use '@styles/variables.scss' as *; - -.background { +.backdrop { position: fixed; - top: 0px; - right: 0px; - bottom: 0; - background: rgba(148, 148, 148, 0.5); - z-index: 999; -} - -.background.open { - left: 0; + inset: 0; + background: rgba(27, 17, 13, 0.8); } .drawer { - right: -480px; + position: fixed; + top: 0; + right: 0; + width: 100%; + max-width: 420px; height: 100%; background: var(--white); - transition: right 0.3s ease-in-out; - position: absolute; - display: flex; - flex-direction: column; -} - -.drawer.open { - right: 0; -} - -.header { - background: var(--black); - color: var(--white); - position: relative; - display: flex; - align-items: center; - justify-content: center; - font: var(--heading2); - padding: 10px; - letter-spacing: 2px; -} - -.arrowIcon { - position: absolute; - left: 0px; - margin: 0 0 0 16px; - cursor: pointer; -} - -.body { - position: relative; - flex-grow: 1; - overflow: auto; } diff --git a/src/components/drawer/drawer.tsx b/src/components/drawer/drawer.tsx index f48f570..4646fba 100644 --- a/src/components/drawer/drawer.tsx +++ b/src/components/drawer/drawer.tsx @@ -1,51 +1,63 @@ -import { ChevronRightIcon } from '@radix-ui/react-icons'; -import classnames from 'classnames'; import { useEffect } from 'react'; +import { createPortal } from 'react-dom'; +import { ClientOnly } from 'remix-utils/client-only'; +import classNames from 'classnames'; +import { AnimatePresence, motion } from 'framer-motion'; +import { RemoveScroll } from 'react-remove-scroll'; import styles from './drawer.module.scss'; -export interface DrawerProps { - className?: string; +interface DrawerProps { + open: boolean; onClose: () => void; - title: string; - children?: React.ReactNode; - isOpen: boolean; + children: React.ReactNode; + drawerClassName?: string; } -export const Drawer = ({ className, onClose, title, isOpen, children }: DrawerProps) => { +export const Drawer = ({ open, onClose, children, drawerClassName }: DrawerProps) => { useEffect(() => { - if (isOpen) { - const scrollBarWidth = window.innerWidth - document.body.clientWidth; - if (scrollBarWidth > 0) { - document.body.style.paddingRight = `${scrollBarWidth}px`; + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === 'Escape') { + onClose(); } - document.body.style.overflow = 'hidden'; - } else { - document.body.style.paddingRight = `0px`; - document.body.style.overflow = 'auto'; - } - }, [isOpen]); + }; + if (open) document.addEventListener('keydown', handleKeyDown); + return () => document.removeEventListener('keydown', handleKeyDown); + }, [open, onClose]); return ( -
-
e.stopPropagation()} - onKeyDown={(e) => e.stopPropagation()} - role="button" - tabIndex={-1} - > -
-

{title}

- -
-
{children}
-
-
+ + {() => + createPortal( + + {open && ( + <> + + + {/* RemoveScroll disables scroll outside the drawer. */} + + + {children} + + + + )} + , + document.body + ) + } + ); }; From 506c1a4456198dc4834eb9dc919c00057c81f547 Mon Sep 17 00:00:00 2001 From: olehrakwix <93204312+olehrakwix@users.noreply.github.com> Date: Wed, 16 Oct 2024 12:39:50 +0300 Subject: [PATCH 19/31] feat: hide non-visible variants to disallow selection (#89) * feat: hide non-visible variatns to disallow selection * rename * some refactoring * refactor * rename * refactor non visible choices, add out of stock choices * review comments * fix review comments --- app/routes/products.$productSlug/route.tsx | 13 ++-- .../color-select/color-select.module.scss | 23 +++++- src/components/color-select/color-select.tsx | 2 + .../product-option/product-option.tsx | 6 +- src/components/select/select.tsx | 2 + src/utils/product-utils.ts | 72 ++++++++++++++++++- 6 files changed, 106 insertions(+), 12 deletions(-) diff --git a/app/routes/products.$productSlug/route.tsx b/app/routes/products.$productSlug/route.tsx index 60b3bdf..3c54950 100644 --- a/app/routes/products.$productSlug/route.tsx +++ b/app/routes/products.$productSlug/route.tsx @@ -5,6 +5,7 @@ import classNames from 'classnames'; import { useRef, useState } from 'react'; import { useAddToCart } from '~/api/api-hooks'; import { getEcomApi } from '~/api/ecom-api'; +import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; import { useCartOpen } from '~/components/cart/cart-open-context'; import { ErrorComponent } from '~/components/error-component/error-component'; import { Price } from '~/components/price/price'; @@ -15,15 +16,15 @@ import { UnsafeRichText } from '~/components/rich-text/rich-text'; import { ROUTES } from '~/router/config'; import { getErrorMessage, + getMedia, getPriceData, - selectedChoicesToVariantChoices, + getProductOptions, getSelectedVariant, getSKU, getUrlOriginWithPath, isOutOfStock, - getMedia, + selectedChoicesToVariantChoices, } from '~/utils'; -import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; import styles from './product-details.module.scss'; export const loader = async ({ params, request }: LoaderFunctionArgs) => { @@ -93,6 +94,8 @@ export default function ProductDetailsPage() { setIsOpen(true); } + const productOptions = getProductOptions(product, selectedChoices); + return (
@@ -113,9 +116,9 @@ export default function ProductDetailsPage() { {product.description} )} - {product.productOptions && product.productOptions.length > 0 && ( + {productOptions && productOptions.length > 0 && (
- {product.productOptions?.map((option) => ( + {productOptions.map((option) => ( onChange(o.name!)} > diff --git a/src/components/product-option/product-option.tsx b/src/components/product-option/product-option.tsx index 5465b08..dd6b1d4 100644 --- a/src/components/product-option/product-option.tsx +++ b/src/components/product-option/product-option.tsx @@ -40,10 +40,11 @@ export const ProductOption = ({ option, selectedChoice, error, onChange }: Produ c.value && c.description) + .filter((c) => c.value && c.description && c.visible) .map((c) => ({ name: c.description!, hexValue: c.value!, + inStock: !!c.inStock, }))} onChange={handleChange} selectedName={selectedChoice?.description} @@ -52,10 +53,11 @@ export const ProductOption = ({ option, selectedChoice, error, onChange }: Produ diff --git a/src/utils/product-utils.ts b/src/utils/product-utils.ts index ee01ab5..b7f8b0a 100644 --- a/src/utils/product-utils.ts +++ b/src/utils/product-utils.ts @@ -1,6 +1,6 @@ import { SerializeFrom } from '@remix-run/node'; -import deepEqual from 'fast-deep-equal'; import { products as wixStoresProducts } from '@wix/stores'; +import deepEqual from 'fast-deep-equal'; import { Product } from '~/api/types'; export function isOutOfStock( @@ -31,7 +31,7 @@ export function getPriceData( export function getSKU( product: Product | SerializeFrom, - selectedChoices: Record = {} + selectedChoices: Record ): Product['sku'] { if (product.manageVariants) { const selectedVariant = getSelectedVariant(product, selectedChoices); @@ -43,12 +43,34 @@ export function getSKU( export function getSelectedVariant( product: Product | SerializeFrom, - selectedChoices: Record = {} + selectedChoices: Record ): wixStoresProducts.Variant | undefined { const selectedChoiceValues = selectedChoicesToVariantChoices(product, selectedChoices); return product.variants?.find((variant) => deepEqual(variant.choices, selectedChoiceValues)); } +function getMatchingVariants( + product: Product | SerializeFrom, + selectedChoices: Record +): wixStoresProducts.Variant[] { + const selectedChoiceValues = selectedChoicesToVariantChoices(product, selectedChoices); + + for (const optionName of Object.keys(selectedChoiceValues)) { + if (selectedChoiceValues[optionName] === undefined) { + delete selectedChoiceValues[optionName]; + } + } + + return ( + product.variants?.filter((variant) => + deepEqual(variant.choices, { + ...variant.choices, + ...selectedChoiceValues, + }) + ) ?? [] + ); +} + export const getChoiceValue = ( optionType: wixStoresProducts.OptionType, choice: wixStoresProducts.Choice @@ -88,3 +110,47 @@ export function getMedia( const selectedChoiceWithMedia = Object.values(selectedChoices).find((c) => c?.media?.mainMedia !== undefined); return selectedChoiceWithMedia?.media ?? product.media; } + +/** + * returns a copy of product options array with populated availability information (visible, inStock) + * considering currently selected option choices and available product variants + */ +export function getProductOptions( + product: Product | SerializeFrom, + selectedChoices: Record +): wixStoresProducts.ProductOption[] | undefined { + return product.productOptions?.map((option) => { + return { + ...option, + choices: option.choices?.map((choice) => ({ + ...choice, + ...getChoiceAvailabilityInfo(choice, option, selectedChoices, product), + })), + }; + }); +} + +function getChoiceAvailabilityInfo( + choice: wixStoresProducts.Choice, + option: wixStoresProducts.ProductOption, + selectedChoices: Record, + product: Product | SerializeFrom +): Pick { + if (!product.manageVariants || !option.name || !option.optionType) { + return { + visible: choice.visible, + inStock: choice.inStock, + }; + } + + // Get variants matching all other selected choices and target choice + const matchingVariants = getMatchingVariants(product, { + ...selectedChoices, + [option.name]: choice, + }); + + return { + visible: matchingVariants.some((variant) => variant.variant?.visible), + inStock: matchingVariants.some((variant) => variant.variant?.visible && variant.stock?.inStock), + }; +} From 4f146c7a471674f0dac00033b54aff9dbb156560 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:11:23 +0300 Subject: [PATCH 20/31] Use quantity state (#95) --- app/routes/products.$productSlug/route.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/routes/products.$productSlug/route.tsx b/app/routes/products.$productSlug/route.tsx index 3c54950..672f92c 100644 --- a/app/routes/products.$productSlug/route.tsx +++ b/app/routes/products.$productSlug/route.tsx @@ -2,7 +2,7 @@ import type { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run import { isRouteErrorResponse, json, useLoaderData, useNavigate, useRouteError } from '@remix-run/react'; import type { products } from '@wix/stores'; import classNames from 'classnames'; -import { useRef, useState } from 'react'; +import { useState } from 'react'; import { useAddToCart } from '~/api/api-hooks'; import { getEcomApi } from '~/api/ecom-api'; import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; @@ -44,9 +44,9 @@ export default function ProductDetailsPage() { const { product } = useLoaderData(); const { setIsOpen } = useCartOpen(); const [addToCartAttempted, setAddToCartAttempted] = useState(false); + const [quantity, setQuantity] = useState(1); const { trigger: addToCart } = useAddToCart(); - const quantityInput = useRef(null); const getInitialSelectedChoices = () => { const result: Record = {}; @@ -78,7 +78,6 @@ export default function ProductDetailsPage() { return; } - const quantity = parseInt(quantityInput.current?.value ?? '1', 10); const selectedVariant = getSelectedVariant(product, selectedChoices); let options: AddToCartOptions = { options: selectedChoicesToVariantChoices(product, selectedChoices) }; @@ -129,6 +128,7 @@ export default function ProductDetailsPage() { option={option} selectedChoice={selectedChoices[option.name!]} onChange={(newSelectedChoice) => { + setQuantity(1); setSelectedChoices((prev) => ({ ...prev, [option.name!]: newSelectedChoice, @@ -143,12 +143,11 @@ export default function ProductDetailsPage() {
From 309d12b43a43796bcfe5d3ae2f366d03716d4af6 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Wed, 16 Oct 2024 16:40:46 +0300 Subject: [PATCH 21/31] Export addToCart from the useCart hook (#96) --- app/routes/products.$productSlug/route.tsx | 6 +++--- src/hooks/use-cart.ts | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/routes/products.$productSlug/route.tsx b/app/routes/products.$productSlug/route.tsx index 672f92c..36893bd 100644 --- a/app/routes/products.$productSlug/route.tsx +++ b/app/routes/products.$productSlug/route.tsx @@ -3,7 +3,6 @@ import { isRouteErrorResponse, json, useLoaderData, useNavigate, useRouteError } import type { products } from '@wix/stores'; import classNames from 'classnames'; import { useState } from 'react'; -import { useAddToCart } from '~/api/api-hooks'; import { getEcomApi } from '~/api/ecom-api'; import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; import { useCartOpen } from '~/components/cart/cart-open-context'; @@ -13,6 +12,7 @@ import { ProductAdditionalInfo } from '~/components/product-additional-info/prod import { ProductImages } from '~/components/product-images/product-images'; import { ProductOption } from '~/components/product-option/product-option'; import { UnsafeRichText } from '~/components/rich-text/rich-text'; +import { useCart } from '~/hooks/use-cart'; import { ROUTES } from '~/router/config'; import { getErrorMessage, @@ -46,7 +46,7 @@ export default function ProductDetailsPage() { const [addToCartAttempted, setAddToCartAttempted] = useState(false); const [quantity, setQuantity] = useState(1); - const { trigger: addToCart } = useAddToCart(); + const cart = useCart(); const getInitialSelectedChoices = () => { const result: Record = {}; @@ -85,7 +85,7 @@ export default function ProductDetailsPage() { options = { variantId: selectedVariant._id }; } - await addToCart({ + await cart.addItem({ id: product._id, quantity, options, diff --git a/src/hooks/use-cart.ts b/src/hooks/use-cart.ts index 735abb0..a2953c8 100644 --- a/src/hooks/use-cart.ts +++ b/src/hooks/use-cart.ts @@ -1,4 +1,10 @@ -import { useCartTotals, useCartData, useUpdateCartItemQuantity, useRemoveItemFromCart } from '~/api/api-hooks'; +import { + useCartTotals, + useCartData, + useUpdateCartItemQuantity, + useRemoveItemFromCart, + useAddToCart, +} from '~/api/api-hooks'; import { useEcomAPI } from '~/api/ecom-api-context-provider'; export const useCart = () => { @@ -7,6 +13,7 @@ export const useCart = () => { const { data: cartTotals } = useCartTotals(); const { trigger: updateItemQuantity } = useUpdateCartItemQuantity(); const { trigger: removeItem } = useRemoveItemFromCart(); + const { trigger: addItem } = useAddToCart(); const checkout = async () => { const checkoutResponse = await ecomAPI.checkout(); @@ -23,6 +30,7 @@ export const useCart = () => { cartTotals, updateItemQuantity, removeItem, + addItem, checkout, }; }; From d2d8862342236307b0f1253b1c6f60152159bb3d Mon Sep 17 00:00:00 2001 From: olehrakwix <93204312+olehrakwix@users.noreply.github.com> Date: Thu, 17 Oct 2024 12:38:08 +0300 Subject: [PATCH 22/31] refactor: improve select types (#97) * refactor: improve select types * fix logic * fix comment --- src/components/product-option/product-option.tsx | 3 +-- src/components/select/select.tsx | 11 +++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/components/product-option/product-option.tsx b/src/components/product-option/product-option.tsx index dd6b1d4..a373d8d 100644 --- a/src/components/product-option/product-option.tsx +++ b/src/components/product-option/product-option.tsx @@ -55,9 +55,8 @@ export const ProductOption = ({ option, selectedChoice, error, onChange }: Produ options={choices .filter((c) => c.value && c.description && c.visible) .map((c) => ({ - name: c.description!, + name: c.inStock ? c.description! : `${c.description!} (Out of stock)`, value: c.value!, - inStock: !!c.inStock, }))} value={selectedChoice?.value} placeholder={`Select ${name}`} diff --git a/src/components/select/select.tsx b/src/components/select/select.tsx index 7b59e45..3a84699 100644 --- a/src/components/select/select.tsx +++ b/src/components/select/select.tsx @@ -4,20 +4,20 @@ import styles from './select.module.scss'; export interface SelectOption { name: string; value: string; - inStock: boolean; } export interface SelectProps { + className?: string; options: SelectOption[]; value?: string; - placeholder: string; - hasError: boolean; + placeholder?: string; + hasError?: boolean; onChange: (value: string) => void; } -export const Select = ({ options, value, onChange, placeholder, hasError }: SelectProps) => { +export const Select = ({ className, options, value, onChange, placeholder, hasError }: SelectProps) => { return ( -
+
From 23c9ec478b69ebd25f39862aeaf285a60a1dda0b Mon Sep 17 00:00:00 2001 From: olehrakwix <93204312+olehrakwix@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:16:59 +0300 Subject: [PATCH 23/31] feat: products filtering and sorting (#98) * added sorting and filters * improve responsive views * prettify files --- .../category.module.scss | 48 ++++--- app/routes/category.$categorySlug/route.tsx | 87 +++++++++--- src/api/ecom-api.tsx | 47 ++++++- src/api/product-filters.ts | 54 ++++++++ src/api/product-sorting.ts | 33 +++++ src/api/types.ts | 43 +++++- .../accordion/accordion.module.scss | 63 +++++++++ src/components/accordion/accordion.tsx | 55 ++++++++ .../applied-filter/applied-filter.module.scss | 10 ++ .../applied-filter/applied-filter.tsx | 18 +++ .../applied-product-filters.module.scss | 13 ++ .../applied-product-filters.tsx | 62 +++++++++ src/components/icons/close-icon.tsx | 7 + src/components/icons/index.ts | 3 + src/components/icons/minus-icon.tsx | 7 + src/components/icons/plus-icon.tsx | 7 + .../product-filters/product-filters.tsx | 60 ++++++++ .../product-sorting-select.module.scss | 14 ++ .../product-sorting-select.tsx | 44 ++++++ .../range-slider/range-slider.module.scss | 98 +++++++++++++ src/components/range-slider/range-slider.tsx | 131 ++++++++++++++++++ src/styles/common.scss | 8 ++ src/utils/common.ts | 61 ++++++++ src/utils/use-search-params-optimistic.ts | 30 ++++ 24 files changed, 957 insertions(+), 46 deletions(-) create mode 100644 src/api/product-filters.ts create mode 100644 src/api/product-sorting.ts create mode 100644 src/components/accordion/accordion.module.scss create mode 100644 src/components/accordion/accordion.tsx create mode 100644 src/components/applied-filter/applied-filter.module.scss create mode 100644 src/components/applied-filter/applied-filter.tsx create mode 100644 src/components/applied-product-filters/applied-product-filters.module.scss create mode 100644 src/components/applied-product-filters/applied-product-filters.tsx create mode 100644 src/components/icons/close-icon.tsx create mode 100644 src/components/icons/index.ts create mode 100644 src/components/icons/minus-icon.tsx create mode 100644 src/components/icons/plus-icon.tsx create mode 100644 src/components/product-filters/product-filters.tsx create mode 100644 src/components/product-sorting-select/product-sorting-select.module.scss create mode 100644 src/components/product-sorting-select/product-sorting-select.tsx create mode 100644 src/components/range-slider/range-slider.module.scss create mode 100644 src/components/range-slider/range-slider.tsx create mode 100644 src/utils/use-search-params-optimistic.ts diff --git a/app/routes/category.$categorySlug/category.module.scss b/app/routes/category.$categorySlug/category.module.scss index 6728556..d6b1209 100644 --- a/app/routes/category.$categorySlug/category.module.scss +++ b/app/routes/category.$categorySlug/category.module.scss @@ -1,26 +1,28 @@ @use '@styles/variables.scss' as *; .root { - padding-top: 20px; display: flex; + gap: 100px; padding-top: 50px; padding-bottom: 60px; + margin-left: 20px; + margin-right: 20px; } -.filters { +.sidebar { padding-top: 30px; padding-left: 50px; } -.filterSection { +.sidebarSection { width: 150px; - padding-bottom: 10px; + padding-bottom: 40px; display: flex; flex-direction: column; gap: 10px; } -.filterSectionName { +.sidebarTitle { text-transform: uppercase; padding-bottom: 10px; border-bottom: solid 1px var(--grey); @@ -35,12 +37,26 @@ text-align: center; } +.appliedFilters { + margin-bottom: 16px; +} + +.countAndSorting { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-bottom: 8px; +} + +.productsCount { + font: var(--paragraph3); +} + .gallery { display: grid; grid-auto-flow: row; grid-template-columns: 1fr 1fr 1fr; - margin-right: 80px; - margin-left: 80px; column-gap: 20px; row-gap: 60px; margin-top: 30px; @@ -59,35 +75,23 @@ @media (width > $desktop-width) { .gallery { grid-template-columns: 1fr 1fr 1fr 1fr; - max-width: 1400px; - margin-left: auto; - margin-right: auto; } } -@media (width < $desktop-width) { - .root { - flex-direction: column; +@media (width < $tablet-width) { + .sidebar { + display: none; } } @media ($mobile-width <= width < $tablet-width) { .gallery { grid-template-columns: 1fr 1fr; - margin-right: 80px; - margin-left: 80px; } } @media (width < $mobile-width) { .gallery { grid-template-columns: 1fr; - margin-left: 60px; - margin-right: 60px; - } - - .title { - margin-top: 20px; - margin-bottom: 10px; } } diff --git a/app/routes/category.$categorySlug/route.tsx b/app/routes/category.$categorySlug/route.tsx index f562f39..c969a80 100644 --- a/app/routes/category.$categorySlug/route.tsx +++ b/app/routes/category.$categorySlug/route.tsx @@ -1,13 +1,18 @@ -import classNames from 'classnames'; import { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; -import { NavLink, useLoaderData, json, useRouteError, useNavigate, isRouteErrorResponse } from '@remix-run/react'; +import { isRouteErrorResponse, json, NavLink, useLoaderData, useNavigate, useRouteError } from '@remix-run/react'; +import classNames from 'classnames'; import { getEcomApi } from '~/api/ecom-api'; +import { productFiltersFromSearchParams, useAppliedProductFilters } from '~/api/product-filters'; +import { productSortByFromSearchParams } from '~/api/product-sorting'; import { EcomApiErrorCodes } from '~/api/types'; import { getImageHttpUrl } from '~/api/wix-image'; +import { AppliedProductFilters } from '~/components/applied-product-filters/applied-product-filters'; +import { ErrorComponent } from '~/components/error-component/error-component'; import { ProductCard } from '~/components/product-card/product-card'; +import { ProductFilters } from '~/components/product-filters/product-filters'; +import { ProductSortingSelect } from '~/components/product-sorting-select/product-sorting-select'; import { ROUTES } from '~/router/config'; import { getErrorMessage, getUrlOriginWithPath, isOutOfStock } from '~/utils'; -import { ErrorComponent } from '~/components/error-component/error-component'; import styles from './category.module.scss'; export const loader = async ({ params, request }: LoaderFunctionArgs) => { @@ -17,38 +22,56 @@ export const loader = async ({ params, request }: LoaderFunctionArgs) => { } const api = getEcomApi(); - const currentCategoryResponse = await api.getCategoryBySlug(categorySlug); + const url = new URL(request.url); + + const [currentCategoryResponse, categoryProductsResponse, allCategoriesResponse, productPriceBoundsResponse] = + await Promise.all([ + api.getCategoryBySlug(categorySlug), + api.getProductsByCategory(categorySlug, { + filters: productFiltersFromSearchParams(url.searchParams), + sortBy: productSortByFromSearchParams(url.searchParams), + }), + api.getAllCategories(), + api.getProductPriceBounds(categorySlug), + ]); + if (currentCategoryResponse.status === 'failure') { throw json(currentCategoryResponse.error); } - const allCategoriesResponse = await api.getAllCategories(); if (allCategoriesResponse.status === 'failure') { throw json(allCategoriesResponse.error); } - - const categoryProductsResponse = await api.getProductsByCategory(categorySlug); if (categoryProductsResponse.status === 'failure') { throw json(categoryProductsResponse.error); } + if (productPriceBoundsResponse.status === 'failure') { + throw json(productPriceBoundsResponse.error); + } return { + category: currentCategoryResponse.body, categoryProducts: categoryProductsResponse.body, - currentCategory: currentCategoryResponse.body, allCategories: allCategoriesResponse.body, + productPriceBounds: productPriceBoundsResponse.body, + canonicalUrl: getUrlOriginWithPath(request.url), }; }; export default function ProductsCategoryPage() { - const { categoryProducts, currentCategory, allCategories } = useLoaderData(); + const { categoryProducts, category, allCategories, productPriceBounds } = useLoaderData(); + + const { appliedFilters, someFiltersApplied, clearFilters, clearAllFilters } = useAppliedProductFilters(); + + const currency = categoryProducts.items[0]?.priceData?.currency ?? 'USD'; return (
-
-
-
Browse by
+
+ + + {category.numberOfProducts !== 0 && ( +
+

Filters

+
-
+ )}
-

{currentCategory?.name}

+

{category?.name}

+ + {someFiltersApplied && ( + + )} + +
+

+ {categoryProducts.totalCount} {categoryProducts.totalCount === 1 ? 'product' : 'products'} +

+ + +
+
- {categoryProducts?.map( + {categoryProducts?.items?.map( (item) => item.slug && item.name && ( diff --git a/src/api/ecom-api.tsx b/src/api/ecom-api.tsx index 57df6aa..b25adb6 100644 --- a/src/api/ecom-api.tsx +++ b/src/api/ecom-api.tsx @@ -11,6 +11,7 @@ import { WIX_SESSION_TOKEN_COOKIE_KEY, WIX_STORES_APP_ID, } from './constants'; +import { getSortedProductsQuery } from './product-sorting'; import { EcomAPI, EcomApiErrorCodes, EcomAPIFailureResponse, EcomAPISuccessResponse, isEcomSDKError } from './types'; function getWixClientId() { @@ -66,18 +67,30 @@ function createApi(): EcomAPI { const wixClient = getWixClient(); return { - async getProductsByCategory(categorySlug) { + async getProductsByCategory(categorySlug, { filters, sortBy } = {}) { try { const category = (await wixClient.collections.getCollectionBySlug(categorySlug)).collection; if (!category) { throw new Error('Category not found'); } - let productsResponse = await wixClient.products - .queryProducts() - .hasSome('collectionIds', [category!._id]) - .limit(100) - .find(); + let query = wixClient.products.queryProducts().hasSome('collectionIds', [category._id]); + + if (filters) { + if (filters.minPrice) { + query = query.ge('priceData.price', filters.minPrice); + } + + if (filters.maxPrice) { + query = query.le('priceData.price', filters.maxPrice); + } + } + + if (sortBy) { + query = getSortedProductsQuery(query, sortBy); + } + + let productsResponse = await query.limit(100).find(); const allProducts = productsResponse.items; // load all available products. if you have a lot of projects in your site @@ -87,7 +100,7 @@ function createApi(): EcomAPI { allProducts.push(...productsResponse.items); } - return successResponse(allProducts); + return successResponse({ items: allProducts, totalCount: productsResponse.totalCount ?? 0 }); } catch (e) { return failureResponse(EcomApiErrorCodes.GetProductsFailure, getErrorMessage(e)); } @@ -249,6 +262,26 @@ function createApi(): EcomAPI { return failureResponse(EcomApiErrorCodes.GetOrderFailure); } }, + async getProductPriceBounds(categorySlug: string) { + try { + const category = (await wixClient.collections.getCollectionBySlug(categorySlug)).collection; + if (!category) throw new Error('Category not found'); + + const query = wixClient.products.queryProducts().hasSome('collectionIds', [category._id]); + + const [ascendingPrice, descendingPrice] = await Promise.all([ + query.ascending('price').limit(1).find(), + query.descending('price').limit(1).find(), + ]); + + const lowest = ascendingPrice.items[0]?.priceData?.price ?? 0; + const highest = descendingPrice.items[0]?.priceData?.price ?? 0; + + return successResponse({ lowest, highest }); + } catch (e) { + return failureResponse(EcomApiErrorCodes.GetProductsFailure, getErrorMessage(e)); + } + }, }; } diff --git a/src/api/product-filters.ts b/src/api/product-filters.ts new file mode 100644 index 0000000..8494be7 --- /dev/null +++ b/src/api/product-filters.ts @@ -0,0 +1,54 @@ +import { useCallback, useMemo } from 'react'; +import { useSearchParams } from '@remix-run/react'; +import { IProductFilters, ProductFilter } from '~/api/types'; + +export function useAppliedProductFilters() { + const [searchParams, setSearchParams] = useSearchParams(); + + const appliedFilters = useMemo(() => productFiltersFromSearchParams(searchParams), [searchParams]); + + const someFiltersApplied = + Object.values(appliedFilters).length > 0 && Object.values(appliedFilters).some((value) => value !== undefined); + + const clearFilters = useCallback( + (filters: ProductFilter[]) => { + setSearchParams( + (params) => { + filters.forEach((filter) => params.delete(filter)); + return params; + }, + { preventScrollReset: true } + ); + }, + [setSearchParams] + ); + + const clearAllFilters = useCallback(() => { + clearFilters(Object.values(ProductFilter)); + }, [clearFilters]); + + return { + appliedFilters, + someFiltersApplied, + clearFilters, + clearAllFilters, + }; +} + +export function productFiltersFromSearchParams(params: URLSearchParams): IProductFilters { + const minPrice = params.get(ProductFilter.minPrice); + const maxPrice = params.get(ProductFilter.maxPrice); + const minPriceNumber = Number(minPrice); + const maxPriceNumber = Number(maxPrice); + return { + minPrice: minPrice && !Number.isNaN(minPriceNumber) ? minPriceNumber : undefined, + maxPrice: maxPrice && !Number.isNaN(maxPriceNumber) ? maxPriceNumber : undefined, + }; +} + +export function searchParamsFromProductFilters({ minPrice, maxPrice }: IProductFilters): URLSearchParams { + const params = new URLSearchParams(); + if (minPrice !== undefined) params.set(ProductFilter.minPrice, minPrice.toString()); + if (maxPrice !== undefined) params.set(ProductFilter.maxPrice, maxPrice.toString()); + return params; +} diff --git a/src/api/product-sorting.ts b/src/api/product-sorting.ts new file mode 100644 index 0000000..4b5a35d --- /dev/null +++ b/src/api/product-sorting.ts @@ -0,0 +1,33 @@ +import { products } from '@wix/stores'; +import { ProductSortBy } from './types'; + +export const SORT_BY_SEARCH_PARAM = 'sortBy'; + +export const DEFAULT_SORT_BY = ProductSortBy.newest; + +export function productSortByFromSearchParams(searchParams: URLSearchParams): ProductSortBy { + const value = searchParams.get(SORT_BY_SEARCH_PARAM); + return value && Object.values(ProductSortBy).includes(value as ProductSortBy) + ? (value as ProductSortBy) + : DEFAULT_SORT_BY; +} + +export function getSortedProductsQuery( + query: products.ProductsQueryBuilder, + sortBy: ProductSortBy +): products.ProductsQueryBuilder { + switch (sortBy) { + case ProductSortBy.newest: + // numericId is incremented when creating new products, + // so we can use it to sort products by creation date - from the newest to the oldest. + return query.descending('numericId'); + case ProductSortBy.priceAsc: + return query.ascending('price'); + case ProductSortBy.priceDesc: + return query.descending('price'); + case ProductSortBy.nameAsc: + return query.ascending('name'); + case ProductSortBy.nameDesc: + return query.descending('name'); + } +} diff --git a/src/api/types.ts b/src/api/types.ts index cf751fc..6d3866a 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -56,8 +56,45 @@ export function isEcomSDKError(error: unknown): error is EcomSDKError { ); } +export enum ProductFilter { + minPrice = 'minPrice', + maxPrice = 'maxPrice', +} + +export interface IProductFilters { + /** + * Only products with a price greater than or equal to this value will be included. + */ + [ProductFilter.minPrice]?: number; + /** + * Only products with a price less than or equal to this value will be included. + */ + [ProductFilter.maxPrice]?: number; +} + +export enum ProductSortBy { + newest = 'newest', + priceAsc = 'priceAsc', + priceDesc = 'priceDesc', + nameAsc = 'nameAsc', + nameDesc = 'nameDesc', +} + +interface GetProductsByCategoryOptions { + filters?: IProductFilters; + sortBy?: ProductSortBy; +} + export type EcomAPI = { - getProductsByCategory: (categorySlug: string) => Promise>; + getProductsByCategory: ( + categorySlug: string, + options?: GetProductsByCategoryOptions + ) => Promise< + EcomAPIResponse<{ + items: Product[]; + totalCount: number; + }> + >; getPromotedProducts: () => Promise>; getProductBySlug: (slug: string) => Promise>; getCart: () => Promise>; @@ -69,4 +106,8 @@ export type EcomAPI = { getAllCategories: () => Promise>; getCategoryBySlug: (slug: string) => Promise>; getOrder: (id: string) => Promise>; + /** + * Returns the lowest and the highest product price in the category. + */ + getProductPriceBounds: (categorySlug: string) => Promise>; }; diff --git a/src/components/accordion/accordion.module.scss b/src/components/accordion/accordion.module.scss new file mode 100644 index 0000000..da63584 --- /dev/null +++ b/src/components/accordion/accordion.module.scss @@ -0,0 +1,63 @@ +.item:not(:last-child) { + border-bottom: 1px solid rgba(118, 113, 101, 0.3); +} + +.header { + height: 48px; + display: flex; + align-items: center; + justify-content: space-between; + cursor: pointer; +} + +.title { + font: var(--heading2); + font-size: 18px; +} + +.toggleIcon { + width: 22px; + height: 22px; + color: var(--charcoal-black); +} + +.content { + --transitionDuration: 0.4s; + display: grid; + grid-template-rows: 0fr; + transition: grid-template-rows var(--transitionDuration) ease-in-out; +} + +.expanded { + grid-template-rows: 1fr; +} + +.contentExpander { + overflow: auto; + transition: overflow 0s allow-discrete; +} + +.expanded .contentExpander { + // Prevent clipping outline and box-shadow after transition. + overflow: visible; + transition-delay: var(--transitionDuration); +} + +.contentInner { + padding-bottom: 25px; +} + +.small { + .title { + font: var(--paragraph3); + } + + .toggleIcon { + width: 20px; + height: 20px; + } + + .contentInner { + padding-bottom: 16px; + } +} diff --git a/src/components/accordion/accordion.tsx b/src/components/accordion/accordion.tsx new file mode 100644 index 0000000..2bcd823 --- /dev/null +++ b/src/components/accordion/accordion.tsx @@ -0,0 +1,55 @@ +import { useState } from 'react'; +import classNames from 'classnames'; +import { getClickableElementAttributes } from '~/utils'; +import { MinusIcon, PlusIcon } from '../icons'; + +import styles from './accordion.module.scss'; + +interface AccordionItem { + title: string; + content: React.ReactNode; +} + +interface AccordionProps { + items: AccordionItem[]; + className?: string; + small?: boolean; +} + +export const Accordion = ({ items, className, small = false }: AccordionProps) => { + const [openItemIndex, setOpenItemIndex] = useState(0); + + return ( +
+ {items.map((item, index) => { + const isOpen = openItemIndex === index; + return ( +
+
setOpenItemIndex(isOpen ? null : index))} + > +

{item.title}

+ + {isOpen ? ( + + ) : ( + + )} +
+ +
+
+
{item.content}
+
+
+
+ ); + })} +
+ ); +}; diff --git a/src/components/applied-filter/applied-filter.module.scss b/src/components/applied-filter/applied-filter.module.scss new file mode 100644 index 0000000..d80c714 --- /dev/null +++ b/src/components/applied-filter/applied-filter.module.scss @@ -0,0 +1,10 @@ +.root { + height: 32px; + padding: 0 8px 0 12px; + display: flex; + align-items: center; + gap: 8px; + background: rgba(23, 17, 13, 0.1); + font: var(--paragraph3); + cursor: pointer; +} diff --git a/src/components/applied-filter/applied-filter.tsx b/src/components/applied-filter/applied-filter.tsx new file mode 100644 index 0000000..a41dd1e --- /dev/null +++ b/src/components/applied-filter/applied-filter.tsx @@ -0,0 +1,18 @@ +import { getClickableElementAttributes } from '~/utils'; +import { CloseIcon } from '../icons'; + +import styles from './applied-filter.module.scss'; + +interface AppliedFilterProps { + children: React.ReactNode; + onClick: () => void; +} + +export const AppliedFilter = ({ children, onClick }: AppliedFilterProps) => { + return ( +
+ {children} + +
+ ); +}; diff --git a/src/components/applied-product-filters/applied-product-filters.module.scss b/src/components/applied-product-filters/applied-product-filters.module.scss new file mode 100644 index 0000000..22a8999 --- /dev/null +++ b/src/components/applied-product-filters/applied-product-filters.module.scss @@ -0,0 +1,13 @@ +.root { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 8px; +} + +.clearAllButton { + margin-left: 8px; + font: var(--paragraph3); + text-decoration: underline; + cursor: pointer; +} diff --git a/src/components/applied-product-filters/applied-product-filters.tsx b/src/components/applied-product-filters/applied-product-filters.tsx new file mode 100644 index 0000000..43e6d32 --- /dev/null +++ b/src/components/applied-product-filters/applied-product-filters.tsx @@ -0,0 +1,62 @@ +import { useMemo } from 'react'; +import classNames from 'classnames'; +import { ProductFilter, IProductFilters } from '~/api/types'; +import { formatPrice } from '~/utils'; +import { AppliedFilter } from '../applied-filter/applied-filter'; + +import styles from './applied-product-filters.module.scss'; + +interface AppliedProductFiltersProps { + appliedFilters: IProductFilters; + onClearFilters: (filters: ProductFilter[]) => void; + onClearAllFilters: () => void; + currency: string; + // Min and max prices in the current category. + // Used to replace missing bounds ("$5 - ?" or "? - $25") when only one filter bound is set. + minPriceInCategory: number; + maxPriceInCategory: number; + className?: string; +} + +export const AppliedProductFilters = ({ + appliedFilters, + onClearFilters, + onClearAllFilters, + currency, + minPriceInCategory, + maxPriceInCategory, + className, +}: AppliedProductFiltersProps) => { + const { minPrice, maxPrice } = appliedFilters; + + const priceFilter = useMemo(() => { + if (minPrice === undefined && maxPrice === undefined) { + return null; + } else { + return ( + + {formatPrice(minPrice ?? minPriceInCategory, currency)}– + {formatPrice(maxPrice ?? maxPriceInCategory, currency)} + + ); + } + }, [minPrice, maxPrice, currency, minPriceInCategory, maxPriceInCategory]); + + return ( +
+ {priceFilter && ( + { + onClearFilters([ProductFilter.minPrice, ProductFilter.maxPrice]); + }} + > + {priceFilter} + + )} + + +
+ ); +}; diff --git a/src/components/icons/close-icon.tsx b/src/components/icons/close-icon.tsx new file mode 100644 index 0000000..3c8bc3e --- /dev/null +++ b/src/components/icons/close-icon.tsx @@ -0,0 +1,7 @@ +export const CloseIcon = (props: React.SVGProps) => { + return ( + + + + ); +}; diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts new file mode 100644 index 0000000..19057ab --- /dev/null +++ b/src/components/icons/index.ts @@ -0,0 +1,3 @@ +export * from './close-icon'; +export * from './minus-icon'; +export * from './plus-icon'; diff --git a/src/components/icons/minus-icon.tsx b/src/components/icons/minus-icon.tsx new file mode 100644 index 0000000..eaaeea8 --- /dev/null +++ b/src/components/icons/minus-icon.tsx @@ -0,0 +1,7 @@ +export const MinusIcon = ({ className }: { className?: string }) => { + return ( + + + + ); +}; diff --git a/src/components/icons/plus-icon.tsx b/src/components/icons/plus-icon.tsx new file mode 100644 index 0000000..0c56052 --- /dev/null +++ b/src/components/icons/plus-icon.tsx @@ -0,0 +1,7 @@ +export const PlusIcon = ({ className }: { className?: string }) => { + return ( + + + + ); +}; diff --git a/src/components/product-filters/product-filters.tsx b/src/components/product-filters/product-filters.tsx new file mode 100644 index 0000000..0c66883 --- /dev/null +++ b/src/components/product-filters/product-filters.tsx @@ -0,0 +1,60 @@ +import { useCallback, useMemo } from 'react'; +import { productFiltersFromSearchParams, searchParamsFromProductFilters } from '~/api/product-filters'; +import { IProductFilters } from '~/api/types'; +import { formatPrice, mergeUrlSearchParams } from '~/utils'; +import { useSearchParamsOptimistic } from '~/utils/use-search-params-optimistic'; +import { Accordion } from '../accordion/accordion'; +import { RangeSlider } from '../range-slider/range-slider'; + +interface ProductFiltersProps { + lowestPrice: number; + highestPrice: number; + currency: string; +} + +export const ProductFilters = ({ lowestPrice, highestPrice, currency }: ProductFiltersProps) => { + const [searchParams, setSearchParams] = useSearchParamsOptimistic(); + + const filters = useMemo(() => productFiltersFromSearchParams(searchParams), [searchParams]); + + const handleFiltersChange = (changed: Partial) => { + const newParams = searchParamsFromProductFilters({ ...filters, ...changed }); + setSearchParams((params) => mergeUrlSearchParams(params, newParams), { + preventScrollReset: true, + }); + }; + + const formatPriceValue = useCallback((price: number) => formatPrice(price, currency), [currency]); + + return ( + { + handleFiltersChange({ + minPrice: Math.max(Math.floor(value), lowestPrice), + }); + }} + onEndValueChange={(value) => { + handleFiltersChange({ + maxPrice: Math.min(Math.ceil(value), highestPrice), + }); + }} + minValue={lowestPrice} + maxValue={highestPrice} + formatValue={formatPriceValue} + /> + ), + }, + ]} + /> + ); +}; diff --git a/src/components/product-sorting-select/product-sorting-select.module.scss b/src/components/product-sorting-select/product-sorting-select.module.scss new file mode 100644 index 0000000..82d9646 --- /dev/null +++ b/src/components/product-sorting-select/product-sorting-select.module.scss @@ -0,0 +1,14 @@ +.root { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; +} + +.title { + font: var(--paragraph3); +} + +.select { + padding-right: 18px; +} diff --git a/src/components/product-sorting-select/product-sorting-select.tsx b/src/components/product-sorting-select/product-sorting-select.tsx new file mode 100644 index 0000000..f2098f3 --- /dev/null +++ b/src/components/product-sorting-select/product-sorting-select.tsx @@ -0,0 +1,44 @@ +import { productSortByFromSearchParams, SORT_BY_SEARCH_PARAM } from '~/api/product-sorting'; +import { ProductSortBy } from '~/api/types'; +import { useSearchParamsOptimistic } from '~/utils/use-search-params-optimistic'; +import { Select } from '../select/select'; +import styles from './product-sorting-select.module.scss'; + +const sortingOptions: { value: ProductSortBy; label: string }[] = [ + { value: ProductSortBy.newest, label: 'Newest' }, + { value: ProductSortBy.priceAsc, label: 'Price (low to high)' }, + { value: ProductSortBy.priceDesc, label: 'Price (high to low)' }, + { value: ProductSortBy.nameAsc, label: 'Name A-Z' }, + { value: ProductSortBy.nameDesc, label: 'Name Z-A' }, +]; + +export const ProductSortingSelect = () => { + const [searchParams, setSearchParams] = useSearchParamsOptimistic(); + + const sortBy = productSortByFromSearchParams(searchParams); + + const handleChange = (sortBy: string) => { + setSearchParams( + (params) => { + params.set(SORT_BY_SEARCH_PARAM, sortBy); + return params; + }, + { preventScrollReset: true } + ); + }; + + return ( +
+ Sort By: + + elements stacked on top of each other. + */} +
+ {/* Displays the track with the highlighted selected range. The thumb is hidden. + Handles a change when a user clicks somewhere on the track. + */} + + + {/* Displays the slider thumb that controls the start value. The track is hidden */} + + + {/* Displays the slider thumb that controls the end value. The track is hidden */} + +
+ +
+ {formatValue(startValue)} + {formatValue(endValue)} +
+
+ ); +}; diff --git a/src/styles/common.scss b/src/styles/common.scss index b9a29d0..5ae8aa2 100644 --- a/src/styles/common.scss +++ b/src/styles/common.scss @@ -85,3 +85,11 @@ padding-right: 10px; font: var(--paragraph3); } + +.rangeSlider { + --track-color: var(--grey); + --selected-range-color: var(--charcoal-black); + --thumb-color: var(--charcoal-black); + --thumb-focus-ring-color: var(--charcoal-black); + font: var(--paragraph3); +} diff --git a/src/utils/common.ts b/src/utils/common.ts index 0b02c81..3d02962 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -56,3 +56,64 @@ export function routeLocationToUrl(location: Location, origin: string): URL { url.hash = location.hash; return url; } + +/** + * It's important to add an appropriate role and a keyboard support + * for non-interactive HTML elements with click handlers, such as `
`. + * This function returns a basic set of attributes + * to make the clickable element focusable and handle keyboard events. + */ +export function getClickableElementAttributes(handler: () => void) { + return { + role: 'button', + tabIndex: 0, + onClick: handler, + onKeyUp: (event: React.KeyboardEvent) => { + if (event.code === 'Enter' || event.code === 'Space') { + handler(); + } + }, + }; +} + +/** + * Merges multiple URLSearchParams instances into one URLSearchParams. + * + * For entries with the same key, values from subsequent URLSearchParams + * instances will overwrite the earlier ones. For example: + * ```js + * const a = new URLSearchParams([['foo', '1'], ['foo', '2']]) + * const b = new URLSearchParams([['foo', '3'], ['foo', '4']]) + * const c = mergeUrlSearchParams(a, b); + * c.toString(); // 'foo=3&foo=4' + * ``` + */ +export function mergeUrlSearchParams(...paramsArr: URLSearchParams[]): URLSearchParams { + const result = new URLSearchParams(); + + for (const params of paramsArr) { + const overriddenParams = new Set(); + + for (const [key, value] of params.entries()) { + if (result.has(key) && !overriddenParams.has(key)) { + result.delete(key); + overriddenParams.add(key); + } + + result.append(key, value); + } + } + + return result; +} + +export function formatPrice(price: number, currency: string): string { + const formatter = Intl.NumberFormat('en-US', { + currency, + style: 'currency', + currencyDisplay: 'narrowSymbol', + minimumFractionDigits: 2, + }); + + return formatter.format(price); +} diff --git a/src/utils/use-search-params-optimistic.ts b/src/utils/use-search-params-optimistic.ts new file mode 100644 index 0000000..d2a5093 --- /dev/null +++ b/src/utils/use-search-params-optimistic.ts @@ -0,0 +1,30 @@ +import { useNavigation, useSearchParams } from '@remix-run/react'; +import { useCallback, useEffect, useState } from 'react'; +import type { NavigateOptions } from 'react-router'; + +/** + * Similar to `useSearchParams` from Remix, but allows to update search params optimistically. + */ +export function useSearchParamsOptimistic() { + const navigation = useNavigation(); + const [searchParams, setSearchParams] = useSearchParams(); + + const [optimisticSearchParams, setOptimisticSearchParams] = useState(searchParams); + + const handleSearchParamsChange = useCallback( + (params: URLSearchParams | ((prevParams: URLSearchParams) => URLSearchParams), options?: NavigateOptions) => { + setOptimisticSearchParams(params); + setSearchParams(params, options); + }, + [setSearchParams] + ); + + // Synchronize search params on back/forward browser button clicks. + useEffect(() => { + if (navigation.state !== 'loading') { + setOptimisticSearchParams(searchParams); + } + }, [navigation.state, searchParams]); + + return [optimisticSearchParams, handleSearchParamsChange] as const; +} From 1e5ae95e1eb39d7f4345f35ed25a43dfbc597a41 Mon Sep 17 00:00:00 2001 From: Yurii Venher <79912799+yurii-ve@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:08:42 +0200 Subject: [PATCH 24/31] Sync latest changes from the ReClaim template (#102) * Add lib folder, user session * Update dependencies * Update codux config * Fix * Define DEMO_STORE_WIX_CLIENT_ID in the src * Add getStaticRoutes * Prettier * Prettier * Add faker * Update package-lock * Put canonical links back * Fix duplicate import --- _codux/board-wrappers/component-wrapper.tsx | 5 +- _codux/boards-global-setup.ts | 2 +- .../components/cart/cart-item.board.tsx | 2 +- .../components/cart/cart-view.board.tsx | 2 +- .../error-component/error-component.board.tsx | 2 +- .../boards/components/footer/footer.board.tsx | 2 +- .../boards/components/header/header.board.tsx | 4 +- .../hero-image/hero-image.board.tsx | 2 +- .../order-summary/order-summary.board.tsx | 2 +- .../boards/ui-kits/ui-kit-buttons.board.tsx | 14 +- .../ui-kits/ui-kit-components.board.tsx | 4 +- .../ui-kits/ui-kit-typograpgy.board.tsx | 2 +- _codux/mocks/cart.ts | 2 +- app/root.tsx | 71 +- app/routes/_index/route.tsx | 20 +- app/routes/about/route.tsx | 7 +- app/routes/category.$categorySlug/route.tsx | 69 +- app/routes/products.$productSlug/route.tsx | 57 +- app/routes/thank-you/route.tsx | 17 +- codux.config.json | 13 +- .../cart => lib}/cart-open-context.tsx | 0 .../color-select/color-select.module.scss | 74 + lib/components/color-select/color-select.tsx | 36 + .../range-slider/range-slider.module.scss | 102 + lib/components/range-slider/range-slider.tsx | 131 + .../visual-effects/background-parallax.tsx | 114 + lib/components/visual-effects/common.ts | 44 + lib/components/visual-effects/fade-in.tsx | 22 + lib/components/visual-effects/float-in.tsx | 30 + lib/components/visual-effects/index.tsx | 4 + lib/components/visual-effects/reveal.tsx | 34 + .../ecom/api-context.tsx | 20 +- src/api/ecom-api.tsx => lib/ecom/api.ts | 163 +- lib/ecom/constants.ts | 1 + src/api/api-hooks.ts => lib/ecom/hooks.ts | 77 +- lib/ecom/index.ts | 7 + lib/ecom/product-filters.ts | 32 + {src/api => lib/ecom}/product-sorting.ts | 2 +- lib/ecom/session.ts | 50 + {src/api => lib/ecom}/types.ts | 22 +- lib/hooks/index.ts | 3 + .../hooks/use-applied-product-filters.ts | 24 +- lib/hooks/use-product-details.ts | 78 + lib/hooks/use-product-sorting.ts | 11 + lib/hooks/use-products-page-results.ts | 84 + lib/hooks/use-search-params-optimistic.ts | 30 + lib/route-loaders/index.ts | 3 + lib/route-loaders/product-details.ts | 15 + lib/route-loaders/products.ts | 39 + lib/route-loaders/thank-you.ts | 13 + .../utils/cart-utils.ts | 12 +- {src => lib}/utils/common.ts | 53 +- {src => lib}/utils/index.ts | 2 +- {src => lib}/utils/product-utils.ts | 35 +- package-lock.json | 4415 +++++++---------- package.json | 58 +- src/api/constants.ts | 5 - src/api/wix-image.ts | 23 - src/components/accordion/accordion.tsx | 2 +- .../applied-filter/applied-filter.tsx | 2 +- .../applied-product-filters.tsx | 4 +- src/components/cart/cart-item/cart-item.tsx | 25 +- src/components/cart/cart-view/cart-view.tsx | 2 +- src/components/cart/cart.tsx | 12 +- .../color-select/color-select.module.scss | 51 - src/components/color-select/color-select.tsx | 40 - src/components/drawer/drawer.tsx | 2 +- src/components/header/header.tsx | 12 +- src/components/hero-image/hero-image.tsx | 8 +- .../product-additional-info.tsx | 2 +- src/components/product-card/product-card.tsx | 4 +- .../product-filters/product-filters.tsx | 7 +- .../product-images/product-images.tsx | 10 +- .../product-option/product-option.tsx | 14 +- .../product-sorting-select.tsx | 7 +- .../range-slider/range-slider.module.scss | 8 +- src/components/site-footer/site-footer.tsx | 12 +- .../site-wrapper/site-wrapper.module.scss | 1 + src/components/site-wrapper/site-wrapper.tsx | 13 +- src/constants.ts | 1 + src/hooks/use-cart.ts | 36 - src/router/config.ts | 28 - src/styles/typography.scss | 4 +- src/utils/cart-utils.ts | 9 - src/utils/use-search-params-optimistic.ts | 2 +- tsconfig.json | 3 +- 86 files changed, 3139 insertions(+), 3349 deletions(-) rename {src/components/cart => lib}/cart-open-context.tsx (100%) create mode 100644 lib/components/color-select/color-select.module.scss create mode 100644 lib/components/color-select/color-select.tsx create mode 100644 lib/components/range-slider/range-slider.module.scss create mode 100644 lib/components/range-slider/range-slider.tsx create mode 100644 lib/components/visual-effects/background-parallax.tsx create mode 100644 lib/components/visual-effects/common.ts create mode 100644 lib/components/visual-effects/fade-in.tsx create mode 100644 lib/components/visual-effects/float-in.tsx create mode 100644 lib/components/visual-effects/index.tsx create mode 100644 lib/components/visual-effects/reveal.tsx rename src/api/ecom-api-context-provider.tsx => lib/ecom/api-context.tsx (52%) rename src/api/ecom-api.tsx => lib/ecom/api.ts (73%) create mode 100644 lib/ecom/constants.ts rename src/api/api-hooks.ts => lib/ecom/hooks.ts (58%) create mode 100644 lib/ecom/index.ts create mode 100644 lib/ecom/product-filters.ts rename {src/api => lib/ecom}/product-sorting.ts (97%) create mode 100644 lib/ecom/session.ts rename {src/api => lib/ecom}/types.ts (89%) create mode 100644 lib/hooks/index.ts rename src/api/product-filters.ts => lib/hooks/use-applied-product-filters.ts (50%) create mode 100644 lib/hooks/use-product-details.ts create mode 100644 lib/hooks/use-product-sorting.ts create mode 100644 lib/hooks/use-products-page-results.ts create mode 100644 lib/hooks/use-search-params-optimistic.ts create mode 100644 lib/route-loaders/index.ts create mode 100644 lib/route-loaders/product-details.ts create mode 100644 lib/route-loaders/products.ts create mode 100644 lib/route-loaders/thank-you.ts rename src/api/cart-helpers.ts => lib/utils/cart-utils.ts (53%) rename {src => lib}/utils/common.ts (89%) rename {src => lib}/utils/index.ts (100%) rename {src => lib}/utils/product-utils.ts (91%) delete mode 100644 src/api/constants.ts delete mode 100644 src/api/wix-image.ts delete mode 100644 src/components/color-select/color-select.module.scss delete mode 100644 src/components/color-select/color-select.tsx create mode 100644 src/constants.ts delete mode 100644 src/hooks/use-cart.ts delete mode 100644 src/router/config.ts delete mode 100644 src/utils/cart-utils.ts diff --git a/_codux/board-wrappers/component-wrapper.tsx b/_codux/board-wrappers/component-wrapper.tsx index ce25006..f66879b 100644 --- a/_codux/board-wrappers/component-wrapper.tsx +++ b/_codux/board-wrappers/component-wrapper.tsx @@ -1,7 +1,6 @@ import { createRemixStub } from '@remix-run/testing'; import { PropsWithChildren } from 'react'; -import { EcomAPIContextProvider } from '~/api/ecom-api-context-provider'; -import { ROUTES } from '~/router/config'; +import { EcomAPIContextProvider } from '~/lib/ecom'; export interface ComponentWrapperProps extends PropsWithChildren { loaderData?: Record; @@ -11,7 +10,7 @@ export default function ComponentWrapper({ children, loaderData }: ComponentWrap const RemixStub = createRemixStub([ { Component: () => children, - children: Object.values(ROUTES).map(({ path }) => ({ path })), + ErrorBoundary: () => children, }, ]); diff --git a/_codux/boards-global-setup.ts b/_codux/boards-global-setup.ts index 6c7b744..1e277a7 100644 --- a/_codux/boards-global-setup.ts +++ b/_codux/boards-global-setup.ts @@ -1 +1 @@ -import '~/styles/index.scss'; +import '~/src/styles/index.scss'; diff --git a/_codux/boards/components/cart/cart-item.board.tsx b/_codux/boards/components/cart/cart-item.board.tsx index 267e301..2f46a89 100644 --- a/_codux/boards/components/cart/cart-item.board.tsx +++ b/_codux/boards/components/cart/cart-item.board.tsx @@ -1,6 +1,6 @@ import { createBoard } from '@wixc3/react-board'; import { cartItem, cartItemOutOfStock, cartItemWithDiscount } from '_codux/mocks/cart'; -import { CartItem } from '~/components/cart/cart-item/cart-item'; +import { CartItem } from '~/src/components/cart/cart-item/cart-item'; const noop = () => {}; diff --git a/_codux/boards/components/cart/cart-view.board.tsx b/_codux/boards/components/cart/cart-view.board.tsx index b0d7500..28405a3 100644 --- a/_codux/boards/components/cart/cart-view.board.tsx +++ b/_codux/boards/components/cart/cart-view.board.tsx @@ -1,5 +1,5 @@ import { createBoard } from '@wixc3/react-board'; -import { CartView } from '~/components/cart/cart-view/cart-view'; +import { CartView } from '~/src/components/cart/cart-view/cart-view'; import { cart, cartTotals } from '_codux/mocks/cart'; const noop = () => {}; diff --git a/_codux/boards/components/error-component/error-component.board.tsx b/_codux/boards/components/error-component/error-component.board.tsx index 7baef01..772ad06 100644 --- a/_codux/boards/components/error-component/error-component.board.tsx +++ b/_codux/boards/components/error-component/error-component.board.tsx @@ -1,5 +1,5 @@ import { createBoard } from '@wixc3/react-board'; -import { ErrorComponent } from '~/components/error-component/error-component'; +import { ErrorComponent } from '~/src/components/error-component/error-component'; export default createBoard({ name: 'ErrorComponent', diff --git a/_codux/boards/components/footer/footer.board.tsx b/_codux/boards/components/footer/footer.board.tsx index 65e0eb9..7ae6d52 100644 --- a/_codux/boards/components/footer/footer.board.tsx +++ b/_codux/boards/components/footer/footer.board.tsx @@ -1,5 +1,5 @@ import { createBoard } from '@wixc3/react-board'; -import { Footer } from '~/components/site-footer/site-footer'; +import { Footer } from '~/src/components/site-footer/site-footer'; export default createBoard({ name: 'Footer', diff --git a/_codux/boards/components/header/header.board.tsx b/_codux/boards/components/header/header.board.tsx index 76547d0..e98e150 100644 --- a/_codux/boards/components/header/header.board.tsx +++ b/_codux/boards/components/header/header.board.tsx @@ -1,7 +1,7 @@ import { createBoard } from '@wixc3/react-board'; import ComponentWrapper from '_codux/board-wrappers/component-wrapper'; -import { CartOpenContextProvider } from '~/components/cart/cart-open-context'; -import { Header } from '~/components/header/header'; +import { CartOpenContextProvider } from '~/lib/cart-open-context'; +import { Header } from '~/src/components/header/header'; export default createBoard({ name: 'Header', diff --git a/_codux/boards/components/hero-image/hero-image.board.tsx b/_codux/boards/components/hero-image/hero-image.board.tsx index 1f1571f..1285c46 100644 --- a/_codux/boards/components/hero-image/hero-image.board.tsx +++ b/_codux/boards/components/hero-image/hero-image.board.tsx @@ -1,5 +1,5 @@ import { createBoard } from '@wixc3/react-board'; -import { HeroImage } from '~/components/hero-image/hero-image'; +import { HeroImage } from '~/src/components/hero-image/hero-image'; export default createBoard({ name: 'Hero Image', diff --git a/_codux/boards/components/order-summary/order-summary.board.tsx b/_codux/boards/components/order-summary/order-summary.board.tsx index aa091c2..528c388 100644 --- a/_codux/boards/components/order-summary/order-summary.board.tsx +++ b/_codux/boards/components/order-summary/order-summary.board.tsx @@ -1,6 +1,6 @@ import { createBoard } from '@wixc3/react-board'; import { mockOrder } from '_codux/mocks/order'; -import { OrderSummary } from '~/components/order-summary/order-summary'; +import { OrderSummary } from '~/src/components/order-summary/order-summary'; export default createBoard({ name: 'OrderSummary', diff --git a/_codux/boards/ui-kits/ui-kit-buttons.board.tsx b/_codux/boards/ui-kits/ui-kit-buttons.board.tsx index 0ba1ede..5099840 100644 --- a/_codux/boards/ui-kits/ui-kit-buttons.board.tsx +++ b/_codux/boards/ui-kits/ui-kit-buttons.board.tsx @@ -2,13 +2,13 @@ import { NavLink } from '@remix-run/react'; import { createBoard, Variant } from '@wixc3/react-board'; import classNames from 'classnames'; import { MemoryRouter } from 'react-router-dom'; -import discordIcon from '~/assets/svg/discord.svg'; -import facebookIcon from '~/assets/svg/facebook.svg'; -import githubIcon from '~/assets/svg/github.svg'; -import mediumIcon from '~/assets/svg/medium.svg'; -import twitterxIcon from '~/assets/svg/twitterx.svg'; -import youtubeIcon from '~/assets/svg/youtube.svg'; -import styles from '~/styles/ui-kit-buttons.module.scss'; +import discordIcon from '~/src/assets/svg/discord.svg'; +import facebookIcon from '~/src/assets/svg/facebook.svg'; +import githubIcon from '~/src/assets/svg/github.svg'; +import mediumIcon from '~/src/assets/svg/medium.svg'; +import twitterxIcon from '~/src/assets/svg/twitterx.svg'; +import youtubeIcon from '~/src/assets/svg/youtube.svg'; +import styles from '~/src/styles/ui-kit-buttons.module.scss'; export default createBoard({ name: 'UI Kit - Buttons', diff --git a/_codux/boards/ui-kits/ui-kit-components.board.tsx b/_codux/boards/ui-kits/ui-kit-components.board.tsx index 6dff79b..c280bb1 100644 --- a/_codux/boards/ui-kits/ui-kit-components.board.tsx +++ b/_codux/boards/ui-kits/ui-kit-components.board.tsx @@ -1,7 +1,7 @@ import { createBoard, Variant } from '@wixc3/react-board'; import classNames from 'classnames'; -import { ProductCard } from '~/components/product-card/product-card'; -import styles from '~/styles/ui-kit-components.module.scss'; +import { ProductCard } from '~/src/components/product-card/product-card'; +import styles from '~/src/styles/ui-kit-components.module.scss'; export default createBoard({ name: 'UI Kit - Components', diff --git a/_codux/boards/ui-kits/ui-kit-typograpgy.board.tsx b/_codux/boards/ui-kits/ui-kit-typograpgy.board.tsx index 792cedd..12b8215 100644 --- a/_codux/boards/ui-kits/ui-kit-typograpgy.board.tsx +++ b/_codux/boards/ui-kits/ui-kit-typograpgy.board.tsx @@ -1,6 +1,6 @@ import { createBoard, Variant } from '@wixc3/react-board'; import classNames from 'classnames'; -import styles from '~/styles/ui-kit-typography.module.scss'; +import styles from '~/src/styles/ui-kit-typography.module.scss'; export default createBoard({ name: 'UI Kit - Typography', diff --git a/_codux/mocks/cart.ts b/_codux/mocks/cart.ts index 8905a5c..66f7b2c 100644 --- a/_codux/mocks/cart.ts +++ b/_codux/mocks/cart.ts @@ -1,6 +1,6 @@ import { faker } from '@faker-js/faker'; import { cart as wixEcomCart } from '@wix/ecom'; -import { Cart, CartItemDetails, CartTotals } from '~/api/types'; +import { Cart, CartItemDetails, CartTotals } from '~/lib/ecom'; export const cartItem = createCartItem(); export const cartItemWithDiscount = createCartItem({ diff --git a/app/root.tsx b/app/root.tsx index a048032..69e1760 100644 --- a/app/root.tsx +++ b/app/root.tsx @@ -11,21 +11,36 @@ import { useNavigation, useRouteError, } from '@remix-run/react'; +import { LoaderFunctionArgs } from '@remix-run/node'; +import { Tokens } from '@wix/sdk'; import { useEffect } from 'react'; -import { EcomAPIContextProvider } from '~/api/ecom-api-context-provider'; -import { CartOpenContextProvider } from '~/components/cart/cart-open-context'; -import { ErrorComponent } from '~/components/error-component/error-component'; -import { SiteWrapper } from '~/components/site-wrapper/site-wrapper'; -import { ROUTES } from '~/router/config'; -import '~/styles/index.scss'; -import { getErrorMessage, routeLocationToUrl } from '~/utils'; +import { CartOpenContextProvider } from '~/lib/cart-open-context'; +import { EcomAPIContextProvider } from '~/lib/ecom'; +import { initializeEcomSession, commitSession } from '~/lib/ecom/session'; +import { getErrorMessage, routeLocationToUrl } from '~/lib/utils'; +import { ErrorComponent } from '~/src/components/error-component/error-component'; +import { SiteWrapper } from '~/src/components/site-wrapper/site-wrapper'; -export async function loader() { - return json({ - ENV: { - WIX_CLIENT_ID: process?.env?.WIX_CLIENT_ID, +import '~/src/styles/index.scss'; + +export async function loader({ request }: LoaderFunctionArgs) { + const { wixEcomTokens, session, shouldUpdateSessionCookie } = await initializeEcomSession(request); + + return json( + { + ENV: { + WIX_CLIENT_ID: process?.env?.WIX_CLIENT_ID, + }, + wixEcomTokens, }, - }); + shouldUpdateSessionCookie + ? { + headers: { + 'Set-Cookie': await commitSession(session), + }, + } + : undefined, + ); } export function Layout({ children }: { children: React.ReactNode }) { @@ -46,15 +61,29 @@ export function Layout({ children }: { children: React.ReactNode }) { ); } +interface ContentWrapperProps extends React.PropsWithChildren { + tokens?: Tokens; +} + +function ContentWrapper({ children, tokens }: ContentWrapperProps) { + return ( + + + {children} + + + ); +} + export default function App() { - const data = useLoaderData(); + const { ENV, wixEcomTokens } = useLoaderData(); if (typeof window !== 'undefined' && typeof window.ENV === 'undefined') { - window.ENV = data.ENV; + window.ENV = ENV; } return ( - + ); @@ -83,18 +112,8 @@ export function ErrorBoundary() { title={isPageNotFoundError ? 'Page Not Found' : 'Oops, something went wrong'} message={isPageNotFoundError ? undefined : getErrorMessage(error)} actionButtonText="Back to shopping" - onActionButtonClick={() => navigate(ROUTES.category.to('all-products'))} + onActionButtonClick={() => navigate('/category/all-products')} /> ); } - -function ContentWrapper({ children }: React.PropsWithChildren) { - return ( - - - {children} - - - ); -} diff --git a/app/routes/_index/route.tsx b/app/routes/_index/route.tsx index 4049d54..8faf3f0 100644 --- a/app/routes/_index/route.tsx +++ b/app/routes/_index/route.tsx @@ -1,19 +1,19 @@ import { LinksFunction, LoaderFunctionArgs } from '@remix-run/node'; import { Link, MetaFunction, useLoaderData, useNavigate, json } from '@remix-run/react'; -import { getEcomApi } from '~/api/ecom-api'; -import { HeroImage } from '~/components/hero-image/hero-image'; -import { ProductCard } from '~/components/product-card/product-card'; -import { ROUTES } from '~/router/config'; -import { getUrlOriginWithPath, isOutOfStock } from '~/utils'; +import { initializeEcomApi } from '~/lib/ecom/session'; +import { isOutOfStock, removeQueryStringFromUrl } from '~/lib/utils'; +import { HeroImage } from '~/src/components/hero-image/hero-image'; +import { ProductCard } from '~/src/components/product-card/product-card'; import styles from './index.module.scss'; export const loader = async ({ request }: LoaderFunctionArgs) => { - const productsResponse = await getEcomApi().getPromotedProducts(); + const ecomApi = await initializeEcomApi(request); + const productsResponse = await ecomApi.getPromotedProducts(); if (productsResponse.status === 'failure') { throw json(productsResponse.error); } - return { products: productsResponse.body, canonicalUrl: getUrlOriginWithPath(request.url) }; + return { products: productsResponse.body, canonicalUrl: removeQueryStringFromUrl(request.url) }; }; export default function HomePage() { @@ -29,14 +29,14 @@ export default function HomePage() { bottomLabel="Get more for less on selected brands" buttonLabel="Shop Now" topLabelClassName={styles.topLabelHighlighted} - onButtonClick={() => navigate(ROUTES.category.to())} + onButtonClick={() => navigate('/category/all-products')} />

Best Sellers

Shop our best seller items

{products?.map((product) => product.slug && product.name ? ( - + - ) : null + ) : null, )}
diff --git a/app/routes/about/route.tsx b/app/routes/about/route.tsx index 4935add..ef71289 100644 --- a/app/routes/about/route.tsx +++ b/app/routes/about/route.tsx @@ -1,10 +1,9 @@ -import { LinksFunction, MetaFunction } from '@remix-run/node'; -import { LoaderFunctionArgs } from 'react-router-dom'; -import { getUrlOriginWithPath } from '~/utils'; +import { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; +import { removeQueryStringFromUrl } from '~/lib/utils'; import styles from './about.module.scss'; export const loader = async ({ request }: LoaderFunctionArgs) => { - return { canonicalUrl: getUrlOriginWithPath(request.url) }; + return { canonicalUrl: removeQueryStringFromUrl(request.url) }; }; export default function AboutPage() { diff --git a/app/routes/category.$categorySlug/route.tsx b/app/routes/category.$categorySlug/route.tsx index c969a80..a037938 100644 --- a/app/routes/category.$categorySlug/route.tsx +++ b/app/routes/category.$categorySlug/route.tsx @@ -1,18 +1,23 @@ import { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; -import { isRouteErrorResponse, json, NavLink, useLoaderData, useNavigate, useRouteError } from '@remix-run/react'; +import { NavLink, useLoaderData, json, useRouteError, useNavigate, isRouteErrorResponse } from '@remix-run/react'; +import { GetStaticRoutes } from '@wixc3/define-remix-app'; import classNames from 'classnames'; -import { getEcomApi } from '~/api/ecom-api'; -import { productFiltersFromSearchParams, useAppliedProductFilters } from '~/api/product-filters'; -import { productSortByFromSearchParams } from '~/api/product-sorting'; -import { EcomApiErrorCodes } from '~/api/types'; -import { getImageHttpUrl } from '~/api/wix-image'; -import { AppliedProductFilters } from '~/components/applied-product-filters/applied-product-filters'; -import { ErrorComponent } from '~/components/error-component/error-component'; -import { ProductCard } from '~/components/product-card/product-card'; -import { ProductFilters } from '~/components/product-filters/product-filters'; -import { ProductSortingSelect } from '~/components/product-sorting-select/product-sorting-select'; -import { ROUTES } from '~/router/config'; -import { getErrorMessage, getUrlOriginWithPath, isOutOfStock } from '~/utils'; +import { + EcomApiErrorCodes, + createApi, + createWixClient, + productFiltersFromSearchParams, + productSortByFromSearchParams, +} from '~/lib/ecom'; +import { useAppliedProductFilters } from '~/lib/hooks'; +import { initializeEcomApi } from '~/lib/ecom/session'; +import { getErrorMessage, isOutOfStock, removeQueryStringFromUrl } from '~/lib/utils'; +import { ProductCard } from '~/src/components/product-card/product-card'; +import { ErrorComponent } from '~/src/components/error-component/error-component'; +import { ProductFilters } from '~/src/components/product-filters/product-filters'; +import { AppliedProductFilters } from '~/src/components/applied-product-filters/applied-product-filters'; +import { ProductSortingSelect } from '~/src/components/product-sorting-select/product-sorting-select'; + import styles from './category.module.scss'; export const loader = async ({ params, request }: LoaderFunctionArgs) => { @@ -21,18 +26,18 @@ export const loader = async ({ params, request }: LoaderFunctionArgs) => { throw new Error('Missing category slug'); } - const api = getEcomApi(); + const ecomApi = await initializeEcomApi(request); const url = new URL(request.url); const [currentCategoryResponse, categoryProductsResponse, allCategoriesResponse, productPriceBoundsResponse] = await Promise.all([ - api.getCategoryBySlug(categorySlug), - api.getProductsByCategory(categorySlug, { + ecomApi.getCategoryBySlug(categorySlug), + ecomApi.getProductsByCategory(categorySlug, { filters: productFiltersFromSearchParams(url.searchParams), sortBy: productSortByFromSearchParams(url.searchParams), }), - api.getAllCategories(), - api.getProductPriceBounds(categorySlug), + ecomApi.getAllCategories(), + ecomApi.getProductPriceBounds(categorySlug), ]); if (currentCategoryResponse.status === 'failure') { @@ -53,11 +58,21 @@ export const loader = async ({ params, request }: LoaderFunctionArgs) => { categoryProducts: categoryProductsResponse.body, allCategories: allCategoriesResponse.body, productPriceBounds: productPriceBoundsResponse.body, - - canonicalUrl: getUrlOriginWithPath(request.url), + canonicalUrl: removeQueryStringFromUrl(request.url), }; }; +export const getStaticRoutes: GetStaticRoutes = async () => { + const api = createApi(createWixClient()); + const categories = await api.getAllCategories(); + + if (categories.status === 'failure') { + throw categories.error; + } + + return categories.body.map((category) => `/category/${category.slug}`); +}; + export default function ProductsCategoryPage() { const { categoryProducts, category, allCategories, productPriceBounds } = useLoaderData(); @@ -76,7 +91,7 @@ export default function ProductsCategoryPage() { category.slug ? ( classNames('linkButton', { [styles.activeCategory]: isActive, @@ -85,7 +100,7 @@ export default function ProductsCategoryPage() { > {category.name} - ) : null + ) : null, )} @@ -126,20 +141,20 @@ export default function ProductsCategoryPage() {
- {categoryProducts?.items?.map( + {categoryProducts.items.map( (item) => item.slug && item.name && ( - + - ) + ), )}
@@ -164,7 +179,7 @@ export function ErrorBoundary() { title={title} message={message} actionButtonText="Back to shopping" - onActionButtonClick={() => navigate(ROUTES.category.to('all-products'))} + onActionButtonClick={() => navigate('/category/all-products')} /> ); } diff --git a/app/routes/products.$productSlug/route.tsx b/app/routes/products.$productSlug/route.tsx index 36893bd..c550198 100644 --- a/app/routes/products.$productSlug/route.tsx +++ b/app/routes/products.$productSlug/route.tsx @@ -1,19 +1,11 @@ import type { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; import { isRouteErrorResponse, json, useLoaderData, useNavigate, useRouteError } from '@remix-run/react'; import type { products } from '@wix/stores'; +import { GetStaticRoutes } from '@wixc3/define-remix-app'; import classNames from 'classnames'; import { useState } from 'react'; -import { getEcomApi } from '~/api/ecom-api'; -import { AddToCartOptions, EcomApiErrorCodes } from '~/api/types'; -import { useCartOpen } from '~/components/cart/cart-open-context'; -import { ErrorComponent } from '~/components/error-component/error-component'; -import { Price } from '~/components/price/price'; -import { ProductAdditionalInfo } from '~/components/product-additional-info/product-additional-info'; -import { ProductImages } from '~/components/product-images/product-images'; -import { ProductOption } from '~/components/product-option/product-option'; -import { UnsafeRichText } from '~/components/rich-text/rich-text'; -import { useCart } from '~/hooks/use-cart'; -import { ROUTES } from '~/router/config'; +import { useCart, AddToCartOptions, EcomApiErrorCodes, createApi, createWixClient } from '~/lib/ecom'; +import { initializeEcomApi } from '~/lib/ecom/session'; import { getErrorMessage, getMedia, @@ -21,10 +13,18 @@ import { getProductOptions, getSelectedVariant, getSKU, - getUrlOriginWithPath, isOutOfStock, + removeQueryStringFromUrl, selectedChoicesToVariantChoices, -} from '~/utils'; +} from '~/lib/utils'; +import { useCartOpen } from '~/lib/cart-open-context'; +import { ErrorComponent } from '~/src/components/error-component/error-component'; +import { Price } from '~/src/components/price/price'; +import { ProductAdditionalInfo } from '~/src/components/product-additional-info/product-additional-info'; +import { ProductImages } from '~/src/components/product-images/product-images'; +import { ProductOption } from '~/src/components/product-option/product-option'; +import { UnsafeRichText } from '~/src/components/rich-text/rich-text'; + import styles from './product-details.module.scss'; export const loader = async ({ params, request }: LoaderFunctionArgs) => { @@ -32,12 +32,26 @@ export const loader = async ({ params, request }: LoaderFunctionArgs) => { if (!productSlug) { throw new Error('Missing product slug'); } - const productResponse = await getEcomApi().getProductBySlug(productSlug); + + const ecomApi = await initializeEcomApi(request); + + const productResponse = await ecomApi.getProductBySlug(productSlug); if (productResponse.status === 'failure') { throw json(productResponse.error); } - return json({ product: productResponse.body, canonicalUrl: getUrlOriginWithPath(request.url) }); + return json({ product: productResponse.body, canonicalUrl: removeQueryStringFromUrl(request.url) }); +}; + +export const getStaticRoutes: GetStaticRoutes = async () => { + const api = createApi(createWixClient()); + const products = await api.getProducts(); + + if (products.status === 'failure') { + throw products.error; + } + + return products.body.map((product) => `/products/${product.slug}`); }; export default function ProductDetailsPage() { @@ -59,9 +73,8 @@ export default function ProductDetailsPage() { return result; }; - const [selectedChoices, setSelectedChoices] = useState>( - getInitialSelectedChoices() - ); + const [selectedChoices, setSelectedChoices] = + useState>(getInitialSelectedChoices()); const outOfStock = isOutOfStock(product, selectedChoices); const priceData = getPriceData(product, selectedChoices); @@ -85,11 +98,7 @@ export default function ProductDetailsPage() { options = { variantId: selectedVariant._id }; } - await cart.addItem({ - id: product._id, - quantity, - options, - }); + await cart.addToCart(product._id, quantity, options); setIsOpen(true); } @@ -186,7 +195,7 @@ export function ErrorBoundary() { title={title} message={message} actionButtonText="Back to shopping" - onActionButtonClick={() => navigate(ROUTES.category.to('all-products'))} + onActionButtonClick={() => navigate('/category/all-products')} /> ); } diff --git a/app/routes/thank-you/route.tsx b/app/routes/thank-you/route.tsx index eddcb6e..7ac3d90 100644 --- a/app/routes/thank-you/route.tsx +++ b/app/routes/thank-you/route.tsx @@ -1,16 +1,15 @@ import { LinksFunction, LoaderFunctionArgs, MetaFunction } from '@remix-run/node'; import { isRouteErrorResponse, Link, useRouteError, useSearchParams } from '@remix-run/react'; import { useEffect, useState } from 'react'; -import { getEcomApi } from '~/api/ecom-api'; -import { OrderDetails } from '~/api/types'; -import { ErrorComponent } from '~/components/error-component/error-component'; -import { OrderSummary } from '~/components/order-summary/order-summary'; -import { ROUTES } from '~/router/config'; -import { getErrorMessage, getUrlOriginWithPath } from '~/utils'; +import { useEcomAPI, type OrderDetails } from '~/lib/ecom'; +import { getErrorMessage, removeQueryStringFromUrl } from '~/lib/utils'; +import { ErrorComponent } from '~/src/components/error-component/error-component'; +import { OrderSummary } from '~/src/components/order-summary/order-summary'; + import styles from './thank-you.module.scss'; export const loader = async ({ request }: LoaderFunctionArgs) => { - return { canonicalUrl: getUrlOriginWithPath(request.url) }; + return { canonicalUrl: removeQueryStringFromUrl(request.url) }; }; export default function ThankYouPage() { @@ -20,7 +19,7 @@ export default function ThankYouPage() { const [order, setOrder] = useState(); const [error, setError] = useState(); - const api = getEcomApi(); + const api = useEcomAPI(); useEffect(() => { if (orderId) { @@ -53,7 +52,7 @@ export default function ThankYouPage() {
)} - + diff --git a/codux.config.json b/codux.config.json index f6aa8bf..3f1f08c 100644 --- a/codux.config.json +++ b/codux.config.json @@ -2,14 +2,14 @@ "$schema": "https://wixplosives.github.io/codux-config-schema/codux.config.schema.json", "boardGlobalSetup": "./_codux/boards-global-setup.ts", "componentsDiscovery": { - "include": ["src/**"], - "exclude": ["_codux/**"] + "include": ["src/**", "lib/**"], + "exclude": ["_codux/component-templates/**"] }, + "boardsPath": "_codux/boards", "newComponent": { "componentsPath": "src/components", "templatesPath": "_codux/component-templates" }, - "boardsPath": "_codux/boards/components", "safeRender": { "maxInstancesPerComponent": 1000 }, @@ -25,19 +25,20 @@ "solution": "scss modules" }, "styleFilesConfig": { - "commonStyleFilePattern": "**/src/styles/**" + "commonStyleFilePattern": "**/styles/**" }, "resolve": { "alias": { "@styles": "./src/styles", "@styles/*": "./src/styles/*", - "/*": "./*", - "~/*": "./src/*", + "~/*": "./*", "node:fs": false, "node:fs/promises": false, "node:path": false, "node:crypto": false, + "crypto": false, "node:stream": false, + "stream": false, "node:os": false, "node:util": false, "node:events": false, diff --git a/src/components/cart/cart-open-context.tsx b/lib/cart-open-context.tsx similarity index 100% rename from src/components/cart/cart-open-context.tsx rename to lib/cart-open-context.tsx diff --git a/lib/components/color-select/color-select.module.scss b/lib/components/color-select/color-select.module.scss new file mode 100644 index 0000000..b2ac450 --- /dev/null +++ b/lib/components/color-select/color-select.module.scss @@ -0,0 +1,74 @@ +:where(.root) { + /* Default styles. Customize them by passing a className to the component. */ + --option-size: 24px; + --border-color: #bdbdbd; + --border-color-hover: #212121; + --border-color-selected: #757575; + --border-color-error: #ff0000; +} + +.root { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.option { + height: var(--option-size); + width: var(--option-size); + border: 1px solid var(--border-color); + border-radius: 50%; + transition: padding 100ms; + cursor: pointer; +} + +.option:hover, +.option.selected { + padding: 2px; +} + +.option:hover { + border-color: var(--border-color-hover); +} + +.option.selected { + border-color: var(--border-color-selected); +} + +.colorBox { + width: 100%; + height: 100%; + border-radius: 50%; +} + +.option:hover .colorBox, +.option.selected .colorBox { + border: 1px solid var(--border-color); +} + +.root.hasError .option { + border-color: var(--border-color-error); +} + +.crossedOut { + position: relative; + overflow: hidden; +} + +.crossedOut::after { + content: ''; + position: absolute; + height: 1px; + transform: rotate(-45deg); + inset: -50%; + margin: auto; + border-top: 1px solid var(--border-color); +} + +.crossedOut:hover::after { + border-color: var(--border-color-hover); +} + +.crossedOut.selected::after { + border-color: var(--border-color-selected); +} diff --git a/lib/components/color-select/color-select.tsx b/lib/components/color-select/color-select.tsx new file mode 100644 index 0000000..642a667 --- /dev/null +++ b/lib/components/color-select/color-select.tsx @@ -0,0 +1,36 @@ +import classNames from 'classnames'; + +import styles from './color-select.module.scss'; + +export interface ColorSelectOption { + id: string; + color: string; + crossedOut?: boolean; +} + +export interface ColorSelectProps { + options: ColorSelectOption[]; + selectedId: string; + onChange: (id: string) => void; + hasError?: boolean; + className?: string; +} + +export const ColorSelect = ({ options, selectedId, onChange, hasError, className }: ColorSelectProps) => { + return ( +
+ {options.map((option) => ( + + ))} +
+ ); +}; diff --git a/lib/components/range-slider/range-slider.module.scss b/lib/components/range-slider/range-slider.module.scss new file mode 100644 index 0000000..04f6a31 --- /dev/null +++ b/lib/components/range-slider/range-slider.module.scss @@ -0,0 +1,102 @@ +:where(.root) { + /* Default slider styles. Customize them by passing a className to the component. */ + --track-color: #b2b2b2; + --selected-range-color: #0175ff; + --thumb-color: #0175ff; + --thumb-focus-ring-color: #0175ff; +} + +.slidersContainer { + position: relative; + height: 12px; +} + +.input { + appearance: none; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + cursor: pointer; +} + +.trackInput::-webkit-slider-runnable-track { + width: 100%; + height: 2px; + background: linear-gradient( + to right, + var(--track-color) var(--start), + var(--selected-range-color) var(--start), + var(--selected-range-color) var(--end), + var(--track-color) var(--end) + ); +} + +.trackInput::-moz-range-track { + width: 100%; + height: 2px; + background: linear-gradient( + to right, + var(--track-color) var(--start), + var(--selected-range-color) var(--start), + var(--selected-range-color) var(--end), + var(--track-color) var(--end) + ); +} + +.trackInput::-webkit-slider-thumb { + visibility: hidden; +} + +.trackInput::-moz-range-thumb { + visibility: hidden; +} + +.thumbInput { + pointer-events: none; +} + +.thumbInput::-webkit-slider-thumb { + appearance: none; + pointer-events: auto; + width: 12px; + height: 12px; + border-radius: 50%; + border: none; + background: var(--thumb-color); + cursor: pointer; +} + +.thumbInput::-moz-range-thumb { + appearance: none; + pointer-events: auto; + width: 12px; + height: 12px; + border-radius: 50%; + border: none; + background: var(--thumb-color); + cursor: pointer; +} + +.thumbInput:focus-visible { + box-shadow: none; +} + +.thumbInput:focus-visible::-webkit-slider-thumb { + box-shadow: + 0 0 0 1px #ffffff, + 0 0 0 3px var(--thumb-focus-ring-color); +} + +.thumbInput:focus-visible::-moz-range-thumb { + box-shadow: + 0 0 0 1px #ffffff, + 0 0 0 3px var(--thumb-focus-ring-color); +} + +.values { + margin-top: 8px; + display: flex; + justify-content: space-between; +} diff --git a/lib/components/range-slider/range-slider.tsx b/lib/components/range-slider/range-slider.tsx new file mode 100644 index 0000000..4dd68f1 --- /dev/null +++ b/lib/components/range-slider/range-slider.tsx @@ -0,0 +1,131 @@ +import classNames from 'classnames'; +import styles from './range-slider.module.scss'; + +interface RangeSlider { + startValue: number; + endValue: number; + onStartValueChange: (value: number) => void; + onEndValueChange: (value: number) => void; + /** + * The lowest permitted value. + */ + minValue: number; + /** + * The highest permitted value. + */ + maxValue: number; + /** + * The granularity that the values must adhere to. @default 1 + */ + step?: number | 'any'; + /** + * Allows to format the displayed start and end values. For example, add a currency symbol, + * format with the specified number of decimal places, etc. + */ + formatValue?: (value: number) => string; + startInputName?: string; + endInputName?: string; + className?: string; +} + +/** + * A slider component for selecting a numeric range. + */ +export const RangeSlider = ({ + startValue, + endValue, + onStartValueChange, + onEndValueChange, + minValue, + maxValue, + step, + formatValue = (value) => value.toString(), + startInputName, + endInputName, + className, +}: RangeSlider) => { + const handleStartValueChange = (event: React.ChangeEvent) => { + const newStartValue = Number(event.target.value); + onStartValueChange(Math.min(newStartValue, endValue)); + }; + + const handleEndValueChange = (event: React.ChangeEvent) => { + const newEndValue = Number(event.target.value); + onEndValueChange(Math.max(newEndValue, startValue)); + }; + + const handleChangeByClickingOnTrack = (event: React.ChangeEvent) => { + const value = Number(event.target.value); + // Change the start or end value + // depending on which one is closer to the clicked value on the track. + const distToStart = Math.abs(value - startValue); + const distToEnd = Math.abs(value - endValue); + if (distToStart < distToEnd || (startValue === endValue && value < startValue)) { + onStartValueChange(value); + } else { + onEndValueChange(value); + } + }; + + const getValuePositionOnTrack = (value: number) => { + return `${((value - minValue) / (maxValue - minValue)) * 100}%`; + }; + + return ( +
+ {/* The slider is implemented using three native + elements stacked on top of each other. + */} +
+ {/* Displays the track with the highlighted selected range. The thumb is hidden. + Handles a change when a user clicks somewhere on the track. + */} + + + {/* Displays the slider thumb that controls the start value. The track is hidden */} + + + {/* Displays the slider thumb that controls the end value. The track is hidden */} + +
+ +
+ {formatValue(startValue)} + {formatValue(endValue)} +
+
+ ); +}; diff --git a/lib/components/visual-effects/background-parallax.tsx b/lib/components/visual-effects/background-parallax.tsx new file mode 100644 index 0000000..0b41373 --- /dev/null +++ b/lib/components/visual-effects/background-parallax.tsx @@ -0,0 +1,114 @@ +import { useEffect, useRef, type FC, type HTMLAttributes } from 'react'; +import { clamp, lerp, remap } from './common'; + +export interface BackgroundParallaxProps extends HTMLAttributes { + /** + * A number between 0 and 1 that defines the strength of the parallax + * effect, default: 0.75. + * - 0: No parallax effect, the background scrolls at the same rate as the + * content, similar to `background-attachment: scroll`. + * - 1: Maximum parallax effect, the background remains fixed relative to + * the viewport, similar to `background-attachment: fixed`. + */ + parallaxStrength?: number; + backgroundImageUrl?: string; +} + +/** + * A visual effect where the container's background image (set via CSS or inline + * styles) scrolls at a slower rate than the foreground content, creating a + * parallax effect. The background image is guaranteed to fully cover the + * visible area of the container at all times, with no gaps, regardless of the + * container size, background image dimensions, or viewport size. + */ +export const BackgroundParallax: FC = ({ + parallaxStrength = 0.75, + backgroundImageUrl, + style, + ...props +}) => { + const ref = useRef(null); + + useEffect(() => { + const element = ref.current; + if (!element) return; + + const handleLayoutChange = () => { + const elementRect = element.getBoundingClientRect(); + const backgroundPositionY = calculateBackgroundParallax({ + viewportHeight: window.innerHeight, + elementTop: elementRect.top, + elementHeight: elementRect.height, + parallaxStrength, + }); + element.style.backgroundPositionY = backgroundPositionY + 'px'; + }; + + window.addEventListener('scroll', handleLayoutChange); + window.addEventListener('resize', handleLayoutChange); + const resizeObserver = new ResizeObserver(handleLayoutChange); + resizeObserver.observe(element); + + return () => { + window.removeEventListener('scroll', handleLayoutChange); + window.removeEventListener('resize', handleLayoutChange); + resizeObserver.disconnect(); + }; + }, [parallaxStrength]); + + return ( +
+ ); +}; + +/** + * Calculates the `background-position-y` of an element to create a parallax + * effect as the page is scrolled. The function expects the background image to + * have `background-attachment: fixed` and `background-size: cover`, which + * ensures the background image has a minimum height of 100vh and is positioned + * relative to the viewport rather than the element itself. + * + * @param viewportHeight - The height of the viewport in pixels. + * @param elementHeight - The height of the element in pixels. + * @param elementTop - The distance from the top of the viewport to the top of the element. + * @param parallaxStrength - A value between 0 and 1, where 0 means no parallax, + * and 1 means full parallax (background fixed to viewport). + * @return The `y` position of the background in pixels to achieve the parallax effect. + */ +const calculateBackgroundParallax = ({ + viewportHeight, + elementHeight, + elementTop, + parallaxStrength, +}: { + viewportHeight: number; + elementHeight: number; + elementTop: number; + parallaxStrength: number; +}) => { + // scrollProgress = 0, when the element is fully below the bottom edge of the viewport. + // scrollProgress = 1, when the element is fully above the top edge of the viewport. + const scrollProgress = clamp(0, 1, remap(viewportHeight, -elementHeight, 0, 1, elementTop)); + + // If the element's height exceeds the viewport height, the background + // (which has minimum height of 100vh) cannot scroll along with the element + // without creating gaps. In this case, we force `parallaxStrength = 1` to + // keep the background fixed to the viewport. + if (elementHeight > viewportHeight) parallaxStrength = 1; + + const maxBackgroundY = ((viewportHeight + elementHeight) / 2) * (1 - parallaxStrength); + return lerp(maxBackgroundY, -maxBackgroundY, scrollProgress); +}; diff --git a/lib/components/visual-effects/common.ts b/lib/components/visual-effects/common.ts new file mode 100644 index 0000000..ade5d03 --- /dev/null +++ b/lib/components/visual-effects/common.ts @@ -0,0 +1,44 @@ +/** + * Unit vectors corresponding to four cardinal directions, in screen coordinates. + */ +export const cardinalDirectionVectors = { + up: { x: 0, y: -1 }, + right: { x: 1, y: 0 }, + down: { x: 0, y: 1 }, + left: { x: -1, y: 0 }, +} as const; + +/** + * Linearly interpolates between two numbers `a` and `b`, based on the + * interpolation factor `t`. + * - When `t = 0` returns `a`. + * - When `t = 1` return `b`. + * - When `t = 0.5` returns the midpoint of `a` and `b`. + */ +export const lerp = (a: number, b: number, t: number): number => (1 - t) * a + t * b; + +/** + * Restricts the value `x` to a range defined by `min` and `max`. + */ +export const clamp = (min: number, max: number, x: number): number => { + if (x < min) return min; + if (x > max) return max; + return x; +}; + +/** + * Remaps a number `x` from one range to another. + * + * @param inputStart - The start value of the input range. + * @param inputEnd - The end value of the input range. + * @param outputStart - The start value of the output range. + * @param outputEnd - The end value of the output range. + * @param x - The value to remap from the input range to the output range. + */ +export const remap = ( + inputStart: number, + inputEnd: number, + outputStart: number, + outputEnd: number, + x: number, +): number => ((x - inputStart) / (inputEnd - inputStart)) * (outputEnd - outputStart) + outputStart; diff --git a/lib/components/visual-effects/fade-in.tsx b/lib/components/visual-effects/fade-in.tsx new file mode 100644 index 0000000..a333a55 --- /dev/null +++ b/lib/components/visual-effects/fade-in.tsx @@ -0,0 +1,22 @@ +import { HTMLMotionProps, motion } from 'framer-motion'; +import { FC } from 'react'; + +export interface FadeInProps extends HTMLMotionProps<'div'> { + /** Animation duration in seconds, default: 1.8 */ + duration?: number; + /** A margin to add to the viewport when detecting whether the element has entered it. */ + viewportMargin?: string; +} + +/** + * A visual effect where the content transitions from transparent to opaque. + */ +export const FadeIn: FC = ({ duration = 1.8, viewportMargin, ...props }) => ( + +); diff --git a/lib/components/visual-effects/float-in.tsx b/lib/components/visual-effects/float-in.tsx new file mode 100644 index 0000000..cae97b2 --- /dev/null +++ b/lib/components/visual-effects/float-in.tsx @@ -0,0 +1,30 @@ +import { HTMLMotionProps, motion } from 'framer-motion'; +import { FC } from 'react'; +import { cardinalDirectionVectors } from './common'; + +export interface FloatInProps extends HTMLMotionProps<'div'> { + /** Animation direction, default: "up". */ + direction?: 'up' | 'right' | 'down' | 'left'; + /** Animation duration in seconds, default: 1.2 */ + duration?: number; + /** The distance the element will travel during animation, default: 120px */ + distance?: number; +} + +/** + * A visual effect where the content drifts into place from the specified + * direction, while transitioning from transparent to fully opaque. + */ +export const FloatIn: FC = ({ direction = 'up', duration = 1.2, distance = 120, ...props }) => ( + +); diff --git a/lib/components/visual-effects/index.tsx b/lib/components/visual-effects/index.tsx new file mode 100644 index 0000000..37a6a20 --- /dev/null +++ b/lib/components/visual-effects/index.tsx @@ -0,0 +1,4 @@ +export * from './background-parallax'; +export * from './fade-in'; +export * from './float-in'; +export * from './reveal'; diff --git a/lib/components/visual-effects/reveal.tsx b/lib/components/visual-effects/reveal.tsx new file mode 100644 index 0000000..afbf67b --- /dev/null +++ b/lib/components/visual-effects/reveal.tsx @@ -0,0 +1,34 @@ +import { HTMLMotionProps, motion } from 'framer-motion'; +import { FC } from 'react'; + +export interface RevealProps extends HTMLMotionProps<'div'> { + /** Animation direction, default: "down". */ + direction?: 'up' | 'right' | 'down' | 'left'; + /** Animation duration in seconds, default: 1.4 */ + duration?: number; +} + +/** + * A visual effect that gradually reveals content from a specified direction. + * This effect does not impact the layout of the content. + */ +export const Reveal: FC = ({ direction = 'down', duration = 1.4, ...props }) => ( + +); diff --git a/src/api/ecom-api-context-provider.tsx b/lib/ecom/api-context.tsx similarity index 52% rename from src/api/ecom-api-context-provider.tsx rename to lib/ecom/api-context.tsx index d8cecf6..dcf9c13 100644 --- a/src/api/ecom-api-context-provider.tsx +++ b/lib/ecom/api-context.tsx @@ -1,6 +1,7 @@ -import React, { FC } from 'react'; +import { Tokens } from '@wix/sdk'; +import React, { FC, useMemo } from 'react'; import { SWRConfig } from 'swr'; -import { getEcomApi } from './ecom-api'; +import { createApi, createWixClient } from './api'; import { EcomAPI } from './types'; export const EcomAPIContext = React.createContext(null); @@ -13,18 +14,27 @@ export const useEcomAPI = (): EcomAPI => { return context; }; -export const EcomAPIContextProvider: FC = ({ children }) => { +export interface EcomAPIContextProviderProps extends React.PropsWithChildren { + tokens?: Tokens; +} + +export const EcomAPIContextProvider: FC = ({ tokens, children }) => { + const api = useMemo(() => { + const client = createWixClient(tokens); + return createApi(client); + }, [tokens]); + return ( - {children} + {children} ); }; diff --git a/src/api/ecom-api.tsx b/lib/ecom/api.ts similarity index 73% rename from src/api/ecom-api.tsx rename to lib/ecom/api.ts index b25adb6..8ac193a 100644 --- a/src/api/ecom-api.tsx +++ b/lib/ecom/api.ts @@ -1,20 +1,34 @@ import { currentCart, orders } from '@wix/ecom'; import { redirects } from '@wix/redirects'; -import { createClient, OAuthStrategy } from '@wix/sdk'; +import { createClient, IOAuthStrategy, OAuthStrategy, Tokens, WixClient } from '@wix/sdk'; import { collections, products } from '@wix/stores'; -import Cookies from 'js-cookie'; -import { ROUTES } from '~/router/config'; -import { getErrorMessage } from '~/utils'; -import { - DEMO_STORE_WIX_CLIENT_ID, - WIX_CLIENT_ID_COOKIE_KEY, - WIX_SESSION_TOKEN_COOKIE_KEY, - WIX_STORES_APP_ID, -} from './constants'; +import { getErrorMessage } from '~/lib/utils'; +import { DEMO_STORE_WIX_CLIENT_ID } from '~/src/constants'; +import { WIX_STORES_APP_ID } from './constants'; +import { getFilteredProductsQuery } from './product-filters'; import { getSortedProductsQuery } from './product-sorting'; -import { EcomAPI, EcomApiErrorCodes, EcomAPIFailureResponse, EcomAPISuccessResponse, isEcomSDKError } from './types'; +import { + CollectionDetails, + EcomAPI, + EcomApiErrorCodes, + EcomAPIFailureResponse, + EcomAPISuccessResponse, + isEcomSDKError, +} from './types'; + +type WixApiClient = WixClient< + undefined, + IOAuthStrategy, + { + products: typeof products; + currentCart: typeof currentCart; + redirects: typeof redirects; + collections: typeof collections; + orders: typeof orders; + } +>; -function getWixClientId() { +export function getWixClientId() { /** * this file is used on both sides: client and server, * so we are trying to read WIX_CLIENT_ID from process.env on server side @@ -26,28 +40,7 @@ function getWixClientId() { return env.WIX_CLIENT_ID ?? DEMO_STORE_WIX_CLIENT_ID; } -function ensureSessionIntegrity() { - const sessionWixClientId = Cookies.get(WIX_CLIENT_ID_COOKIE_KEY); - const configuredWixClientId = getWixClientId(); - - // Clear user session if headless site changed. - // This will clear old cart if it exists. - // We have to do this because old cart may contain products from old site. - if (sessionWixClientId !== configuredWixClientId) { - Cookies.remove(WIX_SESSION_TOKEN_COOKIE_KEY); - } - - Cookies.set(WIX_CLIENT_ID_COOKIE_KEY, configuredWixClientId); -} - -function getTokensClient() { - ensureSessionIntegrity(); - - const tokens = Cookies.get(WIX_SESSION_TOKEN_COOKIE_KEY); - return tokens ? JSON.parse(tokens) : undefined; -} - -function getWixClient() { +export function createWixClient(tokens?: Tokens): WixApiClient { return createClient({ modules: { products, @@ -58,54 +51,68 @@ function getWixClient() { }, auth: OAuthStrategy({ clientId: getWixClientId(), - tokens: getTokensClient(), + tokens, }), }); } -function createApi(): EcomAPI { - const wixClient = getWixClient(); - +export function createApi(wixClient: WixApiClient): EcomAPI { return { - async getProductsByCategory(categorySlug, { filters, sortBy } = {}) { + async getProducts(limit = 100) { + try { + const response = await wixClient.products.queryProducts().limit(limit).find(); + return successResponse(response.items); + } catch (e) { + return failureResponse(EcomApiErrorCodes.GetProductsFailure, getErrorMessage(e)); + } + }, + async getProductsByCategory(categorySlug, { skip = 0, limit = 100, filters, sortBy } = {}) { try { const category = (await wixClient.collections.getCollectionBySlug(categorySlug)).collection; - if (!category) { - throw new Error('Category not found'); - } + if (!category) throw new Error('Category not found'); let query = wixClient.products.queryProducts().hasSome('collectionIds', [category._id]); if (filters) { - if (filters.minPrice) { - query = query.ge('priceData.price', filters.minPrice); - } - - if (filters.maxPrice) { - query = query.le('priceData.price', filters.maxPrice); - } + query = getFilteredProductsQuery(query, filters); } if (sortBy) { query = getSortedProductsQuery(query, sortBy); } - let productsResponse = await query.limit(100).find(); - const allProducts = productsResponse.items; + const { items, totalCount = 0 } = await query.skip(skip).limit(limit).find(); - // load all available products. if you have a lot of projects in your site - // please implement proper implementation of pagination - while (productsResponse.hasNext()) { - productsResponse = await productsResponse.next(); - allProducts.push(...productsResponse.items); - } - - return successResponse({ items: allProducts, totalCount: productsResponse.totalCount ?? 0 }); + return successResponse({ items, totalCount }); } catch (e) { return failureResponse(EcomApiErrorCodes.GetProductsFailure, getErrorMessage(e)); } }, + async getFeaturedProducts(categorySlug, count) { + let category: CollectionDetails | undefined; + const response = await this.getCategoryBySlug(categorySlug); + if (response.status === 'success') { + category = response.body; + } else { + const error = response.error; + if (error.code === EcomApiErrorCodes.CategoryNotFound) { + const response = await this.getCategoryBySlug('all-products'); + if (response.status === 'success') { + category = response.body; + } else { + throw error; + } + } else { + throw error; + } + } + const productsResponse = await this.getProductsByCategory(category.slug!, { + limit: count, + }); + if (productsResponse.status === 'failure') throw productsResponse.error; + return successResponse({ category, items: productsResponse.body.items }); + }, async getPromotedProducts() { try { const products = (await wixClient.products.queryProducts().limit(4).find()).items; @@ -118,7 +125,7 @@ function createApi(): EcomAPI { try { const product = (await wixClient.products.queryProducts().eq('slug', slug).limit(1).find()).items[0]; if (product === undefined) { - return failureResponse(EcomApiErrorCodes.ProductNotFound); + return failureResponse(EcomApiErrorCodes.ProductNotFound, 'Product not found'); } return successResponse(product); } catch (e) { @@ -178,7 +185,7 @@ function createApi(): EcomAPI { appId: WIX_STORES_APP_ID, options, }, - quantity: quantity, + quantity, }, ], }); @@ -187,12 +194,9 @@ function createApi(): EcomAPI { throw new Error('Failed to add item to cart'); } - const tokens = wixClient.auth.getTokens(); - Cookies.set(WIX_SESSION_TOKEN_COOKIE_KEY, JSON.stringify(tokens)); - return successResponse(result.cart); - } catch { - return failureResponse(EcomApiErrorCodes.AddCartItemFailure); + } catch (e) { + return failureResponse(EcomApiErrorCodes.AddCartItemFailure, getErrorMessage(e)); } }, @@ -212,7 +216,7 @@ function createApi(): EcomAPI { ecomCheckout: { checkoutId }, callbacks: { postFlowUrl: window.location.origin, - thankYouPageUrl: `${window.location.origin}${ROUTES.thankYou.path}`, + thankYouPageUrl: `${window.location.origin}/thank-you`, }, }); if (!redirectSession?.fullUrl) { @@ -227,21 +231,21 @@ function createApi(): EcomAPI { try { const categories = (await wixClient.collections.queryCollections().find()).items; return successResponse(categories); - } catch { - return failureResponse(EcomApiErrorCodes.GetAllCategoriesFailure); + } catch (e) { + return failureResponse(EcomApiErrorCodes.GetAllCategoriesFailure, getErrorMessage(e)); } }, async getCategoryBySlug(slug) { try { const category = (await wixClient.collections.getCollectionBySlug(slug)).collection; if (!category) { - return failureResponse(EcomApiErrorCodes.CategoryNotFound); + return failureResponse(EcomApiErrorCodes.CategoryNotFound, 'Category not found'); } return successResponse(category); } catch (e) { if (isEcomSDKError(e) && e.details.applicationError.code === 404) { - return failureResponse(EcomApiErrorCodes.CategoryNotFound); + return failureResponse(EcomApiErrorCodes.CategoryNotFound, 'Category not found'); } return failureResponse(EcomApiErrorCodes.GetCategoryFailure, getErrorMessage(e)); @@ -251,15 +255,15 @@ function createApi(): EcomAPI { try { const order = await wixClient.orders.getOrder(id); if (!order) { - return failureResponse(EcomApiErrorCodes.OrderNotFound); + return failureResponse(EcomApiErrorCodes.OrderNotFound, 'Order not found'); } return successResponse(order); } catch (e) { if (isEcomSDKError(e) && e.details.applicationError.code === 404) { - return failureResponse(EcomApiErrorCodes.OrderNotFound); + return failureResponse(EcomApiErrorCodes.OrderNotFound, 'Order not found'); } - return failureResponse(EcomApiErrorCodes.GetOrderFailure); + return failureResponse(EcomApiErrorCodes.GetOrderFailure, getErrorMessage(e)); } }, async getProductPriceBounds(categorySlug: string) { @@ -285,16 +289,7 @@ function createApi(): EcomAPI { }; } -let api: EcomAPI | undefined; -export function getEcomApi() { - if (api === undefined) { - api = createApi(); - } - - return api; -} - -function failureResponse(code: EcomApiErrorCodes, message?: string): EcomAPIFailureResponse { +function failureResponse(code: EcomApiErrorCodes, message: string): EcomAPIFailureResponse { return { status: 'failure', error: { code, message }, diff --git a/lib/ecom/constants.ts b/lib/ecom/constants.ts new file mode 100644 index 0000000..9d60b15 --- /dev/null +++ b/lib/ecom/constants.ts @@ -0,0 +1 @@ +export const WIX_STORES_APP_ID = '1380b703-ce81-ff05-f115-39571d94dfcd'; diff --git a/src/api/api-hooks.ts b/lib/ecom/hooks.ts similarity index 58% rename from src/api/api-hooks.ts rename to lib/ecom/hooks.ts index ad55dcb..3db29b7 100644 --- a/src/api/api-hooks.ts +++ b/lib/ecom/hooks.ts @@ -1,8 +1,8 @@ -import { useEffect } from 'react'; +import { useEffect, useState } from 'react'; import useSwr, { Key } from 'swr'; import useSWRMutation from 'swr/mutation'; -import { findItemIdInCart } from './cart-helpers'; -import { useEcomAPI } from './ecom-api-context-provider'; +import { findItemIdInCart } from '~/lib/utils'; +import { useEcomAPI } from './api-context'; import { AddToCartOptions } from './types'; export const useCartData = () => { @@ -38,11 +38,11 @@ export const useCartTotals = () => { return cartTotals; }; -type AddToCartArgs = { +interface AddToCartArgs { id: string; quantity: number; options?: AddToCartOptions; -}; +} export const useAddToCart = () => { const ecomApi = useEcomAPI(); @@ -55,7 +55,7 @@ export const useAddToCart = () => { if (itemInCart) { const updateCartItemQuantityResponse = await ecomApi.updateCartItemQuantity( itemInCart._id, - (itemInCart.quantity ?? 0) + arg.quantity + (itemInCart.quantity ?? 0) + arg.quantity, ); if (updateCartItemQuantityResponse.status === 'failure') { throw updateCartItemQuantityResponse.error; @@ -72,11 +72,15 @@ export const useAddToCart = () => { { revalidate: false, populateCache: true, - } + }, ); }; -type UpdateCartItemQuantityArgs = { id: string; quantity: number }; +interface UpdateCartItemQuantityArgs { + id: string; + quantity: number; +} + export const useUpdateCartItemQuantity = () => { const ecomApi = useEcomAPI(); return useSWRMutation( @@ -91,7 +95,7 @@ export const useUpdateCartItemQuantity = () => { { revalidate: false, populateCache: true, - } + }, ); }; @@ -109,6 +113,59 @@ export const useRemoveItemFromCart = () => { { revalidate: false, populateCache: true, - } + }, ); }; + +export const useCart = () => { + const ecomAPI = useEcomAPI(); + const [updatingCartItemIds, setUpdatingCartItems] = useState([]); + + const { data: cartData } = useCartData(); + const { data: cartTotals, isValidating: isCartTotalsValidating } = useCartTotals(); + + const { trigger: triggerUpdateItemQuantity } = useUpdateCartItemQuantity(); + const { trigger: triggerRemoveItem } = useRemoveItemFromCart(); + const { trigger: triggerAddToCart, isMutating: isAddingToCart } = useAddToCart(); + + const updateItemQuantity = ({ id, quantity }: { id: string; quantity: number }) => { + setUpdatingCartItems((prev) => [...prev, id]); + triggerUpdateItemQuantity({ id, quantity }).finally(() => { + setUpdatingCartItems((prev) => prev.filter((itemId) => itemId !== id)); + }); + }; + + const removeItem = (id: string) => { + setUpdatingCartItems((prev) => [...prev, id]); + triggerRemoveItem(id).finally(() => { + setUpdatingCartItems((prev) => prev.filter((itemId) => itemId !== id)); + }); + }; + + const addToCart = (productId: string, quantity: number, options?: AddToCartOptions) => + triggerAddToCart({ id: productId, quantity, options }); + + const checkout = async () => { + const checkoutResponse = await ecomAPI.checkout(); + + if (checkoutResponse.status === 'success') { + window.location.href = checkoutResponse.body.checkoutUrl; + } else { + alert('checkout is not configured'); + } + }; + + return { + cartData, + cartTotals, + updatingCartItemIds, + + isAddingToCart, + isCartTotalsUpdating: updatingCartItemIds.length > 0 || isCartTotalsValidating, + + updateItemQuantity, + removeItem, + addToCart, + checkout, + }; +}; diff --git a/lib/ecom/index.ts b/lib/ecom/index.ts new file mode 100644 index 0000000..5085b8d --- /dev/null +++ b/lib/ecom/index.ts @@ -0,0 +1,7 @@ +export * from './api-context'; +export * from './api'; +export * from './constants'; +export * from './hooks'; +export * from './product-filters'; +export * from './product-sorting'; +export * from './types'; diff --git a/lib/ecom/product-filters.ts b/lib/ecom/product-filters.ts new file mode 100644 index 0000000..b5cf9a6 --- /dev/null +++ b/lib/ecom/product-filters.ts @@ -0,0 +1,32 @@ +import { products } from '@wix/stores'; +import { IProductFilters, ProductFilter } from './types'; + +export function productFiltersFromSearchParams(params: URLSearchParams): IProductFilters { + const minPrice = params.get(ProductFilter.minPrice); + const maxPrice = params.get(ProductFilter.maxPrice); + const minPriceNumber = Number(minPrice); + const maxPriceNumber = Number(maxPrice); + return { + minPrice: minPrice && !Number.isNaN(minPriceNumber) ? minPriceNumber : undefined, + maxPrice: maxPrice && !Number.isNaN(maxPriceNumber) ? maxPriceNumber : undefined, + }; +} + +export function searchParamsFromProductFilters({ minPrice, maxPrice }: IProductFilters): URLSearchParams { + const params = new URLSearchParams(); + if (minPrice !== undefined) params.set(ProductFilter.minPrice, minPrice.toString()); + if (maxPrice !== undefined) params.set(ProductFilter.maxPrice, maxPrice.toString()); + return params; +} + +export function getFilteredProductsQuery(query: products.ProductsQueryBuilder, filters: IProductFilters) { + if (filters.minPrice) { + query = query.ge('priceData.price', filters.minPrice); + } + + if (filters.maxPrice) { + query = query.le('priceData.price', filters.maxPrice); + } + + return query; +} diff --git a/src/api/product-sorting.ts b/lib/ecom/product-sorting.ts similarity index 97% rename from src/api/product-sorting.ts rename to lib/ecom/product-sorting.ts index 4b5a35d..dbd502a 100644 --- a/src/api/product-sorting.ts +++ b/lib/ecom/product-sorting.ts @@ -14,7 +14,7 @@ export function productSortByFromSearchParams(searchParams: URLSearchParams): Pr export function getSortedProductsQuery( query: products.ProductsQueryBuilder, - sortBy: ProductSortBy + sortBy: ProductSortBy, ): products.ProductsQueryBuilder { switch (sortBy) { case ProductSortBy.newest: diff --git a/lib/ecom/session.ts b/lib/ecom/session.ts new file mode 100644 index 0000000..2fc5925 --- /dev/null +++ b/lib/ecom/session.ts @@ -0,0 +1,50 @@ +import { createCookieSessionStorage } from '@remix-run/node'; +import { Tokens } from '@wix/sdk'; +import { createApi, createWixClient, getWixClientId } from './api'; + +export type SessionData = { + wixEcomTokens: Tokens; + wixClientId: string; +}; + +const { getSession, commitSession } = createCookieSessionStorage({ + cookie: { + name: '__session', + maxAge: 3600 * 24 * 100, // 100 days + secure: true, + httpOnly: true, + sameSite: 'lax', + + secrets: [process.env.SESSION_COOKIE_SIGNING_SECRET ?? 's3cret1'], + }, +}); + +export { commitSession }; + +export async function initializeEcomSession(request: Request) { + const session = await getSession(request.headers.get('Cookie')); + + const sessionWixClientId = session.get('wixClientId'); + const wixClientId = getWixClientId(); + + // reset token if wix client id has changed + let wixEcomTokens = sessionWixClientId === wixClientId ? session.get('wixEcomTokens') : undefined; + let shouldUpdateSessionCookie = false; + + const client = createWixClient(wixEcomTokens); + if (wixEcomTokens === undefined) { + shouldUpdateSessionCookie = true; + wixEcomTokens = await client.auth.generateVisitorTokens(); + session.set('wixEcomTokens', wixEcomTokens); + session.set('wixClientId', wixClientId); + } + + return { wixEcomTokens, session, shouldUpdateSessionCookie }; +} + +export async function initializeEcomApi(request: Request) { + const { session } = await initializeEcomSession(request); + const tokens = session.get('wixEcomTokens'); + const client = createWixClient(tokens); + return createApi(client); +} diff --git a/src/api/types.ts b/lib/ecom/types.ts similarity index 89% rename from src/api/types.ts rename to lib/ecom/types.ts index 6d3866a..f6cf18c 100644 --- a/src/api/types.ts +++ b/lib/ecom/types.ts @@ -28,7 +28,7 @@ export enum EcomApiErrorCodes { GetOrderFailure = 'GetOrderFailure', } -export type EcomAPIError = { code: EcomApiErrorCodes; message?: string }; +export type EcomAPIError = { code: EcomApiErrorCodes; message: string }; export type EcomAPISuccessResponse = { status: 'success'; body: T }; export type EcomAPIFailureResponse = { status: 'failure'; error: EcomAPIError }; export type EcomAPIResponse = EcomAPISuccessResponse | EcomAPIFailureResponse; @@ -42,8 +42,6 @@ export type EcomSDKError = { }; }; }; -// type according to https://www.wix.com/velo/reference/wix-stores-backend/ecommerce-integration -export type AddToCartOptions = { variantId: string } | { options: Record }; export function isEcomSDKError(error: unknown): error is EcomSDKError { return ( @@ -81,20 +79,24 @@ export enum ProductSortBy { } interface GetProductsByCategoryOptions { + skip?: number; + limit?: number; filters?: IProductFilters; sortBy?: ProductSortBy; } +export type AddToCartOptions = { variantId: string } | { options: Record }; + export type EcomAPI = { + getProducts: (limit?: number) => Promise>; getProductsByCategory: ( categorySlug: string, - options?: GetProductsByCategoryOptions - ) => Promise< - EcomAPIResponse<{ - items: Product[]; - totalCount: number; - }> - >; + options?: GetProductsByCategoryOptions, + ) => Promise>; + getFeaturedProducts: ( + categorySlug: string, + count: number, + ) => Promise>; getPromotedProducts: () => Promise>; getProductBySlug: (slug: string) => Promise>; getCart: () => Promise>; diff --git a/lib/hooks/index.ts b/lib/hooks/index.ts new file mode 100644 index 0000000..cc1f54e --- /dev/null +++ b/lib/hooks/index.ts @@ -0,0 +1,3 @@ +export * from './use-applied-product-filters'; +export * from './use-product-details'; +export * from './use-search-params-optimistic'; diff --git a/src/api/product-filters.ts b/lib/hooks/use-applied-product-filters.ts similarity index 50% rename from src/api/product-filters.ts rename to lib/hooks/use-applied-product-filters.ts index 8494be7..06e5ef9 100644 --- a/src/api/product-filters.ts +++ b/lib/hooks/use-applied-product-filters.ts @@ -1,6 +1,6 @@ import { useCallback, useMemo } from 'react'; import { useSearchParams } from '@remix-run/react'; -import { IProductFilters, ProductFilter } from '~/api/types'; +import { ProductFilter, productFiltersFromSearchParams } from '~/lib/ecom'; export function useAppliedProductFilters() { const [searchParams, setSearchParams] = useSearchParams(); @@ -17,10 +17,10 @@ export function useAppliedProductFilters() { filters.forEach((filter) => params.delete(filter)); return params; }, - { preventScrollReset: true } + { preventScrollReset: true }, ); }, - [setSearchParams] + [setSearchParams], ); const clearAllFilters = useCallback(() => { @@ -34,21 +34,3 @@ export function useAppliedProductFilters() { clearAllFilters, }; } - -export function productFiltersFromSearchParams(params: URLSearchParams): IProductFilters { - const minPrice = params.get(ProductFilter.minPrice); - const maxPrice = params.get(ProductFilter.maxPrice); - const minPriceNumber = Number(minPrice); - const maxPriceNumber = Number(maxPrice); - return { - minPrice: minPrice && !Number.isNaN(minPriceNumber) ? minPriceNumber : undefined, - maxPrice: maxPrice && !Number.isNaN(maxPriceNumber) ? maxPriceNumber : undefined, - }; -} - -export function searchParamsFromProductFilters({ minPrice, maxPrice }: IProductFilters): URLSearchParams { - const params = new URLSearchParams(); - if (minPrice !== undefined) params.set(ProductFilter.minPrice, minPrice.toString()); - if (maxPrice !== undefined) params.set(ProductFilter.maxPrice, maxPrice.toString()); - return params; -} diff --git a/lib/hooks/use-product-details.ts b/lib/hooks/use-product-details.ts new file mode 100644 index 0000000..f5ada18 --- /dev/null +++ b/lib/hooks/use-product-details.ts @@ -0,0 +1,78 @@ +import { useCallback, useState } from 'react'; +import { products } from '@wix/stores'; +import type { SerializeFrom } from '@remix-run/node'; +import { AddToCartOptions, useCart } from '~/lib/ecom'; +import { + getMedia, + getPriceData, + getProductOptions, + getSelectedVariant, + getSKU, + isOutOfStock, + selectedChoicesToVariantChoices, +} from '~/lib/utils'; +import { useCartOpen } from '~/lib/cart-open-context'; + +export function useProductDetails(product: SerializeFrom) { + const cartOpener = useCartOpen(); + const { addToCart, isAddingToCart } = useCart(); + + const getInitialSelectedChoices = () => { + const result: Record = {}; + for (const option of product.productOptions ?? []) { + if (option.name) { + result[option.name] = option?.choices?.length === 1 ? option.choices[0] : undefined; + } + } + + return result; + }; + + const [selectedChoices, setSelectedChoices] = useState(() => getInitialSelectedChoices()); + const [quantity, setQuantity] = useState(1); + const [addToCartAttempted, setAddToCartAttempted] = useState(false); + + const outOfStock = isOutOfStock(product, selectedChoices); + const priceData = getPriceData(product, selectedChoices); + const sku = getSKU(product, selectedChoices); + const media = getMedia(product, selectedChoices); + const productOptions = getProductOptions(product, selectedChoices); + + const handleAddToCart = useCallback(() => { + setAddToCartAttempted(true); + + if (Object.values(selectedChoices).includes(undefined)) return; + + const selectedVariant = getSelectedVariant(product, selectedChoices); + + const options: AddToCartOptions = + product.manageVariants && selectedVariant?._id + ? { variantId: selectedVariant._id } + : { options: selectedChoicesToVariantChoices(product, selectedChoices) }; + + addToCart(product._id!, quantity, options).then(() => cartOpener.setIsOpen(true)); + }, [addToCart, cartOpener, product, quantity, selectedChoices]); + + const handleOptionChange = useCallback((optionName: string, newChoice: products.Choice) => { + setQuantity(1); + setSelectedChoices((prev) => ({ + ...prev, + [optionName]: newChoice, + })); + }, []); + + return { + outOfStock, + priceData, + sku, + media, + productOptions, + quantity, + selectedChoices, + isAddingToCart, + addToCartAttempted, + handleAddToCart, + handleOptionChange, + handleQuantityChange: setQuantity, + }; +} diff --git a/lib/hooks/use-product-sorting.ts b/lib/hooks/use-product-sorting.ts new file mode 100644 index 0000000..a34dab1 --- /dev/null +++ b/lib/hooks/use-product-sorting.ts @@ -0,0 +1,11 @@ +import { useSearchParams } from '@remix-run/react'; +import { useMemo } from 'react'; +import { productSortByFromSearchParams } from '../ecom'; + +export function useProductSorting() { + const [searchParams] = useSearchParams(); + const sorting = useMemo(() => productSortByFromSearchParams(searchParams), [searchParams]); + return { + sorting, + }; +} diff --git a/lib/hooks/use-products-page-results.ts b/lib/hooks/use-products-page-results.ts new file mode 100644 index 0000000..5d2ab08 --- /dev/null +++ b/lib/hooks/use-products-page-results.ts @@ -0,0 +1,84 @@ +import { SerializeFrom } from '@remix-run/node'; +import { useEffect, useRef, useState } from 'react'; +import { IProductFilters, Product, ProductSortBy, useEcomAPI } from '../ecom'; +import { getErrorMessage } from '../utils'; + +export interface ProductsPageResults { + items: (Product | SerializeFrom)[]; + totalCount: number; +} + +export interface UseProductsPageResultsArgs { + categorySlug: string; + filters: IProductFilters; + sorting: ProductSortBy; + resultsFromLoader: ProductsPageResults; +} + +/** + * Returns the list of products displayed on the products page. + * + * @param resultsFromLoader The initial batch of results obtained from the route loader, + * to avoid redundant fetching on the client side. + */ +export function useProductsPageResults({ + categorySlug, + filters, + sorting, + resultsFromLoader, +}: UseProductsPageResultsArgs) { + const [results, setResults] = useState(resultsFromLoader); + + const resultsFromLoaderVersionRef = useRef(0); + + // When the filters or category change, the loader fetches the first batch of new + // results without a full-page reload, and we need to reset the state of this hook. + useEffect(() => { + setResults(resultsFromLoader); + + return () => { + resultsFromLoaderVersionRef.current = resultsFromLoaderVersionRef.current + 1; + }; + }, [resultsFromLoader]); + + const [isLoadingMoreProducts, setIsLoadingMoreProducts] = useState(false); + + const api = useEcomAPI(); + const loadMoreProducts = async () => { + setIsLoadingMoreProducts(true); + + const resultsFromLoaderVersion = resultsFromLoaderVersionRef.current; + try { + const nextProductsResponse = await api.getProductsByCategory(categorySlug, { + filters, + sortBy: sorting, + skip: results.items.length, + }); + + if (nextProductsResponse.status === 'success') { + // ignore data if loading started for other loader data + if (resultsFromLoaderVersion !== resultsFromLoaderVersionRef.current) { + return; + } + + setResults((prev) => ({ + totalCount: nextProductsResponse.body.totalCount, + items: [...prev.items, ...nextProductsResponse.body.items], + })); + } else { + throw new Error('Failed to load products', { cause: nextProductsResponse.error }); + } + } catch (e) { + alert(getErrorMessage(e)); + } finally { + setIsLoadingMoreProducts(false); + } + }; + + return { + products: results.items, + totalProducts: results.totalCount, + isLoadingMoreProducts, + loadMoreProducts, + }; +} diff --git a/lib/hooks/use-search-params-optimistic.ts b/lib/hooks/use-search-params-optimistic.ts new file mode 100644 index 0000000..b1c611a --- /dev/null +++ b/lib/hooks/use-search-params-optimistic.ts @@ -0,0 +1,30 @@ +import { useCallback, useEffect, useState } from 'react'; +import type { NavigateOptions } from 'react-router'; +import { useNavigation, useSearchParams } from '@remix-run/react'; + +/** + * Similar to `useSearchParams` from Remix, but allows to update search params optimistically. + */ +export function useSearchParamsOptimistic() { + const navigation = useNavigation(); + const [searchParams, setSearchParams] = useSearchParams(); + + const [optimisticSearchParams, setOptimisticSearchParams] = useState(searchParams); + + const handleSearchParamsChange = useCallback( + (params: URLSearchParams | ((prevParams: URLSearchParams) => URLSearchParams), options?: NavigateOptions) => { + setOptimisticSearchParams(params); + setSearchParams(params, options); + }, + [setSearchParams], + ); + + // Synchronize search params on back/forward browser button clicks. + useEffect(() => { + if (navigation.state !== 'loading') { + setOptimisticSearchParams(searchParams); + } + }, [navigation.state, searchParams]); + + return [optimisticSearchParams, handleSearchParamsChange] as const; +} diff --git a/lib/route-loaders/index.ts b/lib/route-loaders/index.ts new file mode 100644 index 0000000..af4ded3 --- /dev/null +++ b/lib/route-loaders/index.ts @@ -0,0 +1,3 @@ +export * from './product-details'; +export * from './products'; +export * from './thank-you'; diff --git a/lib/route-loaders/product-details.ts b/lib/route-loaders/product-details.ts new file mode 100644 index 0000000..e8acb9f --- /dev/null +++ b/lib/route-loaders/product-details.ts @@ -0,0 +1,15 @@ +import { json } from '@remix-run/react'; +import { removeQueryStringFromUrl } from '~/lib/utils'; +import { EcomAPI } from '../ecom'; + +export async function getProductDetailsRouteData(api: EcomAPI, productSlug: string | undefined, url: string) { + if (!productSlug) throw new Error('Missing product slug'); + + const productResponse = await api.getProductBySlug(productSlug); + if (productResponse.status === 'failure') throw json(productResponse.error); + + return { + product: productResponse.body, + canonicalUrl: removeQueryStringFromUrl(url), + }; +} diff --git a/lib/route-loaders/products.ts b/lib/route-loaders/products.ts new file mode 100644 index 0000000..770b41d --- /dev/null +++ b/lib/route-loaders/products.ts @@ -0,0 +1,39 @@ +import { json } from '@remix-run/react'; +import { EcomAPI, productFiltersFromSearchParams, productSortByFromSearchParams } from '~/lib/ecom'; + +export async function getProductsRouteData(api: EcomAPI, categorySlug: string | undefined, url: string) { + if (!categorySlug) throw new Error('Missing category slug'); + + const searchParams = new URL(url).searchParams; + + const [currentCategoryResponse, categoryProductsResponse, allCategoriesResponse, productPriceBoundsResponse] = + await Promise.all([ + api.getCategoryBySlug(categorySlug), + api.getProductsByCategory(categorySlug, { + filters: productFiltersFromSearchParams(searchParams), + sortBy: productSortByFromSearchParams(searchParams), + }), + api.getAllCategories(), + api.getProductPriceBounds(categorySlug), + ]); + + if (currentCategoryResponse.status === 'failure') { + throw json(currentCategoryResponse.error); + } + if (allCategoriesResponse.status === 'failure') { + throw json(allCategoriesResponse.error); + } + if (categoryProductsResponse.status === 'failure') { + throw json(categoryProductsResponse.error); + } + if (productPriceBoundsResponse.status === 'failure') { + throw json(productPriceBoundsResponse.error); + } + + return { + category: currentCategoryResponse.body, + categoryProducts: categoryProductsResponse.body, + allCategories: allCategoriesResponse.body, + productPriceBounds: productPriceBoundsResponse.body, + }; +} diff --git a/lib/route-loaders/thank-you.ts b/lib/route-loaders/thank-you.ts new file mode 100644 index 0000000..dd3c782 --- /dev/null +++ b/lib/route-loaders/thank-you.ts @@ -0,0 +1,13 @@ +import { json } from '@remix-run/react'; +import { EcomAPI, OrderDetails } from '~/lib/ecom'; + +export async function getThankYouRouteData(api: EcomAPI, url: string): Promise<{ order?: OrderDetails }> { + const orderId = new URL(url).searchParams.get('orderId'); + // Show "Thank you" page even without order details. + if (!orderId) return { order: undefined }; + + const orderResponse = await api.getOrder(orderId); + if (orderResponse.status === 'failure') throw json(orderResponse.error); + + return { order: orderResponse.body }; +} diff --git a/src/api/cart-helpers.ts b/lib/utils/cart-utils.ts similarity index 53% rename from src/api/cart-helpers.ts rename to lib/utils/cart-utils.ts index 90b47cb..f12a1e3 100644 --- a/src/api/cart-helpers.ts +++ b/lib/utils/cart-utils.ts @@ -1,5 +1,6 @@ +import ecom from '@wix/ecom'; import deepEqual from 'fast-deep-equal'; -import { AddToCartOptions, Cart } from './types'; +import { AddToCartOptions, Cart, CartItem, CartTotals } from '~/lib/ecom'; export function findItemIdInCart({ lineItems }: Cart, catalogItemId: string, options?: AddToCartOptions) { return lineItems.find((it) => { @@ -15,3 +16,12 @@ export function findItemIdInCart({ lineItems }: Cart, catalogItemId: string, opt return deepEqual(lineItemOptions, options?.options); }); } + +export function calculateCartItemsCount(cart: ecom.cart.Cart): number { + return cart.lineItems?.reduce((total, item) => total + item.quantity!, 0) ?? 0; +} + +export const findLineItemPriceBreakdown = (item: CartItem, cartTotals: CartTotals | undefined) => { + return cartTotals?.calculatedLineItems.find((calculatedItem) => calculatedItem.lineItemId === item._id) + ?.pricesBreakdown; +}; diff --git a/src/utils/common.ts b/lib/utils/common.ts similarity index 89% rename from src/utils/common.ts rename to lib/utils/common.ts index 3d02962..79ede6f 100644 --- a/src/utils/common.ts +++ b/lib/utils/common.ts @@ -1,7 +1,26 @@ import { isRouteErrorResponse, Location } from '@remix-run/react'; -import { isEcomSDKError } from '~/api/types'; +import { isEcomSDKError } from '~/lib/ecom'; -export function getUrlOriginWithPath(url: string) { +/** + * It's important to add an appropriate role and a keyboard support + * for non-interactive HTML elements with click handlers, such as `
`. + * This function returns a basic set of attributes + * to make the clickable element focusable and handle keyboard events. + */ +export function getClickableElementAttributes(handler: () => void) { + return { + role: 'button', + tabIndex: 0, + onClick: handler, + onKeyUp: (event: React.KeyboardEvent) => { + if (event.code === 'Enter' || event.code === 'Space') { + handler(); + } + }, + }; +} + +export function removeQueryStringFromUrl(url: string) { const { origin, pathname } = new URL(url); return new URL(pathname, origin).toString(); } @@ -57,25 +76,6 @@ export function routeLocationToUrl(location: Location, origin: string): URL { return url; } -/** - * It's important to add an appropriate role and a keyboard support - * for non-interactive HTML elements with click handlers, such as `
`. - * This function returns a basic set of attributes - * to make the clickable element focusable and handle keyboard events. - */ -export function getClickableElementAttributes(handler: () => void) { - return { - role: 'button', - tabIndex: 0, - onClick: handler, - onKeyUp: (event: React.KeyboardEvent) => { - if (event.code === 'Enter' || event.code === 'Space') { - handler(); - } - }, - }; -} - /** * Merges multiple URLSearchParams instances into one URLSearchParams. * @@ -106,14 +106,3 @@ export function mergeUrlSearchParams(...paramsArr: URLSearchParams[]): URLSearch return result; } - -export function formatPrice(price: number, currency: string): string { - const formatter = Intl.NumberFormat('en-US', { - currency, - style: 'currency', - currencyDisplay: 'narrowSymbol', - minimumFractionDigits: 2, - }); - - return formatter.format(price); -} diff --git a/src/utils/index.ts b/lib/utils/index.ts similarity index 100% rename from src/utils/index.ts rename to lib/utils/index.ts index 4927c22..ba702c0 100644 --- a/src/utils/index.ts +++ b/lib/utils/index.ts @@ -1,3 +1,3 @@ +export * from './cart-utils'; export * from './common'; export * from './product-utils'; -export * from './cart-utils'; diff --git a/src/utils/product-utils.ts b/lib/utils/product-utils.ts similarity index 91% rename from src/utils/product-utils.ts rename to lib/utils/product-utils.ts index b7f8b0a..448f72c 100644 --- a/src/utils/product-utils.ts +++ b/lib/utils/product-utils.ts @@ -1,11 +1,11 @@ import { SerializeFrom } from '@remix-run/node'; import { products as wixStoresProducts } from '@wix/stores'; import deepEqual from 'fast-deep-equal'; -import { Product } from '~/api/types'; +import { Product } from '~/lib/ecom'; export function isOutOfStock( product: Product | SerializeFrom, - selectedChoices: Record = {} + selectedChoices: Record = {}, ): boolean { if (product.manageVariants) { const selectedVariant = getSelectedVariant(product, selectedChoices); @@ -19,7 +19,7 @@ export function isOutOfStock( export function getPriceData( product: Product | SerializeFrom, - selectedChoices: Record = {} + selectedChoices: Record = {}, ): Product['priceData'] { if (product.manageVariants) { const selectedVariant = getSelectedVariant(product, selectedChoices); @@ -31,7 +31,7 @@ export function getPriceData( export function getSKU( product: Product | SerializeFrom, - selectedChoices: Record + selectedChoices: Record, ): Product['sku'] { if (product.manageVariants) { const selectedVariant = getSelectedVariant(product, selectedChoices); @@ -43,7 +43,7 @@ export function getSKU( export function getSelectedVariant( product: Product | SerializeFrom, - selectedChoices: Record + selectedChoices: Record, ): wixStoresProducts.Variant | undefined { const selectedChoiceValues = selectedChoicesToVariantChoices(product, selectedChoices); return product.variants?.find((variant) => deepEqual(variant.choices, selectedChoiceValues)); @@ -51,7 +51,7 @@ export function getSelectedVariant( function getMatchingVariants( product: Product | SerializeFrom, - selectedChoices: Record + selectedChoices: Record, ): wixStoresProducts.Variant[] { const selectedChoiceValues = selectedChoicesToVariantChoices(product, selectedChoices); @@ -66,14 +66,14 @@ function getMatchingVariants( deepEqual(variant.choices, { ...variant.choices, ...selectedChoiceValues, - }) + }), ) ?? [] ); } export const getChoiceValue = ( optionType: wixStoresProducts.OptionType, - choice: wixStoresProducts.Choice + choice: wixStoresProducts.Choice, ): string | undefined => { // for color options, `description` field contains color name and `value` field contains hex color representation // e-commerce SDK for some actions (adding to cart for example) expects color name as selected color value @@ -85,7 +85,7 @@ export const getChoiceValue = ( // the name 'variant choices' is used because the same data structure is used for the Variant['choices'] property provided by SDK export const selectedChoicesToVariantChoices = ( product: Product | SerializeFrom, - selectedChoices: Record = {} + selectedChoices: Record = {}, ): Record => { const result: Record = {}; for (const [optionName, choice] of Object.entries(selectedChoices)) { @@ -105,7 +105,7 @@ export const selectedChoicesToVariantChoices = ( export function getMedia( product: Product | SerializeFrom, - selectedChoices: Record = {} + selectedChoices: Record = {}, ): wixStoresProducts.Media | undefined { const selectedChoiceWithMedia = Object.values(selectedChoices).find((c) => c?.media?.mainMedia !== undefined); return selectedChoiceWithMedia?.media ?? product.media; @@ -117,7 +117,7 @@ export function getMedia( */ export function getProductOptions( product: Product | SerializeFrom, - selectedChoices: Record + selectedChoices: Record, ): wixStoresProducts.ProductOption[] | undefined { return product.productOptions?.map((option) => { return { @@ -134,7 +134,7 @@ function getChoiceAvailabilityInfo( choice: wixStoresProducts.Choice, option: wixStoresProducts.ProductOption, selectedChoices: Record, - product: Product | SerializeFrom + product: Product | SerializeFrom, ): Pick { if (!product.manageVariants || !option.name || !option.optionType) { return { @@ -154,3 +154,14 @@ function getChoiceAvailabilityInfo( inStock: matchingVariants.some((variant) => variant.variant?.visible && variant.stock?.inStock), }; } + +export function formatPrice(price: number, currency: string): string { + const formatter = Intl.NumberFormat('en-US', { + currency, + style: 'currency', + currencyDisplay: 'narrowSymbol', + minimumFractionDigits: 2, + }); + + return formatter.format(price); +} diff --git a/package-lock.json b/package-lock.json index 774007f..7afe77e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,57 +1,57 @@ { - "name": "e-commerce-remix", - "version": "1.0.0", + "name": "e-commerce-reclaim", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "e-commerce-remix", - "version": "1.0.0", + "name": "e-commerce-reclaim", + "version": "0.1.0", "dependencies": { + "@emotion/is-prop-valid": "^1.3.1", "@netlify/functions": "^2.8.2", "@netlify/remix-adapter": "^2.5.1", "@radix-ui/react-icons": "^1.3.0", - "@remix-run/node": "^2.12.1", - "@remix-run/react": "^2.12.1", - "@remix-run/serve": "^2.12.1", - "@wix/ecom": "^1.0.762", - "@wix/redirects": "^1.0.57", - "@wix/sdk": "^1.13.0", - "@wix/stores": "^1.0.239", + "@remix-run/node": "^2.13.1", + "@remix-run/react": "^2.13.1", + "@remix-run/serve": "^2.13.1", + "@wix/ecom": "^1.0.787", + "@wix/members": "^1.0.110", + "@wix/redirects": "^1.0.58", + "@wix/sdk": "^1.14.2", + "@wix/stores": "^1.0.271", + "@wix/stores_products": "^1.0.76", "classnames": "^2.5.1", "fast-deep-equal": "^3.1.3", - "framer-motion": "^11.11.1", + "framer-motion": "^11.11.10", "isbot": "^5.1.17", - "js-cookie": "^3.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", "react-remove-scroll": "^2.6.0", - "react-router-dom": "^6.26.2", "remix-utils": "^7.7.0", "swr": "^2.2.5" }, "devDependencies": { "@faker-js/faker": "^9.0.3", - "@remix-run/dev": "^2.12.1", - "@remix-run/testing": "^2.12.1", - "@types/js-cookie": "^3.0.6", - "@types/node": "20", - "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^8.8.0", - "@wixc3/define-remix-app": "^4.3.3", + "@remix-run/dev": "^2.13.1", + "@remix-run/testing": "^2.13.1", + "@types/lodash.debounce": "^4.0.9", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@typescript-eslint/eslint-plugin": "^8.12.1", + "@wixc3/define-remix-app": "^4.5.1", "@wixc3/react-board": "^4.3.3", - "eslint": "^8.56.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.1", - "eslint-plugin-react-hooks": "^4.6.2", - "sass": "^1.79.4", - "typescript": "^5.6.2", - "vite": "^5.4.8", - "vite-plugin-svgr": "^4.2.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "prettier": "^3.3.3", + "sass": "~1.79.6", + "typescript": "~5.6.3", + "vite": "^5.4.10", "vite-tsconfig-paths": "^5.0.1" }, "engines": { @@ -63,7 +63,6 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -73,13 +72,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", + "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -87,32 +86,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", - "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", + "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", - "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -132,19 +129,18 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -154,27 +150,25 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -188,24 +182,22 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", - "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/traverse": "^7.25.7", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", "semver": "^6.3.1" }, "engines": { @@ -220,50 +212,45 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", - "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", - "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", - "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -273,38 +260,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", - "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", - "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.7", - "@babel/helper-optimise-call-expression": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -314,179 +298,78 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", - "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", - "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", - "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", - "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT", - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", + "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.26.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -496,13 +379,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz", - "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", + "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -512,13 +394,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz", - "integrity": "sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -528,13 +409,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz", - "integrity": "sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -544,15 +424,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", - "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -562,17 +441,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz", - "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", + "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/plugin-syntax-typescript": "^7.25.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -582,17 +460,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz", - "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-syntax-jsx": "^7.25.7", - "@babel/plugin-transform-modules-commonjs": "^7.25.7", - "@babel/plugin-transform-typescript": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -602,10 +479,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", - "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", - "license": "MIT", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -614,32 +490,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -648,15 +522,13 @@ } }, "node_modules/@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -666,8 +538,20 @@ "version": "0.9.2", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", - "dev": true, - "license": "MIT" + "dev": true + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", @@ -677,7 +561,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "aix" @@ -694,7 +577,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -711,7 +593,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -728,7 +609,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -745,7 +625,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -762,7 +641,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -779,7 +657,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -796,7 +673,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -813,7 +689,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -830,7 +705,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -847,7 +721,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -864,7 +737,6 @@ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -881,7 +753,6 @@ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -898,7 +769,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -915,7 +785,6 @@ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -932,7 +801,6 @@ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -949,7 +817,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -966,7 +833,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -983,7 +849,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -1000,7 +865,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -1017,7 +881,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -1034,7 +897,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -1051,7 +913,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -1061,27 +922,28 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -1091,7 +953,6 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1115,7 +976,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1126,7 +986,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1142,7 +1001,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1155,7 +1013,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -1168,15 +1025,14 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@faker-js/faker": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.3.tgz", - "integrity": "sha512-lWrrK4QNlFSU+13PL9jMbMKLJYXDFu3tQfayBsMXX7KL/GiQeqfB1CzHkqD5UHBUtPAuPo6XwGbMFNdVMZObRA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.1.0.tgz", + "integrity": "sha512-GJvX9iM9PBtKScJVlXQ0tWpihK3i0pha/XAhzQa1hPK/ILLa1Wq3I63Ij7lRtqTwmdTxRCyrUhLC5Sly9SLbug==", "dev": true, "funding": [ { @@ -1184,7 +1040,6 @@ "url": "https://opencollective.com/fakerjs" } ], - "license": "MIT", "engines": { "node": ">=18.0.0", "npm": ">=9.0.0" @@ -1194,8 +1049,7 @@ "version": "9.4.1", "resolved": "https://registry.npmjs.org/@file-services/types/-/types-9.4.1.tgz", "integrity": "sha512-poik5y4EU73vkSjNR86bG5yrPtMyN7CJXYS5TzoeBRbhA6Z3+7+JHBOsdDGDg4wSAi48YFdGXHjFxASI7olDDg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", @@ -1203,7 +1057,6 @@ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -1218,7 +1071,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1229,7 +1081,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1242,7 +1093,6 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1256,15 +1106,13 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1282,7 +1130,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -1295,7 +1142,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1311,7 +1157,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1326,7 +1171,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1336,7 +1180,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1345,24 +1188,22 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jspm/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.0.1.tgz", - "integrity": "sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.1.0.tgz", + "integrity": "sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg==", "dev": true }, "node_modules/@mdx-js/mdx": { @@ -1370,7 +1211,6 @@ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz", "integrity": "sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/mdx": "^2.0.0", @@ -1399,7 +1239,6 @@ "version": "2.8.2", "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.2.tgz", "integrity": "sha512-DeoAQh8LuNPvBE4qsKlezjKj0PyXDryOFJfJKo3Z1qZLKzQ21sT314KQKPVjfvw6knqijj+IO+0kHXy/TJiqNA==", - "license": "MIT", "dependencies": { "@netlify/serverless-functions-api": "1.26.1" }, @@ -1411,7 +1250,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz", "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==", - "license": "MIT", "engines": { "node": "^14.16.0 || >=16.0.0" } @@ -1420,7 +1258,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/@netlify/remix-adapter/-/remix-adapter-2.5.1.tgz", "integrity": "sha512-VGMLYWqelmcYTpqlyjqgw52xXSQOWe8ApHh4smo/VmaO1TqstFr2VBJN9iSZsXdRvU0Gx9im6r6uziXRnis2sQ==", - "license": "MIT", "dependencies": { "@remix-run/node": "^2.12.0", "isbot": "^5.0.0" @@ -1442,7 +1279,6 @@ "version": "1.26.1", "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.26.1.tgz", "integrity": "sha512-q3L9i3HoNfz0SGpTIS4zTcKBbRkxzCRpd169eyiTuk3IwcPC3/85mzLHranlKo2b+HYT0gu37YxGB45aD8A3Tw==", - "license": "MIT", "dependencies": { "@netlify/node-cookies": "^0.1.0", "urlpattern-polyfill": "8.0.2" @@ -1456,7 +1292,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1470,7 +1305,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -1480,7 +1314,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1494,7 +1327,6 @@ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.4.0" } @@ -1504,7 +1336,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", "dev": true, - "license": "ISC", "dependencies": { "semver": "^7.3.5" }, @@ -1517,7 +1348,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", @@ -1537,7 +1367,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } @@ -1547,7 +1376,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-4.0.1.tgz", "integrity": "sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/git": "^4.1.0", "glob": "^10.2.2", @@ -1566,7 +1394,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, - "license": "ISC", "dependencies": { "which": "^3.0.0" }, @@ -1574,208 +1401,488 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", - "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", - "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x" - } - }, - "node_modules/@remix-run/dev": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-2.12.1.tgz", - "integrity": "sha512-XjvpQZDvPL5L2NPUL9suwn0eo/WCHSewivpEEm2G1Ke06xL7LenIc8HzwkgsJqDrfvxePAFPj+RCcrygQvtMzA==", + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/core": "^7.21.8", - "@babel/generator": "^7.21.5", - "@babel/parser": "^7.21.8", - "@babel/plugin-syntax-decorators": "^7.22.10", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/preset-typescript": "^7.21.5", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.22.5", - "@mdx-js/mdx": "^2.3.0", - "@npmcli/package-json": "^4.0.1", - "@remix-run/node": "2.12.1", - "@remix-run/router": "1.19.2", - "@remix-run/server-runtime": "2.12.1", - "@types/mdx": "^2.0.5", - "@vanilla-extract/integration": "^6.2.0", - "arg": "^5.0.1", - "cacache": "^17.1.3", - "chalk": "^4.1.2", - "chokidar": "^3.5.1", - "cross-spawn": "^7.0.3", - "dotenv": "^16.0.0", - "es-module-lexer": "^1.3.1", - "esbuild": "0.17.6", - "esbuild-plugins-node-modules-polyfill": "^1.6.0", - "execa": "5.1.1", - "exit-hook": "2.2.1", - "express": "^4.19.2", - "fs-extra": "^10.0.0", - "get-port": "^5.1.1", - "gunzip-maybe": "^1.4.2", - "jsesc": "3.0.2", - "json5": "^2.2.2", - "lodash": "^4.17.21", - "lodash.debounce": "^4.0.8", - "minimatch": "^9.0.0", - "ora": "^5.4.1", - "picocolors": "^1.0.0", - "picomatch": "^2.3.1", - "pidtree": "^0.6.0", - "postcss": "^8.4.19", - "postcss-discard-duplicates": "^5.1.0", - "postcss-load-config": "^4.0.1", - "postcss-modules": "^6.0.0", - "prettier": "^2.7.1", - "pretty-ms": "^7.0.1", - "react-refresh": "^0.14.0", - "remark-frontmatter": "4.0.1", - "remark-mdx-frontmatter": "^1.0.1", - "semver": "^7.3.7", - "set-cookie-parser": "^2.6.0", - "tar-fs": "^2.1.1", - "tsconfig-paths": "^4.0.0", - "ws": "^7.4.5" - }, - "bin": { - "remix": "dist/cli.js" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@remix-run/react": "^2.12.1", - "@remix-run/serve": "^2.12.1", - "typescript": "^5.1.0", - "vite": "^5.1.0", - "wrangler": "^3.28.2" + "node": ">= 10.0.0" }, - "peerDependenciesMeta": { - "@remix-run/serve": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vite": { - "optional": true - }, - "wrangler": { - "optional": true - } - } - }, - "node_modules/@remix-run/express": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-2.12.1.tgz", - "integrity": "sha512-CW5coZXxk8251Tr0Fh9jmhda5Xt/BWfnUyD7jxth30irpWAEQcsaBu4pSDKuRvnJ8j2o7087EBnUn7oCB4ofNg==", - "license": "MIT", - "dependencies": { - "@remix-run/node": "2.12.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "express": "^4.19.2", - "typescript": "^5.1.0" + "node": ">= 10.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@remix-run/node": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.12.1.tgz", - "integrity": "sha512-d+IHvEEU3qziporgpEyKFvKdmNaDu+a/9pIxBkNKVWdKx2JR0VRFIaUxxpxISWtkJcoNuERhW2xYa6YvtFp4ig==", - "license": "MIT", - "dependencies": { - "@remix-run/server-runtime": "2.12.1", - "@remix-run/web-fetch": "^4.4.2", - "@web3-storage/multipart-parser": "^1.0.0", - "cookie-signature": "^1.1.0", - "source-map-support": "^0.5.21", - "stream-slice": "^0.1.2", - "undici": "^6.11.1" - }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "typescript": "^5.1.0" + "node": ">= 10.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@remix-run/react": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-2.12.1.tgz", - "integrity": "sha512-+AFR6oCcAndlUZvr42dNrY2zprhf5Yo5Wl7TBocO3YPmwLkdrzJz+e8Sezk25qgHBB9cCTigt+yyliXmsZ1mpg==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.19.2", - "@remix-run/server-runtime": "2.12.1", - "react-router": "6.26.2", - "react-router-dom": "6.26.2", - "turbo-stream": "2.4.0" - }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0", - "typescript": "^5.1.0" + "node": ">= 10.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@remix-run/router": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", - "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@remix-run/serve": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/serve/-/serve-2.12.1.tgz", - "integrity": "sha512-J9BL5t2Alz45G/17vjD7YRuiRM+V4rJi63Kj+bmewuKWNXDEyij2LqgZJpkoHpkNsQFGiaBMNGc8bPd8RRmrxA==", - "license": "MIT", - "dependencies": { - "@remix-run/express": "2.12.1", - "@remix-run/node": "2.12.1", - "chokidar": "^3.5.3", + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@remix-run/dev": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-2.13.1.tgz", + "integrity": "sha512-7+06Dail6zMyRlRvgrZ4cmQjs2gUb+M24iP4jbmql+0B7VAAPwzCRU0x+BF5z8GSef13kDrH3iXv/BQ2O2yOgw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.8", + "@babel/generator": "^7.21.5", + "@babel/parser": "^7.21.8", + "@babel/plugin-syntax-decorators": "^7.22.10", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/preset-typescript": "^7.21.5", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.22.5", + "@mdx-js/mdx": "^2.3.0", + "@npmcli/package-json": "^4.0.1", + "@remix-run/node": "2.13.1", + "@remix-run/router": "1.20.0", + "@remix-run/server-runtime": "2.13.1", + "@types/mdx": "^2.0.5", + "@vanilla-extract/integration": "^6.2.0", + "arg": "^5.0.1", + "cacache": "^17.1.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.1", + "cross-spawn": "^7.0.3", + "dotenv": "^16.0.0", + "es-module-lexer": "^1.3.1", + "esbuild": "0.17.6", + "esbuild-plugins-node-modules-polyfill": "^1.6.0", + "execa": "5.1.1", + "exit-hook": "2.2.1", + "express": "^4.20.0", + "fs-extra": "^10.0.0", + "get-port": "^5.1.1", + "gunzip-maybe": "^1.4.2", + "jsesc": "3.0.2", + "json5": "^2.2.2", + "lodash": "^4.17.21", + "lodash.debounce": "^4.0.8", + "minimatch": "^9.0.0", + "ora": "^5.4.1", + "picocolors": "^1.0.0", + "picomatch": "^2.3.1", + "pidtree": "^0.6.0", + "postcss": "^8.4.19", + "postcss-discard-duplicates": "^5.1.0", + "postcss-load-config": "^4.0.1", + "postcss-modules": "^6.0.0", + "prettier": "^2.7.1", + "pretty-ms": "^7.0.1", + "react-refresh": "^0.14.0", + "remark-frontmatter": "4.0.1", + "remark-mdx-frontmatter": "^1.0.1", + "semver": "^7.3.7", + "set-cookie-parser": "^2.6.0", + "tar-fs": "^2.1.1", + "tsconfig-paths": "^4.0.0", + "ws": "^7.5.10" + }, + "bin": { + "remix": "dist/cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@remix-run/react": "^2.13.1", + "@remix-run/serve": "^2.13.1", + "typescript": "^5.1.0", + "vite": "^5.1.0", + "wrangler": "^3.28.2" + }, + "peerDependenciesMeta": { + "@remix-run/serve": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vite": { + "optional": true + }, + "wrangler": { + "optional": true + } + } + }, + "node_modules/@remix-run/dev/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@remix-run/express": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-2.13.1.tgz", + "integrity": "sha512-yl3/BSJ8eyvwUyWCLDq3NlS81mZFll9hnADNuSCCBrQgkMhEx7stk5JUmWdvmcmGqHw04Ahkq07ZqJeD4F1FMA==", + "dependencies": { + "@remix-run/node": "2.13.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "express": "^4.20.0", + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/node": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.13.1.tgz", + "integrity": "sha512-2ly7bENj2n2FNBdEN60ZEbNCs5dAOex/QJoo6EZ8RNFfUQxVKAZkMwfQ4ETV2SLWDgkRLj3Jo5n/dx7O2ZGhGw==", + "dependencies": { + "@remix-run/server-runtime": "2.13.1", + "@remix-run/web-fetch": "^4.4.2", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie-signature": "^1.1.0", + "source-map-support": "^0.5.21", + "stream-slice": "^0.1.2", + "undici": "^6.11.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/react": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-2.13.1.tgz", + "integrity": "sha512-kZevCoKMz0ZDOOzTnG95yfM7M9ju38FkWNY1wtxCy+NnUJYrmTerGQtiBsJgMzYD6i29+w4EwoQsdqys7DmMSg==", + "dependencies": { + "@remix-run/router": "1.20.0", + "@remix-run/server-runtime": "2.13.1", + "react-router": "6.27.0", + "react-router-dom": "6.27.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0", + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/router": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@remix-run/serve": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/serve/-/serve-2.13.1.tgz", + "integrity": "sha512-lKCU1ZnHaGknRAYII5PQOGch9xzK3Q68mcyN8clN6WoKQTn5fvWVE1nEDd1L7vyt5LPVI2b7HNQtVMow1g1vHg==", + "dependencies": { + "@remix-run/express": "2.13.1", + "@remix-run/node": "2.13.1", + "chokidar": "^3.5.3", "compression": "^1.7.4", - "express": "^4.19.2", + "express": "^4.20.0", "get-port": "5.1.1", "morgan": "^1.10.0", "source-map-support": "^0.5.21" @@ -1788,12 +1895,11 @@ } }, "node_modules/@remix-run/server-runtime": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.12.1.tgz", - "integrity": "sha512-iuj9ju34f0LztPpd5dVuTXgt4x/MJeRsBiLuEx02nDSMGoNCAIx2LdeNYvE+XXdsf1Ht2NMlpRU+HBPCz3QLZg==", - "license": "MIT", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.13.1.tgz", + "integrity": "sha512-2DfBPRcHKVzE4bCNsNkKB50BhCCKF73x+jiS836OyxSIAL+x0tguV2AEjmGXefEXc5AGGzoxkus0AUUEYa29Vg==", "dependencies": { - "@remix-run/router": "1.19.2", + "@remix-run/router": "1.20.0", "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.6.0", @@ -1814,16 +1920,15 @@ } }, "node_modules/@remix-run/testing": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@remix-run/testing/-/testing-2.12.1.tgz", - "integrity": "sha512-H6lCbrk94BM4vhePFc4QEuWn+fgPugwc74sv0sziPMLgxOdFwocpi/dy2zCUGOW371Nz2vtO0MT06XLggXi3VQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/@remix-run/testing/-/testing-2.13.1.tgz", + "integrity": "sha512-vbvJx0HS71g3cUzlm+aZ5v2Lf5FbltP0Spv6MsyDMHSWNYV+ciO4w4jTrVuykDZx8seZRbG40M9xDEJuDplegw==", "dev": true, - "license": "MIT", "dependencies": { - "@remix-run/node": "2.12.1", - "@remix-run/react": "2.12.1", - "@remix-run/router": "1.19.2", - "react-router-dom": "6.26.2" + "@remix-run/node": "2.13.1", + "@remix-run/react": "2.13.1", + "@remix-run/router": "1.20.0", + "react-router-dom": "6.27.0" }, "engines": { "node": ">=18.0.0" @@ -1842,7 +1947,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@remix-run/web-blob/-/web-blob-3.1.0.tgz", "integrity": "sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==", - "license": "MIT", "dependencies": { "@remix-run/web-stream": "^1.1.0", "web-encoding": "1.1.5" @@ -1852,7 +1956,6 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/@remix-run/web-fetch/-/web-fetch-4.4.2.tgz", "integrity": "sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==", - "license": "MIT", "dependencies": { "@remix-run/web-blob": "^3.1.0", "@remix-run/web-file": "^3.1.0", @@ -1871,7 +1974,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@remix-run/web-file/-/web-file-3.1.0.tgz", "integrity": "sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==", - "license": "MIT", "dependencies": { "@remix-run/web-blob": "^3.1.0" } @@ -1880,7 +1982,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@remix-run/web-form-data/-/web-form-data-3.1.0.tgz", "integrity": "sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==", - "license": "MIT", "dependencies": { "web-encoding": "1.1.5" } @@ -1889,260 +1990,239 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@remix-run/web-stream/-/web-stream-1.1.0.tgz", "integrity": "sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==", - "license": "MIT", "dependencies": { "web-streams-polyfill": "^3.1.1" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", - "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", - "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.3.tgz", + "integrity": "sha512-ufb2CH2KfBWPJok95frEZZ82LtDl0A6QKTa8MoM+cWwDZvVGl5/jNb79pIhRvAalUu+7LD91VYR0nwRD799HkQ==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", - "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.3.tgz", + "integrity": "sha512-iAHpft/eQk9vkWIV5t22V77d90CRofgR2006UiCjHcHJFVI1E0oBkQIAbz+pLtthFw3hWEmVB4ilxGyBf48i2Q==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", - "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.3.tgz", + "integrity": "sha512-QPW2YmkWLlvqmOa2OwrfqLJqkHm7kJCIMq9kOz40Zo9Ipi40kf9ONG5Sz76zszrmIZZ4hgRIkez69YnTHgEz1w==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", - "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.3.tgz", + "integrity": "sha512-KO0pN5x3+uZm1ZXeIfDqwcvnQ9UEGN8JX5ufhmgH5Lz4ujjZMAnxQygZAVGemFWn+ZZC0FQopruV4lqmGMshow==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.3.tgz", + "integrity": "sha512-CsC+ZdIiZCZbBI+aRlWpYJMSWvVssPuWqrDy/zi9YfnatKKSLFCe6fjna1grHuo/nVaHG+kiglpRhyBQYRTK4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.3.tgz", + "integrity": "sha512-F0nqiLThcfKvRQhZEzMIXOQG4EeX61im61VYL1jo4eBxv4aZRmpin6crnBJQ/nWnCsjH5F6J3W6Stdm0mBNqBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", - "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.3.tgz", + "integrity": "sha512-KRSFHyE/RdxQ1CSeOIBVIAxStFC/hnBgVcaiCkQaVC+EYDtTe4X7z5tBkFyRoBgUGtB6Xg6t9t2kulnX6wJc6A==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", - "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.3.tgz", + "integrity": "sha512-h6Q8MT+e05zP5BxEKz0vi0DhthLdrNEnspdLzkoFqGwnmOzakEHSlXfVyA4HJ322QtFy7biUAVFPvIDEDQa6rw==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", - "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.3.tgz", + "integrity": "sha512-fKElSyXhXIJ9pqiYRqisfirIo2Z5pTTve5K438URf08fsypXrEkVmShkSfM8GJ1aUyvjakT+fn2W7Czlpd/0FQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", - "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.3.tgz", + "integrity": "sha512-YlddZSUk8G0px9/+V9PVilVDC6ydMz7WquxozToozSnfFK6wa6ne1ATUjUvjin09jp34p84milxlY5ikueoenw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", - "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.3.tgz", + "integrity": "sha512-yNaWw+GAO8JjVx3s3cMeG5Esz1cKVzz8PkTJSfYzE5u7A+NvGmbVFEHP+BikTIyYWuz0+DX9kaA3pH9Sqxp69g==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", - "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.3.tgz", + "integrity": "sha512-lWKNQfsbpv14ZCtM/HkjCTm4oWTKTfxPmr7iPfp3AHSqyoTz5AgLemYkWLwOBWc+XxBbrU9SCokZP0WlBZM9lA==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", - "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.3.tgz", + "integrity": "sha512-HoojGXTC2CgCcq0Woc/dn12wQUlkNyfH0I1ABK4Ni9YXyFQa86Fkt2Q0nqgLfbhkyfQ6003i3qQk9pLh/SpAYw==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", - "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.3.tgz", + "integrity": "sha512-mnEOh4iE4USSccBOtcrjF5nj+5/zm6NcNhbSEfR3Ot0pxBwvEn5QVUXcuOwwPkapDtGZ6pT02xLoPaNv06w7KQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", - "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.3.tgz", + "integrity": "sha512-rMTzawBPimBQkG9NKpNHvquIUTQPzrnPxPbCY1Xt+mFkW7pshvyIS5kYgcf74goxXOQk0CP3EoOC1zcEezKXhw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", - "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.3.tgz", + "integrity": "sha512-2lg1CE305xNvnH3SyiKwPVsTVLCg4TmNCF1z7PSHX2uZY2VbUpdkgAllVoISD7JO7zu+YynpWNSKAtOrX3AiuA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", - "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.3.tgz", + "integrity": "sha512-9SjYp1sPyxJsPWuhOCX6F4jUMXGbVVd5obVpoVEi8ClZqo52ViZewA6eFz85y8ezuOA+uJMP5A5zo6Oz4S5rVQ==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", - "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.3.tgz", + "integrity": "sha512-HGZgRFFYrMrP3TJlq58nR1xy8zHKId25vhmm5S9jETEfDf6xybPxsavFTJaufe2zgOGYJBskGlj49CwtEuFhWQ==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -2152,246 +2232,18 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@rushstack/eslint-patch": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", - "license": "MIT" - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==" }, "node_modules/@types/acorn": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -2399,15 +2251,13 @@ "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "license": "MIT" + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -2416,15 +2266,13 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "devOptional": true, - "license": "MIT" + "devOptional": true }, "node_modules/@types/estree-jsx": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -2434,31 +2282,36 @@ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2" } }, - "node_modules/@types/js-cookie": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", - "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "dev": true + }, + "node_modules/@types/lodash.debounce": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz", + "integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==", "dev": true, - "license": "MIT" + "dependencies": { + "@types/lodash": "*" + } }, "node_modules/@types/mdast": { "version": "3.0.15", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2" } @@ -2467,50 +2320,44 @@ "version": "2.0.13", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/node": { - "version": "20.16.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", - "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", + "version": "22.8.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.4.tgz", + "integrity": "sha512-SpNNxkftTJOPk0oN+y2bIqurEXHTA2AOZ3EJDDKeJ5VzkvvORSvmQXGQarcOzWV1ac7DCaPBEdMDxBsM+d8jWw==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.19.8" } }, "node_modules/@types/prop-types": { "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "devOptional": true, - "license": "MIT" + "devOptional": true }, "node_modules/@types/react": { - "version": "18.3.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", - "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/react": "*" } @@ -2519,21 +2366,19 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.0.tgz", - "integrity": "sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/type-utils": "8.8.0", - "@typescript-eslint/utils": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2557,17 +2402,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.0.tgz", - "integrity": "sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, - "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/typescript-estree": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" }, "engines": { @@ -2587,14 +2431,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.0.tgz", - "integrity": "sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2605,14 +2448,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.0.tgz", - "integrity": "sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.8.0", - "@typescript-eslint/utils": "8.8.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2630,11 +2472,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.0.tgz", - "integrity": "sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -2644,14 +2485,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.0.tgz", - "integrity": "sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/visitor-keys": "8.8.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2673,16 +2513,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.0.tgz", - "integrity": "sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.8.0", - "@typescript-eslint/types": "8.8.0", - "@typescript-eslint/typescript-estree": "8.8.0" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2696,13 +2535,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.0.tgz", - "integrity": "sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.8.0", + "@typescript-eslint/types": "8.12.2", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2717,15 +2555,13 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@vanilla-extract/babel-plugin-debug-ids": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@vanilla-extract/babel-plugin-debug-ids/-/babel-plugin-debug-ids-1.1.0.tgz", "integrity": "sha512-Zy9bKjaL2P5zsrFYQJ8IjWGlFODmZrpvFmjFE0Zv8om55Pz1JtpJtL6DvlxlWUxbVaP1HKCqsmEfFOZN8fX/ZQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.23.9" } @@ -2735,7 +2571,6 @@ "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.16.0.tgz", "integrity": "sha512-05JTbvG1E0IrSZKZ5el2EM9CmAX0XSdsNY+d4aRZxDvYf3/hwxomvFFEz2b/awjgg9yTVHW83Wq19wE4OoTEMg==", "dev": true, - "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.6", @@ -2755,15 +2590,13 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@vanilla-extract/integration": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@vanilla-extract/integration/-/integration-6.5.0.tgz", "integrity": "sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.20.7", "@babel/plugin-syntax-typescript": "^7.20.0", @@ -2784,439 +2617,398 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@vanilla-extract/private/-/private-1.0.6.tgz", "integrity": "sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@web3-storage/multipart-parser": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz", - "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==", - "license": "(Apache-2.0 AND MIT)" + "integrity": "sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==" }, "node_modules/@wix/ecom": { - "version": "1.0.763", - "resolved": "https://registry.npmjs.org/@wix/ecom/-/ecom-1.0.763.tgz", - "integrity": "sha512-uQprZvqO/51vRvS4+LyvqWOYwtXHk6VgIi3HXOMmSaxgQ4NQpunK5RjzazWrWsmPruHPsWjYSXD3OJrzv6evyA==", - "dependencies": { - "@wix/ecom_abandoned-checkouts": "1.0.45", - "@wix/ecom_additional-fees": "1.0.26", - "@wix/ecom_back-in-stock-notifications": "1.0.49", - "@wix/ecom_back-in-stock-settings": "1.0.35", - "@wix/ecom_cart": "1.0.74", - "@wix/ecom_checkout": "1.0.85", - "@wix/ecom_checkout-content": "1.0.6", - "@wix/ecom_checkout-settings": "1.0.51", - "@wix/ecom_checkout-templates": "1.0.84", - "@wix/ecom_currencies": "1.0.36", - "@wix/ecom_current-cart": "1.0.74", - "@wix/ecom_custom-triggers": "1.0.24", - "@wix/ecom_delivery-profile": "1.0.19", - "@wix/ecom_discount-rules": "1.0.52", - "@wix/ecom_discounts": "1.0.5", - "@wix/ecom_discounts-custom-trigger": "1.0.7", - "@wix/ecom_draft-orders": "1.0.21", - "@wix/ecom_gift-vouchers": "1.0.2", - "@wix/ecom_gift-vouchers-provider": "1.0.3", - "@wix/ecom_local-delivery-options": "1.0.8", - "@wix/ecom_order-fulfillments": "1.0.46", - "@wix/ecom_order-invoices": "1.0.39", - "@wix/ecom_order-payment-requests": "1.0.10", - "@wix/ecom_order-transactions": "1.0.66", - "@wix/ecom_orders": "1.0.121", - "@wix/ecom_orders-settings": "1.0.45", - "@wix/ecom_payment-settings": "1.0.44", - "@wix/ecom_pickup-locations": "1.0.8", - "@wix/ecom_recommendations": "1.0.40", - "@wix/ecom_shipping-options": "1.0.7", - "@wix/ecom_shipping-rates": "1.0.42", - "@wix/ecom_shippo-configurations": "1.0.14", - "@wix/ecom_totals-calculator": "1.0.10", - "@wix/ecom_validations": "1.0.32" + "version": "1.0.789", + "resolved": "https://registry.npmjs.org/@wix/ecom/-/ecom-1.0.789.tgz", + "integrity": "sha512-y2zEz8Uqx4fYPAogxobpXdR1MWJ6LMcoaTgpLaNIjk/86uAV82lzEnfYp2WnutGg24MAgqdhYTOLET0wiA3eAw==", + "dependencies": { + "@wix/ecom_abandoned-checkouts": "1.0.49", + "@wix/ecom_additional-fees": "1.0.29", + "@wix/ecom_back-in-stock-notifications": "1.0.54", + "@wix/ecom_back-in-stock-settings": "1.0.39", + "@wix/ecom_cart": "1.0.85", + "@wix/ecom_checkout": "1.0.94", + "@wix/ecom_checkout-content": "1.0.10", + "@wix/ecom_checkout-settings": "1.0.55", + "@wix/ecom_checkout-templates": "1.0.93", + "@wix/ecom_currencies": "1.0.40", + "@wix/ecom_current-cart": "1.0.85", + "@wix/ecom_custom-triggers": "1.0.26", + "@wix/ecom_delivery-profile": "1.0.23", + "@wix/ecom_delivery-solutions": "1.0.2", + "@wix/ecom_discount-rules": "1.0.56", + "@wix/ecom_discounts": "1.0.8", + "@wix/ecom_discounts-custom-trigger": "1.0.11", + "@wix/ecom_draft-orders": "1.0.29", + "@wix/ecom_gift-vouchers": "1.0.7", + "@wix/ecom_gift-vouchers-provider": "1.0.7", + "@wix/ecom_local-delivery-options": "1.0.12", + "@wix/ecom_memberships": "1.0.2", + "@wix/ecom_order-fulfillments": "1.0.50", + "@wix/ecom_order-invoices": "1.0.43", + "@wix/ecom_order-payment-requests": "1.0.14", + "@wix/ecom_order-transactions": "1.0.71", + "@wix/ecom_orders": "1.0.129", + "@wix/ecom_orders-settings": "1.0.49", + "@wix/ecom_payment-settings": "1.0.54", + "@wix/ecom_pickup-locations": "1.0.13", + "@wix/ecom_recommendations": "1.0.46", + "@wix/ecom_recommendations-provider": "1.0.4", + "@wix/ecom_shipping-options": "1.0.11", + "@wix/ecom_shipping-rates": "1.0.46", + "@wix/ecom_shippo-configurations": "1.0.18", + "@wix/ecom_totals-calculator": "1.0.15", + "@wix/ecom_validations": "1.0.35" } }, "node_modules/@wix/ecom_abandoned-checkouts": { - "version": "1.0.45", - "resolved": "https://registry.npmjs.org/@wix/ecom_abandoned-checkouts/-/ecom_abandoned-checkouts-1.0.45.tgz", - "integrity": "sha512-AQH9rZqfuLOq9JR/9nNzbdDpvY3oBP39JYuYpmjbEQhoPqoRLA+3NNbnKpt7z1mVsAY914VIm+ipi0ZflO5oOQ==", + "version": "1.0.49", + "resolved": "https://registry.npmjs.org/@wix/ecom_abandoned-checkouts/-/ecom_abandoned-checkouts-1.0.49.tgz", + "integrity": "sha512-/viUp/nFUK0mIttJ270H3CAiJJLa/tsOehQV195pX1YXjz7R38TqBFyudzYR3ZnMWfDDEc6dhwPpgvcqPf5RJA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_additional-fees": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/@wix/ecom_additional-fees/-/ecom_additional-fees-1.0.26.tgz", - "integrity": "sha512-kwnaPFpcsNDq4eSQ0seeD+0r9f1murqO2p05/HlBwRfnllj+pA97sReV+aZnl5ZMPiO6yoLwjEb3gNKS3L0tEQ==", + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@wix/ecom_additional-fees/-/ecom_additional-fees-1.0.29.tgz", + "integrity": "sha512-l73isOQtPbYlvYDQEtn8JNkJzk9ZH9rtZqCFtaaKuRxmdJw74nDQu3g5pho55yFCo7yW+Uj4SWvsC3Tc5VRosQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_back-in-stock-notifications": { - "version": "1.0.49", - "resolved": "https://registry.npmjs.org/@wix/ecom_back-in-stock-notifications/-/ecom_back-in-stock-notifications-1.0.49.tgz", - "integrity": "sha512-s3L9kWcJDt+gzz5EBLHpY/YV67PiJp5Qgi2cLsO8kcQXSlZPdZJEVRF5VP7OkPXcUjfjaTjqysCcp84L7hHW1Q==", + "version": "1.0.54", + "resolved": "https://registry.npmjs.org/@wix/ecom_back-in-stock-notifications/-/ecom_back-in-stock-notifications-1.0.54.tgz", + "integrity": "sha512-zq38C6kEhiWIPk8W1bdzmSA5XQO3YmusEvgyddfQqku99DEN5MeDChdYO8ifcSpfm8ifMCUnzJamb8ZBEsTw2w==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_back-in-stock-settings": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/@wix/ecom_back-in-stock-settings/-/ecom_back-in-stock-settings-1.0.35.tgz", - "integrity": "sha512-GRI9mC2YvIDEaeq9Ts0q8S07OiYeZzm+JwSL9JjufzsLy1xCIYKptzdJNFa5HJJSwVKztIMFxESOPt3Tn4Zjkg==", + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@wix/ecom_back-in-stock-settings/-/ecom_back-in-stock-settings-1.0.39.tgz", + "integrity": "sha512-M2iLp5NCikEnfFsmkouuTPcQEmRxniYOoIMfKXIOeIbRXuWzQjXaejKbglf9NO2zZv9HsZ50HLOEuNJCmWQYbQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_cart": { - "version": "1.0.74", - "resolved": "https://registry.npmjs.org/@wix/ecom_cart/-/ecom_cart-1.0.74.tgz", - "integrity": "sha512-y6kujpPpJebapjRqjiSiePOne+ufIfGy+G5hrCKO2++/FjoX4HQ1891W6T6MxiDsweicv8YffeD6Wr/fKkOJ5Q==", + "version": "1.0.85", + "resolved": "https://registry.npmjs.org/@wix/ecom_cart/-/ecom_cart-1.0.85.tgz", + "integrity": "sha512-UWRPDWAxFLaepAaMiJHeuxU6nsELwlyQY1LZ7mK7hpaSgnFigsu/sYobDLACym1ok/FBFzxzAoL3lwKoHOcI4A==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_checkout": { - "version": "1.0.85", - "resolved": "https://registry.npmjs.org/@wix/ecom_checkout/-/ecom_checkout-1.0.85.tgz", - "integrity": "sha512-e8asWvLStOsAyRl0AJTJkg63eb0ZeRTa5sV+S4r6DsZfl0Z16exmIM669RCxMexB9nJGNpCgiVwKvXrzUTvM0A==", + "version": "1.0.94", + "resolved": "https://registry.npmjs.org/@wix/ecom_checkout/-/ecom_checkout-1.0.94.tgz", + "integrity": "sha512-t+ASrjtG+MULV5A3/88ddRvcKNMICi4naucUT43XhCoMFRy4GEn8ty6/PYtUuKceM8d44Rm93i61oJ9FLMZa3w==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_checkout-content": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@wix/ecom_checkout-content/-/ecom_checkout-content-1.0.6.tgz", - "integrity": "sha512-9+1wcsy4BeOqQ4BhJVdeZZ8fA+WpfWLHgXZyGZpO/wQFhZcZei0Jk+eRTf/Evk78VI3Jf546jyA6q6Hk32RbRw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@wix/ecom_checkout-content/-/ecom_checkout-content-1.0.10.tgz", + "integrity": "sha512-Fp7FxlN3WjPu/F2ThDyWz+dfdE/mhd1M63sJeXbVrRwRjBMYHn7wjpUjc7v4KmHctt03muT9V/2RJwldRw5Q4Q==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_checkout-settings": { - "version": "1.0.51", - "resolved": "https://registry.npmjs.org/@wix/ecom_checkout-settings/-/ecom_checkout-settings-1.0.51.tgz", - "integrity": "sha512-Vfst3SatmY0Nvh2AvTlBRB4n6Eg1pnj6X/tfgnuMDisV842wNL3OO2GJSCnEflwD5XGeW+yNsaNXrk+aCU42Wg==", + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/@wix/ecom_checkout-settings/-/ecom_checkout-settings-1.0.55.tgz", + "integrity": "sha512-bHY+I5AFq7szTh38db3/VpIw+sh2qaI/Rke//sTu+zUvL8nWgcsMEOjdTNV/GoaHqf4l0rDXmN1y+KibFTvXnA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_checkout-templates": { - "version": "1.0.84", - "resolved": "https://registry.npmjs.org/@wix/ecom_checkout-templates/-/ecom_checkout-templates-1.0.84.tgz", - "integrity": "sha512-gC7Ydt91wZyBubQEYkgxNJk4Z3FsLocHHQzCNRMG4sMoudajEoBDRh5ZQ0RjHxdELl10vGr7kj9tue2LRM1utQ==", + "version": "1.0.93", + "resolved": "https://registry.npmjs.org/@wix/ecom_checkout-templates/-/ecom_checkout-templates-1.0.93.tgz", + "integrity": "sha512-vg7UOHIlVK6ApSbKn4MTFwWTkmUOaX0fqsKRdRVWi3Q0PRzoV3N6VeuLHB2MLRIPyI/5KVREHm89QSQqJmmCuw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_currencies": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/@wix/ecom_currencies/-/ecom_currencies-1.0.36.tgz", - "integrity": "sha512-GbWmIzaicMZL9npYCGqckOKNiT2xAPB67OoE3UHaDueR0dZY52mLgDhTNI/XUzdN+iEjTvS+dWZEJmujzu/5lw==", + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/@wix/ecom_currencies/-/ecom_currencies-1.0.40.tgz", + "integrity": "sha512-DOTHHDNVsNFTl9HG4xe/q0bB2usUy2nL/x1JJXhHewzAIE7vdOCEFDTeE4P8XweUXzv7iFvOsXXbPHB2dhYK+Q==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_current-cart": { - "version": "1.0.74", - "resolved": "https://registry.npmjs.org/@wix/ecom_current-cart/-/ecom_current-cart-1.0.74.tgz", - "integrity": "sha512-KkUjLW9mFVINGsveonXKyp9UsVbNb2pf8CLp/dr6NAdUxF2Q5ymjy+KwYaE+uuwT3hdvuyeI6bJZL1PBvO4xyw==", + "version": "1.0.85", + "resolved": "https://registry.npmjs.org/@wix/ecom_current-cart/-/ecom_current-cart-1.0.85.tgz", + "integrity": "sha512-eTQmP0btLhXEGcc7DeE7vyvcyG/qYJBGGuKEtMJ0BHV4XGf7GUifa2LqQBKro+vnQi4k60gZvKP0cjHe2gFd9Q==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_custom-triggers": { - "version": "1.0.24", - "resolved": "https://registry.npmjs.org/@wix/ecom_custom-triggers/-/ecom_custom-triggers-1.0.24.tgz", - "integrity": "sha512-O4CMsEfwGeCOq5pQRNbbt7sYT1DGwT1fRsANqszNn8aGP4HIhL+z8Nrt5MWVHpkXDZJPx/PBbaYdCPuX6NCbzA==", + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@wix/ecom_custom-triggers/-/ecom_custom-triggers-1.0.26.tgz", + "integrity": "sha512-kXbjwsjswmIAfv22LWsw9cmaCXSvJ4kxg3NiZmlyTujThMElBw6o4puYRbBxs7oZCy+/f7QLkcb3VvwwQ6q2vw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_delivery-profile": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/@wix/ecom_delivery-profile/-/ecom_delivery-profile-1.0.19.tgz", - "integrity": "sha512-ncpgmbV2txFAf3ty1D6x1IIpC8r4D2IPAgd2z+BNFeN/f9BdU8smP1oYQlMc6JaGRyAvXpcLiOaPzVsckeMnkw==", + "version": "1.0.23", + "resolved": "https://registry.npmjs.org/@wix/ecom_delivery-profile/-/ecom_delivery-profile-1.0.23.tgz", + "integrity": "sha512-gWwBzmEAEdkh5nGcM9hWq6fC67Cvn1/ch8jx5kJalnUmCMeOQG7qXvFxCQqAo6BbaYnEKLAOgscVPPjXyVjBZw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" + } + }, + "node_modules/@wix/ecom_delivery-solutions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@wix/ecom_delivery-solutions/-/ecom_delivery-solutions-1.0.2.tgz", + "integrity": "sha512-Rq3P49xO/voeEZw6DwhNdqBrTKS2JO5yHQdxNXkt5MhtjAfqJ41gYnsEWgN6yZqK4QVnTONHONqWB9MFkSklKw==", + "dependencies": { + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_discount-rules": { - "version": "1.0.52", - "resolved": "https://registry.npmjs.org/@wix/ecom_discount-rules/-/ecom_discount-rules-1.0.52.tgz", - "integrity": "sha512-5xdfkxICFxQet7DYnj1Y9Fg+v6+cyBmoI7ZY7y2QftqhkXJJskdefnW/VQqqzP2rRRKmWekkuyk9E1Q81eB1ww==", + "version": "1.0.56", + "resolved": "https://registry.npmjs.org/@wix/ecom_discount-rules/-/ecom_discount-rules-1.0.56.tgz", + "integrity": "sha512-tBTAzkklwic4kcjdcqjPbQl0ZDe2yL0in8TqxSFqCoeg05HzFGj9dxUqDzi4P/WjyLllPs32TrHNDkNUgu8LDA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_discounts": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@wix/ecom_discounts/-/ecom_discounts-1.0.5.tgz", - "integrity": "sha512-cln1v+kDq13Yy9O+40R2XHbM3OWpiuSN+S2jfRaMqyq7nALVtmHh84l6sCE8HSmOD7uYYsDyVcXPqVoIWHXHaw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@wix/ecom_discounts/-/ecom_discounts-1.0.8.tgz", + "integrity": "sha512-mmDPKcRnEdh/WJ2LILCrtqXNbc0cquSL5iLjJtVupZTLvm3BGb29XD3yT/l/cqizbmfRgC1rq7dTCI8LML9Glg==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_discounts-custom-trigger": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@wix/ecom_discounts-custom-trigger/-/ecom_discounts-custom-trigger-1.0.7.tgz", - "integrity": "sha512-zFLDJBbQjx2TyzKQ5LiU/RB5i7kVSunQf3VcNUm0/kJCTLGZZU/YwhX+9ZmUGUkF/b0vuKKfceontWLdW6NkvQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@wix/ecom_discounts-custom-trigger/-/ecom_discounts-custom-trigger-1.0.11.tgz", + "integrity": "sha512-dOIV0bK6YCRoFTAFBO+rmqYt3J5LzRw6eVoBhpTojQIltuBIikDeZVrZo2Yq+zmlpP30W3z+q6W1VFITmA+9pQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_draft-orders": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/@wix/ecom_draft-orders/-/ecom_draft-orders-1.0.21.tgz", - "integrity": "sha512-KwlvQ1zxh9hcn2Okn/K+cGV+3YjM4HcsI7Z2mRAe5myr5Dz7XgOtDVGndCI9c9VckR3e3RjsIEx7DrzkBT5fmA==", + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@wix/ecom_draft-orders/-/ecom_draft-orders-1.0.29.tgz", + "integrity": "sha512-rReiNOj+YiERncbfjAj3GKqgDWYHWshhzg655kLN43RmrFNCpaglc9vqcxTjnddaLI6CadsCH5Yklo5Ng6FULg==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_gift-vouchers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@wix/ecom_gift-vouchers/-/ecom_gift-vouchers-1.0.2.tgz", - "integrity": "sha512-cB9zH1jd61sI9mZo8rjVbSXxZmELDeyg0WjvzAa7hDp9shYs5A0CoHi3H+BJiRulkzSYXpeziCIuIrAPx31VNg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@wix/ecom_gift-vouchers/-/ecom_gift-vouchers-1.0.7.tgz", + "integrity": "sha512-ik+F2jHMbuqzGGGD6MCm0s6q1HWEZ8E/E7eLeCHMce++EvA+Avu+7iqBk4r6ObhthGx7+8dU+CnEu3zKWIU07A==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_gift-vouchers-provider": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wix/ecom_gift-vouchers-provider/-/ecom_gift-vouchers-provider-1.0.3.tgz", - "integrity": "sha512-Zmeb6JxKqgZbV4FWd2uKyX9yc4sR6blEn7/b0vsq5fLsrwnPZi3BQgJYiTc9/gite7SvZEzkEZkP1n8I15kTKg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@wix/ecom_gift-vouchers-provider/-/ecom_gift-vouchers-provider-1.0.7.tgz", + "integrity": "sha512-1VIGW5zfKq67E3fOvEGQwxUawGEKQZF2Eieung/ZWkjc+S2phBpjt4C6a1cqAuJd26vr0uHUs/MADUGKfj6gYA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_local-delivery-options": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@wix/ecom_local-delivery-options/-/ecom_local-delivery-options-1.0.8.tgz", - "integrity": "sha512-o4xAtP3JKT/Z0AnUIMuSWY4cjR2IKE/bW/yfGYpyMlhH/kcHakiQ60AsQwcpk9rpE0lK/BxPPIsnA/qHms6QOQ==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@wix/ecom_local-delivery-options/-/ecom_local-delivery-options-1.0.12.tgz", + "integrity": "sha512-5SrFZ2L4iREqggK+lZRP+vl/SHHOXboSEKMACJrzAfosiL0w60aL53VNOgv5glATP8zamXSrkzHjGPykt0iZsQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" + } + }, + "node_modules/@wix/ecom_memberships": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@wix/ecom_memberships/-/ecom_memberships-1.0.2.tgz", + "integrity": "sha512-KVht/1JXlwzfJ4tOf8sT6IRNfbx5Hbmb6oAzQ3OlfAzNdgWYqIMMdsCAkslD22aaK5LJqsrV5CmrNTGaLGPIKg==", + "dependencies": { + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_order-fulfillments": { - "version": "1.0.46", - "resolved": "https://registry.npmjs.org/@wix/ecom_order-fulfillments/-/ecom_order-fulfillments-1.0.46.tgz", - "integrity": "sha512-PUaQLF5dbuzKcR7+O4b7TXn0lAFezBKJm58wHh2+9XPegFdqhhrVnZL7jvnQZHnGStpH/lFYq+kSo3KNe3cOag==", + "version": "1.0.50", + "resolved": "https://registry.npmjs.org/@wix/ecom_order-fulfillments/-/ecom_order-fulfillments-1.0.50.tgz", + "integrity": "sha512-Uf6MoR56lRG4MXAokrr3EgMKqUrJNPKSoVBFUpGTYHZwE0vSD8tOkYp8HLOUuG4qbuASrTHhxuEqGFQdYe60uA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_order-invoices": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@wix/ecom_order-invoices/-/ecom_order-invoices-1.0.39.tgz", - "integrity": "sha512-4zCgAewpMe70ZvH0acMp5bT7n+etqf6RL8rTBAWJW3OiHd0fQ0F2dHBx5x4yZ6KhZjBWqENkGSYY62d2fANsKg==", + "version": "1.0.43", + "resolved": "https://registry.npmjs.org/@wix/ecom_order-invoices/-/ecom_order-invoices-1.0.43.tgz", + "integrity": "sha512-EL0mgVFFTurhqLMKdyLiKziWZdbZlZApPC29peF2Y7megcK624bkx5qdT3xMFh8CpE35mNkfufBAr0OnJiOa3w==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_order-payment-requests": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@wix/ecom_order-payment-requests/-/ecom_order-payment-requests-1.0.10.tgz", - "integrity": "sha512-ndLHMPz/co2QVbOUk0r5i31QG+Q3YEEonTC2w2Ml2DqkxPry3b7AN6jStozEubenoIjmLr3TyBWXZCiZXOtSQA==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@wix/ecom_order-payment-requests/-/ecom_order-payment-requests-1.0.14.tgz", + "integrity": "sha512-c7A13dSk6IEFcjb6pMPquXAysTiUylPO7JRUVmQ0J+JgfBN4aNmOWHbPvo09FHBJ3vGRE/GNf1PKvJlLOy4iXw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_order-transactions": { - "version": "1.0.66", - "resolved": "https://registry.npmjs.org/@wix/ecom_order-transactions/-/ecom_order-transactions-1.0.66.tgz", - "integrity": "sha512-GWF0EXTWE2aEExbXU+5ZwowC+F90lZNciWLwqbHTHdlNCQlz6j2va4gwlJ4L5roTeE1gpV57Xcc2GOuserQdUg==", + "version": "1.0.71", + "resolved": "https://registry.npmjs.org/@wix/ecom_order-transactions/-/ecom_order-transactions-1.0.71.tgz", + "integrity": "sha512-hUC9M79zNkEdmEF7Ko8TbYTTDUS4p5LHwe6lnKAVIcIsJusGN5LSbMVN8kSydjhN1D2YC+1ZneLCIOZ8SGAW2Q==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_orders": { - "version": "1.0.121", - "resolved": "https://registry.npmjs.org/@wix/ecom_orders/-/ecom_orders-1.0.121.tgz", - "integrity": "sha512-FADD9S5jrqlfQpNrTysNJYSeT9UltoGETKa3cWdbL6EQZshXDGZUPoTzuc3PwFIWivVuayqAmeT1bhWyxTYOpg==", + "version": "1.0.129", + "resolved": "https://registry.npmjs.org/@wix/ecom_orders/-/ecom_orders-1.0.129.tgz", + "integrity": "sha512-IIJ34jLnKxjUA846/jnaFMaks58bRlX5q2pUPJXXXEvM2yXOEPeafQy7QHgnENQvp/mOHgaVVpTCjR/x+ZqEAw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_orders-settings": { - "version": "1.0.45", - "resolved": "https://registry.npmjs.org/@wix/ecom_orders-settings/-/ecom_orders-settings-1.0.45.tgz", - "integrity": "sha512-Pelos6TrgsmLtedHkiByLPrafT/g54BraKsn4aQHLFtc1u/gIKcHw9fsIVyuWeRHn+JUm2oxK7XAj1P90zOB7A==", + "version": "1.0.49", + "resolved": "https://registry.npmjs.org/@wix/ecom_orders-settings/-/ecom_orders-settings-1.0.49.tgz", + "integrity": "sha512-4JR5DxRNOE4jVaqMujNfZ8ZH8O7RkZBHdRKglNtgSbgfp7AKkwXlAI4bt45dVyvnKZVXFHHZgw2OF2saROgH0w==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_payment-settings": { - "version": "1.0.44", - "resolved": "https://registry.npmjs.org/@wix/ecom_payment-settings/-/ecom_payment-settings-1.0.44.tgz", - "integrity": "sha512-QdKgUBXgPL7OFgU/neKwqGlE4LsoyHXbHNd+Plu/0DKYA4gSdBxOQi+xhmmlyWzpAdSvB3v0AusW5/vexrmsHw==", + "version": "1.0.54", + "resolved": "https://registry.npmjs.org/@wix/ecom_payment-settings/-/ecom_payment-settings-1.0.54.tgz", + "integrity": "sha512-mpkuDA6QCb0KRs6jKnvH/Cpm+eYhEz72xRzxcy22pM2YYmN8mZHDB4Zp0YbLfPLdxYULPaPE4BOoMkUybdHj6w==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_pickup-locations": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@wix/ecom_pickup-locations/-/ecom_pickup-locations-1.0.8.tgz", - "integrity": "sha512-usFR4EWOw6xVWQVcu++IVvkjx80ZVmcRONDaYPvLuxlALJQEN5Xb3UrkNyvvib6/BojogNJlQcjpCQOSqVksgw==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@wix/ecom_pickup-locations/-/ecom_pickup-locations-1.0.13.tgz", + "integrity": "sha512-WWr2JHM+X0VSifX6J1kKHIuI1826ZbMRnNzxKiYtvJoT8Hl81enS8Htyt8IWKSJu2Y4kfyimfXcAEueRqLZGig==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_recommendations": { - "version": "1.0.40", - "resolved": "https://registry.npmjs.org/@wix/ecom_recommendations/-/ecom_recommendations-1.0.40.tgz", - "integrity": "sha512-vqeHo5c6phwMmTamfncoBqJd3l83vAI/Tj/A1dem1Re2DNIkcTPCM2QQAY+ybNvl4hTapCCdcaVSrXt84jZp5A==", + "version": "1.0.46", + "resolved": "https://registry.npmjs.org/@wix/ecom_recommendations/-/ecom_recommendations-1.0.46.tgz", + "integrity": "sha512-tg0hxGVt1oIeo2WqJgqSeKO6knpxUtpVFJoJtH0yz1xbZPneeP2EGDDYnpc3ocI9kPAzqj0Pl91u+iHtvXvMnQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" + } + }, + "node_modules/@wix/ecom_recommendations-provider": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@wix/ecom_recommendations-provider/-/ecom_recommendations-provider-1.0.4.tgz", + "integrity": "sha512-9wrcY94I9rRQ63i6v6yMLRHA7BtN91VYGx7z358gZoXdfZdu/uIfIdOwx05Swv+Fw13wwzoxZosxSVgE+PpkSg==", + "dependencies": { + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_shipping-options": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@wix/ecom_shipping-options/-/ecom_shipping-options-1.0.7.tgz", - "integrity": "sha512-AKCBvhUHcPwipNgNveFwOaeTboF3fmf7BU3BhzOpYLAM9ibM6fAjA5Zmsk1+UlAYp///brC3I6nJNXAppwz+zw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@wix/ecom_shipping-options/-/ecom_shipping-options-1.0.11.tgz", + "integrity": "sha512-M9bC1LwXeUlE/VG/WstbURwUbkr368QxOpooiwrYdJwiTCouXWMIJVDkzoIhWmEaqIeRz+pDNT/jzjw+usvmMQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_shipping-rates": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/@wix/ecom_shipping-rates/-/ecom_shipping-rates-1.0.42.tgz", - "integrity": "sha512-gYp5kGQK6J8INF2OZ9ZgP8AcaZkwyJgMymWVbO99BshHrAPw7OX4qBvA5wb8EVkBLQCbQR01RKw0Z1vNvcXxGA==", + "version": "1.0.46", + "resolved": "https://registry.npmjs.org/@wix/ecom_shipping-rates/-/ecom_shipping-rates-1.0.46.tgz", + "integrity": "sha512-9vD4OcaF7cm1bT/xXggmbpoCfoSyNJvpjJyq20Pb31L/mulY7F4+jnTIT+wCJGG37FRDgE/ti5wmfeFg1j4YOg==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_shippo-configurations": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/@wix/ecom_shippo-configurations/-/ecom_shippo-configurations-1.0.14.tgz", - "integrity": "sha512-Mo4xjUUzrscfk+fcy8Dy+BTEWGbepW/4fUKSZhugeBJ7nR6dZS9e7n6sQaHgklGh2UhMjC9yg4l2Yl8heaKgUg==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@wix/ecom_shippo-configurations/-/ecom_shippo-configurations-1.0.18.tgz", + "integrity": "sha512-EzPikPOMeORC9M1Dmd1d8QYnQv0YO4WEigczHqBZLVqcdvfbKZjiSzDUpCHyYCfaqoVYNTM1cxy5UyYPLEMXoA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_totals-calculator": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@wix/ecom_totals-calculator/-/ecom_totals-calculator-1.0.10.tgz", - "integrity": "sha512-BlyxSLT++fdy7vuJknT1sNQ8/HLSjQX0tt/iZ/ezQsRUecHFF4p6zt9uXVfajvPqGEtTLr9euEJV4SjLJLdjyQ==", + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@wix/ecom_totals-calculator/-/ecom_totals-calculator-1.0.15.tgz", + "integrity": "sha512-EMAzIYjNinDJOYWK2pNJCOKHcm8zioROkBuGXTv1kMWOCiA4SS1MaIYeeXPWw+Qr0XAcgQWB9kjYZc1DMW95LA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/ecom_validations": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/@wix/ecom_validations/-/ecom_validations-1.0.32.tgz", - "integrity": "sha512-mxTJUk7rkXGI+thcWWlmV/OZWfYXGyuxAQ46L4xtR9QRVg2VNzCNO9KEuRus5EPUYCguBcvpJbyHNwijNSVRPw==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/@wix/ecom_validations/-/ecom_validations-1.0.35.tgz", + "integrity": "sha512-axAzE3JAEd/Topp+w0i0HtpsTpozbPkuDW4nkkpa2N/GLzJe/+m/YuGQfH2Knh31spLWTe8IWiTP3MK7xTCkEg==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/filter-builder": { - "version": "1.0.78", - "resolved": "https://registry.npmjs.org/@wix/filter-builder/-/filter-builder-1.0.78.tgz", - "integrity": "sha512-GRuqLCLl64EoNlLZlcNeo8N5+h1W08yGI35HFiTDXi9o8pR6GlNimj+o0YkZrXqFdROFchkVaT/+15cuFB7zfg==", - "license": "UNLICENSED", + "version": "1.0.82", + "resolved": "https://registry.npmjs.org/@wix/filter-builder/-/filter-builder-1.0.82.tgz", + "integrity": "sha512-8xigklUJhodsMe/uQ5TX1ln7l0F41JAi3TBnzs3EKZ98xtCFtsMUQHv4ypO/EKwdnOfC/af7zGOl+nJJyA9Idg==", "dependencies": { "@babel/runtime": "^7.25.7", "kind-of": "~5.1.0", - "tslib": "^2.7.0" + "tslib": "^2.8.0" } }, "node_modules/@wix/identity": { @@ -3245,7 +3037,6 @@ "version": "0.2.12", "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.2.12.tgz", "integrity": "sha512-HpZ/HWlQ4r3X8EVHtbe4t2QUk1xu0EvYHl3uTNVklFIXYY66Ag0Yu29x4F9Q/+NrC4rgDs64r+H+sGPb81MEVQ==", - "license": "UNLICENSED", "dependencies": { "@wix/sdk-types": "^1.7.0" } @@ -3265,132 +3056,239 @@ "version": "0.2.12", "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.2.12.tgz", "integrity": "sha512-HpZ/HWlQ4r3X8EVHtbe4t2QUk1xu0EvYHl3uTNVklFIXYY66Ag0Yu29x4F9Q/+NrC4rgDs64r+H+sGPb81MEVQ==", - "license": "UNLICENSED", "dependencies": { - "@wix/sdk-types": "^1.7.0" + "@wix/sdk-types": "^1.7.0" + } + }, + "node_modules/@wix/identity_recovery": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@wix/identity_recovery/-/identity_recovery-1.0.11.tgz", + "integrity": "sha512-So6ydScIVxP/KI4czr6skx6FqcrAi0i7AV8ppDk10Ks3tVhBycicEUWqrVZCzktVfH54R9mFgfUY0PtHNfQ+Ng==", + "dependencies": { + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.2.10", + "@wix/sdk-types": "^1.5.11" + } + }, + "node_modules/@wix/identity_recovery/node_modules/@wix/sdk-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.2.12.tgz", + "integrity": "sha512-HpZ/HWlQ4r3X8EVHtbe4t2QUk1xu0EvYHl3uTNVklFIXYY66Ag0Yu29x4F9Q/+NrC4rgDs64r+H+sGPb81MEVQ==", + "dependencies": { + "@wix/sdk-types": "^1.7.0" + } + }, + "node_modules/@wix/identity_verification": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@wix/identity_verification/-/identity_verification-1.0.11.tgz", + "integrity": "sha512-rkNrodVS4SPrxltRBYE0nBCCwSjmlmxkbxmtHt8bHXAduqw0jYTHNeA0yXjZ84Jsyal/XB+XSE7jQjuTEAqs3w==", + "dependencies": { + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.2.10", + "@wix/sdk-types": "^1.5.11" + } + }, + "node_modules/@wix/identity_verification/node_modules/@wix/sdk-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.2.12.tgz", + "integrity": "sha512-HpZ/HWlQ4r3X8EVHtbe4t2QUk1xu0EvYHl3uTNVklFIXYY66Ag0Yu29x4F9Q/+NrC4rgDs64r+H+sGPb81MEVQ==", + "dependencies": { + "@wix/sdk-types": "^1.7.0" + } + }, + "node_modules/@wix/image-kit": { + "version": "1.92.0", + "resolved": "https://registry.npmjs.org/@wix/image-kit/-/image-kit-1.92.0.tgz", + "integrity": "sha512-2t5gHszVC9EJXmf+FrVZRbslpKStDGtP1r3YbuALO9uvy2jFGkFdej+ax7+Z92/kzTBiftIpt6X2xwoqqGXQKw==", + "dependencies": { + "@babel/runtime": "^7.25.7", + "tslib": "^2.8.0" + } + }, + "node_modules/@wix/members": { + "version": "1.0.112", + "resolved": "https://registry.npmjs.org/@wix/members/-/members-1.0.112.tgz", + "integrity": "sha512-u0Ls8zJq60Ls6WnWxhaMphmVyE2Sbkaqqgy2jokNxFymXfni8j9NQaYU47QNoFrYHPqyoPMgctyLfJ/4dy1Tdw==", + "dependencies": { + "@wix/members_authentication": "1.0.29", + "@wix/members_authorization": "1.0.6", + "@wix/members_badges": "1.0.34", + "@wix/members_custom-field": "1.0.7", + "@wix/members_custom-field-suggestion": "1.0.6", + "@wix/members_member-role-definition": "1.0.9", + "@wix/members_member-to-member-block": "1.0.6", + "@wix/members_members": "1.0.45", + "@wix/members_user-member": "1.0.13" + } + }, + "node_modules/@wix/members_authentication": { + "version": "1.0.29", + "resolved": "https://registry.npmjs.org/@wix/members_authentication/-/members_authentication-1.0.29.tgz", + "integrity": "sha512-LTQ4LKF07WXezTkOg5AHrW1lJNvy9LeK+WVbECewzT38Rb/R/Dn3Yz4idBJrHEtVAQDD/ZMeQCCKK+bRmpvfwQ==", + "dependencies": { + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" + } + }, + "node_modules/@wix/members_authorization": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@wix/members_authorization/-/members_authorization-1.0.6.tgz", + "integrity": "sha512-GmOBiyUFqiCBdl+mmQ/BzWnmnDwJUdbPa+AGbGR1dRhKuHbbeSDORv8ka1vIjFT7L+bEpKl3u3ixugb60J2sXA==", + "dependencies": { + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" + } + }, + "node_modules/@wix/members_badges": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/@wix/members_badges/-/members_badges-1.0.34.tgz", + "integrity": "sha512-GKmrY+AK6g8tBYYs8ItQT5RFmw/h8cnd5AXxcl2dnDKkF+DBqAQVZr/PNO4+/DqsUpBFsrYkO6fH5r+SWqUl/A==", + "dependencies": { + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" + } + }, + "node_modules/@wix/members_custom-field": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@wix/members_custom-field/-/members_custom-field-1.0.7.tgz", + "integrity": "sha512-vqWysgNafl58wgPg65f8jcBW2tzPlGtU5qANWeiSGO5IVqivMpqdERXKxveGqcDJomWUykumNIsFQTFWQO4w9A==", + "dependencies": { + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" } }, - "node_modules/@wix/identity_recovery": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@wix/identity_recovery/-/identity_recovery-1.0.11.tgz", - "integrity": "sha512-So6ydScIVxP/KI4czr6skx6FqcrAi0i7AV8ppDk10Ks3tVhBycicEUWqrVZCzktVfH54R9mFgfUY0PtHNfQ+Ng==", + "node_modules/@wix/members_custom-field-suggestion": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@wix/members_custom-field-suggestion/-/members_custom-field-suggestion-1.0.6.tgz", + "integrity": "sha512-OmMWyR4eIzpr5zf1ru8E3ahnGh8vxfmvSm/lAUjlZa1MfneYvDWHZigyz01ndZS8cuCG6LJbXP7KjTG5gd9ZSw==", "dependencies": { "@wix/metro-runtime": "^1.1792.0", "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.2.10", - "@wix/sdk-types": "^1.5.11" + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" } }, - "node_modules/@wix/identity_recovery/node_modules/@wix/sdk-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.2.12.tgz", - "integrity": "sha512-HpZ/HWlQ4r3X8EVHtbe4t2QUk1xu0EvYHl3uTNVklFIXYY66Ag0Yu29x4F9Q/+NrC4rgDs64r+H+sGPb81MEVQ==", - "license": "UNLICENSED", + "node_modules/@wix/members_member-role-definition": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@wix/members_member-role-definition/-/members_member-role-definition-1.0.9.tgz", + "integrity": "sha512-TosvDkN2Qb1W0f+di980TXvTr6WEP17YsSbxxXt/oFKnOfz+hhQpbwrInpmXMaCtLLgo+Grog4zNm6ReN3e6tg==", "dependencies": { - "@wix/sdk-types": "^1.7.0" + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" } }, - "node_modules/@wix/identity_verification": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@wix/identity_verification/-/identity_verification-1.0.11.tgz", - "integrity": "sha512-rkNrodVS4SPrxltRBYE0nBCCwSjmlmxkbxmtHt8bHXAduqw0jYTHNeA0yXjZ84Jsyal/XB+XSE7jQjuTEAqs3w==", + "node_modules/@wix/members_member-to-member-block": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@wix/members_member-to-member-block/-/members_member-to-member-block-1.0.6.tgz", + "integrity": "sha512-hmUsTgNOGfpntAcy4DWzwAlhN7FtCHq4mJioiIzUaa+UdRzbV7KtVaMs43d9Q5D2YTeC6DS58qZfU42qCnFmCA==", "dependencies": { "@wix/metro-runtime": "^1.1792.0", "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.2.10", - "@wix/sdk-types": "^1.5.11" + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" } }, - "node_modules/@wix/identity_verification/node_modules/@wix/sdk-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.2.12.tgz", - "integrity": "sha512-HpZ/HWlQ4r3X8EVHtbe4t2QUk1xu0EvYHl3uTNVklFIXYY66Ag0Yu29x4F9Q/+NrC4rgDs64r+H+sGPb81MEVQ==", - "license": "UNLICENSED", + "node_modules/@wix/members_members": { + "version": "1.0.45", + "resolved": "https://registry.npmjs.org/@wix/members_members/-/members_members-1.0.45.tgz", + "integrity": "sha512-3Pi2wacXpkamO/wi5e0aSvZxqgxw9IrhqI7BnMc3XT97RXhapo3+b4Da91mRHjW9/4K3FMv5B1OrmIfwWPkSmg==", "dependencies": { - "@wix/sdk-types": "^1.7.0" + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" } }, - "node_modules/@wix/image-kit": { - "version": "1.88.0", - "resolved": "https://registry.npmjs.org/@wix/image-kit/-/image-kit-1.88.0.tgz", - "integrity": "sha512-TCEmC+oP7fEgV43Y8E5J0XSBFzAA6ujzpnnbVc98uTGDs5BLpmkKzP17o/N4hjXTiucOT7rL6udwCEO8rH1CeQ==", - "license": "MIT", + "node_modules/@wix/members_user-member": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@wix/members_user-member/-/members_user-member-1.0.13.tgz", + "integrity": "sha512-WXYZGdmJYMxE0Tg6S2NAP44+4oERHG3RMS08LcJD91X5BIbSyTkGXMZyFR0A3IXO4WVjy1zPoRo8XvSr5pxdWw==", "dependencies": { - "@babel/runtime": "^7.25.6", - "tslib": "^2.7.0" + "@wix/metro-runtime": "^1.1792.0", + "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", + "@wix/sdk-runtime": "^0.3.14", + "@wix/sdk-types": "^1.12.3" } }, "node_modules/@wix/metro-public-utils": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/@wix/metro-public-utils/-/metro-public-utils-1.0.34.tgz", - "integrity": "sha512-c1jkmzazfxzriB/yRVAvLr8BfOpkaTvKhdArcyo7yUl5CEptbcW6coHqteaZsRYRxk5aeBnea0fnvJ/7KoLQpQ==", - "license": "UNLICENSED", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/@wix/metro-public-utils/-/metro-public-utils-1.0.35.tgz", + "integrity": "sha512-uiWDErUSLR0bH0IEOh9F73S30LC1gRkZEAVQT/eEdVDaRjIEv+qZByYdW3p4qOh3BCpy/6i0RmCJJKMWOuf8/g==", "dependencies": { "@babel/runtime": "^7.0.0" } }, "node_modules/@wix/metro-runtime": { - "version": "1.1823.0", - "resolved": "https://registry.npmjs.org/@wix/metro-runtime/-/metro-runtime-1.1823.0.tgz", - "integrity": "sha512-wNRdtG1oJwXF80RIj1nhagE5M5UkOTJythncWOSJ1YBxpLu/Yv9nTv62M2fmMq0fGoSseILh9WPXi/WXX9tV3g==", - "license": "UNLICENSED", - "dependencies": { - "@wix/metro-public-utils": "1.0.34", - "@wix/motion-edm-autogen-p13n": "1.0.79", - "@wix/motion-edm-autogen-transformations": "1.59.0", - "@wix/motion-edm-autogen-transformations-core": "1.53.0", + "version": "1.1838.0", + "resolved": "https://registry.npmjs.org/@wix/metro-runtime/-/metro-runtime-1.1838.0.tgz", + "integrity": "sha512-ASCBUilGbtq/0wmhu9kbrAxQMZX+YGR6h9iWTSOdzO7zcCTPPadFb4Nm/b0qxBqEbLwg7ZteHylgIvzIGNyLGw==", + "dependencies": { + "@wix/metro-public-utils": "1.0.35", + "@wix/motion-edm-autogen-p13n": "1.0.80", + "@wix/motion-edm-autogen-transformations": "1.60.0", + "@wix/motion-edm-autogen-transformations-core": "1.54.0", "js-base64": "^3.7.7", "lodash": "^4.17.21", "querystring": "^0.2.1" } }, "node_modules/@wix/motion-edm-autogen-common": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-common/-/motion-edm-autogen-common-1.49.0.tgz", - "integrity": "sha512-5VR6iWJmuItkA3IjW1aGAcGYAHAPSD1/d1sUtOx+FRX8JtK8mH2BLz2WamydvZDkQtv6dRRnB1aVb5wiBFHbng==", - "license": "UNLICENSED", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-common/-/motion-edm-autogen-common-1.50.0.tgz", + "integrity": "sha512-7APXrjVxnL/c95YnfGFHLI+LzvUBJVKvk3UIW1gbf/JEzgcOfRgs1jLmWFRRFKOjHe01ms/lhLrc5ETJjDRFRA==", "dependencies": { "@babel/runtime": "^7.0.0", - "@wix/motion-edm-autogen-types": "1.0.37", + "@wix/motion-edm-autogen-types": "1.0.38", "lodash": "~4.17.0", "tslib": "^2.0.0" } }, "node_modules/@wix/motion-edm-autogen-p13n": { - "version": "1.0.79", - "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-p13n/-/motion-edm-autogen-p13n-1.0.79.tgz", - "integrity": "sha512-DjMhD80M9RoewOXPc5FM4BIuVXwZJMgOsvViHbDvLWX7AzpWe/2/dGC0HcCsClL2G6wkdyMgInwZ/Xt7Nktz9w==", + "version": "1.0.80", + "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-p13n/-/motion-edm-autogen-p13n-1.0.80.tgz", + "integrity": "sha512-SIwr9WmjDZ0+Lns0QEKN+FfjCT7L18dQSlfEVFtcXUSBIB4/n3JAwU/kwa3Xv4/sWXqthfO1gMshDGlUu7zKSg==", "dependencies": { "@babel/runtime": "^7.0.0", - "@wix/motion-edm-autogen-types": "1.0.37", + "@wix/motion-edm-autogen-types": "1.0.38", "lodash": "~4.17.0", "querystring": "^0.2.1" } }, "node_modules/@wix/motion-edm-autogen-query-wrapper": { - "version": "1.0.105", - "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-query-wrapper/-/motion-edm-autogen-query-wrapper-1.0.105.tgz", - "integrity": "sha512-GAEFRS+SdxP5b12LE6j9GVUCHvb9Qyp2raeOf/swguzSy2RLqhFvBHl4+eM2o0X0/VNZO7yYESVvNv1ZLRs2jQ==", + "version": "1.0.109", + "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-query-wrapper/-/motion-edm-autogen-query-wrapper-1.0.109.tgz", + "integrity": "sha512-r/KTy4Br6YTL50yp+AqC+eQmXopWDqc3m9YzTsqtctuP06jzplU5ISo5DJp7tTRcEKoS04G5ntYVlIdP4VtLfQ==", "dependencies": { "@babel/runtime": "^7.0.0", - "@wix/filter-builder": "^1.0.78", - "@wix/motion-edm-autogen-common": "1.49.0", - "@wix/motion-edm-autogen-transformations-core": "1.53.0", + "@wix/filter-builder": "^1.0.82", + "@wix/motion-edm-autogen-common": "1.50.0", + "@wix/motion-edm-autogen-transformations-core": "1.54.0", "lodash": "~4.17.0", "long": "~4.0.0", "tslib": "^2.0.0" } }, "node_modules/@wix/motion-edm-autogen-transformations": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-transformations/-/motion-edm-autogen-transformations-1.59.0.tgz", - "integrity": "sha512-rgvz9vMh19TKhSHzocRNCrdklABMFENWt/ahR8HfrL9dzgL5PBcphSyi+JY+Dy43ILtg5nJXn622LO+0IyZCtQ==", - "license": "UNLICENSED", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-transformations/-/motion-edm-autogen-transformations-1.60.0.tgz", + "integrity": "sha512-tx0/L+AHWlb6DSxjPHxKTOzUjy3iKa0ZZ71OoEQXZ8TX1LMnstvFxMLhXg1RHuWTGse7cKi/uLJZqgHOl9bxTw==", "dependencies": { "@babel/runtime": "^7.0.0", "@rushstack/eslint-patch": "^1.1.0", - "@wix/motion-edm-autogen-common": "1.49.0", - "@wix/motion-edm-autogen-transformations-core": "1.53.0", + "@wix/motion-edm-autogen-common": "1.50.0", + "@wix/motion-edm-autogen-transformations-core": "1.54.0", "constant-case": "~3.0.0", "deep-for-each": "~3.0.0", "http-status-codes": "^2.0.0", @@ -3401,14 +3299,13 @@ } }, "node_modules/@wix/motion-edm-autogen-transformations-core": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-transformations-core/-/motion-edm-autogen-transformations-core-1.53.0.tgz", - "integrity": "sha512-lKzyoEB5ZBiXjdiyEtgdUVzf2ubmcrrIAl73aBUW7hLa0zJs+N1SD+pdy5b1cd+YXJOAGCB/aBQCFBWie0BLeg==", - "license": "UNLICENSED", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-transformations-core/-/motion-edm-autogen-transformations-core-1.54.0.tgz", + "integrity": "sha512-0Qz9kkhEKHmwxy6oBX4r6f4tAFONedXiv8wqQIuOHG8c3JfAC1Ex+MXLlCXGeav91V2zF0VvjpnjEqZbGLnLHg==", "dependencies": { "@babel/runtime": "^7.0.0", "@rushstack/eslint-patch": "^1.1.0", - "@wix/motion-edm-autogen-common": "1.49.0", + "@wix/motion-edm-autogen-common": "1.50.0", "constant-case": "~3.0.0", "deep-for-each": "~3.0.0", "jsonpath-plus": "~5.1.0", @@ -3417,9 +3314,9 @@ } }, "node_modules/@wix/motion-edm-autogen-types": { - "version": "1.0.37", - "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-types/-/motion-edm-autogen-types-1.0.37.tgz", - "integrity": "sha512-odAsVWgzwiJf3EESGw1EbvZ+ZvFgmCLsDqHSwPWV8v8fD6H8hkf5V5oCcCjl9CYiBOI7eFq1WCNbRaNClTqJ+Q==" + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@wix/motion-edm-autogen-types/-/motion-edm-autogen-types-1.0.38.tgz", + "integrity": "sha512-R3ZwP+9vcdB8tlmT94EOqeTPzuezICUefnuvMirDrtub5SX8O2q5nJ2QAQRmR14972ZWSyiQGxz2Mv8myab23Q==" }, "node_modules/@wix/redirects": { "version": "1.0.58", @@ -3441,21 +3338,18 @@ } }, "node_modules/@wix/sdk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@wix/sdk/-/sdk-1.13.0.tgz", - "integrity": "sha512-PbD6vLVAZoOSwe4ymn3k71Gv7BxgPNV6HhVpS2+Fi6CWzDvR/tEmgWBuu2gqCIH8hhGqNi2qAVc8yqdq7qqugg==", - "license": "UNLICENSED", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@wix/identity": "^1.0.78", - "@wix/image-kit": "^1.87.0", - "@wix/redirects": "^1.0.41", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/@wix/sdk/-/sdk-1.14.2.tgz", + "integrity": "sha512-0sKx5guYDKb6cKTm4LacNc+tZd445dGOJ9Zi4DL84Cvsv3eoKqeYDWYbk2D0mUxhi3Qnpvl9MMrtoH80efBnuA==", + "dependencies": { + "@wix/identity": "^1.0.83", + "@wix/image-kit": "^1.92.0", + "@wix/redirects": "^1.0.58", "@wix/sdk-context": "^0.0.1", - "@wix/sdk-runtime": "0.3.20", - "@wix/sdk-types": "^1.12.1", - "jose": "^5.2.1", - "querystring": "^0.2.1", - "type-fest": "^4.9.0" + "@wix/sdk-runtime": "0.3.22", + "@wix/sdk-types": "^1.12.4", + "jose": "^5.9.6", + "type-fest": "^4.26.1" }, "optionalDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" @@ -3464,194 +3358,164 @@ "node_modules/@wix/sdk-context": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@wix/sdk-context/-/sdk-context-0.0.1.tgz", - "integrity": "sha512-ziSzrceUC0KFn4IJIVBn1cXXKrZ49ZKG5tQ6fl+TpontyUw5p/Z4VofFUUsnqNl9JYCpYNTzIXpzwok93Vrl8A==", - "license": "UNLICENSED" + "integrity": "sha512-ziSzrceUC0KFn4IJIVBn1cXXKrZ49ZKG5tQ6fl+TpontyUw5p/Z4VofFUUsnqNl9JYCpYNTzIXpzwok93Vrl8A==" }, "node_modules/@wix/sdk-runtime": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.3.20.tgz", - "integrity": "sha512-ny54E0iB6aITRffBEivIEad4/W/C0xal//zCg1Pg7QAp3ZghtqP451BNHiqywE8NXqiwqAKA/Vm/3J3cZmAibg==", - "license": "UNLICENSED", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@wix/sdk-runtime/-/sdk-runtime-0.3.22.tgz", + "integrity": "sha512-oBlQbmPbAcKT5qMocBEXnXl+y6dqdhHg3LPKjwwcdcOOOjli8whOt9rxN7Rhd4tXYwHmZetMLAYJYny5T61p9A==", "dependencies": { "@wix/sdk-context": "^0.0.1", - "@wix/sdk-types": "^1.12.1" + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/sdk-types": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/@wix/sdk-types/-/sdk-types-1.12.3.tgz", - "integrity": "sha512-QF46GbMLSAXwq8bvqf1jG70WXm6/IQ9VGRRwRR2RTXEyWXndiYrGCBR2Ks40JDD3cRcsVhYN+KRxcoS5Bgyy/A==", - "license": "UNLICENSED" + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@wix/sdk-types/-/sdk-types-1.12.4.tgz", + "integrity": "sha512-Y7sV75riuQc67yqKi0msi7V++iU45d6eXHmiavBbmADDJsTilHqWAi0ulqpm4SF2BrrRgybDkgPpGRTHVy9E0g==" }, "node_modules/@wix/stores": { - "version": "1.0.240", - "resolved": "https://registry.npmjs.org/@wix/stores/-/stores-1.0.240.tgz", - "integrity": "sha512-ccf41UFfi0VETYpdvk0uGVc9bc9pjhxhpkcIAXcTDDHlkBotvza5kvULWz32Z9nqmgoqBbCTbd3Fxyikl+MDiQ==", - "dependencies": { - "@wix/stores_brands-v-3": "1.0.10", - "@wix/stores_catalog-versioning": "1.0.3", - "@wix/stores_collections": "1.0.36", - "@wix/stores_customizations-v-3": "1.0.11", - "@wix/stores_info-sections-v-3": "1.0.12", - "@wix/stores_inventory": "1.0.41", - "@wix/stores_inventory-items-v-3": "1.0.15", - "@wix/stores_products": "1.0.55", - "@wix/stores_products-v-3": "1.0.46", - "@wix/stores_ribbons-v-3": "1.0.11", - "@wix/stores_stores-locations-v-3": "1.0.12", - "@wix/stores_subscription-options": "1.0.36", - "@wix/stores_wishlist": "1.0.30" + "version": "1.0.273", + "resolved": "https://registry.npmjs.org/@wix/stores/-/stores-1.0.273.tgz", + "integrity": "sha512-0/LkJV/5zdPpq6yuGy2akvhz/rmk2syew1w1KUkgAZpn0O3hNjWgkvjWuUbqjHYAzgqssuRb1y94tixN6/3Z6Q==", + "dependencies": { + "@wix/stores_brands-v-3": "1.0.16", + "@wix/stores_catalog-versioning": "1.0.8", + "@wix/stores_collections": "1.0.42", + "@wix/stores_customizations-v-3": "1.0.17", + "@wix/stores_info-sections-v-3": "1.0.18", + "@wix/stores_inventory": "1.0.54", + "@wix/stores_inventory-items-v-3": "1.0.21", + "@wix/stores_products": "1.0.78", + "@wix/stores_products-v-3": "1.0.58", + "@wix/stores_ribbons-v-3": "1.0.17", + "@wix/stores_stores-locations-v-3": "1.0.18", + "@wix/stores_subscription-options": "1.0.41", + "@wix/stores_wishlist": "1.0.34" } }, "node_modules/@wix/stores_brands-v-3": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@wix/stores_brands-v-3/-/stores_brands-v-3-1.0.10.tgz", - "integrity": "sha512-ot4WFi6n5vZMOcYvEz5wd9WDIK3ezEG7FXrmWFAhv55DHpZh7PAz+DPQqkctOIlrGpdj6Re8IttXeR66ZcftLQ==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@wix/stores_brands-v-3/-/stores_brands-v-3-1.0.16.tgz", + "integrity": "sha512-t9ArrgyH1VGr4MRKkJBhgvGCVIzmB1g3ZU2YZC4unp3Be9z+Pt7YycYfxze70v8+lHlKdTLYfP/TV6+YnXQtBQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_catalog-versioning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@wix/stores_catalog-versioning/-/stores_catalog-versioning-1.0.3.tgz", - "integrity": "sha512-wb4Ucd5/2dclmoGG1qZs13W6V6w2s0ekqdtEMQV82s2mmUeaAI1wHwP1LRbwBRnPTmfP4aT2PtEa98rX8UqWbw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@wix/stores_catalog-versioning/-/stores_catalog-versioning-1.0.8.tgz", + "integrity": "sha512-lCMcaQXqk95pemXNDI+qr9lm2xpU0jxB2gLJbLmKUEDQbRbyl6W8L0qPDFniSnzjlHZxMs0zUMyCIyzskP48kw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_collections": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/@wix/stores_collections/-/stores_collections-1.0.36.tgz", - "integrity": "sha512-HxlsisSKFlPS/SIGG8Dqr0LRgWj75o9pt8BF5LQhooaVCl0NSafwhOquK8KCuZc+YuRJi/XTriKLj/wuQtchfg==", + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/@wix/stores_collections/-/stores_collections-1.0.42.tgz", + "integrity": "sha512-cY1dbQbLGkSjHf41OWj1L18yflWGOhF3Y6DIqLaaAzE82SsQn9WdogEfgiRqbd33LgtBir5Astkk7Fm7xa5GEg==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_customizations-v-3": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@wix/stores_customizations-v-3/-/stores_customizations-v-3-1.0.11.tgz", - "integrity": "sha512-vzp/N/lJJ2+liIwsgtEhObsAdTwtXZZ45Z3a2sizs5QxGC6lvhEeWDrGm/xfMkyZDnQTORW36xIr6UWNGHWYJw==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@wix/stores_customizations-v-3/-/stores_customizations-v-3-1.0.17.tgz", + "integrity": "sha512-Z7e9e+H4Uo5P64yxWiagqBs3bD05Skb8m+XFiKAy1wo7Y8/1YtNfjfRP4vL60P8MSPbC7w4nYQvfav1xMWbjcA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_info-sections-v-3": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@wix/stores_info-sections-v-3/-/stores_info-sections-v-3-1.0.12.tgz", - "integrity": "sha512-4ac4btSsboScTRwLDjP3lsmoRgqAuuwBrfmg+4TtOa5q7xrUN+iTgUWIdGpPbHd8OkTySbpjeykVcJsTiAWTHA==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@wix/stores_info-sections-v-3/-/stores_info-sections-v-3-1.0.18.tgz", + "integrity": "sha512-69x66P3dQs/wyBMWGx+jRv2pBa60326miygjGBo1SWiSOjb17ewuSW7LFfvLm4lCuTwQlwCE2v+4UxJBwQAsuw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_inventory": { - "version": "1.0.41", - "resolved": "https://registry.npmjs.org/@wix/stores_inventory/-/stores_inventory-1.0.41.tgz", - "integrity": "sha512-E0cWqfz+bQm/5lGlmXqffMFiKzXRaGMjf//IEQKKUn59KWuHQ6uLoD6fmWxrZVGpLmSIMJbtotmEVVcJRd+7aQ==", + "version": "1.0.54", + "resolved": "https://registry.npmjs.org/@wix/stores_inventory/-/stores_inventory-1.0.54.tgz", + "integrity": "sha512-qfxGlOsw19fsC8iW/GwUCiVoAwHZVUArvdc96R8RUqlrBYbFWa7TUe8JXrDXi6Fifw9RrkcoudodRyqWUujfuA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_inventory-items-v-3": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@wix/stores_inventory-items-v-3/-/stores_inventory-items-v-3-1.0.15.tgz", - "integrity": "sha512-R3x0I+w/W/THbofIta5HU7yof39qxuaoCbGPeZXYwAcqqULecuMka2SNFIbEueGHwSkcgKc5alrLnNHLDGjJcA==", + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/@wix/stores_inventory-items-v-3/-/stores_inventory-items-v-3-1.0.21.tgz", + "integrity": "sha512-/qgiuzzjv8P8OlRgkWLDSTky8m+RBHb+O03F5HFW+9XEBfUbUQg3DMDYwGebEwxWnkoDP5xyzpngFU5HmEcHRw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_products": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/@wix/stores_products/-/stores_products-1.0.55.tgz", - "integrity": "sha512-D1wS77AoqxETpIhS+21YZ2E6GOHvzRpC/9C5Tz4XdqcZurU27tV2xppiJ1mGCNltZ9lcOH8ksAIPYuk1a+aMdg==", + "version": "1.0.78", + "resolved": "https://registry.npmjs.org/@wix/stores_products/-/stores_products-1.0.78.tgz", + "integrity": "sha512-l0DdmcWkJIveq+dm4/lO71CzrxFer4Z8RdM5q90AeoA2kbm+GpEHYwO9Xf3YqU7Kndw/FxMXBDrEhu+GyendDw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_products-v-3": { - "version": "1.0.46", - "resolved": "https://registry.npmjs.org/@wix/stores_products-v-3/-/stores_products-v-3-1.0.46.tgz", - "integrity": "sha512-dfepN3679195jCPLCJNA78p54clSdJR0jAe1HP2k+yZdgeZVQr9UHP2DH4+WqfZKuep2RLdT/Wyvb2wW/zMvNw==", + "version": "1.0.58", + "resolved": "https://registry.npmjs.org/@wix/stores_products-v-3/-/stores_products-v-3-1.0.58.tgz", + "integrity": "sha512-ZgkVR634T5ATc5tfVn3MukLhQxb8kaTEOOFNHNR4YXhltWbHb56XeoZC9HNE5FgaYI58mKa4Zaqhvg2nI6VmwA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_ribbons-v-3": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@wix/stores_ribbons-v-3/-/stores_ribbons-v-3-1.0.11.tgz", - "integrity": "sha512-cisIotHZxzPTP8L25Y8ZjsRSwVfM9Ll5c/IqNcQ25wr93fVRLux5tRc+dofpjNBPk7cD8MxC5KAlgvYKuGbYmw==", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@wix/stores_ribbons-v-3/-/stores_ribbons-v-3-1.0.17.tgz", + "integrity": "sha512-IkqhUuq4WlC622lUKCgO8XFeyxrADWQmCDpF4p2oeEgQ1fkFLGb2eG9nH/mM0FOyy+H/uvxbFhI1RWRuQHW2QQ==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_stores-locations-v-3": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@wix/stores_stores-locations-v-3/-/stores_stores-locations-v-3-1.0.12.tgz", - "integrity": "sha512-D+IY1mlRMqR44UOPTDw+Y8KbCPbdCO5b8lc4SJaSzJvpmiiod+Z0jEkHIzhWYJvVAguRPsb+Burot/hl7reHNA==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@wix/stores_stores-locations-v-3/-/stores_stores-locations-v-3-1.0.18.tgz", + "integrity": "sha512-1kco3W8kfuZu50nhlQ2FnATjQCpwArRnlwyr6Py1jI9mJdr+EHfXlxaQRo+3GuSGZ8/finGETFhdDylkSMk8FA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_subscription-options": { - "version": "1.0.36", - "resolved": "https://registry.npmjs.org/@wix/stores_subscription-options/-/stores_subscription-options-1.0.36.tgz", - "integrity": "sha512-7SVzMWwKkQW3dMMihqEm18F+m+vyJ9vcsrLwKlCStfU67LOmKW+lIuVIVBk6pSyjVQ3IhXqsodXvRtoDyEE4Bw==", + "version": "1.0.41", + "resolved": "https://registry.npmjs.org/@wix/stores_subscription-options/-/stores_subscription-options-1.0.41.tgz", + "integrity": "sha512-5piM1xoQPcrgpfLR4+Dmw1X4m8Fk4PjRK8fQGD7XlpyAuneF8uQ2ZmPuR6GyxE971MMeNq7QLRsmdzmO1OwXeA==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wix/stores_wishlist": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/@wix/stores_wishlist/-/stores_wishlist-1.0.30.tgz", - "integrity": "sha512-H3XP/t4m15wOo2WB2r9kVtKo6PJlRRaI8co+Owk9iy5O44nnFLAeiGrR9vlnuN+7sWB80Dhin4tRL5e5zD/K/Q==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/@wix/stores_wishlist/-/stores_wishlist-1.0.34.tgz", + "integrity": "sha512-Sm5fu5oO97zwgEjvJ8/SAapz2XRt7DgWtuxu+OllVisPAXqKKWIYvH0hJjsEYOKdtQKt0q1J8hYK3AikIZziMw==", "dependencies": { - "@wix/metro-runtime": "^1.1792.0", - "@wix/motion-edm-autogen-query-wrapper": "^1.0.37", - "@wix/sdk-runtime": "^0.3.14", - "@wix/sdk-types": "^1.9.2" + "@wix/sdk-runtime": "^0.3.22", + "@wix/sdk-types": "^1.12.4" } }, "node_modules/@wixc3/app-core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@wixc3/app-core/-/app-core-4.3.3.tgz", - "integrity": "sha512-/vGWWDrOdoIxTRuuOPreB7iLJVXmOommoYB6Q97x+FQ5lCWN1sP7nnK2ERXXrgOI5LeyAh9U2dAEgKHvz8gqOA==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@wixc3/app-core/-/app-core-4.5.1.tgz", + "integrity": "sha512-stJvzmfQu26WZ/HpGqxpyD4yCBgoI4+9QzhnsQK+SwimnpeUtqNPHmbd7lyW7ObXsBy4bs9VTo8Ee40eyvw7Cg==", "dev": true, - "license": "MIT", "dependencies": { "@file-services/types": "^9.4.1", "@wixc3/react-board": "^4.3.3" @@ -3665,21 +3529,19 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/@wixc3/board-core/-/board-core-4.3.3.tgz", "integrity": "sha512-H031wzntdtdtuu5w7T5WLz9IdHQM2ChGaMH3Y5lMSqGZLzMjCpAviEekpPaHWwNu3w5RveadbMownS6JVb8U5Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@wixc3/define-remix-app": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@wixc3/define-remix-app/-/define-remix-app-4.3.3.tgz", - "integrity": "sha512-vpK36NB+EGVAiIMYVmCOfMwOX8awCiIB3lUo+vGFDVN0KZdkb9AB0iCBTQZxLuTOAKZvZlAMmVj0Wd4H9cRRqw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@wixc3/define-remix-app/-/define-remix-app-4.5.1.tgz", + "integrity": "sha512-h3MRxZ6JBP5nAsRdmLND/YNzZJtWZF3EoXiG0K/JBB87pfuD78tmFv9SLG1nXRGPrS0dKP9CbOu5bWgM3XtZOA==", "dev": true, - "license": "MIT", "dependencies": { - "@remix-run/node": "^2.12.1", - "@remix-run/react": "^2.12.1", - "@remix-run/router": "^1.19.2", - "@remix-run/testing": "^2.12.1", - "@wixc3/app-core": "^4.3.3" + "@remix-run/node": "^2.13.1", + "@remix-run/react": "^2.13.1", + "@remix-run/router": "^1.20.0", + "@remix-run/testing": "^2.13.1", + "@wixc3/app-core": "^4.5.1" }, "peerDependencies": { "react": "^18.0.0", @@ -3691,7 +3553,6 @@ "resolved": "https://registry.npmjs.org/@wixc3/react-board/-/react-board-4.3.3.tgz", "integrity": "sha512-Ltq9uLTwPFT7+OTOHivG4B6P2Nusca7qSV/ng6x0P2/QL9zFLmSEy0Olh4li6QOXNsDyQq6CvUFBORfRpIuuBg==", "dev": true, - "license": "MIT", "dependencies": { "@wixc3/board-core": "^4.3.3" }, @@ -3704,14 +3565,12 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "license": "(Unlicense OR Apache-2.0)", "optional": true }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -3723,7 +3582,6 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3733,11 +3591,10 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3750,7 +3607,6 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3760,7 +3616,6 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3774,7 +3629,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3791,7 +3645,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -3801,7 +3654,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3816,7 +3668,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3829,23 +3680,20 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "deep-equal": "^2.0.5" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { @@ -3853,7 +3701,6 @@ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -3868,15 +3715,13 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3897,7 +3742,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3918,7 +3762,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3939,7 +3782,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3958,7 +3800,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3977,7 +3818,6 @@ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3994,7 +3834,6 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -4016,15 +3855,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/astring": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "dev": true, - "license": "MIT", "bin": { "astring": "bin/astring" } @@ -4033,7 +3870,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -4045,11 +3881,10 @@ } }, "node_modules/axe-core": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", - "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, - "license": "MPL-2.0", "engines": { "node": ">=4" } @@ -4059,7 +3894,6 @@ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -4069,7 +3903,6 @@ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4079,8 +3912,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -4100,14 +3932,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -4119,7 +3949,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -4132,7 +3961,6 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4143,7 +3971,6 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -4167,7 +3994,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4176,7 +4002,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4184,15 +4009,13 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4201,7 +4024,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -4214,15 +4036,14 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", "dev": true, - "license": "MIT", "dependencies": { "pako": "~0.2.0" } }, "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -4238,12 +4059,11 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -4271,7 +4091,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4280,14 +4099,12 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4297,7 +4114,6 @@ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4307,7 +4123,6 @@ "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -4331,7 +4146,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } @@ -4340,7 +4154,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4360,28 +4173,14 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001675", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001675.tgz", + "integrity": "sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==", "dev": true, "funding": [ { @@ -4396,15 +4195,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/ccount": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4415,7 +4212,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4432,7 +4228,6 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4443,7 +4238,6 @@ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4454,7 +4248,6 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4465,7 +4258,6 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4475,7 +4267,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4500,7 +4291,6 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } @@ -4508,15 +4298,13 @@ "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -4526,7 +4314,6 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4539,7 +4326,6 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -4550,15 +4336,13 @@ "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", - "license": "MIT" + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } @@ -4568,7 +4352,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -4580,15 +4363,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/comma-separated-tokens": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4598,7 +4379,6 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -4610,7 +4390,6 @@ "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -4628,7 +4407,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -4636,28 +4414,24 @@ "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/confbox": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/constant-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -4668,7 +4442,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -4693,14 +4466,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4709,23 +4480,20 @@ "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, - "license": "MIT" + "dev": true }, "node_modules/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", - "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==", - "license": "MIT", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "engines": { "node": ">=6.6.0" } @@ -4734,42 +4502,13 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4784,7 +4523,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4800,7 +4538,6 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -4813,7 +4550,6 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4825,21 +4561,18 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, - "license": "MIT" + "devOptional": true }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" + "dev": true }, "node_modules/data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", - "license": "MIT", "engines": { "node": ">= 6" } @@ -4849,7 +4582,6 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4867,7 +4599,6 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4885,7 +4616,6 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4903,7 +4633,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -4921,7 +4650,6 @@ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, - "license": "MIT", "dependencies": { "character-entities": "^2.0.0" }, @@ -4935,7 +4663,6 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, - "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -4945,44 +4672,10 @@ } } }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-for-each": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-3.0.0.tgz", "integrity": "sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw==", - "license": "MIT", "dependencies": { "lodash.isplainobject": "^4.0.6" } @@ -4991,22 +4684,19 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/deep-object-diff": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz", "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5016,7 +4706,6 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -5028,7 +4717,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5046,7 +4734,6 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5063,7 +4750,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5073,7 +4759,6 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5082,12 +4767,23 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", @@ -5098,7 +4794,6 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -5108,7 +4803,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5116,23 +4810,11 @@ "node": ">=6.0.0" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -5145,7 +4827,6 @@ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -5157,15 +4838,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5181,7 +4860,6 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -5190,34 +4868,29 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.32", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz", - "integrity": "sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==", - "dev": true, - "license": "ISC" + "version": "1.5.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", + "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5227,7 +4900,6 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -5237,7 +4909,6 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -5246,42 +4917,17 @@ "node": ">=10.13.0" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } + "dev": true }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -5341,7 +4987,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -5349,42 +4994,19 @@ "node": ">= 0.4" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5393,12 +5015,12 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", + "iterator.prototype": "^1.1.3", "safe-array-concat": "^1.1.2" }, "engines": { @@ -5409,15 +5031,13 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -5430,7 +5050,6 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -5445,7 +5064,6 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" } @@ -5455,7 +5073,6 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5474,7 +5091,6 @@ "integrity": "sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -5511,7 +5127,6 @@ "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.6.7.tgz", "integrity": "sha512-1lzsVFT/6OO1ZATHKZqSP+qYzyFo2d+QF9QzMKsyJR7GMRScYizYb1uEEE4NxTsBSxWviY3xnmN9dEOTaKFbJA==", "dev": true, - "license": "MIT", "dependencies": { "@jspm/core": "^2.0.1", "local-pkg": "^0.5.0", @@ -5529,7 +5144,6 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -5537,15 +5151,13 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5559,7 +5171,6 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -5615,7 +5226,6 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -5628,7 +5238,6 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5640,7 +5249,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5650,7 +5258,6 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", "dev": true, - "license": "ISC", "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.3.5", @@ -5686,7 +5293,6 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -5704,7 +5310,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5714,7 +5319,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, - "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -5748,7 +5352,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5759,7 +5362,6 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -5769,7 +5371,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5782,7 +5383,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -5795,7 +5395,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5808,7 +5407,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5818,7 +5416,6 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -5827,13 +5424,12 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz", - "integrity": "sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, - "license": "MIT", "dependencies": { - "aria-query": "~5.1.3", + "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", @@ -5841,14 +5437,13 @@ "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.19", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.0" + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" @@ -5862,7 +5457,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5873,7 +5467,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5882,18 +5475,17 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.1.tgz", - "integrity": "sha512-xwTnwDqzbDRA8uJ7BMxPs/EXRB3i8ZfnOIp8BsxEQkT0nHPp+WWceqGgo6rKb9ctNi8GJLDT4Go5HAWELa/WMg==", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", @@ -5915,16 +5507,15 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -5932,7 +5523,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5943,7 +5533,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5956,7 +5545,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5969,7 +5557,6 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -5987,7 +5574,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5997,7 +5583,6 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6014,7 +5599,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6027,7 +5611,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6038,7 +5621,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6051,7 +5633,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -6067,7 +5648,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6080,7 +5660,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6093,7 +5672,6 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -6111,7 +5689,6 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6124,7 +5701,6 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6137,7 +5713,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6147,7 +5722,6 @@ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" }, @@ -6161,7 +5735,6 @@ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz", "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "estree-util-is-identifier-name": "^2.0.0", @@ -6177,7 +5750,6 @@ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", "dev": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -6188,7 +5760,6 @@ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz", "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", @@ -6204,7 +5775,6 @@ "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz", "integrity": "sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-obj": "^3.0.0" }, @@ -6217,7 +5787,6 @@ "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/unist": "^2.0.0" @@ -6232,7 +5801,6 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } @@ -6242,7 +5810,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -6251,7 +5818,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6273,7 +5839,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -6283,7 +5848,6 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6307,7 +5871,6 @@ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -6316,17 +5879,16 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", - "license": "MIT", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6357,17 +5919,23 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/express/node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6375,8 +5943,7 @@ "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", @@ -6395,28 +5962,24 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6432,22 +5995,19 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -6457,7 +6017,6 @@ "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "dev": true, - "license": "MIT", "dependencies": { "format": "^0.2.0" }, @@ -6471,7 +6030,6 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -6483,7 +6041,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6495,7 +6052,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -6513,7 +6069,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -6521,15 +6076,13 @@ "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -6546,7 +6099,6 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -6560,14 +6112,12 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -6577,7 +6127,6 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6594,7 +6143,6 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", "engines": { "node": ">=14" }, @@ -6615,15 +6163,14 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/framer-motion": { - "version": "11.11.8", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.8.tgz", - "integrity": "sha512-mnGQNEoz99GtFXBBPw+Ag5K4FcfP5XrXxrxHz+iE4Lmg7W3sf2gKmGuvfkZCW/yIfcdv5vJd6KiSPETH1Pw68Q==", + "version": "11.11.10", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.10.tgz", + "integrity": "sha512-061Bt1jL/vIm+diYIiA4dP/Yld7vD47ROextS7ESBW5hr4wQFhxB5D5T5zAc3c/5me3cOa+iO5LqhA38WDln/A==", "dependencies": { "tslib": "^2.4.0" }, @@ -6648,7 +6195,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6657,15 +6203,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6680,7 +6224,6 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -6692,15 +6235,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -6713,7 +6254,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6723,7 +6263,6 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6742,7 +6281,6 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6752,7 +6290,6 @@ "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", "dev": true, - "license": "MIT", "dependencies": { "loader-utils": "^3.2.0" } @@ -6762,7 +6299,6 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -6771,7 +6307,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -6798,7 +6333,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "license": "MIT", "engines": { "node": ">=8" }, @@ -6811,7 +6345,6 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -6824,7 +6357,6 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -6842,7 +6374,6 @@ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, - "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6855,7 +6386,6 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -6875,7 +6405,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6888,7 +6417,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -6898,7 +6426,6 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -6914,14 +6441,12 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6933,21 +6458,18 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/graphql": { "version": "16.9.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==", - "license": "MIT", "optional": true, "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -6958,7 +6480,6 @@ "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", "dev": true, - "license": "MIT", "dependencies": { "browserify-zlib": "^0.1.4", "is-deflate": "^1.0.0", @@ -6976,7 +6497,6 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6986,7 +6506,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -6995,7 +6514,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -7007,7 +6525,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7019,7 +6536,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7031,7 +6547,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7046,7 +6561,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7059,7 +6573,6 @@ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz", "integrity": "sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", @@ -7087,7 +6600,6 @@ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", "dev": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -7098,7 +6610,6 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -7111,7 +6622,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } @@ -7120,7 +6630,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7135,15 +6644,13 @@ "node_modules/http-status-codes": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", - "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==", - "license": "MIT" + "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==" }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -7152,7 +6659,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7165,7 +6671,6 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -7191,15 +6696,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -7208,15 +6711,13 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7233,7 +6734,6 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -7243,7 +6743,6 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7254,7 +6753,6 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7263,22 +6761,19 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/inline-style-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -7300,7 +6795,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", "engines": { "node": ">= 0.10" } @@ -7310,7 +6804,6 @@ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7321,7 +6814,6 @@ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dev": true, - "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" @@ -7335,7 +6827,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7352,7 +6843,6 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -7364,19 +6854,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7392,7 +6874,6 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -7404,7 +6885,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -7417,7 +6897,6 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7448,7 +6927,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=4" } @@ -7458,7 +6936,6 @@ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.6.3" } @@ -7467,7 +6944,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7480,7 +6956,6 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -7496,7 +6971,6 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, - "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -7512,7 +6986,6 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7528,7 +7001,6 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7538,14 +7010,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7555,7 +7025,6 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7568,7 +7037,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7577,7 +7045,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7592,7 +7059,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -7605,7 +7071,6 @@ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7615,7 +7080,6 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7626,7 +7090,6 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7636,7 +7099,6 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7649,7 +7111,6 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7661,7 +7122,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -7671,7 +7131,6 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7687,7 +7146,6 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -7697,7 +7155,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7710,7 +7167,6 @@ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -7720,7 +7176,6 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7737,7 +7192,6 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7750,7 +7204,6 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -7766,7 +7219,6 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -7779,7 +7231,6 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7795,7 +7246,6 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -7810,7 +7260,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -7826,7 +7275,6 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7839,7 +7287,6 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7852,7 +7299,6 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -7865,7 +7311,6 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -7881,14 +7326,12 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/isbot": { "version": "5.1.17", "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.17.tgz", "integrity": "sha512-/wch8pRKZE+aoVhRX/hYPY1C7dMCeeMyhkQLNLNlYAbGQn9bkvMB8fOUXNnk5I0m4vDYbBJ9ciVtkr9zfBJ7qA==", - "license": "Unlicense", "engines": { "node": ">=18" } @@ -7897,21 +7340,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -7919,7 +7363,6 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -7934,14 +7377,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/jose": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.3.tgz", - "integrity": "sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==", - "license": "MIT", + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -7949,29 +7390,17 @@ "node_modules/js-base64": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", - "license": "BSD-3-Clause" - }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", - "license": "MIT", - "engines": { - "node": ">=14" - } + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7984,7 +7413,6 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -7996,15 +7424,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, - "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8013,22 +7439,19 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" + "dev": true }, "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, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -8041,7 +7464,6 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -8053,7 +7475,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-5.1.0.tgz", "integrity": "sha512-890w2Pjtj0iswAxalRlt2kHthi6HKrXEfZcn+ZNZptv7F3rUGIeDuZo+C+h4vXBHLEsVjJrHeCm35nYeZLzSBQ==", - "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -8063,7 +7484,6 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -8079,7 +7499,6 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -8088,7 +7507,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8098,7 +7516,6 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -8107,15 +7524,13 @@ "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" + "dev": true }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MIT", "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -8128,7 +7543,6 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -8142,7 +7556,6 @@ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" }, @@ -8150,19 +7563,11 @@ "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, "node_modules/loader-utils": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -8172,7 +7577,6 @@ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, - "license": "MIT", "dependencies": { "mlly": "^1.4.2", "pkg-types": "^1.0.3" @@ -8189,7 +7593,6 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -8203,42 +7606,36 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -8253,15 +7650,13 @@ "node_modules/long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "license": "Apache-2.0" + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8271,7 +7666,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -8283,7 +7677,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -8293,7 +7686,6 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -8303,7 +7695,6 @@ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8313,7 +7704,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -8329,7 +7719,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -8354,7 +7743,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-markdown": "^1.3.0", @@ -8370,7 +7758,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", "dev": true, - "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^1.0.0", "mdast-util-mdx-expression": "^1.0.0", @@ -8388,7 +7775,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^2.0.0", @@ -8406,7 +7792,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^2.0.0", @@ -8431,7 +7816,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", "@types/hast": "^2.0.0", @@ -8449,7 +7833,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "unist-util-is": "^5.0.0" @@ -8464,7 +7847,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", "dev": true, - "license": "MIT", "dependencies": { "@types/hast": "^2.0.0", "@types/mdast": "^3.0.0", @@ -8485,7 +7867,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", @@ -8506,7 +7887,6 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0" }, @@ -8520,7 +7900,6 @@ "resolved": "https://registry.npmjs.org/media-query-parser/-/media-query-parser-2.0.2.tgz", "integrity": "sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5" } @@ -8529,7 +7908,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8538,7 +7916,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -8547,15 +7924,13 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -8564,7 +7939,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8584,7 +7958,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -8620,7 +7993,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-factory-destination": "^1.0.0", @@ -8645,7 +8017,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz", "integrity": "sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==", "dev": true, - "license": "MIT", "dependencies": { "fault": "^2.0.0", "micromark-util-character": "^1.0.0", @@ -8672,7 +8043,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "micromark-factory-mdx-expression": "^1.0.0", @@ -8689,7 +8059,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", "dev": true, - "license": "MIT", "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", @@ -8712,7 +8081,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", "dev": true, - "license": "MIT", "dependencies": { "micromark-util-types": "^1.0.0" }, @@ -8726,7 +8094,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.0.0", "acorn-jsx": "^5.0.0", @@ -8747,7 +8114,6 @@ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "micromark-core-commonmark": "^1.0.0", @@ -8779,7 +8145,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -8801,7 +8166,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -8824,7 +8188,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -8851,7 +8214,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -8872,7 +8234,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -8895,7 +8256,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -8918,7 +8278,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -8939,7 +8298,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0" } @@ -8959,7 +8317,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -8981,7 +8338,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-chunked": "^1.0.0", "micromark-util-types": "^1.0.0" @@ -9002,7 +8358,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0" } @@ -9022,7 +8377,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "micromark-util-character": "^1.0.0", @@ -9044,8 +8398,7 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromark-util-events-to-acorn": { "version": "1.2.3", @@ -9062,7 +8415,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", @@ -9088,8 +8440,7 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromark-util-normalize-identifier": { "version": "1.1.0", @@ -9106,7 +8457,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-symbol": "^1.0.0" } @@ -9126,7 +8476,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-types": "^1.0.0" } @@ -9146,7 +8495,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-character": "^1.0.0", "micromark-util-encode": "^1.0.0", @@ -9168,7 +8516,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "micromark-util-chunked": "^1.0.0", "micromark-util-symbol": "^1.0.0", @@ -9190,8 +8537,7 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromark-util-types": { "version": "1.1.0", @@ -9207,15 +8553,13 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ], - "license": "MIT" + ] }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -9228,7 +8572,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9240,7 +8583,6 @@ "version": "1.53.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9249,7 +8591,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -9261,7 +8602,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9271,7 +8611,6 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -9281,7 +8620,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9297,7 +8635,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9307,7 +8644,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -9317,7 +8653,6 @@ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -9330,7 +8665,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9342,15 +8676,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -9363,7 +8695,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9375,15 +8706,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -9396,7 +8725,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9408,15 +8736,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -9430,7 +8756,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9442,15 +8767,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -9462,15 +8785,13 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/mlly": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.2.tgz", "integrity": "sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.12.1", "pathe": "^1.1.2", @@ -9482,14 +8803,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/modern-ahocorasick/-/modern-ahocorasick-1.0.1.tgz", "integrity": "sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "license": "MIT", "dependencies": { "basic-auth": "~2.0.1", "debug": "2.6.9", @@ -9505,7 +8824,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -9513,14 +8831,12 @@ "node_modules/morgan/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/morgan/node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -9533,7 +8849,6 @@ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -9542,7 +8857,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "license": "MIT", "engines": { "node": ">=10" } @@ -9550,8 +8864,7 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { "version": "3.3.7", @@ -9564,7 +8877,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -9576,14 +8888,12 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9592,25 +8902,28 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/normalize-package-data": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", @@ -9625,7 +8938,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9635,7 +8947,6 @@ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -9648,7 +8959,6 @@ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -9658,7 +8968,6 @@ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^6.0.0", "proc-log": "^3.0.0", @@ -9674,7 +8983,6 @@ "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz", "integrity": "sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==", "dev": true, - "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -9690,7 +8998,6 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -9703,7 +9010,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9712,24 +9018,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, "engines": { "node": ">= 0.4" }, @@ -9742,7 +9030,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -9752,7 +9039,6 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -9771,7 +9057,6 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9786,7 +9071,6 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9805,7 +9089,6 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9820,7 +9103,6 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -9837,7 +9119,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -9849,7 +9130,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -9859,7 +9139,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } @@ -9869,7 +9148,6 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -9885,7 +9163,6 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -9903,7 +9180,6 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -9926,15 +9202,13 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.8.0.tgz", "integrity": "sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -9950,7 +9224,6 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9966,7 +9239,6 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -9981,22 +9253,19 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" + "dev": true }, "node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10009,7 +9278,6 @@ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "character-entities": "^2.0.0", @@ -10025,38 +9293,11 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/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", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, "node_modules/parse-ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -10065,7 +9306,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -10075,7 +9315,6 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -10085,7 +9324,6 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10095,7 +9333,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -10104,15 +9341,13 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -10128,38 +9363,24 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/pathe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/peek-stream": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "duplexify": "^3.5.0", @@ -10171,7 +9392,6 @@ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^3.0.0", @@ -10179,17 +9399,15 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "devOptional": true, - "license": "ISC" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "devOptional": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10202,7 +9420,6 @@ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -10211,14 +9428,13 @@ } }, "node_modules/pkg-types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", - "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", "dev": true, - "license": "MIT", "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", + "confbox": "^0.1.8", + "mlly": "^1.7.2", "pathe": "^1.1.2" } }, @@ -10226,7 +9442,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10250,7 +9465,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.1.0", @@ -10265,7 +9479,6 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -10288,7 +9501,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -10314,7 +9526,6 @@ "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz", "integrity": "sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==", "dev": true, - "license": "MIT", "dependencies": { "generic-names": "^4.0.0", "icss-utils": "^5.1.0", @@ -10334,7 +9545,6 @@ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -10347,7 +9557,6 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -10365,7 +9574,6 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, - "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -10381,7 +9589,6 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -10397,7 +9604,6 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -10410,30 +9616,27 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, - "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -10444,7 +9647,6 @@ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, - "license": "MIT", "dependencies": { "parse-ms": "^2.1.0" }, @@ -10460,7 +9662,6 @@ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -10469,22 +9670,19 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -10498,7 +9696,6 @@ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, - "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -10510,7 +9707,6 @@ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10520,7 +9716,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -10534,7 +9729,6 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10545,7 +9739,6 @@ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, - "license": "MIT", "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -10557,7 +9750,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -10566,7 +9758,6 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -10582,7 +9773,6 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "license": "MIT", "engines": { "node": ">=0.4.x" } @@ -10605,14 +9795,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10621,7 +9809,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -10636,7 +9823,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -10645,7 +9831,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -10657,7 +9842,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -10670,15 +9854,13 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10729,12 +9911,11 @@ } }, "node_modules/react-router": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", - "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", - "license": "MIT", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", "dependencies": { - "@remix-run/router": "1.19.2" + "@remix-run/router": "1.20.0" }, "engines": { "node": ">=14.0.0" @@ -10744,13 +9925,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", - "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", - "license": "MIT", + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", "dependencies": { - "@remix-run/router": "1.19.2", - "react-router": "6.26.2" + "@remix-run/router": "1.20.0", + "react-router": "6.27.0" }, "engines": { "node": ">=14.0.0" @@ -10787,7 +9967,6 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10801,7 +9980,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10814,7 +9992,6 @@ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10834,15 +10011,13 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10861,7 +10036,6 @@ "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-frontmatter": "^1.0.0", @@ -10878,7 +10052,6 @@ "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", "dev": true, - "license": "MIT", "dependencies": { "mdast-util-mdx": "^2.0.0", "micromark-extension-mdxjs": "^1.0.0" @@ -10893,7 +10066,6 @@ "resolved": "https://registry.npmjs.org/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz", "integrity": "sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==", "dev": true, - "license": "MIT", "dependencies": { "estree-util-is-identifier-name": "^1.0.0", "estree-util-value-to-estree": "^1.0.0", @@ -10909,7 +10081,6 @@ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz", "integrity": "sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10920,7 +10091,6 @@ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-from-markdown": "^1.0.0", @@ -10936,7 +10106,6 @@ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", "dev": true, - "license": "MIT", "dependencies": { "@types/hast": "^2.0.0", "@types/mdast": "^3.0.0", @@ -11016,7 +10185,6 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -11034,7 +10202,6 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -11044,7 +10211,6 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -11054,7 +10220,6 @@ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } @@ -11064,7 +10229,6 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11078,7 +10242,6 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } @@ -11088,7 +10251,6 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -11100,7 +10262,6 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -11116,7 +10277,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11128,7 +10288,6 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11149,7 +10308,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11158,11 +10316,10 @@ } }, "node_modules/rollup": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", - "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz", + "integrity": "sha512-HBW896xR5HGmoksbi3JBDtmVzWiPAYqp7wip50hjQ67JbDz61nyoMPdqu1DvVW9asYb2M65Z20ZHsyJCMqMyDg==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.6" }, @@ -11174,22 +10331,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.24.0", - "@rollup/rollup-android-arm64": "4.24.0", - "@rollup/rollup-darwin-arm64": "4.24.0", - "@rollup/rollup-darwin-x64": "4.24.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", - "@rollup/rollup-linux-arm-musleabihf": "4.24.0", - "@rollup/rollup-linux-arm64-gnu": "4.24.0", - "@rollup/rollup-linux-arm64-musl": "4.24.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", - "@rollup/rollup-linux-riscv64-gnu": "4.24.0", - "@rollup/rollup-linux-s390x-gnu": "4.24.0", - "@rollup/rollup-linux-x64-gnu": "4.24.0", - "@rollup/rollup-linux-x64-musl": "4.24.0", - "@rollup/rollup-win32-arm64-msvc": "4.24.0", - "@rollup/rollup-win32-ia32-msvc": "4.24.0", - "@rollup/rollup-win32-x64-msvc": "4.24.0", + "@rollup/rollup-android-arm-eabi": "4.24.3", + "@rollup/rollup-android-arm64": "4.24.3", + "@rollup/rollup-darwin-arm64": "4.24.3", + "@rollup/rollup-darwin-x64": "4.24.3", + "@rollup/rollup-freebsd-arm64": "4.24.3", + "@rollup/rollup-freebsd-x64": "4.24.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.3", + "@rollup/rollup-linux-arm-musleabihf": "4.24.3", + "@rollup/rollup-linux-arm64-gnu": "4.24.3", + "@rollup/rollup-linux-arm64-musl": "4.24.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.3", + "@rollup/rollup-linux-riscv64-gnu": "4.24.3", + "@rollup/rollup-linux-s390x-gnu": "4.24.3", + "@rollup/rollup-linux-x64-gnu": "4.24.3", + "@rollup/rollup-linux-x64-musl": "4.24.3", + "@rollup/rollup-win32-arm64-msvc": "4.24.3", + "@rollup/rollup-win32-ia32-msvc": "4.24.3", + "@rollup/rollup-win32-x64-msvc": "4.24.3", "fsevents": "~2.3.2" } }, @@ -11212,7 +10371,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -11222,7 +10380,6 @@ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, - "license": "MIT", "dependencies": { "mri": "^1.1.0" }, @@ -11235,7 +10392,6 @@ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -11252,15 +10408,13 @@ "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -11276,16 +10430,15 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.79.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", - "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", + "version": "1.79.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.6.tgz", + "integrity": "sha512-PVVjeeiUGx6Nj4PtEE/ecwu8ltwfPKzHxbbVmmLj4l1FYHhOyfA0scuVF8sVaa+b+VY4z7BVKjKq0cPUQdUU3g==", "dev": true, - "license": "MIT", "dependencies": { + "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" @@ -11302,7 +10455,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dev": true, - "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -11318,7 +10470,6 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14.16.0" }, @@ -11331,7 +10482,6 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -11341,7 +10491,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -11353,7 +10502,6 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -11377,7 +10525,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -11385,14 +10532,12 @@ "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -11401,7 +10546,6 @@ "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -11413,16 +10557,14 @@ } }, "node_modules/set-cookie-parser": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz", - "integrity": "sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==", - "license": "MIT" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11440,7 +10582,6 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -11454,15 +10595,13 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -11475,7 +10614,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -11484,7 +10622,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -11502,25 +10639,12 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } + "dev": true }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -11530,7 +10654,6 @@ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "devOptional": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -11539,7 +10662,6 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11549,7 +10671,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -11559,7 +10680,6 @@ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11570,7 +10690,6 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -11580,15 +10699,13 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -11598,15 +10715,13 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true, - "license": "CC0-1.0" + "dev": true }, "node_modules/ssri": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -11618,43 +10733,26 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/stream-slice": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz", - "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==", - "license": "MIT" + "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==" }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -11677,22 +10775,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==", - "dev": true, - "license": "CC0-1.0" + "dev": true }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -11711,7 +10806,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11725,15 +10819,13 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -11746,7 +10838,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11758,14 +10849,17 @@ } }, "node_modules/string.prototype.includes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", - "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, - "license": "MIT", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/string.prototype.matchall": { @@ -11773,7 +10867,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11800,7 +10893,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -11811,7 +10903,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11830,7 +10921,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11845,7 +10935,6 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -11863,7 +10952,6 @@ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "dev": true, - "license": "MIT", "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" @@ -11878,7 +10966,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11892,7 +10979,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -11905,7 +10991,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -11915,7 +11000,6 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -11925,7 +11009,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -11938,7 +11021,6 @@ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", "dev": true, - "license": "MIT", "dependencies": { "inline-style-parser": "0.1.1" } @@ -11948,7 +11030,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11961,7 +11042,6 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11969,18 +11049,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true, - "license": "MIT" - }, "node_modules/swr": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", - "license": "MIT", "dependencies": { "client-only": "^0.0.1", "use-sync-external-store": "^1.2.0" @@ -11994,7 +11066,6 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } @@ -12004,7 +11075,6 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, - "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -12022,7 +11092,6 @@ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "dev": true, - "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -12034,15 +11103,13 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/tar-fs/node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12053,7 +11120,6 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -12070,7 +11136,6 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -12083,7 +11148,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -12096,7 +11160,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=8" } @@ -12105,22 +11168,19 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -12130,15 +11190,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12154,26 +11212,14 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -12185,7 +11231,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", "engines": { "node": ">=0.6" } @@ -12194,15 +11239,13 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12213,7 +11256,6 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12224,7 +11266,6 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" }, @@ -12233,11 +11274,10 @@ } }, "node_modules/tsconfck": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.3.tgz", - "integrity": "sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.4.tgz", + "integrity": "sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==", "dev": true, - "license": "MIT", "bin": { "tsconfck": "bin/tsconfck.js" }, @@ -12258,7 +11298,6 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, - "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -12269,23 +11308,20 @@ } }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/turbo-stream": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", - "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", - "license": "ISC" + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -12297,7 +11333,6 @@ "version": "4.26.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -12309,7 +11344,6 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -12323,7 +11357,6 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -12338,7 +11371,6 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -12358,7 +11390,6 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -12379,7 +11410,6 @@ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -12396,11 +11426,10 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "devOptional": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12413,15 +11442,13 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -12433,10 +11460,9 @@ } }, "node_modules/undici": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", - "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", - "license": "MIT", + "version": "6.20.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.1.tgz", + "integrity": "sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==", "engines": { "node": ">=18.17" } @@ -12445,15 +11471,13 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "bail": "^2.0.0", @@ -12473,7 +11497,6 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12486,7 +11509,6 @@ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, - "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" }, @@ -12499,7 +11521,6 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -12512,7 +11533,6 @@ "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", "dev": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -12523,7 +11543,6 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -12537,7 +11556,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -12551,7 +11569,6 @@ "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -12565,7 +11582,6 @@ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-visit": "^4.0.0" @@ -12580,7 +11596,6 @@ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0" }, @@ -12594,7 +11609,6 @@ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0", @@ -12610,7 +11624,6 @@ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^5.0.0" @@ -12625,7 +11638,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -12634,7 +11646,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -12658,7 +11669,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.0" @@ -12674,7 +11684,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -12684,7 +11693,6 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -12692,8 +11700,7 @@ "node_modules/urlpattern-polyfill": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "license": "MIT" + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==" }, "node_modules/use-callback-ref": { "version": "1.3.2", @@ -12740,7 +11747,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", - "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -12749,7 +11755,6 @@ "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -12762,14 +11767,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -12779,7 +11782,6 @@ "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", "dev": true, - "license": "MIT", "dependencies": { "dequal": "^2.0.0", "diff": "^5.0.0", @@ -12798,7 +11800,6 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -12809,7 +11810,6 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -12818,7 +11818,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -12828,7 +11827,6 @@ "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -12845,7 +11843,6 @@ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^3.0.0" @@ -12856,11 +11853,10 @@ } }, "node_modules/vite": { - "version": "5.4.8", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", - "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "devOptional": true, - "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -12920,7 +11916,6 @@ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dev": true, - "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", @@ -12938,27 +11933,11 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/vite-plugin-svgr": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", - "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.5", - "@svgr/core": "^8.1.0", - "@svgr/plugin-jsx": "^8.1.0" - }, - "peerDependencies": { - "vite": "^2.6.0 || 3 || 4 || 5" - } - }, "node_modules/vite-tsconfig-paths": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.0.1.tgz", "integrity": "sha512-yqwv+LstU7NwPeNqajZzLEBVpUFU6Dugtb2P84FXuvaoYA+/70l9MHE+GYfYAycVyPSDYZ7mjOFuYBRqlEpTig==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", @@ -12981,7 +11960,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -12998,7 +11976,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -13015,7 +11992,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -13032,7 +12008,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -13049,7 +12024,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -13066,7 +12040,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -13083,7 +12056,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -13100,7 +12072,6 @@ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13117,7 +12088,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13134,7 +12104,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13151,7 +12120,6 @@ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13168,7 +12136,6 @@ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13185,7 +12152,6 @@ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13202,7 +12168,6 @@ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13219,7 +12184,6 @@ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13236,7 +12200,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -13253,7 +12216,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -13270,7 +12232,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -13287,7 +12248,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -13304,7 +12264,6 @@ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -13321,7 +12280,6 @@ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -13338,7 +12296,6 @@ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -13353,7 +12310,6 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "devOptional": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -13391,7 +12347,6 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -13400,7 +12355,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "license": "MIT", "dependencies": { "util": "^0.12.3" }, @@ -13412,7 +12366,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -13422,7 +12375,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -13438,7 +12390,6 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -13455,7 +12406,6 @@ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", "dev": true, - "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", @@ -13482,7 +12432,6 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -13500,7 +12449,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -13520,7 +12468,6 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13530,7 +12477,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -13549,7 +12495,6 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13566,15 +12511,13 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13589,7 +12532,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13602,7 +12544,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13615,7 +12556,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -13630,15 +12570,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -13660,7 +12598,6 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4" } @@ -13669,15 +12606,13 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", "dev": true, - "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -13690,7 +12625,6 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13703,7 +12637,6 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" diff --git a/package.json b/package.json index facd549..976ca31 100644 --- a/package.json +++ b/package.json @@ -1,61 +1,61 @@ { - "name": "e-commerce-remix", + "name": "e-commerce-reclaim", + "version": "0.1.0", "private": true, "sideEffects": false, "type": "module", - "version": "1.0.0", "scripts": { "build": "remix vite:build", "dev": "remix vite:dev", - "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .", + "lint": "eslint --ignore-path .gitignore .", "typecheck": "tsc", "prettier:check": "prettier . -c" }, "dependencies": { + "@emotion/is-prop-valid": "^1.3.1", "@netlify/functions": "^2.8.2", "@netlify/remix-adapter": "^2.5.1", "@radix-ui/react-icons": "^1.3.0", - "@remix-run/node": "^2.12.1", - "@remix-run/react": "^2.12.1", - "@remix-run/serve": "^2.12.1", - "@wix/ecom": "^1.0.762", - "@wix/redirects": "^1.0.57", - "@wix/sdk": "^1.13.0", - "@wix/stores": "^1.0.239", + "@remix-run/node": "^2.13.1", + "@remix-run/react": "^2.13.1", + "@remix-run/serve": "^2.13.1", + "@wix/ecom": "^1.0.787", + "@wix/members": "^1.0.110", + "@wix/redirects": "^1.0.58", + "@wix/sdk": "^1.14.2", + "@wix/stores": "^1.0.271", + "@wix/stores_products": "^1.0.76", "classnames": "^2.5.1", "fast-deep-equal": "^3.1.3", - "framer-motion": "^11.11.1", + "framer-motion": "^11.11.10", "isbot": "^5.1.17", - "js-cookie": "^3.0.5", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-router-dom": "^6.26.2", "react-remove-scroll": "^2.6.0", "remix-utils": "^7.7.0", "swr": "^2.2.5" }, "devDependencies": { "@faker-js/faker": "^9.0.3", - "@remix-run/dev": "^2.12.1", - "@remix-run/testing": "^2.12.1", - "@types/js-cookie": "^3.0.6", - "@types/node": "20", - "@types/react": "^18.3.11", - "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "^8.8.0", + "@remix-run/dev": "^2.13.1", + "@remix-run/testing": "^2.13.1", + "@types/lodash.debounce": "^4.0.9", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@typescript-eslint/eslint-plugin": "^8.12.1", + "@wixc3/define-remix-app": "^4.5.1", "@wixc3/react-board": "^4.3.3", - "@wixc3/define-remix-app": "^4.3.3", - "eslint": "^8.56.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", - "eslint-plugin-jsx-a11y": "^6.10.0", - "eslint-plugin-react": "^7.37.1", - "eslint-plugin-react-hooks": "^4.6.2", - "sass": "^1.79.4", - "typescript": "^5.6.2", - "vite": "^5.4.8", - "vite-plugin-svgr": "^4.2.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "prettier": "^3.3.3", + "sass": "~1.79.6", + "typescript": "~5.6.3", + "vite": "^5.4.10", "vite-tsconfig-paths": "^5.0.1" }, "engines": { diff --git a/src/api/constants.ts b/src/api/constants.ts deleted file mode 100644 index 2453b85..0000000 --- a/src/api/constants.ts +++ /dev/null @@ -1,5 +0,0 @@ -// this is the static ID of the stores app -export const WIX_STORES_APP_ID = '1380b703-ce81-ff05-f115-39571d94dfcd'; -export const WIX_SESSION_TOKEN_COOKIE_KEY = 'wix_refreshToken'; -export const DEMO_STORE_WIX_CLIENT_ID = '0c9d1ef9-f496-4149-b246-75a2514b8c99'; -export const WIX_CLIENT_ID_COOKIE_KEY = 'wix_client_id'; diff --git a/src/api/wix-image.ts b/src/api/wix-image.ts deleted file mode 100644 index c6abae1..0000000 --- a/src/api/wix-image.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { media as wixMedia } from '@wix/sdk'; - -export function getImageHttpUrl(url?: string, width?: number, height?: number) { - const isWixMedia = url?.startsWith('wix:image'); - const isWixUrl = url?.includes('static.wixstatic.com'); - - if (!url || (!isWixMedia && !isWixUrl)) { - return url; - } - - if (isWixMedia) { - return wixMedia.getScaledToFillImageUrl(url, width || 400, height || 100, {}); - } - - let newUrl = url; - if (width) { - newUrl = newUrl.replace(/(w_)\d+/, `$1${width}`); - } - if (height) { - newUrl = newUrl.replace(/(h_)\d+/, `$1${height}`); - } - return newUrl; -} diff --git a/src/components/accordion/accordion.tsx b/src/components/accordion/accordion.tsx index 2bcd823..e5f37cd 100644 --- a/src/components/accordion/accordion.tsx +++ b/src/components/accordion/accordion.tsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import classNames from 'classnames'; -import { getClickableElementAttributes } from '~/utils'; +import { getClickableElementAttributes } from '~/lib/utils'; import { MinusIcon, PlusIcon } from '../icons'; import styles from './accordion.module.scss'; diff --git a/src/components/applied-filter/applied-filter.tsx b/src/components/applied-filter/applied-filter.tsx index a41dd1e..27800b1 100644 --- a/src/components/applied-filter/applied-filter.tsx +++ b/src/components/applied-filter/applied-filter.tsx @@ -1,4 +1,4 @@ -import { getClickableElementAttributes } from '~/utils'; +import { getClickableElementAttributes } from '~/lib/utils'; import { CloseIcon } from '../icons'; import styles from './applied-filter.module.scss'; diff --git a/src/components/applied-product-filters/applied-product-filters.tsx b/src/components/applied-product-filters/applied-product-filters.tsx index 43e6d32..4bd7925 100644 --- a/src/components/applied-product-filters/applied-product-filters.tsx +++ b/src/components/applied-product-filters/applied-product-filters.tsx @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import classNames from 'classnames'; -import { ProductFilter, IProductFilters } from '~/api/types'; -import { formatPrice } from '~/utils'; +import { ProductFilter, IProductFilters } from '~/lib/ecom'; +import { formatPrice } from '~/lib/utils'; import { AppliedFilter } from '../applied-filter/applied-filter'; import styles from './applied-product-filters.module.scss'; diff --git a/src/components/cart/cart-item/cart-item.tsx b/src/components/cart/cart-item/cart-item.tsx index 62e0372..65e4fad 100644 --- a/src/components/cart/cart-item/cart-item.tsx +++ b/src/components/cart/cart-item/cart-item.tsx @@ -1,13 +1,11 @@ import { Cross2Icon } from '@radix-ui/react-icons'; -import type { cart } from '@wix/ecom'; +import { cart } from '@wix/ecom'; +import { media } from '@wix/sdk'; import classNames from 'classnames'; import { ChangeEvent } from 'react'; -import { getImageHttpUrl } from '~/api/wix-image'; -import { Price } from '~/components/price/price'; -import { isCartItemAvailable } from '~/utils'; +import { Price } from '~/src/components/price/price'; import styles from './cart-item.module.scss'; -const IMAGE_SIZE = 120; export interface CartItemProps { className?: string; isLast?: boolean; @@ -18,9 +16,8 @@ export interface CartItemProps { export const CartItem = ({ cartItem, className, isLast, onRemove, onQuantityChange }: CartItemProps) => { const name = cartItem.productName?.translated ?? ''; - const imageUrl = getImageHttpUrl(cartItem.image, IMAGE_SIZE, IMAGE_SIZE); - const isAvailable = isCartItemAvailable(cartItem); - + const image = cartItem.image ? media.getImageUrl(cartItem.image) : undefined; + const isUnavailable = cartItem.availability?.status === cart.ItemAvailabilityStatus.NOT_AVAILABLE; const handleQuantityChange = (e: ChangeEvent) => { if (!cartItem._id) { return; @@ -35,11 +32,11 @@ export const CartItem = ({ cartItem, className, isLast, onRemove, onQuantityChan
- {name} + {name}
@@ -56,7 +53,9 @@ export const CartItem = ({ cartItem, className, isLast, onRemove, onQuantityChan
- {isAvailable ? ( + {isUnavailable ? ( +
Out of stock
+ ) : (
- ) : ( -
Out of stock
)}
diff --git a/src/components/cart/cart-view/cart-view.tsx b/src/components/cart/cart-view/cart-view.tsx index e57edfa..3c7039d 100644 --- a/src/components/cart/cart-view/cart-view.tsx +++ b/src/components/cart/cart-view/cart-view.tsx @@ -1,5 +1,5 @@ import classnames from 'classnames'; -import { Cart, CartTotals } from '~/api/types'; +import { Cart, CartTotals } from '~/lib/ecom'; import { CartItem } from '../cart-item/cart-item'; import styles from './cart-view.module.scss'; import { ChevronRightIcon } from '@radix-ui/react-icons'; diff --git a/src/components/cart/cart.tsx b/src/components/cart/cart.tsx index 0123a41..edad0e7 100644 --- a/src/components/cart/cart.tsx +++ b/src/components/cart/cart.tsx @@ -1,8 +1,8 @@ import { useState } from 'react'; -import { Drawer } from '~/components/drawer/drawer'; -import { isCartItemAvailable } from '~/utils'; -import { useCart } from '~/hooks/use-cart'; -import { useCartOpen } from './cart-open-context'; +import { cart } from '@wix/ecom'; +import { useCartOpen } from '~/lib/cart-open-context'; +import { useCart } from '~/lib/ecom'; +import { Drawer } from '~/src/components/drawer/drawer'; import { CartView } from './cart-view/cart-view'; export const Cart = () => { @@ -10,7 +10,9 @@ export const Cart = () => { const { cartData, cartTotals, checkout, removeItem, updateItemQuantity } = useCart(); const [checkoutAttempted, setCheckoutAttempted] = useState(false); - const someItemsOutOfStock = cartData?.lineItems.some((item) => !isCartItemAvailable(item)); + const someItemsOutOfStock = cartData?.lineItems.some( + (item) => item.availability?.status === cart.ItemAvailabilityStatus.NOT_AVAILABLE, + ); const handleCheckout = async () => { setCheckoutAttempted(true); diff --git a/src/components/color-select/color-select.module.scss b/src/components/color-select/color-select.module.scss deleted file mode 100644 index 2431e0b..0000000 --- a/src/components/color-select/color-select.module.scss +++ /dev/null @@ -1,51 +0,0 @@ -.root { - display: flex; - gap: 8px; -} - -.option { - cursor: pointer; - height: 20px; - width: 20px; - transition: padding 100ms; - border: solid 1px var(--grey); -} - -.option .colorBox { - width: 100%; - height: 100%; -} - -.option:not(.outOfStock):hover, -.option.selected { - border-color: var(--charcoal-black); - padding: 2px; -} - -.option:not(.outOfStock):hover .colorBox, -.option.selected .colorBox { - border: solid 1px var(--grey); -} - -.option.hasError { - border-color: var(--red); -} - -.outOfStock { - position: relative; - overflow: hidden; -} - -.outOfStock :first-child { - opacity: 0.5; -} - -.outOfStock::after { - content: ''; - position: absolute; - height: 2px; - transform: rotate(45deg); - inset: -50%; - margin: auto; - background-color: var(--charcoal-black); -} diff --git a/src/components/color-select/color-select.tsx b/src/components/color-select/color-select.tsx deleted file mode 100644 index 4065d23..0000000 --- a/src/components/color-select/color-select.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import classNames from 'classnames'; -import styles from './color-select.module.scss'; - -export interface ColorSelectOption { - name: string; - hexValue: string; - inStock: boolean; -} - -export interface ColorSelectProps { - options: ColorSelectOption[]; - selectedName?: string; - hasError: boolean; - onChange: (name: string) => void; -} - -export const ColorSelect = ({ options, selectedName, onChange, hasError }: ColorSelectProps) => { - return ( -
- {options.map((o) => ( - - ))} -
- ); -}; diff --git a/src/components/drawer/drawer.tsx b/src/components/drawer/drawer.tsx index 4646fba..d8ee1fb 100644 --- a/src/components/drawer/drawer.tsx +++ b/src/components/drawer/drawer.tsx @@ -55,7 +55,7 @@ export const Drawer = ({ open, onClose, children, drawerClassName }: DrawerProps )} , - document.body + document.body, ) } diff --git a/src/components/header/header.tsx b/src/components/header/header.tsx index d5bb5b1..9022d4c 100644 --- a/src/components/header/header.tsx +++ b/src/components/header/header.tsx @@ -1,7 +1,7 @@ import { NavLink } from '@remix-run/react'; import classNames from 'classnames'; -import { useCartOpen } from '~/components/cart/cart-open-context'; -import { ROUTES } from '~/router/config'; +import { useCartOpen } from '~/lib/cart-open-context'; + import styles from './header.module.scss'; export interface HeaderProps { @@ -13,25 +13,25 @@ export const Header = ({ className }: HeaderProps) => { return (
- + LOGO
classNames(styles.menuButton, { [styles.activeMenuItem]: isActive })} > Home classNames(styles.menuButton, { [styles.activeMenuItem]: isActive })} > Products classNames(styles.menuButton, { [styles.activeMenuItem]: isActive })} > About diff --git a/src/components/hero-image/hero-image.tsx b/src/components/hero-image/hero-image.tsx index 5830145..9680ed6 100644 --- a/src/components/hero-image/hero-image.tsx +++ b/src/components/hero-image/hero-image.tsx @@ -1,8 +1,8 @@ import classNames from 'classnames'; -import largeHeroImage from '~/assets/img/[1024_640]_heroImage04.jpg'; -import xLargeHeroImage from '~/assets/img/[1400_640]_heroImage04.jpg'; -import smallHeroImage from '~/assets/img/[430_340]_heroImage04.jpg'; -import mediumHeroImage from '~/assets/img/[760_460]_heroImage04.jpg'; +import largeHeroImage from '~/src/assets/img/[1024_640]_heroImage04.jpg'; +import xLargeHeroImage from '~/src/assets/img/[1400_640]_heroImage04.jpg'; +import smallHeroImage from '~/src/assets/img/[430_340]_heroImage04.jpg'; +import mediumHeroImage from '~/src/assets/img/[760_460]_heroImage04.jpg'; import styles from './hero-image.module.scss'; export interface HeroImageProps { diff --git a/src/components/product-additional-info/product-additional-info.tsx b/src/components/product-additional-info/product-additional-info.tsx index 790773b..9fe4e90 100644 --- a/src/components/product-additional-info/product-additional-info.tsx +++ b/src/components/product-additional-info/product-additional-info.tsx @@ -1,6 +1,6 @@ import { products } from '@wix/stores'; import classNames from 'classnames'; -import { UnsafeRichText } from '~/components/rich-text/rich-text'; +import { UnsafeRichText } from '~/src/components/rich-text/rich-text'; import styles from './product-additional-info.module.scss'; export interface ProductAdditionalInfoProps { diff --git a/src/components/product-card/product-card.tsx b/src/components/product-card/product-card.tsx index e84047a..980f48b 100644 --- a/src/components/product-card/product-card.tsx +++ b/src/components/product-card/product-card.tsx @@ -1,7 +1,7 @@ import { products } from '@wix/stores'; import classNames from 'classnames'; -import noImage from '~/assets/img/noImage/[160_200]_noImage.svg'; -import { Price } from '~/components/price/price'; +import noImage from '~/src/assets/img/noImage/[160_200]_noImage.svg'; +import { Price } from '~/src/components/price/price'; import styles from './product-card.module.scss'; export type GalleryCardProps = { diff --git a/src/components/product-filters/product-filters.tsx b/src/components/product-filters/product-filters.tsx index 0c66883..7789178 100644 --- a/src/components/product-filters/product-filters.tsx +++ b/src/components/product-filters/product-filters.tsx @@ -1,8 +1,7 @@ import { useCallback, useMemo } from 'react'; -import { productFiltersFromSearchParams, searchParamsFromProductFilters } from '~/api/product-filters'; -import { IProductFilters } from '~/api/types'; -import { formatPrice, mergeUrlSearchParams } from '~/utils'; -import { useSearchParamsOptimistic } from '~/utils/use-search-params-optimistic'; +import { productFiltersFromSearchParams, searchParamsFromProductFilters, IProductFilters } from '~/lib/ecom'; +import { formatPrice, mergeUrlSearchParams } from '~/lib/utils'; +import { useSearchParamsOptimistic } from '~/lib/hooks'; import { Accordion } from '../accordion/accordion'; import { RangeSlider } from '../range-slider/range-slider'; diff --git a/src/components/product-images/product-images.tsx b/src/components/product-images/product-images.tsx index e243a94..9267b86 100644 --- a/src/components/product-images/product-images.tsx +++ b/src/components/product-images/product-images.tsx @@ -1,6 +1,5 @@ import { products } from '@wix/stores'; import cx from 'classnames'; -import { getImageHttpUrl } from '~/api/wix-image'; import styles from './product-images.module.scss'; export function ProductImages(props: { @@ -11,15 +10,10 @@ export function ProductImages(props: { const restImages = props.images?.filter((img) => img._id !== props.mainImage?._id); return (
- {props.mainImage?.title} + {props.mainImage?.title}
{restImages?.map((item, index) => { - return {item.title}; + return {item.title}; })}
diff --git a/src/components/product-option/product-option.tsx b/src/components/product-option/product-option.tsx index a373d8d..198c213 100644 --- a/src/components/product-option/product-option.tsx +++ b/src/components/product-option/product-option.tsx @@ -1,8 +1,8 @@ import { products } from '@wix/stores'; -import { ColorSelect } from '~/components/color-select/color-select'; -import { Select } from '~/components/select/select'; +import { ColorSelect } from '~/lib/components/color-select/color-select'; +import { Select } from '~/src/components/select/select'; import styles from './product-option.module.scss'; -import { getChoiceValue } from '~/utils'; +import { getChoiceValue } from '~/lib/utils'; export interface ProductOptionProps { option: products.ProductOption; @@ -42,12 +42,12 @@ export const ProductOption = ({ option, selectedChoice, error, onChange }: Produ options={choices .filter((c) => c.value && c.description && c.visible) .map((c) => ({ - name: c.description!, - hexValue: c.value!, - inStock: !!c.inStock, + id: c.description!, + color: c.value!, + crossedOut: !c.inStock, }))} + selectedId={selectedChoice?.description ?? ''} onChange={handleChange} - selectedName={selectedChoice?.description} /> ) : (