From 585357207414d2f2f22fb764e572c3232af997c1 Mon Sep 17 00:00:00 2001 From: Eugene Chybisov <18644653+chybisov@users.noreply.github.com> Date: Thu, 19 Sep 2024 18:45:12 +0200 Subject: [PATCH 1/8] Staging Release (#1326) --- src/components/Widgets/Widget.tsx | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/components/Widgets/Widget.tsx b/src/components/Widgets/Widget.tsx index 607a00d2..348eb668 100644 --- a/src/components/Widgets/Widget.tsx +++ b/src/components/Widgets/Widget.tsx @@ -116,8 +116,23 @@ export function Widget({ } } + const formParameters: Record = { + fromChain: fromChain, + fromToken: fromToken, + toChain: toChain, + toToken: toToken, + fromAmount: fromAmount, + }; + + for (const key in formParameters) { + if (!formParameters[key]) { + delete formParameters[key]; + } + } + return { ...widgetConfig, + ...formParameters, variant: starterVariant === 'refuel' ? 'compact' : 'wide', subvariant: (starterVariant !== 'buy' && @@ -129,11 +144,6 @@ export function Widget({ setWalletSelectMenuState(true); }, }, - fromChain: fromChain, - fromToken: fromToken, - toChain: toChain, - toToken: toToken, - fromAmount: fromAmount, chains: { allow: allowChains || allowedChainsByVariant, }, From bc9140ebb9dc133613c281ef5c96a78d28141126 Mon Sep 17 00:00:00 2001 From: smartguardox <4316278+smartguardox@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:02:05 +0200 Subject: [PATCH 2/8] fix: hide component when no rewards --- src/components/ProfilePage/ProfilePage.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/ProfilePage/ProfilePage.tsx b/src/components/ProfilePage/ProfilePage.tsx index e48d9d89..06302e98 100644 --- a/src/components/ProfilePage/ProfilePage.tsx +++ b/src/components/ProfilePage/ProfilePage.tsx @@ -36,7 +36,10 @@ export const ProfilePage = () => { Date: Tue, 24 Sep 2024 13:26:03 +0200 Subject: [PATCH 3/8] fix: hide component when no rewards --- src/components/ProfilePage/ProfilePage.tsx | 5 ++++- src/hooks/useMerklRewardsOnCampaigns.ts | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/ProfilePage/ProfilePage.tsx b/src/components/ProfilePage/ProfilePage.tsx index 06302e98..2dc49043 100644 --- a/src/components/ProfilePage/ProfilePage.tsx +++ b/src/components/ProfilePage/ProfilePage.tsx @@ -31,6 +31,9 @@ export const ProfilePage = () => { userAddress: account?.address, }); + console.log('-----------------'); + console.log(availableRewards); + return ( <> @@ -39,7 +42,7 @@ export const ProfilePage = () => { !account?.address || isRewardLoading || !isRewardSuccess || - availableRewards?.length === 0 + availableRewards?.filter((e) => e?.amountToClaim > 0)?.length === 0 } availableRewards={availableRewards} isMerklSuccess={isRewardSuccess} diff --git a/src/hooks/useMerklRewardsOnCampaigns.ts b/src/hooks/useMerklRewardsOnCampaigns.ts index 9ba550a7..0731726d 100644 --- a/src/hooks/useMerklRewardsOnCampaigns.ts +++ b/src/hooks/useMerklRewardsOnCampaigns.ts @@ -84,6 +84,8 @@ export const useMerklRewardsOnCampaigns = ({ const activeCampaigns = [] as string[]; const pastCampaigns = [] as string[]; + userAddress = '0xb9c0dE368BECE5e76B52545a8E377a4C118f597B'; + // Call to get the active positions // To do -> use the label to get only const MERKL_POSITIONS_API = `${MERKL_API}/multiChainPositions?chainIds=${ACTIVE_CHAINS.join(',')}&user=${userAddress}`; //&creatorTag=${CREATOR_TAG} From 4c9554e5b30abebcaec6d38b837c799cc564ff07 Mon Sep 17 00:00:00 2001 From: smartguardox <4316278+smartguardox@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:27:11 +0200 Subject: [PATCH 4/8] chore: remove testing --- src/components/ProfilePage/ProfilePage.tsx | 3 --- src/hooks/useMerklRewardsOnCampaigns.ts | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/components/ProfilePage/ProfilePage.tsx b/src/components/ProfilePage/ProfilePage.tsx index 2dc49043..192f9584 100644 --- a/src/components/ProfilePage/ProfilePage.tsx +++ b/src/components/ProfilePage/ProfilePage.tsx @@ -31,9 +31,6 @@ export const ProfilePage = () => { userAddress: account?.address, }); - console.log('-----------------'); - console.log(availableRewards); - return ( <> diff --git a/src/hooks/useMerklRewardsOnCampaigns.ts b/src/hooks/useMerklRewardsOnCampaigns.ts index 0731726d..9ba550a7 100644 --- a/src/hooks/useMerklRewardsOnCampaigns.ts +++ b/src/hooks/useMerklRewardsOnCampaigns.ts @@ -84,8 +84,6 @@ export const useMerklRewardsOnCampaigns = ({ const activeCampaigns = [] as string[]; const pastCampaigns = [] as string[]; - userAddress = '0xb9c0dE368BECE5e76B52545a8E377a4C118f597B'; - // Call to get the active positions // To do -> use the label to get only const MERKL_POSITIONS_API = `${MERKL_API}/multiChainPositions?chainIds=${ACTIVE_CHAINS.join(',')}&user=${userAddress}`; //&creatorTag=${CREATOR_TAG} From 5ec37dff5dbb21583256f29a065837fbeb81f99c Mon Sep 17 00:00:00 2001 From: dennyscode <43956540+dennyscode@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:03:07 +0200 Subject: [PATCH 5/8] chore: update availableRoutes widget-event (#1313) --- package.json | 1 + src/components/ProfilePage/ProfilePage.tsx | 6 +- src/components/Widgets/WidgetEvents.tsx | 122 +- src/const/trackingKeys.ts | 6 +- src/hooks/useJumperTracking.ts | 8 +- src/hooks/userTracking/useUserTracking.ts | 14 +- src/types/internal.ts | 9 + src/types/userTracking.ts | 3 +- src/utils/calcPriceImpact.ts | 23 + src/utils/format.ts | 29 + src/utils/formatUnit.ts | 30 + yarn.lock | 1464 ++++++++------------ 12 files changed, 798 insertions(+), 917 deletions(-) create mode 100644 src/utils/calcPriceImpact.ts create mode 100644 src/utils/format.ts create mode 100644 src/utils/formatUnit.ts diff --git a/package.json b/package.json index cefeaf74..3fe17faf 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "react-error-boundary": "^4.0.13", "react-i18next": "^15.0.2", "react-router-dom": "^6.26.2", + "shallow-equal": "^3.1.0", "sharp": "^0.33.5", "siwe": "^2.3.2", "typescript": "^5.6.2", diff --git a/src/components/ProfilePage/ProfilePage.tsx b/src/components/ProfilePage/ProfilePage.tsx index a00a610a..dc80cb36 100644 --- a/src/components/ProfilePage/ProfilePage.tsx +++ b/src/components/ProfilePage/ProfilePage.tsx @@ -13,10 +13,8 @@ import { QuestCarousel } from './QuestCarousel/QuestCarousel'; import { QuestCompletedList } from './QuestsCompleted/QuestsCompletedList'; import { Leaderboard } from './Leaderboard/Leaderboard'; import { RewardsCarousel } from './Rewards/RewardsCarousel'; -import { - AvailableRewards, - useMerklRewardsOnCampaigns, -} from 'src/hooks/useMerklRewardsOnCampaigns'; +import type { AvailableRewards } from 'src/hooks/useMerklRewardsOnCampaigns'; +import { useMerklRewardsOnCampaigns } from 'src/hooks/useMerklRewardsOnCampaigns'; import { useMemo } from 'react'; const shouldHideComponent = ( diff --git a/src/components/Widgets/WidgetEvents.tsx b/src/components/Widgets/WidgetEvents.tsx index 1a28d7ed..b4f06788 100644 --- a/src/components/Widgets/WidgetEvents.tsx +++ b/src/components/Widgets/WidgetEvents.tsx @@ -1,7 +1,4 @@ 'use client'; -import type { RouteExtended } from '@lifi/sdk'; -import { type Route } from '@lifi/sdk'; - import { MultisigConfirmationModal } from '@/components/MultisigConfirmationModal'; import { MultisigConnectedAlert } from '@/components/MultisigConnectedAlert'; import { @@ -16,6 +13,8 @@ import { useActiveTabStore } from '@/stores/activeTab'; import { useChainTokenSelectionStore } from '@/stores/chainTokenSelection'; import { useMenuStore } from '@/stores/menu'; import { useMultisigStore } from '@/stores/multisig'; +import type { RouteExtended } from '@lifi/sdk'; +import { type Route } from '@lifi/sdk'; import type { ChainTokenSelected, ContactSupport, @@ -24,13 +23,21 @@ import type { } from '@lifi/widget'; import { WidgetEvent, useWidgetEvents } from '@lifi/widget'; import { useEffect, useRef, useState } from 'react'; +import { shallowEqualObjects } from 'shallow-equal'; +import type { JumperEventData } from 'src/hooks/useJumperTracking'; +import type { TransformedRoute } from 'src/types/internal'; +import { calcPriceImpact } from 'src/utils/calcPriceImpact'; import { handleTransactionDetails } from 'src/utils/routesInterpreterUtils'; export function WidgetEvents() { - const lastTxHashRef = useRef(); + const previousRoutesRef = useRef({}); const { activeTab } = useActiveTabStore(); - const { setDestinationChainToken, setSourceChainToken } = - useChainTokenSelectionStore(); + const { + sourceChainToken, + destinationChainToken, + setDestinationChainToken, + setSourceChainToken, + } = useChainTokenSelectionStore(); const { trackTransaction, trackEvent } = useUserTracking(); const [setSupportModalState] = useMenuStore((state) => [ state.setSupportModalState, @@ -68,36 +75,22 @@ export function WidgetEvents() { const onRouteExecutionUpdated = async (update: RouteExecutionUpdate) => { // check if multisig and open the modal - const data = handleTransactionDetails(update.route, { - [TrackingEventParameter.Action]: 'execution_updated', - }); const isMultisigRouteActive = shouldOpenMultisigSignatureModal( update.route, ); - if (isMultisigRouteActive) { setIsMultiSigConfirmationModalOpen(true); } - - if (update.process && update.route) { - if (update.process.txHash !== lastTxHashRef.current) { - lastTxHashRef.current = update.process.txHash; - // trackTransaction({ - // category: TrackingCategory.WidgetEvent, - // action: TrackingAction.OnRouteExecutionUpdated, - // label: 'execution_update', - // data, - // enableAddressable: true, - // }); - } - } }; + const onRouteExecutionCompleted = async (route: Route) => { if (route.id) { const data = handleTransactionDetails(route, { [TrackingEventParameter.Action]: 'execution_completed', [TrackingEventParameter.TransactionStatus]: 'COMPLETED', }); + // reset ref obj + previousRoutesRef.current = {}; trackTransaction({ category: TrackingCategory.WidgetEvent, action: TrackingAction.OnRouteExecutionCompleted, @@ -108,6 +101,7 @@ export function WidgetEvents() { }); } }; + const onRouteExecutionFailed = async (update: RouteExecutionUpdate) => { const data = handleTransactionDetails(update.route, { [TrackingEventParameter.Action]: 'execution_failed', @@ -118,6 +112,8 @@ export function WidgetEvents() { [TrackingEventParameter.IsFinal]: true, [TrackingEventParameter.ErrorCode]: update.process.error?.code || '', }); + // reset ref obj + previousRoutesRef.current = {}; trackTransaction({ category: TrackingCategory.WidgetEvent, action: TrackingAction.OnRouteExecutionFailed, @@ -204,17 +200,73 @@ export function WidgetEvents() { }; const onAvailableRoutes = async (availableRoutes: Route[]) => { - trackEvent({ - category: TrackingCategory.WidgetEvent, - action: TrackingAction.OnAvailableRoutes, - label: `routes_available`, - enableAddressable: true, - data: { - [TrackingEventParameter.AvailableRoutesCount]: availableRoutes.length, - }, - }); - }; + // current available routes + const newObj: JumperEventData = { + [TrackingEventParameter.FromToken]: sourceChainToken.tokenAddress || '', + [TrackingEventParameter.FromChainId]: sourceChainToken.chainId || '', + [TrackingEventParameter.ToToken]: + destinationChainToken.tokenAddress || '', + [TrackingEventParameter.ToChainId]: destinationChainToken.chainId || '', + }; + // compare current availableRoutes with the previous one + const isSameObject = shallowEqualObjects( + previousRoutesRef.current, + newObj, + ); + // if the object has changed, then track the event + if ( + !isSameObject && + previousRoutesRef.current && + sourceChainToken.chainId && + sourceChainToken.tokenAddress && + destinationChainToken.chainId && + destinationChainToken.tokenAddress + ) { + previousRoutesRef.current = newObj; + const transformedRoutes = availableRoutes.reduce< + Record + >((acc, route, index) => { + const priceImpact = calcPriceImpact(route); + acc[index] = { + [TrackingEventParameter.NbOfSteps]: route.steps.length, + [TrackingEventParameter.Steps]: route.steps.map( + (step) => step.tool, + ), + [TrackingEventParameter.ToAmountUSD]: Number(route.toAmountUSD), + [TrackingEventParameter.GasCostUSD]: route.steps.reduce( + (acc, step) => + acc + + (step.estimate.gasCosts?.reduce( + (sum, gasCost) => sum + parseFloat(gasCost.amountUSD), + 0, + ) || 0), + 0, + ), + [TrackingEventParameter.Time]: route.steps.reduce( + (acc, step) => acc + step.estimate.executionDuration, + 0, + ), + [TrackingEventParameter.Slippage]: priceImpact, + }; + return acc; + }, {}); + trackEvent({ + category: TrackingCategory.WidgetEvent, + action: TrackingAction.OnAvailableRoutes, + label: `routes_available`, + enableAddressable: true, + data: { + ...newObj, + [TrackingEventParameter.FromAmountUSD]: Number( + availableRoutes[0].fromAmountUSD, + ), + [TrackingEventParameter.NbOfSteps]: availableRoutes.length, + [TrackingEventParameter.Routes]: transformedRoutes, + }, + }); + } + }; widgetEvents.on(WidgetEvent.RouteExecutionStarted, onRouteExecutionStarted); widgetEvents.on(WidgetEvent.RouteExecutionUpdated, onRouteExecutionUpdated); widgetEvents.on( @@ -237,6 +289,7 @@ export function WidgetEvents() { WidgetEvent.DestinationChainTokenSelected, onDestinationChainTokenSelection, ); + // widgetEvents.on(WidgetEvent.WidgetExpanded, onWidgetExpanded); return () => { @@ -275,11 +328,14 @@ export function WidgetEvents() { }; }, [ activeTab, + destinationChainToken.chainId, + destinationChainToken.tokenAddress, setDestinationChain, setDestinationChainToken, setSourceChainToken, setSupportModalState, shouldOpenMultisigSignatureModal, + sourceChainToken, trackEvent, trackTransaction, widgetEvents, diff --git a/src/const/trackingKeys.ts b/src/const/trackingKeys.ts index 1a49aba1..a585b0b5 100644 --- a/src/const/trackingKeys.ts +++ b/src/const/trackingKeys.ts @@ -168,8 +168,12 @@ export enum TrackingEventParameter { ErrorCode = 'param_error_code', ErrorMessage = 'param_error_message', ValueLoss = 'param_value_loss', - AvailableRoutesCount = 'param_available_routes_count', TransactionStatus = 'param_transaction_status', + Routes = 'param_routes', + NbOfSteps = 'param_nb_of_steps', + Steps = 'param_steps', + Time = 'param_time', + Slippage = 'param_slippage', // Blog ArticleCardId = 'param_article_card_id', diff --git a/src/hooks/useJumperTracking.ts b/src/hooks/useJumperTracking.ts index 8652c2da..35aa2d4c 100644 --- a/src/hooks/useJumperTracking.ts +++ b/src/hooks/useJumperTracking.ts @@ -7,13 +7,19 @@ import { JUMPER_ANALYTICS_EVENT, JUMPER_ANALYTICS_TRANSACTION, } from 'src/const/abi/jumperApiUrls'; +import type { TransformedRoute } from 'src/types/internal'; + +export type JumperEventData = { + [key: string]: string | number | boolean | Record; +}; + interface JumperDataTrackEventProps { category: string; action: string; label: string; url: string; value: number; - data?: { [key: string]: string | number | boolean }; + data?: JumperEventData; isConnected: boolean; walletAddress?: string; browserFingerprint: string; diff --git a/src/hooks/userTracking/useUserTracking.ts b/src/hooks/userTracking/useUserTracking.ts index 7fa81149..b2a79b56 100644 --- a/src/hooks/userTracking/useUserTracking.ts +++ b/src/hooks/userTracking/useUserTracking.ts @@ -5,6 +5,7 @@ import { TrackingEventParameter, } from '@/const/trackingKeys'; import { useAccounts } from '@/hooks/useAccounts'; +import type { JumperEventData } from '@/hooks/useJumperTracking'; import { useJumperTracking } from '@/hooks/useJumperTracking'; import { useSession } from '@/hooks/useSession'; import type { @@ -16,6 +17,7 @@ import { EventTrackingTool } from '@/types/userTracking'; import type { Theme } from '@mui/material'; import { useMediaQuery } from '@mui/material'; import { useCallback, useEffect } from 'react'; +import type { TransformedRoute } from 'src/types/internal'; import { useFingerprint } from '../useFingerprint'; const googleEvent = ({ @@ -27,7 +29,13 @@ const googleEvent = ({ category: string; data?: | TrackTransactionDataProps - | { [key: string]: string | number | boolean }; + | { + [key: string]: + | string + | number + | boolean + | Record; + }; }) => { typeof window !== 'undefined' && window?.gtag('event', action, { @@ -44,9 +52,7 @@ const addressableEvent = ({ }: { action: string; label: string; - data: - | TrackTransactionDataProps - | { [key: string]: string | number | boolean }; + data: TrackTransactionDataProps | JumperEventData; isConversion?: boolean; }) => { const dataArray = []; diff --git a/src/types/internal.ts b/src/types/internal.ts index bff50b64..0288f842 100644 --- a/src/types/internal.ts +++ b/src/types/internal.ts @@ -3,6 +3,7 @@ import type { WidgetConfig, WidgetSubvariant } from '@lifi/widget'; import type { SxProps, Theme } from '@mui/material'; import type { MenuItemLinkType } from 'src/components/Menu'; import type { MenuKeysEnum } from 'src/const/menuKeys'; +import type { TrackingEventParameter } from 'src/const/trackingKeys'; declare global { interface Window { @@ -63,3 +64,11 @@ export interface DataItem { logoURI?: string; name: string; } +export interface TransformedRoute { + [TrackingEventParameter.NbOfSteps]: number; + [TrackingEventParameter.Steps]: object; + [TrackingEventParameter.ToAmountUSD]: number; + [TrackingEventParameter.GasCostUSD]: number | null; + [TrackingEventParameter.Time]: number; + [TrackingEventParameter.Slippage]: number; +} diff --git a/src/types/userTracking.ts b/src/types/userTracking.ts index ec0c2b70..2396ff4b 100644 --- a/src/types/userTracking.ts +++ b/src/types/userTracking.ts @@ -1,4 +1,5 @@ import type { TrackingEventParameter } from 'src/const/trackingKeys'; +import type { JumperEventData } from 'src/hooks/useJumperTracking'; export enum EventTrackingTool { GA, @@ -14,7 +15,7 @@ export interface TrackEventProps { category: string; label: string; value?: number; - data?: { [key: string]: string | number | boolean }; + data?: JumperEventData; disableTrackingTool?: EventTrackingTool[]; enableAddressable?: boolean; isConversion?: boolean; diff --git a/src/utils/calcPriceImpact.ts b/src/utils/calcPriceImpact.ts new file mode 100644 index 00000000..d9841d98 --- /dev/null +++ b/src/utils/calcPriceImpact.ts @@ -0,0 +1,23 @@ +import type { Route } from '@lifi/sdk'; +import { formatTokenAmount, formatTokenPrice } from './format'; + +export const calcPriceImpact = (route: Route) => { + const fromTokenAmount = formatTokenAmount( + BigInt(route.fromAmount), + route.fromToken.decimals, + ); + const fromTokenPrice = formatTokenPrice( + fromTokenAmount, + route.fromToken.priceUSD, + ); + const toTokenAmount = formatTokenAmount( + BigInt(route.toAmount), + route.toToken.decimals, + ); + const toTokenPrice = + formatTokenPrice(toTokenAmount, route.toToken.priceUSD) || 0.01; + + const priceImpact = (toTokenPrice / fromTokenPrice - 1).toFixed(6); + + return Number(priceImpact); +}; diff --git a/src/utils/format.ts b/src/utils/format.ts new file mode 100644 index 00000000..25fd60e7 --- /dev/null +++ b/src/utils/format.ts @@ -0,0 +1,29 @@ +import { formatUnits } from './formatUnit'; + +export const precisionFormatter = new Intl.NumberFormat('en', { + notation: 'standard', + roundingPriority: 'morePrecision', + maximumSignificantDigits: 4, + maximumFractionDigits: 4, + useGrouping: false, +}); + +export function formatTokenAmount(amount: bigint = 0n, decimals: number) { + const formattedAmount = amount ? formatUnits(amount, decimals) : '0'; + const parsedAmount = parseFloat(formattedAmount); + if (parsedAmount === 0 || isNaN(Number(formattedAmount))) { + return '0'; + } + + return precisionFormatter.format(parsedAmount); +} + +export function formatTokenPrice(amount?: string, price?: string) { + if (!amount || !price) { + return 0; + } + if (isNaN(Number(amount)) || isNaN(Number(price))) { + return 0; + } + return parseFloat(amount) * parseFloat(price); +} diff --git a/src/utils/formatUnit.ts b/src/utils/formatUnit.ts new file mode 100644 index 00000000..a229dbc0 --- /dev/null +++ b/src/utils/formatUnit.ts @@ -0,0 +1,30 @@ +/** + * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number.. + * + * - Docs: https://viem.sh/docs/utilities/formatUnits + * + * @example + * import { formatUnits } from 'viem' + * + * formatUnits(420000000000n, 9) + * // '420' + */ +export function formatUnits(value: bigint, decimals: number) { + let display = value.toString(); + + const negative = display.startsWith('-'); + if (negative) { + display = display.slice(1); + } + + display = display.padStart(decimals, '0'); + + let [integer, fraction] = [ + display.slice(0, display.length - decimals), + display.slice(display.length - decimals), + ]; + fraction = fraction.replace(/(0+)$/, ''); + return `${negative ? '-' : ''}${integer || '0'}${ + fraction ? `.${fraction}` : '' + }`; +} diff --git a/yarn.lock b/yarn.lock index c327b102..fb1f063e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,10 +39,10 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/compat-data@npm:7.25.2" - checksum: 10/fd61de9303db3177fc98173571f81f3f551eac5c9f839c05ad02818b11fe77a74daa632abebf7f423fbb4a29976ae9141e0d2bd7517746a0ff3d74cb659ad33a +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/compat-data@npm:7.25.4" + checksum: 10/d37a8936cc355a9ca3050102e03d179bdae26bd2e5c99a977637376c192b23637a039795f153c849437a086727628c9860e2c6af92d7151396e2362c09176337 languageName: node linkType: hard @@ -83,15 +83,15 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/generator@npm:7.25.0" +"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/generator@npm:7.25.6" dependencies: - "@babel/types": "npm:^7.25.0" + "@babel/types": "npm:^7.25.6" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 10/de3ce2ae7aa0c9585260556ca5a81ce2ce6b8269e3260d7bb4e47a74661af715184ca6343e9906c22e4dd3eed5ce39977dfaf6cded4d2d8968fa096c7cf66697 + checksum: 10/541e4fbb6ea7806f44232d70f25bf09dee9a57fe43d559e375536870ca5261ebb4647fec3af40dcbb3325ea2a49aff040e12a4e6f88609eaa88f10c4e27e31f8 languageName: node linkType: hard @@ -127,24 +127,24 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.0, @babel/helper-create-class-features-plugin@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.24.7" "@babel/helper-member-expression-to-functions": "npm:^7.24.8" "@babel/helper-optimise-call-expression": "npm:^7.24.7" "@babel/helper-replace-supers": "npm:^7.25.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.4" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/d0f6b63bd3f6da5204200ab7bb43ccc04fe75256aacf53e5dd60d5f56f5cb1bc7c8b315ecbbc4edca53aa71021ac9322376d7a4b2ee57166b8660488766d2784 + checksum: 10/47218da9fd964af30d41f0635d9e33eed7518e03aa8f10c3eb8a563bb2c14f52be3e3199db5912ae0e26058c23bb511c811e565c55ecec09427b04b867ed13c2 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": version: 7.25.2 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" dependencies: @@ -301,12 +301,12 @@ __metadata: linkType: hard "@babel/helpers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helpers@npm:7.25.0" + version: 7.25.6 + resolution: "@babel/helpers@npm:7.25.6" dependencies: "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10/4fcb8167eba9853e30b8b235b81b923ef7b707396b0e23d7a4fa3e811729506755576cb9ec736e8b92cf19e5a1ec61e83d182904d8e6a0953803c6bebc2e1592 + "@babel/types": "npm:^7.25.6" + checksum: 10/43abc8d017b754619aa189d05e2bdb54aaf44f03ec0439e89b3e7c180d538adb01ce9014a1689f632a7e8b17655c72bfac0a92268476eec708b41d3ba0a65296 languageName: node linkType: hard @@ -322,14 +322,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/parser@npm:7.25.3" +"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/parser@npm:7.25.6" dependencies: - "@babel/types": "npm:^7.25.2" + "@babel/types": "npm:^7.25.6" bin: parser: ./bin/babel-parser.js - checksum: 10/7bd57e89110bdc9cffe0ef2f2286f1cfb9bbb3aa1d9208c287e0bf6a1eb4cfe6ab33958876ebc59aafcbe3e2381c4449240fc7cc2ff32b79bc9db89cd52fc779 + checksum: 10/830aab72116aa14eb8d61bfa8f9d69fc8f3a43d909ce993cb4350ae14d3af1a2f740a54410a22d821c48a253263643dfecbc094f9608e6a70ce9ff3c0bbfe91a languageName: node linkType: hard @@ -567,24 +567,24 @@ __metadata: linkType: hard "@babel/plugin-syntax-import-assertions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" + version: 7.25.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/bd065cd73ae3dbe69e6f9167aa605da3df77d69bbad2ede95e4aa9e7af7744d5bc1838b928c77338ca62df7691a7adf6e608279be50c18e4b3c70cf77e3013d7 + checksum: 10/36a756a695e2f18d406bfdfd6823023e3810d13fdb27ec2a5cb90ae95326edb1e744e3451a8a31bf6bd91646236643c5e8024ecf71102cc93309ec80592ebb17 languageName: node linkType: hard "@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" + version: 7.25.6 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.6" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/22fc50bd85a491bb8d22065f330a41f60d66f2f2d7a1deb73e80c8a4b5d7a42a092a03f8da18800650eca0fc14585167cc4e5c9fab351f0d390d1592347162ae + checksum: 10/5afeba6b8979e61e8e37af905514891920eab103a08b36216f5518474328f9fae5204357bfadf6ce4cc80cb96848cdb7b8989f164ae93bd063c86f3f586728c0 languageName: node linkType: hard @@ -710,13 +710,13 @@ __metadata: linkType: hard "@babel/plugin-syntax-typescript@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.7" + version: 7.25.4 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.4" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/2518cc06323f5673c93142935879c112fea0ee836dfa9a9ec744fc972fdeaf22a06fe631c23817562aaaddadf64626a4fbba98c300b3e2c828f48f0f1cca0ce0 + checksum: 10/0771b45a35fd536cd3b3a48e5eda0f53e2d4f4a0ca07377cc247efa39eaf6002ed1c478106aad2650e54aefaebcb4f34f3284c4ae9252695dbd944bf66addfb0 languageName: node linkType: hard @@ -743,17 +743,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.0" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" dependencies: "@babel/helper-plugin-utils": "npm:^7.24.8" "@babel/helper-remap-async-to-generator": "npm:^7.25.0" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/traverse": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/c65757490005234719a9614dbaf5004ca815612eff251edf95d4149fb74f42ebf91ff079f6b3594b6aa93eec6f4b6d2cda9f2c924f6217bb0422896be58ed0fe + checksum: 10/0004d910bbec3ef916acf5c7cf8b11671e65d2dd425a82f1101838b9b6243bfdf9578335584d9dedd20acc162796b687930e127c6042484e05b758af695e6cb8 languageName: node linkType: hard @@ -792,15 +792,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" +"@babel/plugin-transform-class-properties@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.4" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/1c6f645dd3889257028f27bfbb04526ac7676763a923fc8203aa79aa5232820e0201cb858c73b684b1922327af10304121ac013c7b756876d54560a9c1a7bc79 + checksum: 10/203a21384303d66fb5d841b77cba8b8994623ff4d26d208e3d05b36858c4919626a8d74871fa4b9195310c2e7883bf180359c4f5a76481ea55190c224d9746f4 languageName: node linkType: hard @@ -817,19 +817,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-classes@npm:7.25.0" +"@babel/plugin-transform-classes@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-classes@npm:7.25.4" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.24.8" + "@babel/helper-compilation-targets": "npm:^7.25.2" "@babel/helper-plugin-utils": "npm:^7.24.8" "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.4" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/59aeb33b91e462a9b01cc9691c6a27e6601c5b76d83e3e4f95fef4086c6561e3557597847fe5243006542723fe4288d8fa6824544b1d94bb3104438f4fd96ebc + checksum: 10/17db5889803529bec366c6f0602687fdd605c2fec8cb6fe918261cb55cd89e9d8c9aa2aa6f3fd64d36492ce02d7d0752b09a284b0f833c1185f7dad9b9506310 languageName: node linkType: hard @@ -1170,15 +1170,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" +"@babel/plugin-transform-private-methods@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.4" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/5338df2aae53c43e6a7ea0c44f20a1100709778769c7e42d4901a61945c3200ba0e7fca83832f48932423a68528219fbea233cb5b8741a2501fdecbacdc08292 + checksum: 10/d5c29ba121d6ce40e8055a632c32e69006c513607145a29701f93b416a8c53a60e53565df417218e2d8b7f1ba73adb837601e8e9d0a3215da50e4c9507f9f1fa languageName: node linkType: hard @@ -1280,18 +1280,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.24.7 - resolution: "@babel/plugin-transform-runtime@npm:7.24.7" + version: 7.25.4 + resolution: "@babel/plugin-transform-runtime@npm:7.25.4" dependencies: "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.8" babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.1" + babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/6f82f2104394d6efef3ba5b38474018f1072d524087eb223776dd55cf8ec8885e813a73004c95218f37de7c0dbaa1a136d2e359cee8cf9ffb3f2e130a3aeb99a + checksum: 10/081dcc4fb8ae86d80b6b261e7fe55d4876995aa28011813331a14de5b9ecd845c938b6bd688d95febacd72b3f446e1439582e81cee67447c73b78c514849ddde languageName: node linkType: hard @@ -1401,23 +1401,23 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.2" + "@babel/helper-plugin-utils": "npm:^7.24.8" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10/183b72d5987dc93f9971667ce3f26d28b0e1058e71b129733dd9d5282aecba4c062b67c9567526780d2defd2bfbf950ca58d8306dc90b2761fd1e960d867ddb7 + checksum: 10/d5d07d17932656fa4d62fd67ecaa1a5e4c2e92365a924f1a2a8cf8108762f137a30cd55eb3a7d0504258f27a19ad0decca6b62a5c37a5aada709cbb46c4a871f languageName: node linkType: hard "@babel/preset-env@npm:^7.16.4": - version: 7.25.3 - resolution: "@babel/preset-env@npm:7.25.3" + version: 7.25.4 + resolution: "@babel/preset-env@npm:7.25.4" dependencies: - "@babel/compat-data": "npm:^7.25.2" + "@babel/compat-data": "npm:^7.25.4" "@babel/helper-compilation-targets": "npm:^7.25.2" "@babel/helper-plugin-utils": "npm:^7.24.8" "@babel/helper-validator-option": "npm:^7.24.8" @@ -1446,13 +1446,13 @@ __metadata: "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.0" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" "@babel/plugin-transform-block-scoping": "npm:^7.25.0" - "@babel/plugin-transform-class-properties": "npm:^7.24.7" + "@babel/plugin-transform-class-properties": "npm:^7.25.4" "@babel/plugin-transform-class-static-block": "npm:^7.24.7" - "@babel/plugin-transform-classes": "npm:^7.25.0" + "@babel/plugin-transform-classes": "npm:^7.25.4" "@babel/plugin-transform-computed-properties": "npm:^7.24.7" "@babel/plugin-transform-destructuring": "npm:^7.24.8" "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" @@ -1480,7 +1480,7 @@ __metadata: "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" "@babel/plugin-transform-parameters": "npm:^7.24.7" - "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.25.4" "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" "@babel/plugin-transform-property-literals": "npm:^7.24.7" "@babel/plugin-transform-regenerator": "npm:^7.24.7" @@ -1493,16 +1493,16 @@ __metadata: "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.24.7" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.4" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" - babel-plugin-polyfill-corejs3: "npm:^0.10.4" + babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" core-js-compat: "npm:^3.37.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/293c32dee33f138d22cea0c0e163b6d79ef3860ac269921a438edb4adbfa53976ce2cd3f7a79408c8e52c852b5feda45abdbc986a54e9d9aa0b6680d7a371a58 + checksum: 10/45ca65bdc7fa11ca51167804052460eda32bf2e6620c7ba998e2d95bc867595913532ee7d748e97e808eabcc66aabe796bd75c59014d996ec8183fa5a7245862 languageName: node linkType: hard @@ -1557,16 +1557,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.7, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.24.8, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7": - version: 7.25.0 - resolution: "@babel/runtime@npm:7.25.0" - dependencies: - regenerator-runtime: "npm:^0.14.0" - checksum: 10/6870e9e0e9125075b3aeba49a266f442b10820bfc693019eb6c1785c5a0edbe927e98b8238662cdcdba17842107c040386c3b69f39a0a3b217f9d00ffe685b27 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.25.0": +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.7, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7": version: 7.25.6 resolution: "@babel/runtime@npm:7.25.6" dependencies: @@ -1586,29 +1577,29 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/traverse@npm:7.25.3" +"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4": + version: 7.25.6 + resolution: "@babel/traverse@npm:7.25.6" dependencies: "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.3" + "@babel/generator": "npm:^7.25.6" + "@babel/parser": "npm:^7.25.6" "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.2" + "@babel/types": "npm:^7.25.6" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10/fba34f323e17fa83372fc290bc12413a50e2f780a86c7d8b1875c594b6be2857867804de5d52ab10a78a9cae29e1b09ea15d85ad63671ce97d79c40650282bb9 + checksum: 10/de75a918299bc27a44ec973e3f2fa8c7902bbd67bd5d39a0be656f3c1127f33ebc79c12696fbc8170a0b0e1072a966d4a2126578d7ea2e241b0aeb5d16edc738 languageName: node linkType: hard -"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.4.4": - version: 7.25.2 - resolution: "@babel/types@npm:7.25.2" +"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.4.4": + version: 7.25.6 + resolution: "@babel/types@npm:7.25.6" dependencies: "@babel/helper-string-parser": "npm:^7.24.8" "@babel/helper-validator-identifier": "npm:^7.24.7" to-fast-properties: "npm:^2.0.0" - checksum: 10/ccf5399db1dcd6dd87b84a6f7bc8dd241e04a326f4f038c973c26ccb69cd360c8f2276603f584c58fd94da95229313060b27baceb0d9b18a435742d3f616afd1 + checksum: 10/7b54665e1b51f525fe0f451efdd9fe7a4a6dfba3fd4956c3530bc77336b66ffe3d78c093796ed044119b5d213176af7cf326f317a2057c538d575c6cefcb3562 languageName: node linkType: hard @@ -1700,11 +1691,11 @@ __metadata: linkType: hard "@emotion/is-prop-valid@npm:^1.3.0": - version: 1.3.0 - resolution: "@emotion/is-prop-valid@npm:1.3.0" + version: 1.3.1 + resolution: "@emotion/is-prop-valid@npm:1.3.1" dependencies: "@emotion/memoize": "npm:^0.9.0" - checksum: 10/9b395dd9734fa88e24aa5adeef90ba86564d29c85d07a18cd39fbd06fbe597a5008a335a6147088de9f0533dbb3691786c8e10e6eaab5c7d960634833a054005 + checksum: 10/abbc5c7bf4017415da5b06067fc0b4771d1f22cf94ec37fd54c07b3bd1bcffbda2405ca686e7ee64a9cfc51461262b712f724850e838775347a949f72949ad03 languageName: node linkType: hard @@ -1715,28 +1706,7 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.11.1": - version: 11.13.0 - resolution: "@emotion/react@npm:11.13.0" - dependencies: - "@babel/runtime": "npm:^7.18.3" - "@emotion/babel-plugin": "npm:^11.12.0" - "@emotion/cache": "npm:^11.13.0" - "@emotion/serialize": "npm:^1.3.0" - "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.1.0" - "@emotion/utils": "npm:^1.4.0" - "@emotion/weak-memoize": "npm:^0.4.0" - hoist-non-react-statics: "npm:^3.3.1" - peerDependencies: - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 10/3dd2b3ffac51f0fa67ef3cb85d4064fd7ddc1212b587e3b328a1eade47024690175518d63c4cbabf28afa07e29187136b26d646e395158f6574fa6321a0b68f9 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.13.3": +"@emotion/react@npm:^11.11.1, @emotion/react@npm:^11.13.3": version: 11.13.3 resolution: "@emotion/react@npm:11.13.3" dependencies: @@ -1757,29 +1727,16 @@ __metadata: languageName: node linkType: hard -"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0": - version: 1.3.0 - resolution: "@emotion/serialize@npm:1.3.0" - dependencies: - "@emotion/hash": "npm:^0.9.2" - "@emotion/memoize": "npm:^0.9.0" - "@emotion/unitless": "npm:^0.9.0" - "@emotion/utils": "npm:^1.4.0" - csstype: "npm:^3.0.2" - checksum: 10/3ab17aa0dabdc77d5d573ef07df63e91e778c0637f4b7f690fde46ab0007496c8dfbf32d2836d3b22ac2ba2d8c58570da51092ba7ff068d4d790147de2352465 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.3.1": - version: 1.3.1 - resolution: "@emotion/serialize@npm:1.3.1" +"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0, @emotion/serialize@npm:^1.3.1": + version: 1.3.2 + resolution: "@emotion/serialize@npm:1.3.2" dependencies: "@emotion/hash": "npm:^0.9.2" "@emotion/memoize": "npm:^0.9.0" "@emotion/unitless": "npm:^0.10.0" - "@emotion/utils": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.1" csstype: "npm:^3.0.2" - checksum: 10/4bbb9b417f88a7bb55c4ffba101e3e53059029c0258969683bb11216906e08cbd687b5674ec787ec41e5340399fb08af8881d6cf913caf8a5fdf84c4f4890f33 + checksum: 10/ead557c1ff19d917ef8169c02738ef36f0851fbfdf0bf69a543045bddea3b7281dc8252ee466cc5fb44ed27d1e61280ff943bb60a2c04158751fb07b3457cc93 languageName: node linkType: hard @@ -1817,13 +1774,6 @@ __metadata: languageName: node linkType: hard -"@emotion/unitless@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/unitless@npm:0.9.0" - checksum: 10/242754aa2f7368b5c2a5dbe61bf0a2bb0bfb4de091fe2388282f8c014c0796d0ca166b1639cf4f5f0e57e59258b622e7946a2e976ed5a56e06a5a306ca25adca - languageName: node - linkType: hard - "@emotion/use-insertion-effect-with-fallbacks@npm:^1.1.0": version: 1.1.0 resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.1.0" @@ -1833,10 +1783,10 @@ __metadata: languageName: node linkType: hard -"@emotion/utils@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/utils@npm:1.4.0" - checksum: 10/e4cdb51819db01fec21c3e35a1391900c9e7f3ac1e7ecb419c8e408464830cd7ef6e1a116381cbfe3fb1039406fb7ed35f16a1575d502c92bc9f81bc13a3ee5a +"@emotion/utils@npm:^1.4.0, @emotion/utils@npm:^1.4.1": + version: 1.4.1 + resolution: "@emotion/utils@npm:1.4.1" + checksum: 10/95e56fc0c9e05cf01a96268f0486ce813f1109a8653d2f575c67df9e8765d9c1b2daf09ad1ada67d933efbb08ca7990228e14b210c713daf90156b4869abe6a7 languageName: node linkType: hard @@ -1868,9 +1818,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.11.0 - resolution: "@eslint-community/regexpp@npm:4.11.0" - checksum: 10/f053f371c281ba173fe6ee16dbc4fe544c84870d58035ccca08dba7f6ce1830d895ce3237a0db89ba37616524775dca82f1c502066b58e2d5712d7f87f5ba17c + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10/934b6d3588c7f16b18d41efec4fdb89616c440b7e3256b8cb92cfd31ae12908600f2b986d6c1e61a84cbc10256b1dd3448cd1eec79904bd67ac365d0f1aba2e2 languageName: node linkType: hard @@ -1967,40 +1917,40 @@ __metadata: linkType: hard "@floating-ui/core@npm:^1.6.0": - version: 1.6.7 - resolution: "@floating-ui/core@npm:1.6.7" + version: 1.6.8 + resolution: "@floating-ui/core@npm:1.6.8" dependencies: - "@floating-ui/utils": "npm:^0.2.7" - checksum: 10/e15fbb49830bef39c4ce2b2d00febc0140939c1f86f0441e38e43cbe83456fd05be674812bf747bce425318d8730e3c51c291104115f8637ce7bce2f00446743 + "@floating-ui/utils": "npm:^0.2.8" + checksum: 10/87d52989c3d2cc80373bc153b7a40814db3206ce7d0b2a2bdfb63e2ff39ffb8b999b1b0ccf28e548000ebf863bf16e2bed45eab4c4d287a5dbe974ef22368d82 languageName: node linkType: hard "@floating-ui/dom@npm:^1.0.0": - version: 1.6.10 - resolution: "@floating-ui/dom@npm:1.6.10" + version: 1.6.11 + resolution: "@floating-ui/dom@npm:1.6.11" dependencies: "@floating-ui/core": "npm:^1.6.0" - "@floating-ui/utils": "npm:^0.2.7" - checksum: 10/c100f5ecb37fc1bea4e551977eae3992f8eba351e6b7f2642e2f84a4abd269406d5a46a14505bc583caf25ddee900a667829244c4eecf1cf60f08c1dabdf3ee9 + "@floating-ui/utils": "npm:^0.2.8" + checksum: 10/8579392ad10151474869e7640af169b0d7fc2df48d4da27b6dcb1a57202329147ed986b2972787d4b8cd550c87897271b2d9c4633c2ec7d0b3ad37ce1da636f1 languageName: node linkType: hard "@floating-ui/react-dom@npm:^2.0.8": - version: 2.1.1 - resolution: "@floating-ui/react-dom@npm:2.1.1" + version: 2.1.2 + resolution: "@floating-ui/react-dom@npm:2.1.2" dependencies: "@floating-ui/dom": "npm:^1.0.0" peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 10/cafabfb5dd0b25547863520b3bcf6faee7f087d0c3187a8779910a6838d496bf494f237bf1fe883bbfae1a7fcc399611ae52377b696065d8118bd7c1b9c0d253 + checksum: 10/2a67dc8499674e42ff32c7246bded185bb0fdd492150067caf9568569557ac4756a67787421d8604b0f241e5337de10762aee270d9aeef106d078a0ff13596c4 languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.7": - version: 0.2.7 - resolution: "@floating-ui/utils@npm:0.2.7" - checksum: 10/56b1bb3f73f6ec9aabf9b1fd3dc584e0f2384d319c1a6119050eab102ae6ca8b9b0eed711c2f235ffe035188cbe9727bf36e8dcb54c8bd32176737e4be47efa8 +"@floating-ui/utils@npm:^0.2.8": + version: 0.2.8 + resolution: "@floating-ui/utils@npm:0.2.8" + checksum: 10/3e3ea3b2de06badc4baebdf358b3dbd77ccd9474a257a6ef237277895943db2acbae756477ec64de65a2a1436d94aea3107129a1feeef6370675bf2b161c1abc languageName: node linkType: hard @@ -2307,24 +2257,7 @@ __metadata: languageName: node linkType: hard -"@lifi/sdk@npm:^3.1.3": - version: 3.1.5 - resolution: "@lifi/sdk@npm:3.1.5" - dependencies: - "@lifi/types": "npm:^15.2.0" - "@solana/wallet-adapter-base": "npm:^0.9.23" - "@solana/web3.js": "npm:^1.95.2" - eth-rpc-errors: "npm:^4.0.3" - viem: "npm:^2.19.3" - peerDependencies: - "@solana/wallet-adapter-base": ^0.9.0 - "@solana/web3.js": ^1.93.0 - viem: ^2.16.0 - checksum: 10/0339a8c9558dd8317662917e6c325fb20117532dd6a7540d13cad5f89adee500aadbdccf42f4c54af146e1131b88a31e0dacf7a022cbfff4570c90a984c6d5ef - languageName: node - linkType: hard - -"@lifi/sdk@npm:^3.2.3": +"@lifi/sdk@npm:^3.1.3, @lifi/sdk@npm:^3.2.3": version: 3.2.3 resolution: "@lifi/sdk@npm:3.2.3" dependencies: @@ -2341,16 +2274,9 @@ __metadata: linkType: hard "@lifi/types@npm:^15.13.0": - version: 15.13.0 - resolution: "@lifi/types@npm:15.13.0" - checksum: 10/32bea41ec4c3ee75b5fabb40045b5af529de336712b72c0158870d12024d6e006cb17507a26c7b15466a18436e11290f11699c973bc16fcbf055d1e4649ab070 - languageName: node - linkType: hard - -"@lifi/types@npm:^15.2.0": - version: 15.3.0 - resolution: "@lifi/types@npm:15.3.0" - checksum: 10/0cea5c440d6ac0f60de762c4dabcd2bb57337debf34a594f33bfd3afdb00438303eae54822419e8b39a8290ca15ef29344095e8bdee371ecf26c99935482d5e7 + version: 15.14.0 + resolution: "@lifi/types@npm:15.14.0" + checksum: 10/7258fe033297fa1007265d116c1fa679514b638034be572f62bbae0732f65c8b9fe0a751dd65a564bf59cc3f0d28eeb5f691275d15a25570540d07412b6d6e18 languageName: node linkType: hard @@ -2665,8 +2591,8 @@ __metadata: linkType: hard "@metamask/utils@npm:^9.0.0": - version: 9.1.0 - resolution: "@metamask/utils@npm:9.1.0" + version: 9.2.1 + resolution: "@metamask/utils@npm:9.2.1" dependencies: "@ethereumjs/tx": "npm:^4.2.0" "@metamask/superstruct": "npm:^3.1.0" @@ -2677,7 +2603,7 @@ __metadata: pony-cause: "npm:^2.1.10" semver: "npm:^7.5.4" uuid: "npm:^9.0.1" - checksum: 10/7335e151a51be92e86868dc48b3ee78c376d4edd5d758d334176027247637ab22839d8f663bd02542c0a19b05ecec456bedab5f36436689cf3d953ca36d91781 + checksum: 10/2192797afd91af19898e107afeaf63e89b61dc7285e0a75d0cc814b5b288e4cdfc856781b01904034c4d2c1efd9bdab512af24c7e4dfe7b77a03f1f3d9dec7e8 languageName: node linkType: hard @@ -3040,14 +2966,14 @@ __metadata: linkType: hard "@mui/types@npm:^7.2.14, @mui/types@npm:^7.2.15": - version: 7.2.15 - resolution: "@mui/types@npm:7.2.15" + version: 7.2.17 + resolution: "@mui/types@npm:7.2.17" peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 + "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10/235b4af48a76cbe121e4cf7c4c71c7f9e4eaa458eaff5df2ac8a8f2d4ae93eafa929aba7848a2dfbb3c97dd8d50f4e13828dc17ec136b777bcfdd7d654263996 + checksum: 10/de21ecd69e4fe22738f1437d7084747c07a1e88f6fbdea5a2927594c587aaf8cac7bd67118b8749a8c7a6f45875b937d4a20b43f531773cdfd870445a4237893 languageName: node linkType: hard @@ -3071,101 +2997,101 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:14.2.12": - version: 14.2.12 - resolution: "@next/env@npm:14.2.12" - checksum: 10/9e1f36da7d794a29db42ebc68e24cc7ab19ab2d1fd86d6cdf872fac0f56cbce97d6df9ff43f526ec083c505feea716b86668c7fcc410d809ad136bb656a45d03 +"@next/env@npm:14.2.13": + version: 14.2.13 + resolution: "@next/env@npm:14.2.13" + checksum: 10/b61ae9e50d04c84a8e10860b61d5c6b74478447a5f952e378b2f809360696942e76227e0f72866ddfde3356fb5be378a1be796f7be52c76cf423f1137bb2d975 languageName: node linkType: hard "@next/env@npm:^13.4.3": - version: 13.5.6 - resolution: "@next/env@npm:13.5.6" - checksum: 10/c81bd6052db366407da701e4e431becbc80ef36a88bec7883b0266cdfeb45a7da959d37c38e1a816006cd2da287e5ff5b928bdb71025e3d4aa59e07dea3edd59 + version: 13.5.7 + resolution: "@next/env@npm:13.5.7" + checksum: 10/d6465a2a85fa2f829d9c888b8a22be5649ad0f4bdd260e0a0061d7e88c7add33b702a6afead2d6cc6fde746b6132eb591e3baac7ece13e460c168517bb06205f languageName: node linkType: hard "@next/eslint-plugin-next@npm:^14.2.12": - version: 14.2.12 - resolution: "@next/eslint-plugin-next@npm:14.2.12" + version: 14.2.13 + resolution: "@next/eslint-plugin-next@npm:14.2.13" dependencies: glob: "npm:10.3.10" - checksum: 10/69930a9f1b9a923b49eb1e0f84402283b69d3a92d8e8ecdd37183324d0efc426906deb954eb44e9b387f77551b734a7b9df3703689ad7dfc07193c60fce85a77 + checksum: 10/eadbb427761ba87f2704e034185e71dbef294ec00a4ccb774296c21f9b2ef94ca4be5384d5d9ca3dd2106b92d266cc41df9175eed2eeb26d3885c44a6d22dafe languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-darwin-arm64@npm:14.2.12" +"@next/swc-darwin-arm64@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-darwin-arm64@npm:14.2.13" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-darwin-x64@npm:14.2.12" +"@next/swc-darwin-x64@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-darwin-x64@npm:14.2.13" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-linux-arm64-gnu@npm:14.2.12" +"@next/swc-linux-arm64-gnu@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-linux-arm64-gnu@npm:14.2.13" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-linux-arm64-musl@npm:14.2.12" +"@next/swc-linux-arm64-musl@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-linux-arm64-musl@npm:14.2.13" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-linux-x64-gnu@npm:14.2.12" +"@next/swc-linux-x64-gnu@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-linux-x64-gnu@npm:14.2.13" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-linux-x64-musl@npm:14.2.12" +"@next/swc-linux-x64-musl@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-linux-x64-musl@npm:14.2.13" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-win32-arm64-msvc@npm:14.2.12" +"@next/swc-win32-arm64-msvc@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-win32-arm64-msvc@npm:14.2.13" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-win32-ia32-msvc@npm:14.2.12" +"@next/swc-win32-ia32-msvc@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-win32-ia32-msvc@npm:14.2.13" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:14.2.12": - version: 14.2.12 - resolution: "@next/swc-win32-x64-msvc@npm:14.2.12" +"@next/swc-win32-x64-msvc@npm:14.2.13": + version: 14.2.13 + resolution: "@next/swc-win32-x64-msvc@npm:14.2.13" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@next/third-parties@npm:^14.2.12": - version: 14.2.12 - resolution: "@next/third-parties@npm:14.2.12" + version: 14.2.13 + resolution: "@next/third-parties@npm:14.2.13" dependencies: third-party-capital: "npm:1.0.20" peerDependencies: next: ^13.0.0 || ^14.0.0 react: ^18.2.0 - checksum: 10/de708999dcb1dac239f3faa5f6fad06124823616f13ccbf704d6246abeb0ef6332d5a653c57882666b319f14cd1853ecdc20606b4bd50e2c14926872b859e5b6 + checksum: 10/2da0233143a1635a615da3947c1a38248fc94e31a1448af8abf26771cb8268dd449d8259abd738f9ff578762fed46dbd59f2bc8e7c8d40d3c26041b4aab9b10d languageName: node linkType: hard @@ -3206,11 +3132,11 @@ __metadata: linkType: hard "@noble/curves@npm:^1.1.0, @noble/curves@npm:^1.4.0, @noble/curves@npm:^1.4.2": - version: 1.5.0 - resolution: "@noble/curves@npm:1.5.0" + version: 1.6.0 + resolution: "@noble/curves@npm:1.6.0" dependencies: - "@noble/hashes": "npm:1.4.0" - checksum: 10/d7707d756a887a0daf9eba709526017ac6905d4be58760947e0f0652961926295ba62a5a699d9a9f0bf2a2e0c6803381373e14542be5ff3885b3434bb59be86c + "@noble/hashes": "npm:1.5.0" + checksum: 10/9090b5a020b7e38c7b6d21506afaacd0c7557129d716a174334c1efc36385bf3ca6de16a543c216db58055e019c6a6c3bea8d9c0b79386e6bacff5c4c6b438a9 languageName: node linkType: hard @@ -3221,14 +3147,14 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:1.4.0, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.4.0": +"@noble/hashes@npm:1.4.0, @noble/hashes@npm:~1.4.0": version: 1.4.0 resolution: "@noble/hashes@npm:1.4.0" checksum: 10/e156e65794c473794c52fa9d06baf1eb20903d0d96719530f523cc4450f6c721a957c544796e6efd0197b2296e7cd70efeb312f861465e17940a3e3c7e0febc6 languageName: node linkType: hard -"@noble/hashes@npm:~1.5.0": +"@noble/hashes@npm:1.5.0, @noble/hashes@npm:^1.1.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.4.0, @noble/hashes@npm:~1.5.0": version: 1.5.0 resolution: "@noble/hashes@npm:1.5.0" checksum: 10/da7fc7af52af7afcf59810a7eea6155075464ff462ffda2572dc6d57d53e2669b1ea2ec774e814f6273f1697e567f28d36823776c9bf7068cba2a2855140f26e @@ -3317,33 +3243,35 @@ __metadata: linkType: hard "@opentelemetry/context-async-hooks@npm:^1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/context-async-hooks@npm:1.25.1" + version: 1.26.0 + resolution: "@opentelemetry/context-async-hooks@npm:1.26.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10/0f708d738dd7fa00997a2e2536c1fd90faab5cc468510c3b3c272ed8dfc7a7fd6bd2612c31eb4e8b6caa73156d617f0046bb978fe84ba164ea15907d9e23869a + checksum: 10/c8824cc00385f21ecdf5b48ac474096687f9ce2e8d34612a62ee8bc7a6e25797c787239349a12bfeefbff200dcb7379ca45355a5684b9755dcf8fbd3b69cf523 languageName: node linkType: hard -"@opentelemetry/core@npm:1.25.1, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.25.1, @opentelemetry/core@npm:^1.8.0": - version: 1.25.1 - resolution: "@opentelemetry/core@npm:1.25.1" +"@opentelemetry/core@npm:1.26.0, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.25.1, @opentelemetry/core@npm:^1.8.0": + version: 1.26.0 + resolution: "@opentelemetry/core@npm:1.26.0" dependencies: - "@opentelemetry/semantic-conventions": "npm:1.25.1" + "@opentelemetry/semantic-conventions": "npm:1.27.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10/3f669798760e70587cb1f329def5c02b586d3ceeb3200728387e6fb6dcd5ac9a04e4eafe3dc98a6c0cf5204e4ca238d4f0809a37425a1f1e7e9aea673ea28f59 + checksum: 10/474b6bcf42cd2825d56f915eb0d6e6cdcb37777a11fc2618fc2fa50754f4b9b5df23944f3aab186cb3ab930db5c3a81efa3183362802314a966930110346e6a4 languageName: node linkType: hard -"@opentelemetry/core@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/core@npm:1.26.0" +"@opentelemetry/instrumentation-amqplib@npm:^0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.42.0" dependencies: - "@opentelemetry/semantic-conventions": "npm:1.27.0" + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10/474b6bcf42cd2825d56f915eb0d6e6cdcb37777a11fc2618fc2fa50754f4b9b5df23944f3aab186cb3ab930db5c3a81efa3183362802314a966930110346e6a4 + "@opentelemetry/api": ^1.3.0 + checksum: 10/c97a5738792095faec20847e3bb1cb229269af2b445331ca922468b80bc2da65a3107dfe0e2e706ab7fb5c25fc260c5d5ffccda1c332cebae7d464155e6bf20d languageName: node linkType: hard @@ -3361,6 +3289,17 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/instrumentation-dataloader@npm:0.12.0": + version: 0.12.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.12.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.53.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d560b519a6be6572a3bd3707f2035f4e1f8e50b95eee109ee138b9ebfadd1ec7bca288aeabb54e8299746eae9457001162dac6ccd92af5ba7449301e0bb139bd + languageName: node + linkType: hard + "@opentelemetry/instrumentation-express@npm:0.42.0": version: 0.42.0 resolution: "@opentelemetry/instrumentation-express@npm:0.42.0" @@ -3629,18 +3568,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/resources@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/resources@npm:1.25.1" - dependencies: - "@opentelemetry/core": "npm:1.25.1" - "@opentelemetry/semantic-conventions": "npm:1.25.1" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10/971f9616deeff76e584ba7d2957db402332701d9e1f679532e105ff2b929cd93e8ee40ccac029585e70ab917ff47696a0f37a4ddfcb9f96b4ae0eeca860deaf5 - languageName: node - linkType: hard - "@opentelemetry/resources@npm:1.26.0, @opentelemetry/resources@npm:^1.26.0": version: 1.26.0 resolution: "@opentelemetry/resources@npm:1.26.0" @@ -3654,32 +3581,18 @@ __metadata: linkType: hard "@opentelemetry/sdk-metrics@npm:^1.9.1": - version: 1.25.1 - resolution: "@opentelemetry/sdk-metrics@npm:1.25.1" + version: 1.26.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.26.0" dependencies: - "@opentelemetry/core": "npm:1.25.1" - "@opentelemetry/resources": "npm:1.25.1" - lodash.merge: "npm:^4.6.2" + "@opentelemetry/core": "npm:1.26.0" + "@opentelemetry/resources": "npm:1.26.0" peerDependencies: "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10/751015cef39cb13502fd03d32d46280697b24b6ceee27bf3b1336bef16259baf3fb629734cec6bf4998a14d785da467ae93cafc7b519c83cec52312269a773b3 + checksum: 10/e48e4dd1fed1e501750460e1320f89507c19287c5059cfaccc8268ad8cc3e1de40feeee6584b23626e01f9cde0f10301d08edf6a65bbd1346ef94f70ae8844f5 languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:^1.22": - version: 1.25.1 - resolution: "@opentelemetry/sdk-trace-base@npm:1.25.1" - dependencies: - "@opentelemetry/core": "npm:1.25.1" - "@opentelemetry/resources": "npm:1.25.1" - "@opentelemetry/semantic-conventions": "npm:1.25.1" - peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10/65d289a144bba052d1b4a0f8f528d2598cfb6bfbf60d9372543a317665e9e1dc63069a66601537fe1e6e94563f53d1be9cc3474dfc3361a8d33f31e1ea2d6262 - languageName: node - linkType: hard - -"@opentelemetry/sdk-trace-base@npm:^1.26.0": +"@opentelemetry/sdk-trace-base@npm:^1.22, @opentelemetry/sdk-trace-base@npm:^1.26.0": version: 1.26.0 resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0" dependencies: @@ -3692,13 +3605,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:1.25.1": - version: 1.25.1 - resolution: "@opentelemetry/semantic-conventions@npm:1.25.1" - checksum: 10/d84745a9e21a451560a293b4e6f996ee7c67bb983a7ec05408c23d207c6fc8b73a0af9c1ebea26e3acb4f0e3405ea7eb0d6bdf9adad9f954d60829bbb48ea307 - languageName: node - linkType: hard - "@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.27.0": version: 1.27.0 resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" @@ -3877,13 +3783,13 @@ __metadata: linkType: hard "@playwright/test@npm:^1.47.1": - version: 1.47.1 - resolution: "@playwright/test@npm:1.47.1" + version: 1.47.2 + resolution: "@playwright/test@npm:1.47.2" dependencies: - playwright: "npm:1.47.1" + playwright: "npm:1.47.2" bin: playwright: cli.js - checksum: 10/d26656451cbd4cbb865c6acb25958a25171b3714907e1595301f21655b1be8f521dbd2197eecfa5b34325626c94b8ab535b8571478880633679e63ebfb6775b9 + checksum: 10/374bf386b4eb8f3b6664fa017402f87e57ee121970661a5b3c83f0fa146a7e6b7456e28cd5b1539c0981cb9a9166b1c7484549d87dc0d8076305ec64278ec770 languageName: node linkType: hard @@ -3959,8 +3865,8 @@ __metadata: linkType: hard "@rollup/pluginutils@npm:^5.0.1": - version: 5.1.0 - resolution: "@rollup/pluginutils@npm:5.1.0" + version: 5.1.2 + resolution: "@rollup/pluginutils@npm:5.1.2" dependencies: "@types/estree": "npm:^1.0.0" estree-walker: "npm:^2.0.2" @@ -3970,7 +3876,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: 10/abb15eaec5b36f159ec351b48578401bedcefdfa371d24a914cfdbb1e27d0ebfbf895299ec18ccc343d247e71f2502cba21202bc1362d7ef27d5ded699e5c2b2 + checksum: 10/cc1fe3285ab48915a6535ab2f0c90dc511bd3e63143f8e9994bb036c6c5071fd14d641cff6c89a7fde6a4faa85227d4e2cf46ee36b7d962099e0b9e4c9b8a4b0 languageName: node linkType: hard @@ -4015,14 +3921,7 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.6": - version: 1.1.7 - resolution: "@scure/base@npm:1.1.7" - checksum: 10/fc50ffaab36cb46ff9fa4dc5052a06089ab6a6707f63d596bb34aaaec76173c9a564ac312a0b981b5e7a5349d60097b8878673c75d6cbfc4da7012b63a82099b - languageName: node - linkType: hard - -"@scure/base@npm:~1.1.8": +"@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.6, @scure/base@npm:~1.1.8": version: 1.1.9 resolution: "@scure/base@npm:1.1.9" checksum: 10/f0ab7f687bbcdee2a01377fe3cd808bf63977999672751295b6a92625d5322f4754a96d40f6bd579bc367aad48ecf8a4e6d0390e70296e6ded1076f52adb16bb @@ -4060,49 +3959,49 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/browser-utils@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry-internal/browser-utils@npm:8.30.0" +"@sentry-internal/browser-utils@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry-internal/browser-utils@npm:8.32.0" dependencies: - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/654efdb63ab16fa6b0767f208b26dd4115e1e908c60a0a53f11d027518aecc3a71fe0ff319364b30972a3b3db75740ab6d58c08248bf5110a0bd73c8ff4e1692 + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/ca08b2d75eb50bec70666363c2725d99db5b2a4dcfa85909e32c7962953c05d9057af414ee88c791349c6a74dc348b3f938e584b83153947333e8aa77d73414d languageName: node linkType: hard -"@sentry-internal/feedback@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry-internal/feedback@npm:8.30.0" +"@sentry-internal/feedback@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry-internal/feedback@npm:8.32.0" dependencies: - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/20e855508d706a69803c3c47b1e4b7d37a48b32ea91f2f169292e1bec6dd58262dcaccba436fb77b07cc0e1c8bcfa1c931fc6f42b1062fb7030defa2f7eca874 + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/752bbf824581d7dcef4253f6ad4761cd30bc000dac7e25b7851aeb0f62f4f843ca3a503b4cd67114a061bd856cae6a0de13c860a8f7d28038ebc71fa8b2880d5 languageName: node linkType: hard -"@sentry-internal/replay-canvas@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry-internal/replay-canvas@npm:8.30.0" +"@sentry-internal/replay-canvas@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry-internal/replay-canvas@npm:8.32.0" dependencies: - "@sentry-internal/replay": "npm:8.30.0" - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/a47a32d6ac0fb439b4d547d7a5cf3cba85f3e74578d95f0fe80a162c2b80999db73d1a179907a9439cf1a888eb2512bbc5d300c35aa1210c1bea65bfcdaf46ae + "@sentry-internal/replay": "npm:8.32.0" + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/34d0eaf2feb96cfdae030f6b2df929bcdc52cba9240bfcfb28811b221b64010d8542ab5241c55fafe0ddff79f9d123299b633f2877c7695a13c83d02f01a5da8 languageName: node linkType: hard -"@sentry-internal/replay@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry-internal/replay@npm:8.30.0" +"@sentry-internal/replay@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry-internal/replay@npm:8.32.0" dependencies: - "@sentry-internal/browser-utils": "npm:8.30.0" - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/76e52a86854f5925bebc37ba0309dd0c31854c65680a66e65a269f83276d0366dee70caecd40fe31df70165e87dcb5431a78b2c2b29b5501a8a9a91bc9936240 + "@sentry-internal/browser-utils": "npm:8.32.0" + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/1b581717c56175a2c434f50a7902a3d8d5a49ae916af59e6b5aa6df9acaf04941c7cd89626c68b2a472f12e6a57a92396c7f2aec32e7b857ea53a1a338f1f213 languageName: node linkType: hard @@ -4113,18 +4012,18 @@ __metadata: languageName: node linkType: hard -"@sentry/browser@npm:8.30.0, @sentry/browser@npm:^8.30.0": - version: 8.30.0 - resolution: "@sentry/browser@npm:8.30.0" +"@sentry/browser@npm:8.32.0, @sentry/browser@npm:^8.30.0": + version: 8.32.0 + resolution: "@sentry/browser@npm:8.32.0" dependencies: - "@sentry-internal/browser-utils": "npm:8.30.0" - "@sentry-internal/feedback": "npm:8.30.0" - "@sentry-internal/replay": "npm:8.30.0" - "@sentry-internal/replay-canvas": "npm:8.30.0" - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/30b6bb3b10dbaa5a8d0585c3a08184221152a64a91be03147627ed76cd8054f7043f39330ed3f83d1c766831cdabdf8a51c7b432c5d18e39783196041b323a2d + "@sentry-internal/browser-utils": "npm:8.32.0" + "@sentry-internal/feedback": "npm:8.32.0" + "@sentry-internal/replay": "npm:8.32.0" + "@sentry-internal/replay-canvas": "npm:8.32.0" + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/eb745e1a864703c947ddf0b412259fff04e660a226efca7af6e5c27c5e1ea037a90143f47661bb85db5ac4bf3b3f6fde5bc16e15ca920f69eb7362e112a923e3 languageName: node linkType: hard @@ -4144,66 +4043,66 @@ __metadata: languageName: node linkType: hard -"@sentry/cli-darwin@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-darwin@npm:2.36.1" +"@sentry/cli-darwin@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-darwin@npm:2.36.2" conditions: os=darwin languageName: node linkType: hard -"@sentry/cli-linux-arm64@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-linux-arm64@npm:2.36.1" +"@sentry/cli-linux-arm64@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-linux-arm64@npm:2.36.2" conditions: (os=linux | os=freebsd) & cpu=arm64 languageName: node linkType: hard -"@sentry/cli-linux-arm@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-linux-arm@npm:2.36.1" +"@sentry/cli-linux-arm@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-linux-arm@npm:2.36.2" conditions: (os=linux | os=freebsd) & cpu=arm languageName: node linkType: hard -"@sentry/cli-linux-i686@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-linux-i686@npm:2.36.1" +"@sentry/cli-linux-i686@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-linux-i686@npm:2.36.2" conditions: (os=linux | os=freebsd) & (cpu=x86 | cpu=ia32) languageName: node linkType: hard -"@sentry/cli-linux-x64@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-linux-x64@npm:2.36.1" +"@sentry/cli-linux-x64@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-linux-x64@npm:2.36.2" conditions: (os=linux | os=freebsd) & cpu=x64 languageName: node linkType: hard -"@sentry/cli-win32-i686@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-win32-i686@npm:2.36.1" +"@sentry/cli-win32-i686@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-win32-i686@npm:2.36.2" conditions: os=win32 & (cpu=x86 | cpu=ia32) languageName: node linkType: hard -"@sentry/cli-win32-x64@npm:2.36.1": - version: 2.36.1 - resolution: "@sentry/cli-win32-x64@npm:2.36.1" +"@sentry/cli-win32-x64@npm:2.36.2": + version: 2.36.2 + resolution: "@sentry/cli-win32-x64@npm:2.36.2" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@sentry/cli@npm:^2.33.1": - version: 2.36.1 - resolution: "@sentry/cli@npm:2.36.1" - dependencies: - "@sentry/cli-darwin": "npm:2.36.1" - "@sentry/cli-linux-arm": "npm:2.36.1" - "@sentry/cli-linux-arm64": "npm:2.36.1" - "@sentry/cli-linux-i686": "npm:2.36.1" - "@sentry/cli-linux-x64": "npm:2.36.1" - "@sentry/cli-win32-i686": "npm:2.36.1" - "@sentry/cli-win32-x64": "npm:2.36.1" + version: 2.36.2 + resolution: "@sentry/cli@npm:2.36.2" + dependencies: + "@sentry/cli-darwin": "npm:2.36.2" + "@sentry/cli-linux-arm": "npm:2.36.2" + "@sentry/cli-linux-arm64": "npm:2.36.2" + "@sentry/cli-linux-i686": "npm:2.36.2" + "@sentry/cli-linux-x64": "npm:2.36.2" + "@sentry/cli-win32-i686": "npm:2.36.2" + "@sentry/cli-win32-x64": "npm:2.36.2" https-proxy-agent: "npm:^5.0.0" node-fetch: "npm:^2.6.7" progress: "npm:^2.0.3" @@ -4226,38 +4125,39 @@ __metadata: optional: true bin: sentry-cli: bin/sentry-cli - checksum: 10/3145e21a8b869e6a918f30c502b1233beda88fd6b74643d247d8803cbe8c5ad1a45533eaec1d354daa4356083ad86a6c862acef61f6aa8d5957a5e38128e682a + checksum: 10/d74884f876c602293f5caaca7f62e9bb904bf3bdf83bc96efd25f472f77e583f5f2e131c9fa60761060a90457d2900c9d865637bba1ea49ee1323b625cf32da8 languageName: node linkType: hard -"@sentry/core@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry/core@npm:8.30.0" +"@sentry/core@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry/core@npm:8.32.0" dependencies: - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/c9260a38687ab7938f5838ff36876850ae8ca80f4dcad7422950006432cc06e246c618d33627bc0ca283f1ee3106cfdfa7a73da0657828f38baf60912d226c90 + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/bec99d723ffa7eeb6ad99e7ebd5d3a38f8a6c3f46feb1af3961793bf1c2f93db37922ca0996cbcb7866e1fc9ca8be2eeffaf033378e815dce4ae6ac5b6936149 languageName: node linkType: hard "@sentry/nextjs@npm:^8.30.0": - version: 8.30.0 - resolution: "@sentry/nextjs@npm:8.30.0" + version: 8.32.0 + resolution: "@sentry/nextjs@npm:8.32.0" dependencies: "@opentelemetry/instrumentation-http": "npm:0.53.0" "@opentelemetry/semantic-conventions": "npm:^1.27.0" "@rollup/plugin-commonjs": "npm:26.0.1" - "@sentry/core": "npm:8.30.0" - "@sentry/node": "npm:8.30.0" - "@sentry/opentelemetry": "npm:8.30.0" - "@sentry/react": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - "@sentry/vercel-edge": "npm:8.30.0" + "@sentry-internal/browser-utils": "npm:8.32.0" + "@sentry/core": "npm:8.32.0" + "@sentry/node": "npm:8.32.0" + "@sentry/opentelemetry": "npm:8.32.0" + "@sentry/react": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + "@sentry/vercel-edge": "npm:8.32.0" "@sentry/webpack-plugin": "npm:2.22.3" chalk: "npm:3.0.0" resolve: "npm:1.22.8" - rollup: "npm:3.29.4" + rollup: "npm:3.29.5" stacktrace-parser: "npm:^0.1.10" peerDependencies: next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 @@ -4265,19 +4165,21 @@ __metadata: peerDependenciesMeta: webpack: optional: true - checksum: 10/a53c225f5bf598a88c859a870946a14fd724e58007bd549f9123f24ec4c6fc1569ef2966be460f0330bd905c2a037803bffab98a4fed140ba4f4c295fffb6585 + checksum: 10/193ce77a3f14ff0e886fcea26d5f4977da9936d1344db1c7292694cc6ff6a95c85cf6026f9ef4eedf1c3088e07293b7321f8843ed4a4a65cbe0542edd396c39c languageName: node linkType: hard -"@sentry/node@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry/node@npm:8.30.0" +"@sentry/node@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry/node@npm:8.32.0" dependencies: "@opentelemetry/api": "npm:^1.9.0" "@opentelemetry/context-async-hooks": "npm:^1.25.1" "@opentelemetry/core": "npm:^1.25.1" "@opentelemetry/instrumentation": "npm:^0.53.0" + "@opentelemetry/instrumentation-amqplib": "npm:^0.42.0" "@opentelemetry/instrumentation-connect": "npm:0.39.0" + "@opentelemetry/instrumentation-dataloader": "npm:0.12.0" "@opentelemetry/instrumentation-express": "npm:0.42.0" "@opentelemetry/instrumentation-fastify": "npm:0.39.0" "@opentelemetry/instrumentation-fs": "npm:0.15.0" @@ -4300,71 +4202,71 @@ __metadata: "@opentelemetry/sdk-trace-base": "npm:^1.26.0" "@opentelemetry/semantic-conventions": "npm:^1.27.0" "@prisma/instrumentation": "npm:5.19.1" - "@sentry/core": "npm:8.30.0" - "@sentry/opentelemetry": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" + "@sentry/core": "npm:8.32.0" + "@sentry/opentelemetry": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" import-in-the-middle: "npm:^1.11.0" - checksum: 10/28c843ead7100b01c7a9a4b46e536200fa6e015bab89c72153e43b4e170a725fe76698cb2bddd295292fea363ad668ea3edb18515591af10c9444d4e29e4df2f + checksum: 10/9ea1e5d7daaf29382ba63fd03c9b2a18c38a2112cf76feb3439e6ffac831447c68be60e5d9164622394f7978b482f40fba1983dad7fc4c5b8787e168d42e46fd languageName: node linkType: hard -"@sentry/opentelemetry@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry/opentelemetry@npm:8.30.0" +"@sentry/opentelemetry@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry/opentelemetry@npm:8.32.0" dependencies: - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" peerDependencies: "@opentelemetry/api": ^1.9.0 "@opentelemetry/core": ^1.25.1 "@opentelemetry/instrumentation": ^0.53.0 "@opentelemetry/sdk-trace-base": ^1.26.0 "@opentelemetry/semantic-conventions": ^1.27.0 - checksum: 10/f83ea42a51f1bcbcdfccffcdfbc8a479263dcee129f66cb4b107e2fdd4d19c51ebc9defbca242cedd0a3fecb6bb636e4f55187fe7342887581137b621a01312a + checksum: 10/018b93207c71401f7e0f2cf7cdcd07d68b71855c37525c26561208cea41adbabb1f7036577b5e932e2b84b0d9eede01cf43212040328058f12eb9f210b1800f3 languageName: node linkType: hard -"@sentry/react@npm:8.30.0, @sentry/react@npm:^8.30.0": - version: 8.30.0 - resolution: "@sentry/react@npm:8.30.0" +"@sentry/react@npm:8.32.0, @sentry/react@npm:^8.30.0": + version: 8.32.0 + resolution: "@sentry/react@npm:8.32.0" dependencies: - "@sentry/browser": "npm:8.30.0" - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" + "@sentry/browser": "npm:8.32.0" + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" hoist-non-react-statics: "npm:^3.3.2" peerDependencies: react: ^16.14.0 || 17.x || 18.x || 19.x - checksum: 10/336a5ca764184dae2ba04f3422fa6ddd9d6deb07d8cf52b83d15a6bb8423c6832f0e41181bce8217adb647a48e3bd78541083df2b17265081939df99099fa275 + checksum: 10/76e01920344cd4aa44de2b8e91ee3d5117f34fbc750de87d36a861941501a48e28825238e52079e139c8acd6e7f6386474657778ac083f801cf819071fc5f0c0 languageName: node linkType: hard -"@sentry/types@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry/types@npm:8.30.0" - checksum: 10/ebd3769877f2ea070bd017304c94fa9b47b9724dd63724a8d82810de1de45dac168c1fbe74c104ae7a65e33c0c6e2ee3d55cbde02f161b362f1c94a7fda2f1a2 +"@sentry/types@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry/types@npm:8.32.0" + checksum: 10/71ab7273f01d2545f80c36076bd9db9e060a2e41a8abaefd92354583d994f5b5fd8f224b8048be8162769e4a2f3a0ec43a1750130b72583adf88608d1e2c9a96 languageName: node linkType: hard -"@sentry/utils@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry/utils@npm:8.30.0" +"@sentry/utils@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry/utils@npm:8.32.0" dependencies: - "@sentry/types": "npm:8.30.0" - checksum: 10/130c1f1ed2dfddc99f273316e3e775dd01c25cc3a296cb5fab62e7fa2f1a67c6b205b540c38f073136825ee93b98ee5586836c3c2261bc8c87656decc77ca4b3 + "@sentry/types": "npm:8.32.0" + checksum: 10/a8110e19ec54b922e5320e4d8b0b788defa532b39cc09a6743862c4f696034e78487c45fe634f0dcc372ae66cc5bc20e21f00a1d2c1917860bbaf5e933446c33 languageName: node linkType: hard -"@sentry/vercel-edge@npm:8.30.0": - version: 8.30.0 - resolution: "@sentry/vercel-edge@npm:8.30.0" +"@sentry/vercel-edge@npm:8.32.0": + version: 8.32.0 + resolution: "@sentry/vercel-edge@npm:8.32.0" dependencies: - "@sentry/core": "npm:8.30.0" - "@sentry/types": "npm:8.30.0" - "@sentry/utils": "npm:8.30.0" - checksum: 10/a6b1cda5c6821dbc8b88f6102de7812da1339f0493973aded4582a86190818e8e2ce71ee3a7521cfc35eb6cdd6d82c12a9d9323cb087c38d15c97c1571967c79 + "@sentry/core": "npm:8.32.0" + "@sentry/types": "npm:8.32.0" + "@sentry/utils": "npm:8.32.0" + checksum: 10/f99c2b4a23ae17a0c0868dd782a93db0b6bd3bf427ceb0b9e409ef3f0ad684647adfe2a380e6639f0e72f04ee18097572d369dea0c5e4ae54cb0db1eab5e554e languageName: node linkType: hard @@ -4580,29 +4482,6 @@ __metadata: languageName: node linkType: hard -"@solana/web3.js@npm:^1.95.2": - version: 1.95.2 - resolution: "@solana/web3.js@npm:1.95.2" - dependencies: - "@babel/runtime": "npm:^7.24.8" - "@noble/curves": "npm:^1.4.2" - "@noble/hashes": "npm:^1.4.0" - "@solana/buffer-layout": "npm:^4.0.1" - agentkeepalive: "npm:^4.5.0" - bigint-buffer: "npm:^1.1.5" - bn.js: "npm:^5.2.1" - borsh: "npm:^0.7.0" - bs58: "npm:^4.0.1" - buffer: "npm:6.0.3" - fast-stable-stringify: "npm:^1.0.0" - jayson: "npm:^4.1.1" - node-fetch: "npm:^2.7.0" - rpc-websockets: "npm:^9.0.2" - superstruct: "npm:^2.0.2" - checksum: 10/0c42d6a45481b220807144f434b4a66ac2afac8aa140c7bf9d3834a4da9848cc2ff4b9022010301a0c2942309d32d36d5e3e7e50d9d99e58e34b39ef0853abaa - languageName: node - linkType: hard - "@solana/web3.js@npm:^1.95.3": version: 1.95.3 resolution: "@solana/web3.js@npm:1.95.3" @@ -4864,18 +4743,18 @@ __metadata: linkType: hard "@swc/helpers@npm:^0.5.11, @swc/helpers@npm:^0.5.12": - version: 0.5.12 - resolution: "@swc/helpers@npm:0.5.12" + version: 0.5.13 + resolution: "@swc/helpers@npm:0.5.13" dependencies: tslib: "npm:^2.4.0" - checksum: 10/f04a4728c38a6e75a85b077408e175e1abbc1650a76e4b78008d6380ca1422d9f7f4f9fe61b42f8fb889140f05ced6a5a9983037a8d5d8086bf6bc80a0b2118b + checksum: 10/6ba2f7e215d32d71fce139e2cfc426b3ed7eaa709febdeb07b97260a4c9eea4784cf047cc1271be273990b08220b576b94a42b5780947c0b3be84973a847a24d languageName: node linkType: hard -"@tanstack/history@npm:1.45.3": - version: 1.45.3 - resolution: "@tanstack/history@npm:1.45.3" - checksum: 10/da2e58c925740438adf2e396537003e241c0f364e9cdbb2e592295d7936eb4e2921c4c0985d8ffe2b51829e9fae3331f0289c2234d5dd3d88999d14c8610a851 +"@tanstack/history@npm:1.57.6": + version: 1.57.6 + resolution: "@tanstack/history@npm:1.57.6" + checksum: 10/a18b5531a3ab8c56c18e43717f5c55946fe2b44f6351dcd8b1cd6b242893b322af272ad4bdd8730f7903262a0d5adac9e7135305c004d9a959cd0687abf74130 languageName: node linkType: hard @@ -4916,17 +4795,21 @@ __metadata: linkType: hard "@tanstack/react-router@npm:^1.46.4": - version: 1.48.1 - resolution: "@tanstack/react-router@npm:1.48.1" + version: 1.58.9 + resolution: "@tanstack/react-router@npm:1.58.9" dependencies: - "@tanstack/history": "npm:1.45.3" + "@tanstack/history": "npm:1.57.6" "@tanstack/react-store": "npm:^0.5.5" tiny-invariant: "npm:^1.3.3" tiny-warning: "npm:^1.0.3" peerDependencies: + "@tanstack/router-generator": 1.58.1 react: ">=18" react-dom: ">=18" - checksum: 10/dcc6f091c51b358870f8a8724fa8e273c32a2074a4483f01b007bafaec8c58e291ad6018b7731a0e9af2cd0d4f1d92c1494970284cb1bcd848885774f6550c4d + peerDependenciesMeta: + "@tanstack/router-generator": + optional: true + checksum: 10/e2f808dbb6956ce4304b79d8dc5cbe091e15d2999e900cb0ffd9217db98a54cd00ce73e21ac197c75be67be6ecbc426066a8720869f184879dfb1ed52bb843f4 languageName: node linkType: hard @@ -5011,9 +4894,9 @@ __metadata: linkType: hard "@types/estree@npm:*, @types/estree@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d languageName: node linkType: hard @@ -5064,12 +4947,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 22.3.0 - resolution: "@types/node@npm:22.3.0" +"@types/node@npm:*, @types/node@npm:^22.5.5": + version: 22.7.0 + resolution: "@types/node@npm:22.7.0" dependencies: - undici-types: "npm:~6.18.2" - checksum: 10/c31a798ed722a7417727f018ea6d621db038a613c626da643174cc6f3dcf4ce2fc9933a010aec289103d9564da2c2f9b054c9aa398828f00e17269a78c64d4ec + undici-types: "npm:~6.19.2" + checksum: 10/6476d94a4c0fbf60df56634063e8aa26da1152e7096daf374f1eb010eab1c7ef4cdb75ab2508480e82c0b56538e0e7bdfc72af47e7a4e4ace37f2035eddfd3c2 languageName: node linkType: hard @@ -5087,15 +4970,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.5.5": - version: 22.5.5 - resolution: "@types/node@npm:22.5.5" - dependencies: - undici-types: "npm:~6.19.2" - checksum: 10/172d02c8e6d921699edcf559c28b3805616bd6481af1b3cb0299f89ad9a6f33b71050434c06ce7b503166054a26275344187c443f99f745d0b12601372452f19 - languageName: node - linkType: hard - "@types/parse-json@npm:^4.0.0": version: 4.0.2 resolution: "@types/parse-json@npm:4.0.2" @@ -5113,13 +4987,13 @@ __metadata: linkType: hard "@types/pg@npm:*": - version: 8.11.6 - resolution: "@types/pg@npm:8.11.6" + version: 8.11.10 + resolution: "@types/pg@npm:8.11.10" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10/4eb22d42c5363abf58b1be0104e01332a0928e9dce8571ad136ce3e256c16dd97343a17c29066e4f390ed366548cca0bda55ff48b495ee4c1d70d123cc75edf6 + checksum: 10/65b7d7ca9c90b7cb94aa94ad94bb1883356845e1f64688bc824ecd499da25f63a2400f0a58500554637048a7cc8b91055bbfe14301c082ce9669afd0c18e414c languageName: node linkType: hard @@ -5135,9 +5009,9 @@ __metadata: linkType: hard "@types/prop-types@npm:*, @types/prop-types@npm:^15.7.12": - version: 15.7.12 - resolution: "@types/prop-types@npm:15.7.12" - checksum: 10/ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe + version: 15.7.13 + resolution: "@types/prop-types@npm:15.7.13" + checksum: 10/8935cad87c683c665d09a055919d617fe951cb3b2d5c00544e3a913f861a2bd8d2145b51c9aa6d2457d19f3107ab40784c40205e757232f6a80cc8b1c815513c languageName: node linkType: hard @@ -5159,23 +5033,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": - version: 18.3.3 - resolution: "@types/react@npm:18.3.3" +"@types/react@npm:*, @types/react@npm:^18.3.7": + version: 18.3.9 + resolution: "@types/react@npm:18.3.9" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/68e203b7f1f91d6cf21f33fc7af9d6d228035a26c83f514981e54aa3da695d0ec6af10c277c6336de1dd76c4adbe9563f3a21f80c4462000f41e5f370b46e96c - languageName: node - linkType: hard - -"@types/react@npm:^18.3.7": - version: 18.3.7 - resolution: "@types/react@npm:18.3.7" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/30cfbe33c82e8033df5f70a4f54068f4344a691cff3f2b3901dd678e89ce5477dc8faada4a45d333ea570e1992ca8fda5b096d9deddfafb8c373acababc40c70 + checksum: 10/d1321e874e6523b0a944d4ce514c071cbe44501b04591e17c0b265c9a03fb3e4486337ae1bec74541b72a41f34beef157342205dd07b31d116f4d06fa39cf32f languageName: node linkType: hard @@ -5380,9 +5244,9 @@ __metadata: languageName: node linkType: hard -"@wagmi/connectors@npm:5.1.11": - version: 5.1.11 - resolution: "@wagmi/connectors@npm:5.1.11" +"@wagmi/connectors@npm:5.1.13": + version: 5.1.13 + resolution: "@wagmi/connectors@npm:5.1.13" dependencies: "@coinbase/wallet-sdk": "npm:4.0.4" "@metamask/sdk": "npm:0.28.4" @@ -5392,19 +5256,19 @@ __metadata: "@walletconnect/modal": "npm:2.6.2" cbw-sdk: "npm:@coinbase/wallet-sdk@3.9.3" peerDependencies: - "@wagmi/core": 2.13.5 + "@wagmi/core": 2.13.7 typescript: ">=5.0.4" viem: 2.x peerDependenciesMeta: typescript: optional: true - checksum: 10/aa9044bdf097d2d4f42a42322fffcf623cb9b2b30258ac6f9f48db776e95aaec8c54d15e4bd97103cfe92e49538d53262875bb1fb847853f139b02a30f9531cc + checksum: 10/f210a0e09c0df77bb3b540b0e438349e4613f476c2b108d7b229b3c5a72abcc9fb32081cc1f955b64be69dea5ca38a683ada95c646e73cd5487713cffd8b209e languageName: node linkType: hard -"@wagmi/core@npm:2.13.5": - version: 2.13.5 - resolution: "@wagmi/core@npm:2.13.5" +"@wagmi/core@npm:2.13.7": + version: 2.13.7 + resolution: "@wagmi/core@npm:2.13.7" dependencies: eventemitter3: "npm:5.0.1" mipd: "npm:0.0.7" @@ -5418,7 +5282,7 @@ __metadata: optional: true typescript: optional: true - checksum: 10/84059173afe74146e3bede9e6bbe0420cc031e19ac931a037bec68ebbc39b272770d1b46a1929ac6f8ae8538aa3fcfc436188e3fab5d2c37f06157b82850da5c + checksum: 10/9377a7a1c2d878bab2bf39de0d380faed2d1a3c48decce75c6c6813eabdecec44146e626acb75f9c8482a2c973c80e0eb47d98d805d6292a99e10b278a4875ce languageName: node linkType: hard @@ -5970,9 +5834,9 @@ __metadata: linkType: hard "ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 10/1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10/495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac languageName: node linkType: hard @@ -6044,7 +5908,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7, array-includes@npm:^3.1.8": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -6079,7 +5943,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.3, array.prototype.findlastindex@npm:^1.2.5": +"array.prototype.findlastindex@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlastindex@npm:1.2.5" dependencies: @@ -6178,7 +6042,7 @@ __metadata: languageName: node linkType: hard -"axe-core@npm:^4.10.0, axe-core@npm:^4.9.1": +"axe-core@npm:^4.10.0": version: 4.10.0 resolution: "axe-core@npm:4.10.0" checksum: 10/6158489a7a704edc98bd30ed56243b8280c5203c60e095a2feb5bff95d9bf2ef10becfe359b1cbc8601338418999c26cf4eee704181dedbcb487f4d63a06d8d5 @@ -6192,15 +6056,6 @@ __metadata: languageName: node linkType: hard -"axobject-query@npm:~3.1.1": - version: 3.1.1 - resolution: "axobject-query@npm:3.1.1" - dependencies: - deep-equal: "npm:^2.0.5" - checksum: 10/3a3931bc419219e78d6438bc457c191e4c972caddae2be7eaa94615269209f1d283aaaece706a69742e5bcf27df99cc75eee97a5e366a06a9f2bdab1a79748c7 - languageName: node - linkType: hard - "babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -6225,7 +6080,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4": +"babel-plugin-polyfill-corejs3@npm:^0.10.6": version: 0.10.6 resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" dependencies: @@ -6433,16 +6288,16 @@ __metadata: linkType: hard "browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" + version: 4.24.0 + resolution: "browserslist@npm:4.24.0" dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" + caniuse-lite: "npm:^1.0.30001663" + electron-to-chromium: "npm:^1.5.28" node-releases: "npm:^2.0.18" update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: 10/e266d18c6c6c5becf9a1a7aa264477677b9796387972e8fce34854bb33dc1666194dc28389780e5dc6566e68a95e87ece2ce222e1c4ca93c2b75b61dfebd5f1c + checksum: 10/26c1b8ba257a0b51b102080ba9d42945af2abaa8c4cf6da21cd47b3f123fc1e81640203b293214356c2c17d9d265bb3a5ed428b6d302f383576dd6ce8fd5036c languageName: node linkType: hard @@ -6540,10 +6395,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001651 - resolution: "caniuse-lite@npm:1.0.30001651" - checksum: 10/fe4857b2a91a9cb77993eec9622de68bea0df17c31cb9584ca5c562f64bb3b8fda316d898aa3b1ee3ee9f7d80f6bf13c42acb09d9a56a1a6c64afaf7381472fa +"caniuse-lite@npm:^1.0.30001579, caniuse-lite@npm:^1.0.30001663": + version: 1.0.30001663 + resolution: "caniuse-lite@npm:1.0.30001663" + checksum: 10/a67aba45e10bf56f584f82ab414ff21f5d23ddbd71936839b79c305710b332d8b91df37948a525fe1c9cede81ab56a3d831ee6e3f1fa11c4f299651ea49a8067 languageName: node linkType: hard @@ -6638,9 +6493,9 @@ __metadata: linkType: hard "cjs-module-lexer@npm:^1.2.2": - version: 1.3.1 - resolution: "cjs-module-lexer@npm:1.3.1" - checksum: 10/6629188d5ce74b57e5dce2222db851b5496a8d65b533a05957fb24089a3cec8d769378013c375a954c5a0f7522cde6a36d5a65bfd88f5575cb2de3176046fa8e + version: 1.4.1 + resolution: "cjs-module-lexer@npm:1.4.1" + checksum: 10/6e830a1e00a34d416949bbc1924f3e8da65cef4a6a09e2b7fa35722e2d1c34bf378d3baca987b698d1cbc3eb83e44b044039b4e82755c96f30e0f03d1d227637 languageName: node linkType: hard @@ -6868,11 +6723,11 @@ __metadata: linkType: hard "core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": - version: 3.38.0 - resolution: "core-js-compat@npm:3.38.0" + version: 3.38.1 + resolution: "core-js-compat@npm:3.38.1" dependencies: browserslist: "npm:^4.23.3" - checksum: 10/7ebdca6b305c9c470980e1f7e7a3d759add7cb754bff62926242907ee4d1d4e8bb13f70eb9a7d7769e0f63aec3f4cca83abf60f502286853b45d4b63a01c25ed + checksum: 10/4e2f219354fd268895f79486461a12df96f24ed307321482fe2a43529c5a64e7c16bcba654980ba217d603444f5141d43a79058aeac77511085f065c5da72207 languageName: node linkType: hard @@ -7021,14 +6876,14 @@ __metadata: linkType: hard "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.6": - version: 4.3.6 - resolution: "debug@npm:4.3.6" + version: 4.3.7 + resolution: "debug@npm:4.3.7" dependencies: - ms: "npm:2.1.2" + ms: "npm:^2.1.3" peerDependenciesMeta: supports-color: optional: true - checksum: 10/d3adb9af7d57a9e809a68f404490cf776122acca16e6359a2702c0f462e510e91f9765c07f707b8ab0d91e03bad57328f3256f5082631cefb5393d0394d50fb7 + checksum: 10/71168908b9a78227ab29d5d25fe03c5867750e31ce24bf2c44a86efc5af041758bb56569b0a3d48a9b5344c00a24a777e6f4100ed6dfd9534a42c1dde285125a languageName: node linkType: hard @@ -7260,20 +7115,20 @@ __metadata: linkType: hard "eciesjs@npm:^0.3.15": - version: 0.3.19 - resolution: "eciesjs@npm:0.3.19" + version: 0.3.20 + resolution: "eciesjs@npm:0.3.20" dependencies: "@types/secp256k1": "npm:^4.0.6" futoin-hkdf: "npm:^1.5.3" secp256k1: "npm:^5.0.0" - checksum: 10/35cdf409c39500662a62e9b6775f7ad65cbb598eb2a19ebf5d78e7444b995fe533f2a0ce97f90bb8787c32f3d5a9e35d5e9725536b515d3dd336a52a68b3791d + checksum: 10/c05eb1fddb81d10400e9722a3f5c1f8af6fc6bacdaeddce4ed0471504a5303279b737e4986308f2d8b29a02654efdc136718bd265b80afcbff6b6c7b451572ef languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.4": - version: 1.5.8 - resolution: "electron-to-chromium@npm:1.5.8" - checksum: 10/3e052206ce62bebf73666e471eb3a1a15f5c85d2cb1f952a88def2c05963e035e9a89910c80bc16ac4e8704e542557ebe03412d8835ec493e535d8d313e90101 +"electron-to-chromium@npm:^1.5.28": + version: 1.5.28 + resolution: "electron-to-chromium@npm:1.5.28" + checksum: 10/dfe890eaeec6f48d245895060edbfd6a0ff8b1a102b22324b2b33cd4aaabe39748a4a9f687be6a5e08f1d8fb1fac0d3bcd96da00d47771a3665d8641111a5f07 languageName: node linkType: hard @@ -7293,9 +7148,9 @@ __metadata: linkType: hard "emoji-regex@npm:^10.3.0": - version: 10.3.0 - resolution: "emoji-regex@npm:10.3.0" - checksum: 10/b9b084ebe904f13bb4b66ee4c29fb41a7a4a1165adcc33c1ce8056c0194b882cc91ebdc782f1a779b5d7ea7375c5064643a7734893d7c657b44c5c6b9d7bf1e7 + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10/76bb92c5bcf0b6980d37e535156231e4a9d0aa6ab3b9f5eabf7690231d5aa5d5b8e516f36e6804cbdd0f1c23dfef2a60c40ab7bb8aedd890584281a565b97c50 languageName: node linkType: hard @@ -7338,16 +7193,16 @@ __metadata: languageName: node linkType: hard -"engine.io-client@npm:~6.5.2": - version: 6.5.4 - resolution: "engine.io-client@npm:6.5.4" +"engine.io-client@npm:~6.6.1": + version: 6.6.1 + resolution: "engine.io-client@npm:6.6.1" dependencies: "@socket.io/component-emitter": "npm:~3.1.0" debug: "npm:~4.3.1" engine.io-parser: "npm:~5.2.1" ws: "npm:~8.17.1" - xmlhttprequest-ssl: "npm:~2.0.0" - checksum: 10/a91b97cd80e6b048e24887ccac53b143d08ea91c76335870a4aee1427394ba01a7e78ed8d64e518a42fdb297b331ffa80e50fdd26dbc5a08364ea715bf367c59 + xmlhttprequest-ssl: "npm:~2.1.1" + checksum: 10/9346c3ee60ebb7a58966e927e479b8b3c5d6bc82788ad5efc38b976c4a3b2b27420d08cb29b84de8213004d49bdeed47ecd473b427498e54301a8853cd85e0c9 languageName: node linkType: hard @@ -7564,9 +7419,9 @@ __metadata: linkType: hard "escalade@npm:^3.1.1, escalade@npm:^3.1.2": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 10/a1e07fea2f15663c30e40b9193d658397846ffe28ce0a3e4da0d8e485fedfeca228ab846aee101a05015829adf39f9934ff45b2a3fca47bed37a29646bd05cd3 + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 languageName: node linkType: hard @@ -7662,27 +7517,15 @@ __metadata: languageName: node linkType: hard -"eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" - dependencies: - debug: "npm:^3.2.7" - peerDependenciesMeta: - eslint: - optional: true - checksum: 10/3e7892c0a984c963632da56b30ccf8254c29b535467138f91086c2ecdb2ebd10e2be61b54e553f30e5abf1d14d47a7baa0dac890e3a658fd3cd07dca63afbe6d - languageName: node - linkType: hard - "eslint-module-utils@npm:^2.8.1, eslint-module-utils@npm:^2.9.0": - version: 2.11.0 - resolution: "eslint-module-utils@npm:2.11.0" + version: 2.11.1 + resolution: "eslint-module-utils@npm:2.11.1" dependencies: debug: "npm:^3.2.7" peerDependenciesMeta: eslint: optional: true - checksum: 10/1ba42cf48c5f9ec3b76dfa42c16f1c24c10508313689425c05ccb1d0eaa34bdc5c5b9c0c033cd402e9c429666bd3eb8c6d0c66565b0c00949fae743ad3643c95 + checksum: 10/88285f758cc2d4a07410a5b765cc2858319075e12bedb65ae26459f1bc5a18c2b154f9026d4acb5049896c3815adb29087fd07b2b04d26beb59182bd6028b121 languageName: node linkType: hard @@ -7700,34 +7543,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.25.3": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" - dependencies: - array-includes: "npm:^3.1.7" - array.prototype.findlastindex: "npm:^1.2.3" - array.prototype.flat: "npm:^1.3.2" - array.prototype.flatmap: "npm:^1.3.2" - debug: "npm:^3.2.7" - doctrine: "npm:^2.1.0" - eslint-import-resolver-node: "npm:^0.3.9" - eslint-module-utils: "npm:^2.8.0" - hasown: "npm:^2.0.0" - is-core-module: "npm:^2.13.1" - is-glob: "npm:^4.0.3" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.7" - object.groupby: "npm:^1.0.1" - object.values: "npm:^1.1.7" - semver: "npm:^6.3.1" - tsconfig-paths: "npm:^3.15.0" - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 10/5865f05c38552145423c535326ec9a7113ab2305c7614c8b896ff905cfabc859c8805cac21e979c9f6f742afa333e6f62f812eabf891a7e8f5f0b853a32593c1 - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.30.0": +"eslint-plugin-import@npm:^2.25.3, eslint-plugin-import@npm:^2.30.0": version: 2.30.0 resolution: "eslint-plugin-import@npm:2.30.0" dependencies: @@ -7772,7 +7588,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsx-a11y@npm:^6.10.0": +"eslint-plugin-jsx-a11y@npm:^6.10.0, eslint-plugin-jsx-a11y@npm:^6.5.1": version: 6.10.0 resolution: "eslint-plugin-jsx-a11y@npm:6.10.0" dependencies: @@ -7798,32 +7614,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.9.0 - resolution: "eslint-plugin-jsx-a11y@npm:6.9.0" - dependencies: - aria-query: "npm:~5.1.3" - array-includes: "npm:^3.1.8" - array.prototype.flatmap: "npm:^1.3.2" - ast-types-flow: "npm:^0.0.8" - axe-core: "npm:^4.9.1" - axobject-query: "npm:~3.1.1" - damerau-levenshtein: "npm:^1.0.8" - emoji-regex: "npm:^9.2.2" - es-iterator-helpers: "npm:^1.0.19" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^3.3.5" - language-tags: "npm:^1.0.9" - minimatch: "npm:^3.1.2" - object.fromentries: "npm:^2.0.8" - safe-regex-test: "npm:^1.0.3" - string.prototype.includes: "npm:^2.0.0" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10/00a854a1a1a7ca52c216e83a574d5a65fc150243afcababfbf1657c5ffff1f076b9bd3d87029bb6432bfaa36d23e16c1e8b59671d0580bbb72e14860ee1bec9a - languageName: node - linkType: hard - "eslint-plugin-prettier@npm:^5.2.1": version: 5.2.1 resolution: "eslint-plugin-prettier@npm:5.2.1" @@ -7853,35 +7643,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.27.1": - version: 7.35.0 - resolution: "eslint-plugin-react@npm:7.35.0" - dependencies: - array-includes: "npm:^3.1.8" - array.prototype.findlast: "npm:^1.2.5" - array.prototype.flatmap: "npm:^1.3.2" - array.prototype.tosorted: "npm:^1.1.4" - doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.19" - estraverse: "npm:^5.3.0" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" - minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.8" - object.fromentries: "npm:^2.0.8" - object.values: "npm:^1.2.0" - prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.5" - semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.11" - string.prototype.repeat: "npm:^1.0.0" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10/fa0a54f9ea249cf89d92bb5983bf7df741da3709a0ebd6a885a67d05413ed302fd8b64c9dc819b33df8efa6d8b06f5e56b1f6965a9be7cc3e79054da4dbae5ed - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.36.1": +"eslint-plugin-react@npm:^7.27.1, eslint-plugin-react@npm:^7.36.1": version: 7.36.1 resolution: "eslint-plugin-react@npm:7.36.1" dependencies: @@ -8781,7 +8543,7 @@ __metadata: languageName: node linkType: hard -"h3@npm:^1.10.2, h3@npm:^1.11.1": +"h3@npm:^1.10.2, h3@npm:^1.12.0": version: 1.12.0 resolution: "h3@npm:1.12.0" dependencies: @@ -9231,16 +8993,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": - version: 2.15.0 - resolution: "is-core-module@npm:2.15.0" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10/70e962543e5d3a97c07cb29144a86792d545a21f28e67da5401d85878a0193d46fbab8d97bc3ca680e2778705dca66e7b6ca840c493497a27ca0e8c5f3ac3d1d - languageName: node - linkType: hard - -"is-core-module@npm:^2.15.1": +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" dependencies: @@ -9619,8 +9372,8 @@ __metadata: linkType: hard "jayson@npm:^4.1.1": - version: 4.1.1 - resolution: "jayson@npm:4.1.1" + version: 4.1.2 + resolution: "jayson@npm:4.1.2" dependencies: "@types/connect": "npm:^3.4.33" "@types/node": "npm:^12.12.54" @@ -9636,7 +9389,7 @@ __metadata: ws: "npm:^7.5.10" bin: jayson: bin/jayson.js - checksum: 10/8ffd219abbd4fa3231530334b81effe2d079b36b71891d2e1fc8844a487087da290b9d1d80200c63c778113382afb9a3c861f59ea4f901f8ab9831ac2ecfa7e5 + checksum: 10/7ad5e80e11ef39b7382509d046546883d2595998aa245768b342bcc0a63843e011e16f02a023d5a78fb74df788b5f97c1e850568fc1b90c138fa4772cc55572c languageName: node linkType: hard @@ -9860,6 +9613,7 @@ __metadata: react-i18next: "npm:^15.0.2" react-router-dom: "npm:^6.26.2" rollup-plugin-polyfill-node: "npm:^0.13.0" + shallow-equal: "npm:^3.1.0" sharp: "npm:^0.33.5" siwe: "npm:^2.3.2" typescript: "npm:^5.6.2" @@ -9898,9 +9652,9 @@ __metadata: linkType: hard "ky@npm:^1.1.3": - version: 1.6.0 - resolution: "ky@npm:1.6.0" - checksum: 10/4c16276a0c3da85088f4828a1fa2a7d91694061c5602f2aba95af4cb6ca7500a99a82060a76895f177ed2fb59621d7363b8e674ecc1f27eb0fd3114e0bea794f + version: 1.7.2 + resolution: "ky@npm:1.7.2" + checksum: 10/d1102fe05e5d2263c5b484bc00b387a5310667aaeec4ebc4f4c3f9369b1d2e62cc19409d50aa21b45127e3ddb8be42d76fb54239799b0aebc9806c7ecb35c696 languageName: node linkType: hard @@ -10129,7 +9883,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a @@ -10235,17 +9989,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.7 - resolution: "micromatch@npm:4.0.7" - dependencies: - braces: "npm:^3.0.3" - picomatch: "npm:^2.3.1" - checksum: 10/a11ed1cb67dcbbe9a5fc02c4062cf8bb0157d73bf86956003af8dcfdf9b287f9e15ec0f6d6925ff6b8b5b496202335e497b01de4d95ef6cf06411bc5e5c474a0 - languageName: node - linkType: hard - -"micromatch@npm:~4.0.8": +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:~4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -10485,14 +10229,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 10/673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: 10/aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -10516,9 +10253,9 @@ __metadata: linkType: hard "napi-wasm@npm:^1.1.0": - version: 1.1.0 - resolution: "napi-wasm@npm:1.1.0" - checksum: 10/767781f07ccaca846a6036a2df7686c9decc1b4fd6ad30ba782c94829476ec5610acc41e4caf7df94ebf0bed4abd4d34539979d0d85b025127c8a41be6259375 + version: 1.1.3 + resolution: "napi-wasm@npm:1.1.3" + checksum: 10/5cad19c3ba4c8b176453149542ea72f156be5db6d249611a76537833381f5cec802ed4d7ae5c3f7c0ef69d439c037f7247bbae7db711ed84f915be2a9fc43bb4 languageName: node linkType: hard @@ -10581,19 +10318,19 @@ __metadata: linkType: hard "next@npm:^14.2.12": - version: 14.2.12 - resolution: "next@npm:14.2.12" - dependencies: - "@next/env": "npm:14.2.12" - "@next/swc-darwin-arm64": "npm:14.2.12" - "@next/swc-darwin-x64": "npm:14.2.12" - "@next/swc-linux-arm64-gnu": "npm:14.2.12" - "@next/swc-linux-arm64-musl": "npm:14.2.12" - "@next/swc-linux-x64-gnu": "npm:14.2.12" - "@next/swc-linux-x64-musl": "npm:14.2.12" - "@next/swc-win32-arm64-msvc": "npm:14.2.12" - "@next/swc-win32-ia32-msvc": "npm:14.2.12" - "@next/swc-win32-x64-msvc": "npm:14.2.12" + version: 14.2.13 + resolution: "next@npm:14.2.13" + dependencies: + "@next/env": "npm:14.2.13" + "@next/swc-darwin-arm64": "npm:14.2.13" + "@next/swc-darwin-x64": "npm:14.2.13" + "@next/swc-linux-arm64-gnu": "npm:14.2.13" + "@next/swc-linux-arm64-musl": "npm:14.2.13" + "@next/swc-linux-x64-gnu": "npm:14.2.13" + "@next/swc-linux-x64-musl": "npm:14.2.13" + "@next/swc-win32-arm64-msvc": "npm:14.2.13" + "@next/swc-win32-ia32-msvc": "npm:14.2.13" + "@next/swc-win32-x64-msvc": "npm:14.2.13" "@swc/helpers": "npm:0.5.5" busboy: "npm:1.6.0" caniuse-lite: "npm:^1.0.30001579" @@ -10634,7 +10371,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10/4dcae15547930cdaeb8a1d935dec3ab0c82a65347b0835988fd70fa5b108f1c301b75f98acf063c253858719e2969301fb2b0c30d6b2a46086ec19419430b119 + checksum: 10/152928801dc403172e6b4a3d64ae250ad59a4d57fff862d9560687380d4b6ca95a07439da9a9b702bda86ff01093aa04e46a0003d0422295bdbd7d8ce449c4d6 languageName: node linkType: hard @@ -10665,7 +10402,7 @@ __metadata: languageName: node linkType: hard -"node-fetch-native@npm:^1.6.2, node-fetch-native@npm:^1.6.3, node-fetch-native@npm:^1.6.4": +"node-fetch-native@npm:^1.6.4": version: 1.6.4 resolution: "node-fetch-native@npm:1.6.4" checksum: 10/39c4c6d0c2a4bed1444943e1647ad0d79eb6638cf159bc37dffeafd22cffcf6a998e006aa1f3dd1d9d2258db7d78dee96b44bee4ba0bbaf0440ed348794f2543 @@ -10694,13 +10431,13 @@ __metadata: linkType: hard "node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": - version: 4.8.1 - resolution: "node-gyp-build@npm:4.8.1" + version: 4.8.2 + resolution: "node-gyp-build@npm:4.8.2" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js - checksum: 10/b9297770f96a92e5f2b854f3fd5e4bd418df81d7785a81ab60cec5cf2e5e72dc2c3319808978adc572cfa3885e6b12338cb5f4034bed2cab35f0d76a4b75ccdf + checksum: 10/e3a365eed7a2d950864a1daa34527588c16fe43ae189d0aeb8fd1dfec91ba42a0e1b499322bff86c2832029fec4f5901bf26e32005e1e17a781dcd5177b6a657 languageName: node linkType: hard @@ -10823,7 +10560,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.7, object.fromentries@npm:^2.0.8": +"object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -10835,7 +10572,7 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.1, object.groupby@npm:^1.0.3": +"object.groupby@npm:^1.0.3": version: 1.0.3 resolution: "object.groupby@npm:1.0.3" dependencies: @@ -10846,7 +10583,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.6, object.values@npm:^1.1.7, object.values@npm:^1.2.0": +"object.values@npm:^1.1.6, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -10864,21 +10601,21 @@ __metadata: languageName: node linkType: hard -"ofetch@npm:^1.3.3": - version: 1.3.4 - resolution: "ofetch@npm:1.3.4" +"ofetch@npm:^1.3.4": + version: 1.4.0 + resolution: "ofetch@npm:1.4.0" dependencies: destr: "npm:^2.0.3" - node-fetch-native: "npm:^1.6.3" - ufo: "npm:^1.5.3" - checksum: 10/41630a6d8adeddb03fc9a9ae435d7da58a364e84df254640a3965ae5246fd627ef752ef46bc083996c2bfafa56837f1e8c6b69f07a97b5da4fa98f2c98119c0f + node-fetch-native: "npm:^1.6.4" + ufo: "npm:^1.5.4" + checksum: 10/92af33cfb35879314c0ecdd9c15b814fd3a7dc31dbae1032492fa42767bb1afe6f2a7faa179b2c2a4482d4b30c87671ddb043bcccde7ada7499b10e5caf2eb51 languageName: node linkType: hard "ohash@npm:^1.1.3": - version: 1.1.3 - resolution: "ohash@npm:1.1.3" - checksum: 10/80a3528285f61588600c8c4f091a67f55fbc141f4eec4b3c30182468053042eef5a9684780e963f98a71ec068f3de56d42920c6417bf8f79ab14aeb75ac0bb39 + version: 1.1.4 + resolution: "ohash@npm:1.1.4" + checksum: 10/b11445234e59c9c2b00f357f8f00b6ba00e14c84fc0a232cdc14eb1d80066479b09d27af0201631e84b7a15ba7c4a1939f4cc47f2030e9bf83c9e8afc3ff7dfd languageName: node linkType: hard @@ -11102,9 +10839,9 @@ __metadata: linkType: hard "pg-protocol@npm:*": - version: 1.6.1 - resolution: "pg-protocol@npm:1.6.1" - checksum: 10/9af672208adae8214f55f5b4597c4699ab9946205a99863d3e2bb8d024fdab16711457b539bc366cc29040218aa87508cf61294b76d288f48881b973d9117bd6 + version: 1.7.0 + resolution: "pg-protocol@npm:1.7.0" + checksum: 10/ffffdf74426c9357b57050f1c191e84447c0e8b2a701b3ab302ac7dd0eb27b862d92e5e3b2d38876a1051de83547eb9165d6a58b3a8e90bb050dae97f9993d54 languageName: node linkType: hard @@ -11137,9 +10874,9 @@ __metadata: linkType: hard "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": - version: 1.0.1 - resolution: "picocolors@npm:1.0.1" - checksum: 10/fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10/a2ad60d94d185c30f2a140b19c512547713fb89b920d32cc6cf658fa786d63a37ba7b8451872c3d9fc34883971fb6e5878e07a20b60506e0bb2554dce9169ccb languageName: node linkType: hard @@ -11212,37 +10949,37 @@ __metadata: linkType: hard "pkg-types@npm:^1.1.1": - version: 1.1.3 - resolution: "pkg-types@npm:1.1.3" + version: 1.2.0 + resolution: "pkg-types@npm:1.2.0" dependencies: confbox: "npm:^0.1.7" mlly: "npm:^1.7.1" pathe: "npm:^1.1.2" - checksum: 10/06c03ca679ea8e3a1ea7cb74e92af1a486a6081401aac35f6aa51fb6f0855cd86bbfc713f9bfdaaa730815b5ae147b4d6a838710b550c1c4b3f54a6653ff04a3 + checksum: 10/ed732842b86260395b82e31afc0dd8316e74642a78754ad148a5500ca5537565c6dfbd6c80c2dc92077afc1beb471b05a85a9572089cc8a1bba82248c331bf45 languageName: node linkType: hard -"playwright-core@npm:1.47.1": - version: 1.47.1 - resolution: "playwright-core@npm:1.47.1" +"playwright-core@npm:1.47.2": + version: 1.47.2 + resolution: "playwright-core@npm:1.47.2" bin: playwright-core: cli.js - checksum: 10/b5ee08e1a934237fca0f0f52a677e5d49e45578e14b48a886927428bdf453f355a120548ae2f3f97e28a9d5e23a213120f6d8f10e18ee3f9112b10716888dac4 + checksum: 10/2a2b28b2f1d01bc447f4f1cb4b5248ed053fde38429484c909efa17226e692a79cd5e6d4c337e9040eaaf311b6cb4a36027d6d14f1f44c482c5fb3feb081f913 languageName: node linkType: hard -"playwright@npm:1.47.1": - version: 1.47.1 - resolution: "playwright@npm:1.47.1" +"playwright@npm:1.47.2": + version: 1.47.2 + resolution: "playwright@npm:1.47.2" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.47.1" + playwright-core: "npm:1.47.2" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10/f4340f28485bd83a856a365a03af2013b3203c8134a075d05f1a834665e1204b98141c335d5c5c1600720c9e07db702db3dbff5ef138fc1c31d5feec3ac0057f + checksum: 10/73494a187be3e75222b65ebcce8d790eada340bd61ca0d07410060a52232ddbc2357c4882d7b42434054dc1f4802fdb039a47530b4b5500dcfd1bf0edd63c191 languageName: node linkType: hard @@ -11357,9 +11094,9 @@ __metadata: linkType: hard "preact@npm:^10.16.0": - version: 10.23.2 - resolution: "preact@npm:10.23.2" - checksum: 10/188e220a90eb5dca757a28d4a88bed0d23b1e80ea6f9e9d2447e109e754b428db62429cc65dc38214037b638323232476c59b6daec9a6eb7b780f933b010808c + version: 10.24.1 + resolution: "preact@npm:10.24.1" + checksum: 10/44084b7c1e044a76299c9d78f5ff8b60dbe94058e819c5e81d3587f80a90d7e497a52c63ffa31e56e844c54dee322ef919d3fd5d20688a37314250c06ca85f8b languageName: node linkType: hard @@ -11459,12 +11196,12 @@ __metadata: linkType: hard "pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" + version: 3.0.2 + resolution: "pump@npm:3.0.2" dependencies: end-of-stream: "npm:^1.1.0" once: "npm:^1.3.1" - checksum: 10/e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + checksum: 10/e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f languageName: node linkType: hard @@ -11767,11 +11504,11 @@ __metadata: linkType: hard "regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" dependencies: regenerate: "npm:^1.4.2" - checksum: 10/b855152efdcca0ecc37ceb0cb6647a544344555fc293af3b57191b918e1bc9c95ee404a9a64a1d692bf66d45850942c29d93f2740c0d1980d3a8ea2ca63b184e + checksum: 10/9150eae6fe04a8c4f2ff06077396a86a98e224c8afad8344b1b656448e89e84edcd527e4b03aa5476774129eb6ad328ed684f9c1459794a935ec0cc17ce14329 languageName: node linkType: hard @@ -12021,9 +11758,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:3.29.4": - version: 3.29.4 - resolution: "rollup@npm:3.29.4" +"rollup@npm:3.29.5": + version: 3.29.5 + resolution: "rollup@npm:3.29.5" dependencies: fsevents: "npm:~2.3.2" dependenciesMeta: @@ -12031,7 +11768,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10/9e39d54e23731a4c4067e9c02910cdf7479a0f9a7584796e2dc6efaa34bb1e5e015c062c87d1e64d96038baca76cefd47681ff22604fae5827147f54123dc6d0 + checksum: 10/5ce0e5f1d9288d4954db93993477f894eb3042ec98a7c9c19980e53b1f58296481e3dc6c2b1a2a3680b20eb6c3fe64ed97942d5ff29df658a059647c33b3593c languageName: node linkType: hard @@ -12104,9 +11841,9 @@ __metadata: linkType: hard "safe-stable-stringify@npm:^2.1.0": - version: 2.4.3 - resolution: "safe-stable-stringify@npm:2.4.3" - checksum: 10/a6c192bbefe47770a11072b51b500ed29be7b1c15095371c1ee1dc13e45ce48ee3c80330214c56764d006c485b88bd0b24940d868948170dddc16eed312582d8 + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c languageName: node linkType: hard @@ -12201,6 +11938,13 @@ __metadata: languageName: node linkType: hard +"shallow-equal@npm:^3.1.0": + version: 3.1.0 + resolution: "shallow-equal@npm:3.1.0" + checksum: 10/2e0eda6ff74da859a3766fd1865522aacfbef945652d2b629fda0ca5cd9f1f6579e6b3da8bd21e6e8be3a8b49c24484cdd2b8a128f5793d48cff73a0edec15f9 + languageName: node + linkType: hard + "sharp@npm:^0.33.5": version: 0.33.5 resolution: "sharp@npm:0.33.5" @@ -12370,14 +12114,14 @@ __metadata: linkType: hard "socket.io-client@npm:^4.5.1": - version: 4.7.5 - resolution: "socket.io-client@npm:4.7.5" + version: 4.8.0 + resolution: "socket.io-client@npm:4.8.0" dependencies: "@socket.io/component-emitter": "npm:~3.1.0" debug: "npm:~4.3.2" - engine.io-client: "npm:~6.5.2" + engine.io-client: "npm:~6.6.1" socket.io-parser: "npm:~4.2.4" - checksum: 10/a9e118081dc1669a63af3abd9defce94f85c8ed8d9146cd7a77665b5f1f78baf0b9f4155cf0fce7770856f97493416551abcba686f02778045f4768ceaafed5c + checksum: 10/98e05a6e3b19e6bae39bedbb6fd07e970e90c962b6ab9b68c4968a789be84efe40129b7f8abc73bafa31a29d444c3a0bde992131f93e7c3ddb27ef5192131e08 languageName: node linkType: hard @@ -12422,9 +12166,9 @@ __metadata: linkType: hard "source-map-js@npm:^1.0.2": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 10/74f331cfd2d121c50790c8dd6d3c9de6be21926de80583b23b37029b0f37aefc3e019fa91f9a10a5e120c08135297e1ecf312d561459c45908cb1e0e365f49e5 + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 languageName: node linkType: hard @@ -12920,9 +12664,9 @@ __metadata: linkType: hard "tslib@npm:^2.0.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.6.2": - version: 2.6.3 - resolution: "tslib@npm:2.6.3" - checksum: 10/52109bb681f8133a2e58142f11a50e05476de4f075ca906d13b596ae5f7f12d30c482feb0bff167ae01cfc84c5803e575a307d47938999246f5a49d174fc558c + version: 2.7.0 + resolution: "tslib@npm:2.7.0" + checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 languageName: node linkType: hard @@ -12961,9 +12705,9 @@ __metadata: linkType: hard "type-fest@npm:^4.3.1": - version: 4.24.0 - resolution: "type-fest@npm:4.24.0" - checksum: 10/60efd6ec71f5113ef0a0fcabe61fc722bb2520ea082bc23e4b4dfb44204234dc691560a5e837f939160d7c18b410ed8fae32ddb752d57bed009248e0f61dce6b + version: 4.26.1 + resolution: "type-fest@npm:4.26.1" + checksum: 10/b82676194f80af228cb852e320d2ea8381c89d667d2e4d9f2bdfc8f254bccc039c7741a90c53617a4de0c9fdca8265ed18eb0888cd628f391c5c381c33a9f94b languageName: node linkType: hard @@ -13046,7 +12790,7 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^1.4.0, ufo@npm:^1.5.3": +"ufo@npm:^1.4.0, ufo@npm:^1.5.3, ufo@npm:^1.5.4": version: 1.5.4 resolution: "ufo@npm:1.5.4" checksum: 10/a885ed421e656aea6ca64e9727b8118a9488715460b6f1a0f0427118adfe2f2830fe7c1d5bd9c5c754a332e6807516551cd663ea67ce9ed6a4e3edc739916335 @@ -13090,13 +12834,6 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.18.2": - version: 6.18.2 - resolution: "undici-types@npm:6.18.2" - checksum: 10/5c863f3cc65d012498cf0f8562b9d81e785c2b8b8a8d66343b9f4351ff40a3a29b500fbaea10667626fd91a32433d4c876810aafa5ab561369de702b62d4b323 - languageName: node - linkType: hard - "undici-types@npm:~6.19.2": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -13118,9 +12855,9 @@ __metadata: linkType: hard "unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 10/39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10/3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 languageName: node linkType: hard @@ -13135,9 +12872,9 @@ __metadata: linkType: hard "unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 10/06661bc8aba2a60c7733a7044f3e13085808939ad17924ffd4f5222a650f88009eb7c09481dc9c15cfc593d4ad99bd1cde8d54042733b335672591a81c52601c + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 10/9fd53c657aefe5d3cb8208931b4c34fbdb30bb5aa9a6c6bf744e2f3036f00b8889eeaf30cb55a873b76b6ee8b5801ea770e1c49b3352141309f58f0ebb3011d8 languageName: node linkType: hard @@ -13209,45 +12946,48 @@ __metadata: linkType: hard "unplugin@npm:^1.8.3": - version: 1.12.2 - resolution: "unplugin@npm:1.12.2" + version: 1.14.1 + resolution: "unplugin@npm:1.14.1" dependencies: acorn: "npm:^8.12.1" - chokidar: "npm:^3.6.0" - webpack-sources: "npm:^3.2.3" webpack-virtual-modules: "npm:^0.6.2" - checksum: 10/52c6e1e8e3daf2362cff8ca1786363c76c2795eb5bc97dce0b54314a82bbac681de3da0e58c6d3057d5eec8b66defb2a28eeb322dae5545baf2b35299b3f240d + peerDependencies: + webpack-sources: ^3 + peerDependenciesMeta: + webpack-sources: + optional: true + checksum: 10/ad82ec5b8de5ae4fb7d24f8ed7d71071e15855d335365d7ab6f2e074d5d666589dd52e9f2a16017da19d7c43f60e50e09bc529420bf9f29ac7c90cc3cf13ef28 languageName: node linkType: hard "unstorage@npm:^1.9.0": - version: 1.10.2 - resolution: "unstorage@npm:1.10.2" + version: 1.12.0 + resolution: "unstorage@npm:1.12.0" dependencies: anymatch: "npm:^3.1.3" chokidar: "npm:^3.6.0" destr: "npm:^2.0.3" - h3: "npm:^1.11.1" + h3: "npm:^1.12.0" listhen: "npm:^1.7.2" - lru-cache: "npm:^10.2.0" + lru-cache: "npm:^10.4.3" mri: "npm:^1.2.0" - node-fetch-native: "npm:^1.6.2" - ofetch: "npm:^1.3.3" - ufo: "npm:^1.4.0" + node-fetch-native: "npm:^1.6.4" + ofetch: "npm:^1.3.4" + ufo: "npm:^1.5.4" peerDependencies: - "@azure/app-configuration": ^1.5.0 - "@azure/cosmos": ^4.0.0 + "@azure/app-configuration": ^1.7.0 + "@azure/cosmos": ^4.1.1 "@azure/data-tables": ^13.2.2 - "@azure/identity": ^4.0.1 + "@azure/identity": ^4.4.1 "@azure/keyvault-secrets": ^4.8.0 - "@azure/storage-blob": ^12.17.0 - "@capacitor/preferences": ^5.0.7 + "@azure/storage-blob": ^12.24.0 + "@capacitor/preferences": ^6.0.2 "@netlify/blobs": ^6.5.0 || ^7.0.0 - "@planetscale/database": ^1.16.0 - "@upstash/redis": ^1.28.4 + "@planetscale/database": ^1.19.0 + "@upstash/redis": ^1.34.0 "@vercel/kv": ^1.0.1 idb-keyval: ^6.2.1 - ioredis: ^5.3.2 + ioredis: ^5.4.1 peerDependenciesMeta: "@azure/app-configuration": optional: true @@ -13275,7 +13015,7 @@ __metadata: optional: true ioredis: optional: true - checksum: 10/2ed14d4755447fbb383e98294ca383ec19fdcfbff1c6a46a6d5cf3c322e2f77eb9b71e8a135338daa32229adb6d087076c5321d44674bf1fd6df0b3e00b10f78 + checksum: 10/b648d79e9913a87152228a080355d9ccf780900eb78bd32f8dab9cc55eb66ab45876e9fc1ed49f1c7a4171600e78c33430e2527740d991df9d071872409b9c37 languageName: node linkType: hard @@ -13422,31 +13162,9 @@ __metadata: languageName: node linkType: hard -"viem@npm:^2.1.1, viem@npm:^2.19.3": - version: 2.19.6 - resolution: "viem@npm:2.19.6" - dependencies: - "@adraffy/ens-normalize": "npm:1.10.0" - "@noble/curves": "npm:1.4.0" - "@noble/hashes": "npm:1.4.0" - "@scure/bip32": "npm:1.4.0" - "@scure/bip39": "npm:1.3.0" - abitype: "npm:1.0.5" - isows: "npm:1.0.4" - webauthn-p256: "npm:0.0.5" - ws: "npm:8.17.1" - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 10/f943f4e3930d5b3028a28130ef8d792ad71268737e66d0d807171292f74901b272b4d41fe95addfcc4e28258ceb9e3b55721f2d0b703b4576669b0bce3f0b649 - languageName: node - linkType: hard - -"viem@npm:^2.21.8, viem@npm:^2.21.9": - version: 2.21.9 - resolution: "viem@npm:2.21.9" +"viem@npm:^2.1.1, viem@npm:^2.21.8, viem@npm:^2.21.9": + version: 2.21.14 + resolution: "viem@npm:2.21.14" dependencies: "@adraffy/ens-normalize": "npm:1.10.0" "@noble/curves": "npm:1.4.0" @@ -13462,7 +13180,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/bdafc5359a43dcb472aef1b1737ba2deae24104192af65a6a068cc583df1ab4dccd75505895556386da05ebb3bd4c9c5d7294ac5c2c12aeee99ca9f555e16d1b + checksum: 10/0de5a87604ff8397ab12da3a05212b999cb86fc9d7ac601ae3c49a0ed039246299e401dbdb0b41b4bbb4006b2bff8a358ec2f44d01268f625666a6ad159e0514 languageName: node linkType: hard @@ -13474,11 +13192,11 @@ __metadata: linkType: hard "wagmi@npm:^2.12.12": - version: 2.12.12 - resolution: "wagmi@npm:2.12.12" + version: 2.12.14 + resolution: "wagmi@npm:2.12.14" dependencies: - "@wagmi/connectors": "npm:5.1.11" - "@wagmi/core": "npm:2.13.5" + "@wagmi/connectors": "npm:5.1.13" + "@wagmi/core": "npm:2.13.7" use-sync-external-store: "npm:1.2.0" peerDependencies: "@tanstack/react-query": ">=5.0.0" @@ -13488,7 +13206,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/bf30fcbb07d24e491901a89fb61546383baa8dd54a18f48f90ef77a2df4dbaec854770949cfd0a561d968720822b7e300c0f7faf3b49736dcba5b79199b30fec + checksum: 10/5e248097fafa44128b39566afa24ad35a56ff176e3988232ad9e9d1c158c751f41b4a81c49bdbec0301e7beec579b1dd068b627329e3942ce225e02bb89df1a3 languageName: node linkType: hard @@ -13751,10 +13469,10 @@ __metadata: languageName: node linkType: hard -"xmlhttprequest-ssl@npm:~2.0.0": - version: 2.0.0 - resolution: "xmlhttprequest-ssl@npm:2.0.0" - checksum: 10/3c2edfce0c49c7a494ed16c87e6897c9e3eba29763a5505526de83ddefd195d224fa5cdf41092298c99cd6ee473c9f259a0679f6ff3b8a9535dcd09900db91f9 +"xmlhttprequest-ssl@npm:~2.1.1": + version: 2.1.1 + resolution: "xmlhttprequest-ssl@npm:2.1.1" + checksum: 10/40affa3100d566709965910bb3877f5434d61a5588fef46dc896ec39f141261aafe922b5fbbaa79927f019bb8e765877563f0b2ffa69e4c8779b7666bb0c2cc1 languageName: node linkType: hard @@ -13801,11 +13519,11 @@ __metadata: linkType: hard "yaml@npm:^2.3.4, yaml@npm:~2.5.0": - version: 2.5.0 - resolution: "yaml@npm:2.5.0" + version: 2.5.1 + resolution: "yaml@npm:2.5.1" bin: yaml: bin.mjs - checksum: 10/72e903fdbe3742058885205db4a6c9ff38e5f497f4e05e631264f7756083c05e7d10dfb5e4ce9d7a95de95338f9b20d19dd0b91c60c65f7d7608b6b3929820ad + checksum: 10/0eecb679db75ea6a989ad97715a9fa5d946972945aa6aa7d2175bca66c213b5564502ccb1cdd04b1bf816ee38b5c43e4e2fda3ff6f5e09da24dabb51ae92c57d languageName: node linkType: hard From 38519735445c55480c5738ad470c1a8e25ebd28b Mon Sep 17 00:00:00 2001 From: dennyscode <43956540+dennyscode@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:45:38 +0200 Subject: [PATCH 6/8] chore: add articles sections by category (#1304) --- src/app/[lng]/(infos)/learn/page.tsx | 6 +- src/app/[lng]/layout.tsx | 14 +- src/app/lib/getArticles.ts | 9 +- src/app/lib/getTags.ts | 88 +++++++++++ src/app/ui/learn/LearnPage.tsx | 6 +- .../BlogArticleCard/BlogArticleCard.style.ts | 13 +- .../Blog/BlogArticleCard/BlogArticleCard.tsx | 54 +++---- .../BlogArticleCardSkeleton.tsx | 2 +- .../BlogArticlesBoard.style.ts | 95 ------------ .../BlogArticlesBoard/BlogArticlesBoard.tsx | 138 ------------------ .../BlogArticlesBoardTabs.tsx | 111 -------------- .../BlogArticlesCollections.style.ts | 85 +---------- .../BlogArticlesCollections.tsx | 44 ++++++ .../BlogArticlesTabs.style.ts | 25 ++++ .../BlogArticlesTabs.tsx | 93 ++++++++++++ .../index.ts | 0 .../Blog/BlogCarousel/BlogCarousel.tsx | 9 +- .../Pagination.style.ts | 16 +- .../Pagination.tsx | 107 +++++++------- .../PaginationSkeleton.tsx | 0 .../JoinDiscordBanner.style.ts | 1 - .../ProfilePage/Leaderboard/Leaderboard.tsx | 6 +- src/components/Tabs/Tabs.tsx | 14 +- src/const/trackingKeys.ts | 1 + src/theme/theme.ts | 1 + src/types/strapi.ts | 17 ++- src/utils/chunkArray.ts | 10 ++ src/utils/strapi/StrapiApi.ts | 32 ++++ tests/e2e.spec.ts | 18 +-- 29 files changed, 455 insertions(+), 560 deletions(-) create mode 100644 src/app/lib/getTags.ts delete mode 100644 src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.style.ts delete mode 100644 src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.tsx delete mode 100644 src/components/Blog/BlogArticlesBoard/BlogArticlesBoardTabs.tsx create mode 100644 src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.tsx create mode 100644 src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.style.ts create mode 100644 src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.tsx rename src/components/Blog/{BlogArticlesBoard => BlogArticlesCollections}/index.ts (100%) rename src/components/Blog/{BlogArticlesBoard => Pagination}/Pagination.style.ts (83%) rename src/components/Blog/{BlogArticlesBoard => Pagination}/Pagination.tsx (60%) rename src/components/Blog/{BlogArticlesBoard => Pagination}/PaginationSkeleton.tsx (100%) create mode 100644 src/utils/chunkArray.ts diff --git a/src/app/[lng]/(infos)/learn/page.tsx b/src/app/[lng]/(infos)/learn/page.tsx index 3f5a55e8..2a3c4aea 100644 --- a/src/app/[lng]/(infos)/learn/page.tsx +++ b/src/app/[lng]/(infos)/learn/page.tsx @@ -3,6 +3,7 @@ import { getArticles } from '@/app/lib/getArticles'; import { getFeaturedArticle } from '@/app/lib/getFeaturedArticle'; import LearnPage from '@/app/ui/learn/LearnPage'; import type { Metadata } from 'next'; +import { getTags } from 'src/app/lib/getTags'; export async function generateMetadata(): Promise { return { @@ -18,9 +19,12 @@ export async function generateMetadata(): Promise { export default async function Page() { // TODO: make this component client side by removing async, a hook should do the job, will permit us to pre-render the pages const featuredArticle = await getFeaturedArticle(); - const carouselArticles = await getArticles(featuredArticle.data.id); + const carouselArticles = await getArticles(featuredArticle.data.id, 5); + const tags = await getTags(); + return ( f.variable).join(' ')} + style={{ scrollBehavior: 'smooth' }} > diff --git a/src/app/lib/getArticles.ts b/src/app/lib/getArticles.ts index 66ebca91..0ce543bc 100644 --- a/src/app/lib/getArticles.ts +++ b/src/app/lib/getArticles.ts @@ -7,10 +7,13 @@ export interface GetArticlesResponse extends StrapiResponse { export async function getArticles( excludeId?: number, + pageSize?: number, ): Promise { - const urlParams = new ArticleStrapiApi() - .sort('desc') - .addPaginationParams({ page: 1, pageSize: 20, withCount: false }); + const urlParams = new ArticleStrapiApi().sort('desc').addPaginationParams({ + page: 1, + pageSize: pageSize || 20, + withCount: false, + }); const apiBaseUrl = urlParams.getApiBaseUrl(); const apiUrl = urlParams.getApiUrl(); const accessToken = urlParams.getApiAccessToken(); diff --git a/src/app/lib/getTags.ts b/src/app/lib/getTags.ts new file mode 100644 index 00000000..01d97c65 --- /dev/null +++ b/src/app/lib/getTags.ts @@ -0,0 +1,88 @@ +import type { StrapiResponse, TagAttributes } from '@/types/strapi'; +import { TagStrapiApi } from '@/utils/strapi/StrapiApi'; + +export interface GetTagsResponse extends StrapiResponse { + url: string; +} + +const predefinedOrder = ['Announcement', 'Partner', 'Bridge']; + +// Helper function to sort tags based on predefined order +const sortTagsByPredefinedOrder = (tags: TagAttributes[]) => { + return tags.sort((a, b) => { + const titleA = a.attributes.Title; + const titleB = b.attributes.Title; + + const indexA = predefinedOrder.indexOf(titleA); + const indexB = predefinedOrder.indexOf(titleB); + + if (indexA === -1 && indexB === -1) { + return 0; + } + if (indexA === -1) { + return 1; + } + if (indexB === -1) { + return -1; + } + return indexA - indexB; + }); +}; + +// Helper function to sort blog articles by `publishedAt` date +const sortBlogArticlesByPublishedDate = (tags: TagAttributes[]) => { + return tags.map((tag) => { + tag.attributes.blog_articles.data = tag.attributes.blog_articles.data.sort( + (a, b) => { + const dateA = a.attributes.publishedAt + ? Date.parse(a.attributes.publishedAt) + : -Infinity; // Default to oldest if undefined + const dateB = b.attributes.publishedAt + ? Date.parse(b.attributes.publishedAt) + : -Infinity; // Default to oldest if undefined + + return dateB - dateA; + }, + ); + return tag; + }); +}; + +export async function getTags(): Promise { + const urlParams = new TagStrapiApi().addPaginationParams({ + page: 1, + pageSize: 20, + withCount: false, + }); + const apiBaseUrl = urlParams.getApiBaseUrl(); + const apiUrl = urlParams.getApiUrl(); + const accessToken = urlParams.getApiAccessToken(); + + const res = await fetch(decodeURIComponent(apiUrl), { + cache: 'force-cache', + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }); + + if (!res.ok) { + throw new Error('Failed to fetch data'); + } + + const data = await res.json().then((output) => { + let filteredData = output.data; + + // Sort blog_articles by published date first + filteredData = sortBlogArticlesByPublishedDate(filteredData); + + // Then sort tags by predefined order + filteredData = sortTagsByPredefinedOrder(filteredData); + + return { + meta: output.meta, + data: filteredData, + }; + }); + + return { ...data, url: apiBaseUrl }; +} diff --git a/src/app/ui/learn/LearnPage.tsx b/src/app/ui/learn/LearnPage.tsx index e2dccf9f..953b4e29 100644 --- a/src/app/ui/learn/LearnPage.tsx +++ b/src/app/ui/learn/LearnPage.tsx @@ -3,16 +3,20 @@ import { BlogCarousel } from '@/components/Blog/BlogCarousel/BlogCarousel'; import { FeaturedArticle } from '@/components/Blog/FeaturedArticle/FeaturedArticle'; import { JoinDiscordBanner } from '@/components/JoinDiscordBanner/JoinDiscordBanner'; import type { BlogArticleData, StrapiResponse } from '@/types/strapi'; +import type { GetTagsResponse } from 'src/app/lib/getTags'; +import { BlogArticlesCollections } from 'src/components/Blog/BlogArticlesCollections/BlogArticlesCollections'; interface LearnPageProps { carouselArticles: GetArticlesResponse; featuredArticle: StrapiResponse; url: string; + tags: GetTagsResponse; } const LearnPage = ({ carouselArticles, featuredArticle, + tags, url, }: LearnPageProps) => { return ( @@ -28,7 +32,7 @@ const LearnPage = ({ )} - {/* */} + ); }; diff --git a/src/components/Blog/BlogArticleCard/BlogArticleCard.style.ts b/src/components/Blog/BlogArticleCard/BlogArticleCard.style.ts index d0e2ca4c..4a4a0b93 100644 --- a/src/components/Blog/BlogArticleCard/BlogArticleCard.style.ts +++ b/src/components/Blog/BlogArticleCard/BlogArticleCard.style.ts @@ -1,4 +1,5 @@ import { Tag } from '@/components/Tag.style'; +import type { BoxProps } from '@mui/material'; import { Box, Card, @@ -9,8 +10,8 @@ import { type Breakpoint, } from '@mui/material'; import { styled } from '@mui/material/styles'; -import { urbanist } from 'src/fonts/fonts'; import Image from 'next/image'; +import { urbanist } from 'src/fonts/fonts'; export const BlogArticleCardContainer = styled(Card)(({ theme }) => ({ flexShrink: 0, @@ -111,14 +112,20 @@ export const BlogArticleCardTitleSkeleton = styled(Skeleton)(({ theme }) => ({ minHeight: '64px', })); -export const BlogArticleCardMetaContainer = styled(Box)(({ theme }) => ({ +interface BlogArticleCardMetaContainerProps extends BoxProps { + hasTags: boolean; +} + +export const BlogArticleCardMetaContainer = styled(Box, { + shouldForwardProp: (prop) => prop !== 'hasTags', +})(({ theme, hasTags }) => ({ display: 'flex', alignItems: 'center', fontSize: '14px', color: theme.palette.text.primary, '*': { textWrap: 'nowrap' }, [theme.breakpoints.up('sm' as Breakpoint)]: { - marginLeft: theme.spacing(2), + ...(hasTags && { marginLeft: theme.spacing(1) }), }, })); diff --git a/src/components/Blog/BlogArticleCard/BlogArticleCard.tsx b/src/components/Blog/BlogArticleCard/BlogArticleCard.tsx index 544eb082..dd04433c 100644 --- a/src/components/Blog/BlogArticleCard/BlogArticleCard.tsx +++ b/src/components/Blog/BlogArticleCard/BlogArticleCard.tsx @@ -2,13 +2,12 @@ import { TrackingAction, TrackingEventParameter } from '@/const/trackingKeys'; import { JUMPER_LEARN_PATH } from '@/const/urls'; import { useUserTracking } from '@/hooks/userTracking/useUserTracking'; import { useMenuStore } from '@/stores/menu/MenuStore'; -import type { StrapiImageData, TagData } from '@/types/strapi'; +import type { BlogArticleData } from '@/types/strapi'; import { formatDate } from '@/utils/formatDate'; import { readingTime } from '@/utils/readingTime'; import type { CSSObject } from '@mui/material'; import { Skeleton } from '@mui/material'; import Link from 'next/link'; -import type { RootNode } from 'node_modules/@strapi/blocks-react-renderer/dist/BlocksRenderer'; import { useTranslation } from 'react-i18next'; import { BlogArticleCardContainer, @@ -23,63 +22,51 @@ import { } from '.'; interface BlogArticleCardProps { + article: BlogArticleData; baseUrl: string; - id: number; - image: StrapiImageData; - content: RootNode[]; - publishedAt: string | null | undefined; - createdAt: string; - title: string; - tags: TagData | undefined; trackingCategory: string; - slug: string; styles?: CSSObject; } export const BlogArticleCard = ({ + article, baseUrl, trackingCategory, - image, - tags, - content, - publishedAt, - createdAt, - id, - title, styles, - slug, }: BlogArticleCardProps) => { const { trackEvent } = useUserTracking(); - const minRead = readingTime(content); + const minRead = readingTime(article.attributes.Content); const { t } = useTranslation(); const { closeAllMenus } = useMenuStore((state) => state); - const handleClick = () => { trackEvent({ category: trackingCategory, action: TrackingAction.ClickArticleCard, label: 'click-blog-article-card', data: { - [TrackingEventParameter.ArticleTitle]: title, - [TrackingEventParameter.ArticleCardId]: id, + [TrackingEventParameter.ArticleTitle]: article.attributes.Title, + [TrackingEventParameter.ArticleCardId]: article.id, }, }); closeAllMenus(); }; return ( - {image.data ? ( + {article.attributes.Image.data ? ( - {title} + {article.attributes.Title} - {tags?.data.slice(0, 1).map((tag, index) => ( + {article.attributes.tags?.data.slice(0, 1).map((tag, index) => ( {tag.attributes.Title} ))} - + 0} + > - {formatDate(publishedAt || createdAt)} + {formatDate( + article.attributes.publishedAt || + article.attributes.createdAt, + )} {t('blog.minRead', { minRead: minRead })} diff --git a/src/components/Blog/BlogArticleCard/BlogArticleCardSkeleton.tsx b/src/components/Blog/BlogArticleCard/BlogArticleCardSkeleton.tsx index 2c326dae..c70d31ca 100644 --- a/src/components/Blog/BlogArticleCard/BlogArticleCardSkeleton.tsx +++ b/src/components/Blog/BlogArticleCard/BlogArticleCardSkeleton.tsx @@ -21,7 +21,7 @@ export const BlogArticleCardSkeleton = () => { - + diff --git a/src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.style.ts b/src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.style.ts deleted file mode 100644 index 6c5108d5..00000000 --- a/src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.style.ts +++ /dev/null @@ -1,95 +0,0 @@ -import type { Breakpoint } from '@mui/material'; -import { Box, Grid } from '@mui/material'; - -import { alpha, styled } from '@mui/material/styles'; -import { CarouselHeader, CarouselTitle } from '../BlogCarousel'; - -export const BlogArticlesBoardContainer = styled(Grid)(({ theme }) => ({ - display: 'flex', - color: theme.palette.text.primary, - textDecoration: 'unset', - flexDirection: 'column', - justifyContent: 'center', - gap: theme.spacing(1.5), - alignItems: 'center', - backgroundColor: theme.palette.bgSecondary.main, - boxShadow: theme.palette.shadow.main, - borderRadius: '32px', - cursor: 'pointer', - padding: theme.spacing(6), - transition: 'background-color 250ms', - margin: theme.spacing(6, 2), - marginBottom: theme.spacing(10), - [theme.breakpoints.up('lg' as Breakpoint)]: { - margin: theme.spacing(8), - }, -})); - -export const ArticlesGrid = styled(Grid)(({ theme }) => ({ - margin: theme.spacing(2, 'auto'), - display: 'grid', - marginTop: `calc(${theme.spacing(5)} + ${theme.spacing(8)} + ${theme.spacing(6)} )`, // title height + tabs container + actual offset - paddingBottom: theme.spacing(13), - gridTemplateColumns: '1fr', - justifyItems: 'center', - gap: theme.spacing(3), - [theme.breakpoints.up('md' as Breakpoint)]: { - gridTemplateColumns: '1fr 1fr', - gap: theme.spacing(4), - }, - [theme.breakpoints.up('lg' as Breakpoint)]: { - maxWidth: 'fit-content', - paddingBottom: theme.spacing(14.5), - }, - [theme.breakpoints.up('xl' as Breakpoint)]: { - gridTemplateColumns: '1fr 1fr 1fr', - paddingBottom: theme.spacing(14.5), - maxWidth: theme.breakpoints.values.xl, - marginLeft: 'auto', - marginRight: 'auto', - }, -})); - -export const BlogArticlesBoardTitle = styled(CarouselTitle)(({ theme }) => ({ - color: theme.palette.text.primary, -})); - -export const BlogArticlesBoardHeader = styled(CarouselHeader)(() => ({})); - -export const CategoryTabPanelContainer = styled(Box)(({ theme }) => ({ - display: 'flex', - color: theme.palette.text.primary, - textDecoration: 'unset', - flexDirection: 'column', - justifyContent: 'center', - gap: theme.spacing(1.5), - alignItems: 'center', - backgroundColor: theme.palette.bgSecondary.main, - boxShadow: theme.palette.shadow.main, - borderRadius: '32px', - cursor: 'pointer', - padding: theme.spacing(6), - transition: 'background-color 250ms', - margin: theme.spacing(6, 2), - marginBottom: theme.spacing(14.5), - '&:hover': { - backgroundColor: - theme.palette.mode === 'light' - ? alpha(theme.palette.white.main, 1) - : alpha(theme.palette.white.main, 0.2), - }, - [theme.breakpoints.up('sm' as Breakpoint)]: { - padding: theme.spacing(12, 8), - margin: theme.spacing(8), - marginBottom: theme.spacing(14.5), - }, - [theme.breakpoints.up('md' as Breakpoint)]: { - padding: theme.spacing(12, 8), - marginTop: theme.spacing(12), - }, - [theme.breakpoints.up('xl' as Breakpoint)]: { - margin: theme.spacing(12, 'auto'), - marginBottom: theme.spacing(14.5), - maxWidth: theme.breakpoints.values.xl, - }, -})); diff --git a/src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.tsx b/src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.tsx deleted file mode 100644 index a7200708..00000000 --- a/src/components/Blog/BlogArticlesBoard/BlogArticlesBoard.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import type { TabProps } from '@/components/Tabs'; -import type { BlogArticleData, TagAttributes } from '@/types/strapi'; -import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'; -import type { Theme } from '@mui/material'; -import { Fade, Skeleton, useMediaQuery, useTheme } from '@mui/material'; -import { useCallback, useMemo, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { - BlogArticlesBoardContainer, - BlogArticlesBoardTitle, -} from './BlogArticlesBoard.style'; -import { BlogArticlesBoardTabs } from './BlogArticlesBoardTabs'; - -interface BlogArticlesBoardProps { - data: BlogArticleData[]; - tags: TagAttributes[]; - url: string; -} - -export const BlogArticlesBoard = ({ - data, - url, - tags, -}: BlogArticlesBoardProps) => { - const theme = useTheme(); - const { t } = useTranslation(); - const [openDropdown, setOpenDropdown] = useState(false); - const [categoryId, setCategoryId] = useState(undefined); - const [catLabel, setCatLabel] = useState( - t('blog.allCategories'), - ); - const isDesktop = useMediaQuery((theme: Theme) => theme.breakpoints.up('md')); - const handleTagsClick = useCallback( - (id: number, label?: string) => () => { - if (!isDesktop && !openDropdown) { - setOpenDropdown(true); - } else { - setOpenDropdown(false); - } - setCategoryId(id); - setCatLabel(label); - }, - [isDesktop, openDropdown], - ); - - const filteredTags = useMemo(() => { - // default "All" Category - const defaultFilter = { - id: 0, - label: - !isDesktop && categoryId !== 0 ? catLabel : t('blog.allCategories'), - icon: !isDesktop && ( - - ), - attributes: [], - value: 0, - onClick: handleTagsClick(0, t('blog.allCategories')), - disabled: false, - }; - // tags - const output = tags?.map((el, index: number) => { - return { - label: el.attributes.Title || undefined, //el.attributes.Title, - value: el.id, - onClick: handleTagsClick(el.id, el.attributes.Title), - // disabled: false, - }; - }); - // merge default + tags - output?.unshift(defaultFilter); - return output; - }, [categoryId, catLabel, handleTagsClick, isDesktop, t, tags, theme]); - - return ( - - - {t('blog.categories')} - - {filteredTags ? ( - - ) : ( - - )} - - <> - {/* todo: enable */} - {/* - {!!data ? ( - Array.from({ length: pageSize }).map((_, index) => ( - - )) - ) : data?.length > 0 ? ( - data?.map((article: BlogArticleData, index: number) => ( - - )) - ) : ( -

No Content

//todo: find better option - )} -
*/} -
- {/* todo: enable pagination*/} - {/* {meta?.pagination.pageCount > 1 ? ( - - ) : null} */} -
- ); -}; diff --git a/src/components/Blog/BlogArticlesBoard/BlogArticlesBoardTabs.tsx b/src/components/Blog/BlogArticlesBoard/BlogArticlesBoardTabs.tsx deleted file mode 100644 index 25a8c85a..00000000 --- a/src/components/Blog/BlogArticlesBoard/BlogArticlesBoardTabs.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import type { TabProps } from '@/components/Tabs'; -import { Tabs } from '@/components/Tabs'; -import { getContrastAlphaColor } from '@/utils/colors'; -import type { Theme } from '@mui/material'; -import { Skeleton, useMediaQuery, useTheme } from '@mui/material'; -import { urbanist } from 'src/fonts/fonts'; - -interface BlogArticlesBoardTabsProps { - openDropdown: boolean; - filteredTags: TabProps[]; - categoryId: number | undefined; -} - -export const BlogArticlesBoardTabs = ({ - openDropdown, - filteredTags, - categoryId, -}: BlogArticlesBoardTabsProps) => { - const theme = useTheme(); - const isDesktop = useMediaQuery((theme: Theme) => theme.breakpoints.up('md')); - - const containerStyles = { - marginTop: theme.spacing(4), - backgroundColor: - !isDesktop && openDropdown - ? theme.palette.surface1.main - : theme.palette.mode === 'dark' - ? getContrastAlphaColor(theme, '12%') - : getContrastAlphaColor(theme, '4%'), - display: 'flex', - maxHeight: openDropdown ? 1000 : 0, - borderRadius: '12px', - transitionProperty: 'max-height, background-color', - transitionDuration: '.3s', - transitionTimingFunction: 'ease-in-out', - padding: theme.spacing(0.5, 1), - overflow: 'hidden', - minHeight: 68, - width: '100%', - maxWidth: '320px', - zIndex: 1, - - [theme.breakpoints.up('lg')]: { - maxWidth: 'unset', - borderRadius: '28px', - minWidth: 416, - width: 'auto', - display: 'flex', - }, - - div: { - [theme.breakpoints.up('lg')]: { - height: 56, - }, - }, - - '.MuiTabs-indicator': { - minWidth: '80%', - width: 300, - maxWidth: 320, - left: '50%', - - // maxWidth: '80%', - - top: `${theme.spacing(0.75)} !important`, - borderRadius: '6px', - transform: 'translateX(-50%)', - zIndex: '-1', - [theme.breakpoints.up('lg')]: { - width: 'auto', - minWidth: 'unset', - position: 'absolute', - top: '50% !important', - left: 'unset', - transform: 'translateY(-50%) scaleY(0.98)', - backgroundColor: - theme.palette.mode === 'dark' - ? theme.palette.alphaLight300.main - : theme.palette.white.main, - height: 48, - zIndex: -1, - borderRadius: '24px', - }, - }, - }; - - const tabStyles = { - height: 48, - borderRadius: '6px', - width: '100%', - maxWidth: '320px', - fontFamily: urbanist.style.fontFamily, - [theme.breakpoints.up('lg')]: { - width: 142, - borderRadius: '24px', - }, - }; - - return filteredTags ? ( - - ) : ( - - ); -}; diff --git a/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.style.ts b/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.style.ts index ee6ee61c..8f61a8ac 100644 --- a/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.style.ts +++ b/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.style.ts @@ -1,8 +1,8 @@ -import type { Breakpoint, GridProps } from '@mui/material'; -import { Box, Grid, Typography } from '@mui/material'; +import type { Breakpoint } from '@mui/material'; +import { Grid } from '@mui/material'; -import { alpha, styled } from '@mui/material/styles'; -import { urbanist } from 'src/fonts/fonts'; +import { styled } from '@mui/material/styles'; +import { CarouselTitle } from '../BlogCarousel'; export const BlogArticlesCollectionsContainer = styled(Grid)(({ theme }) => ({ display: 'flex', @@ -14,7 +14,6 @@ export const BlogArticlesCollectionsContainer = styled(Grid)(({ theme }) => ({ alignItems: 'center', backgroundColor: theme.palette.bgSecondary.main, borderRadius: '32px', - cursor: 'pointer', transition: 'background-color 250ms', marginBottom: theme.spacing(14.5), padding: theme.spacing(2), @@ -49,76 +48,8 @@ export const BlogArticlesCollectionsContainer = styled(Grid)(({ theme }) => ({ }, })); -interface ArticlesGridProps extends GridProps { - active?: boolean; -} - -export const ArticlesGrid = styled(Grid, { - shouldForwardProp: (prop) => prop !== 'active', -})(({ theme, active }) => ({ - ...(active && { - margin: theme.spacing(2, 'auto'), - display: 'grid', - // marginTop: `calc(${theme.spacing(5)} + ${theme.spacing(8)} + ${theme.spacing(6)} )`, // title height + tabs container + actual offset - paddingBottom: 0, - gridTemplateColumns: '1fr', - justifyItems: 'center', - gap: theme.spacing(3), - [theme.breakpoints.up('md' as Breakpoint)]: { - gridTemplateColumns: '1fr 1fr', - gap: theme.spacing(4), - }, - [theme.breakpoints.up('lg' as Breakpoint)]: { - gridTemplateColumns: '1fr 1fr 1fr', - }, - [theme.breakpoints.up('xl' as Breakpoint)]: { - maxWidth: theme.breakpoints.values.xl, - marginLeft: 'auto', - marginRight: 'auto', - }, +export const BlogArticlesCollectionsTitle = styled(CarouselTitle)( + ({ theme }) => ({ + color: theme.palette.text.primary, }), -})); - -export const BlogArticlesCollectionsTitle = styled(Typography)(({ theme }) => ({ - fontFamily: urbanist.style.fontFamily, - textAlign: 'center', - color: theme.palette.text.primary, -})); - -export const CategoryTabPanelContainer = styled(Box)(({ theme }) => ({ - display: 'flex', - color: theme.palette.text.primary, - textDecoration: 'unset', - flexDirection: 'column', - justifyContent: 'center', - gap: theme.spacing(1.5), - alignItems: 'center', - backgroundColor: theme.palette.bgSecondary.main, - boxShadow: theme.palette.shadow.main, - borderRadius: '32px', - cursor: 'pointer', - padding: theme.spacing(6), - transition: 'background-color 250ms', - margin: theme.spacing(6, 2), - marginBottom: theme.spacing(14.5), - '&:hover': { - backgroundColor: - theme.palette.mode === 'light' - ? alpha(theme.palette.white.main, 1) - : alpha(theme.palette.white.main, 0.2), - }, - [theme.breakpoints.up('sm' as Breakpoint)]: { - padding: theme.spacing(12, 8), - margin: theme.spacing(8), - marginBottom: theme.spacing(14.5), - }, - [theme.breakpoints.up('md' as Breakpoint)]: { - padding: theme.spacing(12, 8), - marginTop: theme.spacing(12), - }, - [theme.breakpoints.up('xl' as Breakpoint)]: { - margin: theme.spacing(12, 'auto'), - marginBottom: theme.spacing(14.5), - maxWidth: theme.breakpoints.values.xl, - }, -})); +); diff --git a/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.tsx b/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.tsx new file mode 100644 index 00000000..9de3c4a3 --- /dev/null +++ b/src/components/Blog/BlogArticlesCollections/BlogArticlesCollections.tsx @@ -0,0 +1,44 @@ +'use client'; + +import type { BlogArticleData } from '@/types/strapi'; +import type { GetTagsResponse } from 'src/app/lib/getTags'; +import { BlogArticlesTabs } from './BlogArticlesTabs'; + +interface BlogArticlesCollectionsProps { + data: BlogArticleData[]; + tags: GetTagsResponse; +} + +const pageSize = 6; +// Predefined order array + +export const BlogArticlesCollections = ({ + data, + tags, +}: BlogArticlesCollectionsProps) => { + // Apply sorting function + return ( + data && + tags.data?.length > 0 && + tags.data?.map((tag, tagIndex: number) => { + const pagination = { + page: 0, + pageSize: pageSize, + pageCount: Math.ceil( + tag.attributes.blog_articles?.data.length / pageSize, + ), + total: tag.attributes.blog_articles?.data.length, + }; + return ( + + ); + }) + ); +}; diff --git a/src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.style.ts b/src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.style.ts new file mode 100644 index 00000000..94a63e7f --- /dev/null +++ b/src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.style.ts @@ -0,0 +1,25 @@ +import type { Breakpoint } from '@mui/material'; +import { Grid } from '@mui/material'; + +import { styled } from '@mui/material/styles'; + +export const ArticlesGrid = styled(Grid)(({ theme }) => ({ + margin: theme.spacing(2, 'auto'), + display: 'grid', + paddingBottom: 0, + gridTemplateColumns: '1fr', + justifyItems: 'center', + gap: theme.spacing(3), + [theme.breakpoints.up('md' as Breakpoint)]: { + gridTemplateColumns: '1fr 1fr', + gap: theme.spacing(4), + }, + [theme.breakpoints.up('lg' as Breakpoint)]: { + gridTemplateColumns: '1fr 1fr 1fr', + }, + [theme.breakpoints.up('xl' as Breakpoint)]: { + maxWidth: theme.breakpoints.values.xl, + marginLeft: 'auto', + marginRight: 'auto', + }, +})); diff --git a/src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.tsx b/src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.tsx new file mode 100644 index 00000000..3b19b997 --- /dev/null +++ b/src/components/Blog/BlogArticlesCollections/BlogArticlesTabs.tsx @@ -0,0 +1,93 @@ +'use client'; + +import type { + BlogArticleData, + StrapiMetaPagination, + TagAttributes, +} from '@/types/strapi'; +import type { Breakpoint } from '@mui/material'; +import { Box, useTheme } from '@mui/material'; +import { useState } from 'react'; +import type { GetTagsResponse } from 'src/app/lib/getTags'; +import { TrackingCategory } from 'src/const/trackingKeys'; +import { chunkArray } from 'src/utils/chunkArray'; +import { BlogArticleCard } from '../BlogArticleCard'; +import { CarouselHeader } from '../BlogCarousel'; +import { Pagination } from '../Pagination/Pagination'; +import { + BlogArticlesCollectionsContainer, + BlogArticlesCollectionsTitle, +} from './BlogArticlesCollections.style'; +import { ArticlesGrid } from './BlogArticlesTabs.style'; + +interface BlogArticlesTabsProps { + index: number; + tag: TagAttributes; + tags: GetTagsResponse; + pagination: StrapiMetaPagination; + data: BlogArticleData[]; +} + +export function BlogArticlesTabs({ + index, + tag, + tags, + data, + pagination, +}: BlogArticlesTabsProps) { + const theme = useTheme(); + const [pageTab, setPageTab] = useState(pagination.page); + const chunkedPages = chunkArray(data, pagination.pageSize); + + return ( + + + + + {tag.attributes.Title} + + + {chunkedPages.map( + (page, pageIndex) => + pageTab === pageIndex && ( + + {page.map((article, articleIndex: number) => ( + + ))} + + ), + )} + + { + /* todo: enable pagination*/ + pagination.pageCount > 1 && ( + + ) + } + + ); +} diff --git a/src/components/Blog/BlogArticlesBoard/index.ts b/src/components/Blog/BlogArticlesCollections/index.ts similarity index 100% rename from src/components/Blog/BlogArticlesBoard/index.ts rename to src/components/Blog/BlogArticlesCollections/index.ts diff --git a/src/components/Blog/BlogCarousel/BlogCarousel.tsx b/src/components/Blog/BlogCarousel/BlogCarousel.tsx index f5b7d5e5..474d0199 100644 --- a/src/components/Blog/BlogCarousel/BlogCarousel.tsx +++ b/src/components/Blog/BlogCarousel/BlogCarousel.tsx @@ -47,17 +47,10 @@ export const BlogCarousel = ({ {data ? data.map((article, index) => ( )) : Array.from({ length: 4 }, () => 42).map((_, idx) => ( diff --git a/src/components/Blog/BlogArticlesBoard/Pagination.style.ts b/src/components/Blog/Pagination/Pagination.style.ts similarity index 83% rename from src/components/Blog/BlogArticlesBoard/Pagination.style.ts rename to src/components/Blog/Pagination/Pagination.style.ts index 35831fe8..25cc16b6 100644 --- a/src/components/Blog/BlogArticlesBoard/Pagination.style.ts +++ b/src/components/Blog/Pagination/Pagination.style.ts @@ -2,11 +2,12 @@ import type { IconButtonProps } from '@mui/material'; import { Box, IconButton } from '@mui/material'; import { getContrastAlphaColor } from '@/utils/colors'; -import { styled } from '@mui/material/styles'; +import { darken, lighten, styled } from '@mui/material/styles'; export const PaginationContainer = styled(Box)(({ theme }) => ({ - position: 'absolute', bottom: 0, + width: 'fit-content', + flexWrap: 'wrap', padding: theme.spacing(1), backgroundColor: theme.palette.mode === 'dark' @@ -14,8 +15,7 @@ export const PaginationContainer = styled(Box)(({ theme }) => ({ : getContrastAlphaColor(theme, '4%'), borderRadius: '24px', left: '50%', - transform: 'translateX(-50%)', - marginTop: theme.spacing(6), + margin: theme.spacing(2, 'auto', 0, 'auto'), display: 'flex', justifyContent: 'center', gap: theme.spacing(2), @@ -37,14 +37,14 @@ export const PaginationIndexButton = styled(IconButton, { : getContrastAlphaColor(theme, '12%'), color: theme.palette.mode === 'light' - ? theme.palette.grey[800] - : theme.palette.grey[300], + ? lighten(theme.palette.text.primary, 0.2) + : theme.palette.text.primary, } : { color: theme.palette.mode === 'light' - ? theme.palette.grey[800] - : theme.palette.grey[400], + ? lighten(theme.palette.text.primary, 0.4) + : darken(theme.palette.text.primary, 0.2), }), width: 40, height: 40, diff --git a/src/components/Blog/BlogArticlesBoard/Pagination.tsx b/src/components/Blog/Pagination/Pagination.tsx similarity index 60% rename from src/components/Blog/BlogArticlesBoard/Pagination.tsx rename to src/components/Blog/Pagination/Pagination.tsx index e45398a4..809321b5 100644 --- a/src/components/Blog/BlogArticlesBoard/Pagination.tsx +++ b/src/components/Blog/Pagination/Pagination.tsx @@ -1,38 +1,37 @@ import { useUserTracking } from '@/hooks/userTracking/useUserTracking'; -import type { StrapiMeta } from '@/types/strapi'; +import type { StrapiMetaPagination } from '@/types/strapi'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; -import { Skeleton, Typography, useTheme } from '@mui/material'; -import type { Dispatch, SetStateAction } from 'react'; +import { darken, lighten, Typography, useTheme } from '@mui/material'; +import type { Dispatch, PropsWithChildren, SetStateAction } from 'react'; import { TrackingAction, TrackingCategory, TrackingEventParameter, } from '@/const/trackingKeys'; +import Link from 'next/link'; import { PaginationButton, PaginationContainer, PaginationIndexButton, } from './Pagination.style'; -interface BlogArticlesBoardPaginationProps { - isSuccess: boolean; - isEmpty: boolean; +interface PaginationProps { page: number; setPage: Dispatch>; - meta: StrapiMeta; + pagination: StrapiMetaPagination; categoryId: number | undefined; + id?: number | string; } -export const BlogArticlesBoardPagination = ({ - isSuccess, +export const Pagination = ({ page, setPage, - meta, + pagination, + id, categoryId, - isEmpty, -}: BlogArticlesBoardPaginationProps) => { +}: PaginationProps) => { const theme = useTheme(); const { trackEvent } = useUserTracking(); const handlePage = (page: number) => { @@ -49,10 +48,10 @@ export const BlogArticlesBoardPagination = ({ }; const handleNext = () => { - if (page < meta.pagination.pageCount) { + if (page + 1 < pagination.pageCount) { setPage((state) => state + 1); } else { - setPage(1); + setPage(0); } trackEvent({ category: TrackingCategory.BlogArticlesBoard, @@ -66,10 +65,10 @@ export const BlogArticlesBoardPagination = ({ }; const handlePrev = () => { - if (page > 1) { - setPage((state) => state - 1); + if (page === 0) { + setPage(pagination.pageCount - 1); } else { - setPage(meta.pagination.pageCount); + setPage((state) => state - 1); } trackEvent({ category: TrackingCategory.BlogArticlesBoard, @@ -82,66 +81,66 @@ export const BlogArticlesBoardPagination = ({ }); }; - return isSuccess ? ( - !isEmpty && ( - + return ( + + handlePrev()} disableRipple={false}> + - {Array.from({ length: meta?.pagination.pageCount }).map((_, index) => { - const actualPage = index + 1; - return ( + {Array.from({ length: pagination.pageCount }).map((_, index) => { + const actualPage = index; + return ( + handlePage(actualPage)} active={actualPage === page} > - {actualPage} + {actualPage + 1} - ); - })} + + ); + })} + handleNext()}> - - ) - ) : ( - - {Array.from({ length: 4 }).map((_, index) => { - return ( - - ); - })} + ); }; + +// export const Button: React.FC> = ({ + +interface SmoothScrollWrapperProps { + id?: number | string; +} + +const SmoothScrollWrapper: React.FC< + PropsWithChildren +> = ({ children, id }) => { + if (!id) { + return children; + } + return {children}; +}; + +export default Pagination; diff --git a/src/components/Blog/BlogArticlesBoard/PaginationSkeleton.tsx b/src/components/Blog/Pagination/PaginationSkeleton.tsx similarity index 100% rename from src/components/Blog/BlogArticlesBoard/PaginationSkeleton.tsx rename to src/components/Blog/Pagination/PaginationSkeleton.tsx diff --git a/src/components/JoinDiscordBanner/JoinDiscordBanner.style.ts b/src/components/JoinDiscordBanner/JoinDiscordBanner.style.ts index 91c1e460..d21b99a4 100644 --- a/src/components/JoinDiscordBanner/JoinDiscordBanner.style.ts +++ b/src/components/JoinDiscordBanner/JoinDiscordBanner.style.ts @@ -42,7 +42,6 @@ export const DiscordBannerLink = styled(Link)(({ theme }) => ({ [theme.breakpoints.up('xl' as Breakpoint)]: { margin: theme.spacing(12, 'auto'), marginBottom: theme.spacing(14.5), - maxWidth: theme.breakpoints.values.xl, }, })); diff --git a/src/components/ProfilePage/Leaderboard/Leaderboard.tsx b/src/components/ProfilePage/Leaderboard/Leaderboard.tsx index cefa2557..a9511398 100644 --- a/src/components/ProfilePage/Leaderboard/Leaderboard.tsx +++ b/src/components/ProfilePage/Leaderboard/Leaderboard.tsx @@ -1,5 +1,5 @@ import { Stack } from '@mui/material'; -import { LeaderboardContainer } from './Leaderboard.style'; +import { useEffect, useState } from 'react'; import type { LeaderboardEntryData, LeaderboardMeta, @@ -8,12 +8,12 @@ import { useLeaderboardList, useLeaderboardUser, } from '../../../hooks/useLeaderboard'; -import { useEffect, useState } from 'react'; -import { LeaderboardSkeleton } from './LeaderboardSkeleton'; import { IconHeader } from '../Common/IconHeader'; import { Pagination } from '../Common/Pagination'; import { NoSelectTypographyTitlePosition } from '../ProfilePage.style'; +import { LeaderboardContainer } from './Leaderboard.style'; import { LeaderboardEntry } from './LeaderboardEntry'; +import { LeaderboardSkeleton } from './LeaderboardSkeleton'; const LEADERBOARD_LENGTH = 25; diff --git a/src/components/Tabs/Tabs.tsx b/src/components/Tabs/Tabs.tsx index ecb3d2cf..1c647404 100644 --- a/src/components/Tabs/Tabs.tsx +++ b/src/components/Tabs/Tabs.tsx @@ -42,17 +42,18 @@ export const Tabs = ({ sx={containerStyles} > {data.map((el, index) => { + const keys = a11yProps(ariaLabel, index); const tab = ( { + event.preventDefault(); el.onClick(event, el.value); }} icon={el.icon} label={el.label} - id={`tab-${el.label ?? 'key'}-${el.value}`} aria-label={el.label} - aria-controls={`simple-tabpanel-${index}`} + {...a11yProps(ariaLabel, el.value)} sx={tabStyles} /> ); @@ -76,3 +77,10 @@ export const Tabs = ({ ) : null; }; + +export function a11yProps(ariaLabel: string, index: number) { + return { + id: `${ariaLabel}-${index}`, + 'aria-controls': `${ariaLabel}panel-${index}`, + }; +} diff --git a/src/const/trackingKeys.ts b/src/const/trackingKeys.ts index a585b0b5..0e484888 100644 --- a/src/const/trackingKeys.ts +++ b/src/const/trackingKeys.ts @@ -100,6 +100,7 @@ export enum TrackingCategory { BlogCarousel = 'cat_blog_carousel', BlogFeaturedArticle = 'cat_blog_featured_article', BlogArticlesBoard = 'cat_blog_articles_board', + BlogArticlesCollection = 'cat_blog_articles_collection', BlogArticle = 'cat_blog_article', Missions = 'cat_missions', Quests = 'cat_quests', diff --git a/src/theme/theme.ts b/src/theme/theme.ts index cae2b08b..3f58db3e 100644 --- a/src/theme/theme.ts +++ b/src/theme/theme.ts @@ -280,6 +280,7 @@ const themeCustomized = createTheme({ MuiCssBaseline: { styleOverrides: { '@supports': { fontVariationSettings: 'normal' }, + body: { scrollBehavior: 'smooth' }, }, }, MuiButton: { diff --git a/src/types/strapi.ts b/src/types/strapi.ts index 168b6045..45a2be80 100644 --- a/src/types/strapi.ts +++ b/src/types/strapi.ts @@ -45,12 +45,14 @@ export interface MediaAttributes { } export interface StrapiMeta { - pagination: { - page: number; - pageSize: number; - pageCount: number; - total: number; - }; + pagination: StrapiMetaPagination; +} + +export interface StrapiMetaPagination { + page: number; + pageSize: number; + pageCount: number; + total: number; } export type StrapiResponseData = T[]; @@ -131,6 +133,9 @@ export interface TagAttributes { TextColor?: string; Key: string; BackgroundColor?: string; + blog_articles: { + data: BlogArticleData[]; + }; createdAt: string; locale: string; publishedAt?: string; diff --git a/src/utils/chunkArray.ts b/src/utils/chunkArray.ts new file mode 100644 index 00000000..b71111da --- /dev/null +++ b/src/utils/chunkArray.ts @@ -0,0 +1,10 @@ +export function chunkArray(array: T[], chunkSize: number): T[][] { + const result: T[][] = []; + + for (let i = 0; i < array.length; i += chunkSize) { + const chunk = array.slice(i, i + chunkSize); + result.push(chunk); + } + + return result; +} diff --git a/src/utils/strapi/StrapiApi.ts b/src/utils/strapi/StrapiApi.ts index 9915789b..ffd01689 100644 --- a/src/utils/strapi/StrapiApi.ts +++ b/src/utils/strapi/StrapiApi.ts @@ -106,6 +106,23 @@ class ArticleParams { } } +class TagParams { + private apiUrl: URL; + + constructor(apiUrl: URL) { + this.apiUrl = apiUrl; + } + + addParams(): URL { + this.apiUrl.searchParams.set('populate[0]', 'Title'); + this.apiUrl.searchParams.set('populate[1]', 'BackgroundColor'); + this.apiUrl.searchParams.set('populate[2]', 'TextColor'); + this.apiUrl.searchParams.set('populate[3]', 'blog_articles'); + this.apiUrl.searchParams.set('populate[4]', 'blog_articles.Image'); + return this.apiUrl; + } +} + class QuestParams { private apiUrl: URL; @@ -159,6 +176,20 @@ class ArticleStrapiApi extends StrapiApi { } } +class TagStrapiApi extends StrapiApi { + constructor() { + super({ contentType: 'tags' }); // Set content type to "blog-articles" automatically + const articleParams = new TagParams(this.apiUrl); + this.apiUrl = articleParams.addParams(); + this.apiUrl.searchParams.set('filters[blog_articles][$notNull]', 'true'); + } + + sort(order: 'asc' | 'desc'): this { + this.apiUrl.searchParams.set('sort', `createdAt:${order.toUpperCase()}`); + return this; + } +} + class QuestStrapiApi extends StrapiApi { constructor() { super({ contentType: 'quests' }); // Set content type to "blog-articles" automatically @@ -285,4 +316,5 @@ export { PartnerThemeStrapiApi, QuestStrapiApi, StrapiApi, + TagStrapiApi, }; diff --git a/tests/e2e.spec.ts b/tests/e2e.spec.ts index b7395ecb..b482c03d 100644 --- a/tests/e2e.spec.ts +++ b/tests/e2e.spec.ts @@ -1,15 +1,15 @@ import { expect, test } from '@playwright/test'; +import values from '../tests/testData/values.json'; import { - itemInMenu, - tabInHeader, - openMainMenu, - expectMenuToBeVisible, + closeWelcomeScreen, expectBackgroundColorToHaveCss, + expectMenuToBeVisible, + itemInMenu, itemInSettingsMenu, itemInSettingsMenuToBeVisible, - closeWelcomeScreen, + openMainMenu, + tabInHeader, } from './testData/commonFunctions'; -import values from '../tests/testData/values.json'; test.describe('Jumper full e2e flow', () => { test.beforeEach(async ({ page }) => { @@ -30,7 +30,7 @@ test.describe('Jumper full e2e flow', () => { page.locator('[id="widget-header-\\:r0\\:"]').getByText('Exchange'), ).toBeVisible(); await tabInHeader(page, 'Gas'); - await expect(page.locator('#tab-Gas-1')).toBeVisible(); + await expect(page.locator('#navbar-tabs-1')).toBeVisible(); await tabInHeader(page, 'Buy'); await expect(buyETHButton).toBeEnabled(); await expect( @@ -147,9 +147,9 @@ test.describe('Jumper full e2e flow', () => { await page.goto(values.aerodromeQuestsURL); expect(jumperProfileBackButton).toBeVisible(); await openMainMenu(page); - await page.locator('xpath=//*[@id="tab-key-1"]').click(); //switch to Dark theme + await page.locator('#theme-switch-tabs-1').click(); //switch to Dark theme expectBackgroundColorToHaveCss(page, 'rgb(18, 15, 41)'); - await page.locator('xpath=//*[@id="tab-key-0"]').click(); //switch to Light theme + await page.locator('#theme-switch-tabs-0').click(); //switch to Light theme await openMainMenu(page); expectBackgroundColorToHaveCss(page, 'rgb(243, 235, 255)'); }); From a03e944556a6b74bea7faf85412f71726d0e9b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BRAMILLE=20S=C3=A9bastien?= <2752200+oktapodia@users.noreply.github.com> Date: Mon, 30 Sep 2024 09:47:50 +0100 Subject: [PATCH 7/8] chore: Seo optimization (#1347) --- src/app/[lng]/layout.tsx | 82 +++++++++++++++++++++++++++++++++++++++- src/app/lib/metadata.ts | 75 +----------------------------------- src/app/sitemap.ts | 7 ++-- src/const/urls.ts | 2 +- 4 files changed, 85 insertions(+), 81 deletions(-) diff --git a/src/app/[lng]/layout.tsx b/src/app/[lng]/layout.tsx index f8be69c5..1e188586 100644 --- a/src/app/[lng]/layout.tsx +++ b/src/app/[lng]/layout.tsx @@ -10,8 +10,86 @@ import Script from 'next/script'; import type { Viewport } from 'next/types'; import type { ReactNode } from 'react'; import { defaultNS, fallbackLng, namespaces } from 'src/i18n'; -import { metadata as JumperMetadata } from '../lib/metadata'; -export const metadata = JumperMetadata; +import { description, siteName, title } from '../lib/metadata'; +import type { Metadata } from 'next'; + +interface RootLayoutProps { + children: ReactNode; + params: { lng: string }; +} + +export function generateMetadata({ params }: RootLayoutProps): Metadata { + return { + title, + description, + alternates: { + canonical: `${process.env.NEXT_PUBLIC_SITE_URL}/${params.lng === 'en' ? '' : params.lng}`, + }, + openGraph: { + title: title, + description, + siteName, + url: `${process.env.NEXT_PUBLIC_SITE_URL}/${params.lng === 'en' ? '' : params.lng}`, + images: [ + { + url: 'https://jumper.exchange/preview.png', // Default image + width: 900, + height: 450, + }, + ], + type: 'website', // Override type + }, + twitter: { + // Twitter metadata + // cardType: 'summary_large_image', + site: '@JumperExchange', + title: title, // Twitter title + description, + images: 'https://jumper.exchange/preview.png', // Twitter image + }, + icons: { + // Icons metadata + icon: [ + { + url: '/favicon_DT.svg', + sizes: 'any', + media: '(prefers-color-scheme: dark)', + }, + { url: '/favicon_DT.png', media: '(prefers-color-scheme: dark)' }, + { url: '/favicon_DT.ico', media: '(prefers-color-scheme: dark)' }, + { + url: '/favicon.svg', + sizes: 'any', + media: '(prefers-color-scheme: light)', + }, + { url: '/favicon.png', media: '(prefers-color-scheme: light)' }, + { url: '/favicon.ico', media: '(prefers-color-scheme: light)' }, + ], + shortcut: [ + { + url: '/apple-touch-icon-57x57.png', + sizes: '57x57', + media: '(prefers-color-scheme: light)', + }, + { + url: '/apple-touch-icon-180x180.png', + sizes: '180x180', + media: '(prefers-color-scheme: light)', + }, + { + url: '/apple-touch-icon-57x57_DT.png', + sizes: '57x57', + media: '(prefers-color-scheme: dark)', + }, + { + url: '/apple-touch-icon-180x180_DT.png', + sizes: '180x180', + media: '(prefers-color-scheme: dark)', + }, + ], + }, + }; +} export const viewport: Viewport = { initialScale: 1, diff --git a/src/app/lib/metadata.ts b/src/app/lib/metadata.ts index 19bb0136..0c7b4128 100644 --- a/src/app/lib/metadata.ts +++ b/src/app/lib/metadata.ts @@ -1,77 +1,4 @@ -import type { Metadata } from 'next'; - export const siteName = 'Jumper.Exchange'; export const title = 'Jumper | Multi-Chain Bridging & Swapping'; -const description = +export const description = 'Jumper is Crypto’s Everything Exchange, enabling seamless swap and bridge transactions across 25 blockchains. By aggregating all of DeFi liquidity, Jumper ensures the best routes for any token transaction.'; - -export const metadata: Metadata = { - title, - description, - alternates: { - canonical: `${process.env.NEXT_PUBLIC_SITE_URL}/`, - }, - openGraph: { - title: title, - description, - siteName, - url: `${process.env.NEXT_PUBLIC_SITE_URL}/`, - images: [ - { - url: 'https://jumper.exchange/preview.png', // Default image - width: 900, - height: 450, - }, - ], - type: 'website', // Override type - }, - twitter: { - // Twitter metadata - // cardType: 'summary_large_image', - site: '@JumperExchange', - title: title, // Twitter title - description, - images: 'https://jumper.exchange/preview.png', // Twitter image - }, - icons: { - // Icons metadata - icon: [ - { - url: '/favicon_DT.svg', - sizes: 'any', - media: '(prefers-color-scheme: dark)', - }, - { url: '/favicon_DT.png', media: '(prefers-color-scheme: dark)' }, - { url: '/favicon_DT.ico', media: '(prefers-color-scheme: dark)' }, - { - url: '/favicon.svg', - sizes: 'any', - media: '(prefers-color-scheme: light)', - }, - { url: '/favicon.png', media: '(prefers-color-scheme: light)' }, - { url: '/favicon.ico', media: '(prefers-color-scheme: light)' }, - ], - shortcut: [ - { - url: '/apple-touch-icon-57x57.png', - sizes: '57x57', - media: '(prefers-color-scheme: light)', - }, - { - url: '/apple-touch-icon-180x180.png', - sizes: '180x180', - media: '(prefers-color-scheme: light)', - }, - { - url: '/apple-touch-icon-57x57_DT.png', - sizes: '57x57', - media: '(prefers-color-scheme: dark)', - }, - { - url: '/apple-touch-icon-180x180_DT.png', - sizes: '180x180', - media: '(prefers-color-scheme: dark)', - }, - ], - }, -}; diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 06945c56..3957a960 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -13,16 +13,15 @@ function generateAlternates(path: string) { return { languages: { ...locales.reduce((acc, loc) => { - return { + const pages = { ...acc, [loc]: withoutTrailingSlash( `${process.env.NEXT_PUBLIC_SITE_URL}${loc !== 'en' ? `/${loc}` : ''}${path}`, ), }; + + return pages; }, {}), - 'x-default': withoutTrailingSlash( - `${process.env.NEXT_PUBLIC_SITE_URL}${path}`, - ), }, }; } diff --git a/src/const/urls.ts b/src/const/urls.ts index 8311fa4c..e4de4649 100644 --- a/src/const/urls.ts +++ b/src/const/urls.ts @@ -24,6 +24,6 @@ export const pages: SitemapPage[] = [ { path: '/', priority: 1.0 }, { path: JUMPER_LEARN_PATH, priority: 0.9 }, { path: JUMPER_LOYALTY_PATH, priority: 0.8 }, - { path: '/buy', priority: 0.7 }, + // { path: '/buy', priority: 0.7 }, { path: '/gas', priority: 0.7 }, ]; From 176753ae61ab0e1f3bf9aab464d2e60716e84f33 Mon Sep 17 00:00:00 2001 From: Bojan Kopunovic <97167801+bojank93@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:19:13 +0200 Subject: [PATCH 8/8] feat: adding tests for blog articles (#1356) --- tests/e2e.spec.ts | 35 ++++++++++++++++++++++++------- tests/testData/commonFunctions.ts | 22 ++++++++++++++++++- 2 files changed, 49 insertions(+), 8 deletions(-) diff --git a/tests/e2e.spec.ts b/tests/e2e.spec.ts index b482c03d..85812aea 100644 --- a/tests/e2e.spec.ts +++ b/tests/e2e.spec.ts @@ -9,6 +9,8 @@ import { itemInSettingsMenuToBeVisible, openMainMenu, tabInHeader, + sectionOnTheBlogPage, + checkSocialNetworkIcons, } from './testData/commonFunctions'; test.describe('Jumper full e2e flow', () => { @@ -92,12 +94,12 @@ test.describe('Jumper full e2e flow', () => { await expect(page.getByRole('menu')).not.toBeVisible(); }); - test('Should be able to navigate to profile and open Explore Filament Mission', async ({ + test('Should be able to navigate to profile and open Explore WoodSwap Mission', async ({ page, }) => { let profileUrl = `${await page.url()}profile`; - const whatIsFilamentTitle = page.locator( - 'xpath=//p[normalize-space(text())="Explore Filament"]', + const whatIsWoodSwapTitle = page.locator( + 'xpath=//p[normalize-space(text())="Explore WoodSwap"]', ); await openMainMenu(page); await expectMenuToBeVisible(page); @@ -105,21 +107,40 @@ test.describe('Jumper full e2e flow', () => { expect(await page.url()).toBe(profileUrl); await page.locator('.profile-page').isVisible(); await page - .locator('xpath=//p[normalize-space(text())="Explore Filament"]') + .locator('xpath=//p[normalize-space(text())="Explore WoodSwap"]') .click(); - await expect(whatIsFilamentTitle).toBeInViewport({ timeout: 15000 }); + await expect(whatIsWoodSwapTitle).toBeInViewport({ timeout: 15000 }); }); - test('Should be able to navigate to jumper learn', async ({ page }) => { + test('Should be able to navigate to the Jumper Learn', async ({ page }) => { + const sectionName = [ + 'Announcement', + 'Partner', + 'Bridge', + 'Swap', + 'Tutorial', + 'Knowledge', + ]; + const socialNetworks = ['LinkedIn', 'Facebook', 'X']; + const jumperIsLiveOnSolanaArticlet = await page.locator( + 'xpath=//h2[normalize-space(text())="Jumper is Live on Solana!"]', + ); + const articleTitle = await page.locator( + 'xpath=//h2[normalize-space(text())="The most awaited release is here, Jumper is live on Solana!"]', + ); let learnUrl = `${await page.url()}learn`; - // await closeWelcomeScreen(page); await openMainMenu(page); await expectMenuToBeVisible(page); await itemInMenu(page, 'Jumper Learn'); expect(await page.url()).toBe(learnUrl); await page.waitForLoadState('load'); await page.locator('.learn-page').isVisible(); + sectionOnTheBlogPage(page, sectionName); + await jumperIsLiveOnSolanaArticlet.click(); + await page.waitForLoadState('load'); + await expect(articleTitle).toBeVisible(); + checkSocialNetworkIcons(page, socialNetworks); }); test('Should be able to navigate to LI.FI Scan', async ({ page }) => { diff --git a/tests/testData/commonFunctions.ts b/tests/testData/commonFunctions.ts index 4e3e606c..6b9297a5 100644 --- a/tests/testData/commonFunctions.ts +++ b/tests/testData/commonFunctions.ts @@ -1,5 +1,6 @@ import type { Page } from '@playwright/test'; import { expect } from '@playwright/test'; +import exp from 'constants'; export async function findTheBestRoute(page) { await page.getByRole('heading', { name: 'Find the best route' }); @@ -9,10 +10,10 @@ export async function openMainMenu(page) { await page.locator('#main-burger-menu-button').click(); } - export async function itemInMenu(page, option: string) { await page.getByRole('menuitem', { name: option }).click({ timeout: 20000 }); } + export async function closeWelcomeScreen(page: Page) { return page.locator('#get-started-button').click(); } @@ -24,18 +25,37 @@ export async function tabInHeader(page, name: string) { export async function expectMenuToBeVisible(page) { await expect(page.getByRole('menu')).toBeVisible(); } + export async function expectBackgroundColorToHaveCss(page, rgb: string) { const backgroundColor = await page.locator('xpath=/html/body/div[1]'); expect(backgroundColor).toHaveCSS(`background-color`, rgb); } + export async function itemInSettingsMenu(page, selector: string) { await page .locator(`xpath=//p[normalize-space(text())="${selector}"]`) .click(); } + export async function itemInSettingsMenuToBeVisible(page, selector: string) { const itemName = await page.locator( `xpath=//button[normalize-space(text())="${selector}"]`, ); expect(itemName).toBeVisible(); } + +export async function sectionOnTheBlogPage(page, selectors: string[]) { + for (const selector of selectors) { + const sectionName = await page.locator(`#${selector}`); + expect(sectionName).toBeVisible(); + } +} + +export async function checkSocialNetworkIcons(page, networks: string[]) { + for (const network of networks) { + const socialNetworkIcon = await page.locator( + `xpath=//button[@aria-label='Share article on ${network}']`, + ); + await expect(socialNetworkIcon).toBeEnabled(); + } +}