diff --git a/package.json b/package.json
index 9bb845c7b..8a52d3627 100644
--- a/package.json
+++ b/package.json
@@ -25,8 +25,7 @@
"web-devtools",
"eslint-config",
"prettier-config",
- "tsconfig",
- "kleros-app"
+ "tsconfig"
],
"packageManager": "yarn@4.5.1",
"volta": {
diff --git a/web/netlify.toml b/web/netlify.toml
index 0ed0b0e78..8cf55aefd 100644
--- a/web/netlify.toml
+++ b/web/netlify.toml
@@ -6,8 +6,6 @@ NETLIFY_YARN_WORKSPACES = "true"
YARN_ENABLE_GLOBAL_CACHE = "true"
# YARN_CACHE_FOLDER = "$HOME/.yarn_cache"
# YARN_VERSION = "3.2.0"
-[build]
-command = "yarn workspace @kleros/kleros-v2-contracts install && yarn workspace @kleros/kleros-app install && yarn workspace @kleros/kleros-v2-web install && yarn workspace @kleros/kleros-v2-contracts build && yarn workspace @kleros/kleros-app build && yarn workspace @kleros/kleros-v2-web build-netlify"
[functions]
directory = "web/netlify/functions/"
diff --git a/web/package.json b/web/package.json
index c12dbc666..c18d18b1b 100644
--- a/web/package.json
+++ b/web/package.json
@@ -78,15 +78,15 @@
},
"dependencies": {
"@cyntler/react-doc-viewer": "^1.17.0",
- "@kleros/kleros-app": "workspace:^",
+ "@kleros/kleros-app": "^2.0.1",
"@kleros/kleros-sdk": "workspace:^",
"@kleros/kleros-v2-contracts": "workspace:^",
- "@kleros/ui-components-library": "^2.15.0",
+ "@kleros/ui-components-library": "^2.16.0",
"@lifi/wallet-management": "^3.4.5",
"@lifi/widget": "^3.12.2",
"@sentry/react": "^7.120.0",
"@sentry/tracing": "^7.120.0",
- "@tanstack/react-query": "^5.61.0",
+ "@tanstack/react-query": "^5.56.2",
"@types/react-modal": "^3.16.3",
"@wagmi/connectors": "^5.5.0",
"@wagmi/core": "^2.15.0",
@@ -117,7 +117,7 @@
"react-toastify": "^9.1.3",
"react-use": "^17.5.1",
"styled-components": "^5.3.3",
- "viem": "^2.21.48",
- "wagmi": "^2.13.0"
+ "viem": "^2.21.54",
+ "wagmi": "^2.13.5"
}
}
diff --git a/web/src/assets/svgs/icons/close-circle.svg b/web/src/assets/svgs/icons/close-circle.svg
index f3d4a2477..1f4c4efd6 100644
--- a/web/src/assets/svgs/icons/close-circle.svg
+++ b/web/src/assets/svgs/icons/close-circle.svg
@@ -1,3 +1,3 @@
diff --git a/web/src/components/ExternalLink.tsx b/web/src/components/ExternalLink.tsx
index f85920a1a..8470386ec 100644
--- a/web/src/components/ExternalLink.tsx
+++ b/web/src/components/ExternalLink.tsx
@@ -1,6 +1,7 @@
-import { Link } from "react-router-dom";
import styled from "styled-components";
+import { Link } from "react-router-dom";
+
export const ExternalLink = styled(Link)`
:hover {
text-decoration: underline;
diff --git a/web/src/components/Spinner.tsx b/web/src/components/Spinner.tsx
new file mode 100644
index 000000000..5565e336b
--- /dev/null
+++ b/web/src/components/Spinner.tsx
@@ -0,0 +1,27 @@
+import styled, { keyframes } from "styled-components";
+
+import SpinnerIcon from "svgs/icons/spinner.svg";
+
+const rotating = keyframes`
+ 0%{
+ transform: rotate(0deg);
+ }
+ 50%{
+ transform: rotate(180deg);
+ }
+ 100%{
+ transform: rotate(360deg);
+ }
+`;
+
+const Spinner = styled(SpinnerIcon)`
+ path {
+ fill: ${({ theme }) => theme.primaryBlue};
+ }
+ width: 16px;
+ height: 16px;
+ margin-right: 4px;
+ animation: ${rotating} 2s ease-in-out infinite normal;
+`;
+
+export default Spinner;
diff --git a/web/src/components/TxnHash.tsx b/web/src/components/TxnHash.tsx
new file mode 100644
index 000000000..bb25ce7c1
--- /dev/null
+++ b/web/src/components/TxnHash.tsx
@@ -0,0 +1,40 @@
+import React, { useMemo } from "react";
+import styled from "styled-components";
+
+import NewTabIcon from "svgs/icons/new-tab.svg";
+
+import { DEFAULT_CHAIN, getChain } from "consts/chains";
+
+import { ExternalLink } from "./ExternalLink";
+
+const TxnLabel = styled.label<{ variant: string }>`
+ display: flex;
+ gap: 4px;
+ color: ${({ theme, variant }) => (variant === "pending" ? theme.primaryBlue : theme[variant])};
+ cursor: pointer;
+ path {
+ fill: ${({ theme, variant }) => (variant === "pending" ? theme.primaryBlue : theme[variant])};
+ }
+`;
+
+interface ITxnHash {
+ hash: `0x${string}`;
+ variant: "success" | "error" | "pending";
+}
+const TxnHash: React.FC = ({ hash, variant }) => {
+ const transactionExplorerLink = useMemo(() => {
+ return `${getChain(DEFAULT_CHAIN)?.blockExplorers?.default.url}/tx/${hash}`;
+ }, [hash]);
+
+ return (
+
+
+ {" "}
+ {hash.substring(0, 6) + "..." + hash.substring(hash.length - 4)}
+
+
+
+ );
+};
+
+export default TxnHash;
diff --git a/web/src/hooks/queries/useCourtDetails.ts b/web/src/hooks/queries/useCourtDetails.ts
index 6d355ac26..296d4aa09 100644
--- a/web/src/hooks/queries/useCourtDetails.ts
+++ b/web/src/hooks/queries/useCourtDetails.ts
@@ -23,6 +23,7 @@ const courtDetailsQuery = graphql(`
paidPNK
timesPerPeriod
feeForJuror
+ name
}
}
`);
diff --git a/web/src/hooks/usePNKData.tsx b/web/src/hooks/usePNKData.tsx
new file mode 100644
index 000000000..5bee1265c
--- /dev/null
+++ b/web/src/hooks/usePNKData.tsx
@@ -0,0 +1,46 @@
+import { useAccount } from "wagmi";
+
+import { DEFAULT_CHAIN } from "consts/chains";
+
+import { REFETCH_INTERVAL } from "src/consts";
+import { isUndefined } from "src/utils";
+
+import {
+ klerosCoreAddress,
+ useReadPnkAllowance,
+ useReadPnkBalanceOf,
+ useReadSortitionModuleGetJurorBalance,
+} from "./contracts/generated";
+
+interface UsePnkDataParams {
+ courtId?: string;
+}
+
+/**
+ * @description hook to provide user's pnk data. (pnk balance, pnk allowance, jurorBalance for provided courtId)
+ * @param param0 optional court Id to fetch juror balance for. Defaults to 0
+ */
+export const usePnkData = ({ courtId = "0" }: UsePnkDataParams) => {
+ const { address } = useAccount();
+ const queryConfig = {
+ enabled: !isUndefined(address),
+ refetchInterval: REFETCH_INTERVAL,
+ };
+
+ const { data: balance } = useReadPnkBalanceOf({
+ query: queryConfig,
+ args: [address!],
+ });
+
+ const { data: jurorBalance } = useReadSortitionModuleGetJurorBalance({
+ query: queryConfig,
+ args: [address ?? "0x", BigInt(courtId)],
+ });
+
+ const { data: allowance, refetch: refetchAllowance } = useReadPnkAllowance({
+ query: queryConfig,
+ args: [address ?? "0x", klerosCoreAddress[DEFAULT_CHAIN]],
+ });
+
+ return { balance, jurorBalance, allowance, refetchAllowance };
+};
diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx
index 8ff616816..6a28e9685 100644
--- a/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx
+++ b/web/src/pages/Courts/CourtDetails/StakePanel/InputDisplay.tsx
@@ -1,25 +1,26 @@
import React, { useState, useMemo, useEffect } from "react";
import styled, { css } from "styled-components";
-import { landscapeStyle } from "styles/landscapeStyle";
import { useParams } from "react-router-dom";
import { useDebounce } from "react-use";
-import { useAccount } from "wagmi";
-
-import { REFETCH_INTERVAL } from "consts/index";
-import { useReadSortitionModuleGetJurorBalance, useReadPnkBalanceOf } from "hooks/contracts/generated";
import { useParsedAmount } from "hooks/useParsedAmount";
-
+import { usePnkData } from "hooks/usePNKData";
import { commify, uncommify } from "utils/commify";
import { formatPNK, roundNumberDown } from "utils/format";
import { isUndefined } from "utils/index";
+import { landscapeStyle } from "styles/landscapeStyle";
+
import { NumberInputField } from "components/NumberInputField";
+
import StakeWithdrawButton, { ActionType } from "./StakeWithdrawButton";
const StyledField = styled(NumberInputField)`
height: fit-content;
+ input {
+ border-radius: 3px 0px 0px 3px;
+ }
`;
const LabelArea = styled.div`
@@ -62,48 +63,27 @@ const EnsureChainContainer = styled.div`
button {
height: 45px;
border: 1px solid ${({ theme }) => theme.stroke};
+ border-radius: 0px 3px 3px 0px;
}
`;
interface IInputDisplay {
action: ActionType;
- isSending: boolean;
- setIsSending: (arg0: boolean) => void;
- setIsPopupOpen: (arg0: boolean) => void;
amount: string;
setAmount: (arg0: string) => void;
}
-const InputDisplay: React.FC = ({
- action,
- isSending,
- setIsSending,
- setIsPopupOpen,
- amount,
- setAmount,
-}) => {
+const InputDisplay: React.FC = ({ action, amount, setAmount }) => {
const [debouncedAmount, setDebouncedAmount] = useState("");
const [errorMsg, setErrorMsg] = useState();
useDebounce(() => setDebouncedAmount(amount), 500, [amount]);
const parsedAmount = useParsedAmount(uncommify(debouncedAmount) as `${number}`);
const { id } = useParams();
- const { address } = useAccount();
- const { data: balance } = useReadPnkBalanceOf({
- query: {
- enabled: !isUndefined(address),
- refetchInterval: REFETCH_INTERVAL,
- },
- args: [address ?? "0x"],
- });
+ const { balance, jurorBalance } = usePnkData({ courtId: id });
+
const parsedBalance = formatPNK(balance ?? 0n, 0, true);
- const { data: jurorBalance } = useReadSortitionModuleGetJurorBalance({
- query: {
- enabled: !isUndefined(address),
- refetchInterval: REFETCH_INTERVAL,
- },
- args: [address ?? "0x", BigInt(id ?? "0")],
- });
+
const parsedStake = formatPNK(jurorBalance?.[2] ?? 0n, 0, true);
const isStaking = useMemo(() => action === ActionType.stake, [action]);
@@ -147,12 +127,10 @@ const InputDisplay: React.FC = ({
diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx
index 4b43352f8..d18b96ddf 100644
--- a/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx
+++ b/web/src/pages/Courts/CourtDetails/StakePanel/Simulator/QuantityToSimulate.tsx
@@ -1,5 +1,6 @@
import React from "react";
import styled from "styled-components";
+
import Skeleton from "react-loading-skeleton";
import { commify } from "utils/commify";
@@ -13,6 +14,7 @@ const Container = styled.div`
align-items: center;
flex-wrap: wrap;
gap: 0 8px;
+ justify-content: center;
`;
const TextWithTooltipContainer = styled.div`
@@ -48,6 +50,7 @@ interface IQuantityToSimulate {
jurorCurrentSpecificStake: number | undefined;
isStaking: boolean;
amountToStake: number;
+ className?: string;
}
const QuantityToSimulate: React.FC = ({
@@ -55,6 +58,7 @@ const QuantityToSimulate: React.FC = ({
jurorCurrentEffectiveStake,
jurorCurrentSpecificStake,
amountToStake,
+ className,
}) => {
const effectiveStakeDisplay = !isUndefined(jurorCurrentEffectiveStake) ? (
`${commify(jurorCurrentEffectiveStake)} PNK`
@@ -85,7 +89,7 @@ const QuantityToSimulate: React.FC = ({
);
return (
-
+
{effectiveStakeDisplay}
void;
setAmount: (arg0: string) => void;
- setIsPopupOpen: (arg0: boolean) => void;
setErrorMsg: (msg: string) => void;
}
-const StakeWithdrawButton: React.FC = ({
- parsedAmount,
- action,
- isSending,
- setIsSending,
- setIsPopupOpen,
- setErrorMsg,
-}) => {
+const StakeWithdrawButton: React.FC = ({ amount, parsedAmount, action, setErrorMsg, setAmount }) => {
const { id } = useParams();
- const { address } = useAccount();
+ const theme = useTheme();
+ const [isPopupOpen, setIsPopupOpen] = useState(false);
+ const [isSuccess, setIsSuccess] = useState(false);
+ const [popupStepsState, setPopupStepsState] = useState<[_TimelineItem1, ..._TimelineItem1[]]>();
+
const { data: courtDetails } = useCourtDetails(id);
- const { data: balance } = useReadPnkBalanceOf({
- query: {
- enabled: !isUndefined(address),
- refetchInterval: REFETCH_INTERVAL,
- },
- args: [address!],
- });
- const { data: jurorBalance } = useReadSortitionModuleGetJurorBalance({
- query: {
- enabled: !isUndefined(address),
- refetchInterval: REFETCH_INTERVAL,
- },
- args: [address ?? "0x", BigInt(id ?? 0)],
- });
- const { data: allowance } = useReadPnkAllowance({
- query: {
- enabled: !isUndefined(address),
- refetchInterval: REFETCH_INTERVAL,
- },
- args: [address ?? "0x", klerosCoreAddress[DEFAULT_CHAIN]],
- });
+ const { balance, jurorBalance, allowance, refetchAllowance } = usePnkData({ courtId: id });
+
const publicClient = usePublicClient();
const isStaking = action === ActionType.stake;
@@ -97,86 +75,191 @@ const StakeWithdrawButton: React.FC = ({
return 0n;
}, [jurorBalance, parsedAmount, isAllowance, isStaking]);
- const { data: increaseAllowanceConfig } = useSimulatePnkIncreaseAllowance({
+ const {
+ data: increaseAllowanceConfig,
+ isLoading: isSimulatingAllowance,
+ error: allowanceError,
+ } = useSimulatePnkIncreaseAllowance({
query: {
- enabled: isAllowance && !isUndefined(targetStake) && !isUndefined(allowance),
+ enabled: isAllowance && !isUndefined(targetStake) && !isUndefined(allowance) && !isUndefined(balance),
},
args: [klerosCoreAddress[DEFAULT_CHAIN], BigInt(targetStake ?? 0) - BigInt(allowance ?? 0)],
});
const { writeContractAsync: increaseAllowance } = useWritePnkIncreaseAllowance();
- const handleAllowance = useCallback(() => {
- if (increaseAllowanceConfig && publicClient) {
- setIsSending(true);
- wrapWithToast(async () => await increaseAllowance(increaseAllowanceConfig.request), publicClient).finally(() => {
- setIsSending(false);
- });
- }
- }, [setIsSending, increaseAllowance, increaseAllowanceConfig, publicClient]);
-
- const { data: setStakeConfig, error: setStakeError } = useSimulateKlerosCoreSetStake({
+ const {
+ data: setStakeConfig,
+ error: setStakeError,
+ isLoading: isSimulatingSetStake,
+ refetch: refetchSetStake,
+ } = useSimulateKlerosCoreSetStake({
query: {
enabled:
- !isUndefined(targetStake) && !isUndefined(id) && !isAllowance && parsedAmount !== 0n && targetStake >= 0n,
+ !isUndefined(targetStake) &&
+ !isUndefined(id) &&
+ parsedAmount !== 0n &&
+ targetStake >= 0n &&
+ !isAllowance &&
+ (isStaking ? true : jurorBalance && parsedAmount <= jurorBalance[2]),
},
args: [BigInt(id ?? 0), targetStake],
});
const { writeContractAsync: setStake } = useWriteKlerosCoreSetStake();
- const handleStake = useCallback(() => {
- if (setStakeConfig && publicClient) {
- setIsSending(true);
- wrapWithToast(async () => await setStake(setStakeConfig.request), publicClient)
- .then((res) => setIsPopupOpen(res.status))
- .finally(() => {
- setIsSending(false);
- });
- }
- }, [setIsSending, setStake, setStakeConfig, publicClient, setIsPopupOpen]);
+ const handleStake = useCallback(
+ (config?: typeof setStakeConfig, approvalHash?: `0x${string}`) => {
+ const isWithdraw = action === ActionType.withdraw;
+ const requestData = config?.request ?? setStakeConfig?.request;
+ const commonArgs: [string, DefaultTheme, `0x${string}` | undefined] = [amount, theme, approvalHash];
- const buttonProps = {
- [ActionType.allowance]: {
- text: "Allow PNK",
- checkDisabled: () => !balance || targetStake > balance,
- onClick: handleAllowance,
- },
- [ActionType.stake]: {
- text: "Stake",
- checkDisabled: () => !isUndefined(setStakeError),
- onClick: handleStake,
- },
- [ActionType.withdraw]: {
- text: "Withdraw",
- checkDisabled: () => !jurorBalance || parsedAmount > jurorBalance[2],
- onClick: handleStake,
+ if (requestData && publicClient) {
+ setPopupStepsState(
+ getStakeSteps(isWithdraw ? StakeSteps.WithdrawInitiate : StakeSteps.StakeInitiate, ...commonArgs)
+ );
+
+ setStake(requestData)
+ .then(async (hash) => {
+ setPopupStepsState(
+ getStakeSteps(isWithdraw ? StakeSteps.WithdrawPending : StakeSteps.StakePending, ...commonArgs, hash)
+ );
+ await publicClient.waitForTransactionReceipt({ hash, confirmations: 2 }).then((res: TransactionReceipt) => {
+ const status = res.status === "success";
+ if (status) {
+ setPopupStepsState(
+ getStakeSteps(
+ isWithdraw ? StakeSteps.WithdrawConfirmed : StakeSteps.StakeConfirmed,
+ ...commonArgs,
+ hash
+ )
+ );
+ setIsSuccess(true);
+ } else
+ setPopupStepsState(
+ getStakeSteps(isWithdraw ? StakeSteps.WithdrawFailed : StakeSteps.StakeFailed, ...commonArgs, hash)
+ );
+ });
+ })
+ .catch((err) => {
+ setPopupStepsState(
+ getStakeSteps(
+ isWithdraw ? StakeSteps.WithdrawFailed : StakeSteps.StakeFailed,
+ ...commonArgs,
+ undefined,
+ err
+ )
+ );
+ });
+ }
},
- };
+ [setStake, setStakeConfig, publicClient, amount, theme, action]
+ );
+
+ const handleClick = useCallback(() => {
+ setIsPopupOpen(true);
+ if (isAllowance && increaseAllowanceConfig && publicClient) {
+ const commonArgs: [string, DefaultTheme] = [amount, theme];
+ setPopupStepsState(getStakeSteps(StakeSteps.ApproveInitiate, ...commonArgs));
+
+ increaseAllowance(increaseAllowanceConfig.request)
+ .then(async (hash) => {
+ setPopupStepsState(getStakeSteps(StakeSteps.ApprovePending, ...commonArgs, hash));
+
+ await publicClient
+ .waitForTransactionReceipt({ hash, confirmations: 2 })
+ .then(async (res: TransactionReceipt) => {
+ const status = res.status === "success";
+ if (status) {
+ await refetchAllowance();
+ const refetchData = await refetchWithRetry(refetchSetStake);
+ // check for a relatively new error with react/tanstack-query:
+ // https://github.com/TanStack/query/issues/8209
+ if (!refetchData?.data)
+ setPopupStepsState(
+ getStakeSteps(
+ StakeSteps.ApproveFailed,
+ ...commonArgs,
+ hash,
+ undefined,
+ new Error("Something went wrong. Please restart the process.")
+ )
+ );
+ else {
+ handleStake(refetchData.data, hash);
+ }
+ } else setPopupStepsState(getStakeSteps(StakeSteps.ApproveFailed, ...commonArgs, hash));
+ });
+ })
+ .catch((err) => {
+ setPopupStepsState(getStakeSteps(StakeSteps.ApproveFailed, ...commonArgs, undefined, undefined, err));
+ });
+ } else {
+ handleStake();
+ }
+ }, [
+ increaseAllowance,
+ increaseAllowanceConfig,
+ handleStake,
+ isAllowance,
+ theme,
+ publicClient,
+ amount,
+ refetchAllowance,
+ refetchSetStake,
+ ]);
useEffect(() => {
- if (setStakeError) {
- setErrorMsg(parseWagmiError(setStakeError));
+ if (isPopupOpen) return;
+ if (setStakeError || allowanceError) {
+ setErrorMsg(parseWagmiError(setStakeError || allowanceError));
+ } else if (targetStake !== 0n && courtDetails && targetStake < BigInt(courtDetails.court?.minStake)) {
+ setErrorMsg(`Min Stake in court is: ${formatETH(courtDetails?.court?.minStake)}`);
+ }
+ }, [setStakeError, setErrorMsg, targetStake, courtDetails, allowanceError, isPopupOpen]);
+
+ const isDisabled = useMemo(() => {
+ if (
+ parsedAmount == 0n ||
+ isUndefined(targetStake) ||
+ isUndefined(courtDetails) ||
+ (targetStake !== 0n && targetStake < BigInt(courtDetails.court?.minStake))
+ )
+ return true;
+ if (isAllowance) {
+ return isUndefined(increaseAllowanceConfig) || isSimulatingAllowance || !isUndefined(allowanceError);
}
- }, [setStakeError, setErrorMsg]);
- const { text, checkDisabled, onClick } = buttonProps[isAllowance ? ActionType.allowance : action];
+ return isUndefined(setStakeConfig) || isSimulatingSetStake || !isUndefined(setStakeError);
+ }, [
+ parsedAmount,
+ targetStake,
+ courtDetails,
+ increaseAllowanceConfig,
+ isSimulatingAllowance,
+ setStakeConfig,
+ isSimulatingSetStake,
+ setStakeError,
+ allowanceError,
+ isAllowance,
+ ]);
+
+ const closePopup = () => {
+ setIsPopupOpen(false);
+ setIsSuccess(false);
+ setAmount("");
+ setPopupStepsState(undefined);
+ };
+
return (
+ {isPopupOpen && }
);
diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx
new file mode 100644
index 000000000..d21fa5f95
--- /dev/null
+++ b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/Header.tsx
@@ -0,0 +1,90 @@
+import React, { useMemo } from "react";
+import styled from "styled-components";
+
+import { useParams } from "react-router-dom";
+import { formatEther } from "viem";
+import { useAccount } from "wagmi";
+
+import Check from "svgs/icons/check-circle-outline.svg";
+
+import { useCourtDetails } from "hooks/queries/useCourtDetails";
+import { uncommify } from "utils/commify";
+
+import { useJurorStakeDetailsQuery } from "queries/useJurorStakeDetailsQuery";
+
+import QuantityToSimulate from "../Simulator/QuantityToSimulate";
+import { ActionType } from "../StakeWithdrawButton";
+
+const StakingMsgContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 9px;
+ align-items: center;
+`;
+
+const StakingMsg = styled.h1`
+ font-weight: 400;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+`;
+
+const StakingAmount = styled(StakingMsg)`
+ font-weight: 600;
+ color: ${({ theme }) => theme.secondaryPurple};
+ text-align: center;
+`;
+
+const CheckIcon = styled(Check)`
+ path {
+ fill: ${({ theme }) => theme.success};
+ }
+ width: 80px;
+ height: 80px;
+`;
+
+const CourtName = styled.label``;
+
+const StyledQuantityToSimulate = styled(QuantityToSimulate)`
+ margin-top: 15px;
+`;
+interface IHeader {
+ action: ActionType;
+ amount: string;
+ isSuccess: boolean;
+}
+
+const Header: React.FC = ({ action, amount, isSuccess }) => {
+ const { id } = useParams();
+ const { data: courtDetails } = useCourtDetails(id);
+ const { address } = useAccount();
+ const { data: stakeData } = useJurorStakeDetailsQuery(address?.toLowerCase() as `0x${string}`);
+ const jurorStakeData = stakeData?.jurorTokensPerCourts?.find(({ court }) => court.id === id);
+ const jurorCurrentEffectiveStake = address && jurorStakeData ? Number(formatEther(jurorStakeData.effectiveStake)) : 0;
+ const jurorCurrentSpecificStake = address && jurorStakeData ? Number(formatEther(jurorStakeData.staked)) : 0;
+
+ const isWithdraw = action === ActionType.withdraw;
+ const preStakeText = useMemo(() => (isWithdraw ? "withdrawing" : "staking"), [isWithdraw]);
+ const postStakeText = useMemo(() => (isWithdraw ? "withdrew" : "staked"), [isWithdraw]);
+
+ return (
+
+ {isSuccess ? : null}
+ {isSuccess ? `You successfully ${postStakeText}` : `You are ${preStakeText}`}
+ {amount} PNK
+ {courtDetails?.court?.name ? on {courtDetails.court.name} : null}
+ {isSuccess ? null : (
+
+ )}
+
+ );
+};
+
+export default Header;
diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx
new file mode 100644
index 000000000..17456711f
--- /dev/null
+++ b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/index.tsx
@@ -0,0 +1,136 @@
+import React from "react";
+import styled, { css, keyframes } from "styled-components";
+
+import { _TimelineItem1, CustomTimeline } from "@kleros/ui-components-library";
+
+import Close from "svgs/icons/close.svg";
+
+import { useLockOverlayScroll } from "hooks/useLockOverlayScroll";
+import { useSortitionModulePhase } from "hooks/useSortitionModule";
+
+import { landscapeStyle } from "styles/landscapeStyle";
+import { responsiveSize } from "styles/responsiveSize";
+
+import { Divider } from "components/Divider";
+import InfoCard from "components/InfoCard";
+import LightButton from "components/LightButton";
+import { Overlay } from "components/Overlay";
+import { Phases } from "components/Phase";
+
+import { ActionType } from "../StakeWithdrawButton";
+
+import Header from "./Header";
+
+const animation = keyframes`
+ 0%{
+ transform: translate(-50%,-47%);
+ opacity: 0;
+ }
+ 100%{
+ transform: translate(-50%,-50%);
+ opacity: 1;
+ };
+`;
+
+const Container = styled.div`
+ display: flex;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ max-height: 80vh;
+ overflow-y: auto;
+
+ z-index: 10;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ width: 86vw;
+ max-width: 600px;
+ border-radius: 7px;
+ border: 1px solid ${({ theme }) => theme.stroke};
+ background-color: ${({ theme }) => theme.whiteBackground};
+ box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.06);
+ padding: 8px;
+
+ animation: ${animation} 200ms ease-in;
+
+ svg {
+ visibility: visible;
+ }
+
+ ${landscapeStyle(
+ () => css`
+ overflow-y: hidden;
+ width: ${responsiveSize(300, 600)};
+ `
+ )}
+`;
+
+const InnerContainer = styled.div`
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-self: center;
+ gap: 24px;
+ padding: 0 24px 24px;
+`;
+
+const StyledButton = styled(LightButton)`
+ border: none !important;
+ padding: 8px !important;
+ border-radius: 7px !important;
+ height: fit-content !important;
+ align-self: end;
+ .button-svg {
+ path {
+ fill: ${({ theme }) => theme.stroke};
+ }
+ }
+`;
+
+const InfoContainer = styled.div`
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+ margin-top: 8px;
+`;
+
+const StyledInfoCard = styled(InfoCard)`
+ font-size: 14px;
+`;
+interface IStakeWithdrawPopup {
+ action: ActionType;
+ amount: string;
+ closePopup: () => void;
+ steps?: [_TimelineItem1, ..._TimelineItem1[]];
+ isSuccess: boolean;
+}
+
+const StakeWithdrawPopup: React.FC = ({ amount, closePopup, steps, isSuccess, action }) => {
+ useLockOverlayScroll(true);
+ const { data: phase } = useSortitionModulePhase();
+
+ return (
+
+ e.stopPropagation()}>
+
+
+
+
+ {steps && }
+ {phase !== Phases.staking ? (
+
+
+
+
+ ) : null}
+
+
+
+ );
+};
+
+export default StakeWithdrawPopup;
diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx
new file mode 100644
index 000000000..1db8ea294
--- /dev/null
+++ b/web/src/pages/Courts/CourtDetails/StakePanel/StakeWithdrawPopup/stakeSteps.tsx
@@ -0,0 +1,161 @@
+import React from "react";
+import styled, { DefaultTheme } from "styled-components";
+
+import { _TimelineItem1, StateProp } from "@kleros/ui-components-library";
+
+import CheckIcon from "svgs/icons/check-circle-outline.svg";
+
+import Spinner from "components/Spinner";
+import TxnHash from "components/TxnHash";
+
+const StyledLabel = styled.label`
+ color: ${({ theme }) => theme.secondaryPurple};
+`;
+
+const PartyContainer = styled.div`
+ display: flex;
+ gap: 8px;
+`;
+
+export enum StakeSteps {
+ ApproveInitiate,
+ ApprovePending,
+ ApproveFailed,
+ StakeInitiate,
+ StakeConfirmed,
+ StakePending,
+ StakeFailed,
+ WithdrawInitiate,
+ WithdrawPending,
+ WithdrawConfirmed,
+ WithdrawFailed,
+}
+
+const createApprovalSteps = (
+ theme: DefaultTheme,
+ variant: string,
+ state: StateProp["state"],
+ amount: string,
+ hash: `0x${string}` | undefined,
+ error: any
+): [_TimelineItem1, ..._TimelineItem1[]] => {
+ const party = () => {
+ if (variant === "refused") return hash ? : <>>;
+ return state === "loading" ? (
+ <>>
+ ) : (
+
+ {hash && }
+
+
+ );
+ };
+ return [
+ {
+ title: "Approve in wallet",
+ subtitle: error ? (error?.shortMessage ?? error?.message) : "PNK spending",
+ rightSided: true,
+ variant,
+ state,
+ party: party(),
+ },
+ {
+ title: "Stake in wallet",
+ subtitle: "",
+ rightSided: true,
+ variant: theme.secondaryPurple,
+ party: {amount} PNK,
+ state: "disabled",
+ },
+ ];
+};
+
+const createStakeSteps = (
+ theme: DefaultTheme,
+ variant: string,
+ state: StateProp["state"],
+ amount: string,
+ approvalHash: `0x${string}` | undefined,
+ stakeHash: `0x${string}` | undefined,
+ error: any,
+ isStake: boolean
+): [_TimelineItem1, ..._TimelineItem1[]] => {
+ const party = () => {
+ if (["refused", "accepted"].includes(variant))
+ return stakeHash ? : <>>;
+ return state === "loading" ? (
+ {amount} PNK
+ ) : (
+
+ {stakeHash && }
+
+
+ );
+ };
+ return isStake
+ ? [
+ {
+ title: "Approve in wallet",
+ subtitle: "PNK spending",
+ rightSided: true,
+ variant: theme.success,
+ party: approvalHash ? : <>>,
+ Icon: CheckIcon,
+ },
+ {
+ title: "Stake in wallet",
+ subtitle: error ? (error?.shortMessage ?? error?.message) : "",
+ rightSided: true,
+ variant,
+ state,
+ party: party(),
+ Icon: variant === "accepted" ? CheckIcon : undefined,
+ },
+ ]
+ : [
+ {
+ title: "Unstake in wallet",
+ subtitle: error ? (error?.shortMessage ?? error?.message) : "",
+ rightSided: true,
+ variant,
+ state,
+ party: party(),
+ Icon: variant === "accepted" ? CheckIcon : undefined,
+ },
+ ];
+};
+
+export const getStakeSteps = (
+ stepType: StakeSteps,
+ amount: string,
+ theme: DefaultTheme,
+ approvalHash?: `0x${string}`,
+ stakeHash?: `0x${string}`,
+ error?: any
+): [_TimelineItem1, ..._TimelineItem1[]] => {
+ switch (stepType) {
+ case StakeSteps.ApproveInitiate:
+ return createApprovalSteps(theme, theme.secondaryPurple, "loading", amount, approvalHash, error);
+
+ case StakeSteps.ApprovePending:
+ return createApprovalSteps(theme, theme.secondaryPurple, "active", amount, approvalHash, error);
+ case StakeSteps.ApproveFailed:
+ return createApprovalSteps(theme, "refused", "active", amount, approvalHash, error);
+ case StakeSteps.StakeInitiate:
+ return createStakeSteps(theme, theme.secondaryPurple, "loading", amount, approvalHash, stakeHash, error, true);
+ case StakeSteps.StakePending:
+ return createStakeSteps(theme, theme.secondaryPurple, "active", amount, approvalHash, stakeHash, error, true);
+ case StakeSteps.StakeFailed:
+ return createStakeSteps(theme, "refused", "active", amount, approvalHash, stakeHash, error, true);
+ case StakeSteps.StakeConfirmed:
+ return createStakeSteps(theme, "accepted", "active", amount, approvalHash, stakeHash, error, true);
+ case StakeSteps.WithdrawInitiate:
+ return createStakeSteps(theme, theme.secondaryPurple, "loading", amount, approvalHash, stakeHash, error, false);
+ case StakeSteps.WithdrawPending:
+ return createStakeSteps(theme, theme.secondaryPurple, "active", amount, approvalHash, stakeHash, error, false);
+ case StakeSteps.WithdrawConfirmed:
+ return createStakeSteps(theme, "accepted", "active", amount, approvalHash, stakeHash, error, false);
+ default:
+ return createStakeSteps(theme, "refused", "active", amount, approvalHash, stakeHash, error, false);
+ }
+};
diff --git a/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx b/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx
index 4e77e5456..2171058a2 100644
--- a/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx
+++ b/web/src/pages/Courts/CourtDetails/StakePanel/index.tsx
@@ -1,16 +1,12 @@
import React, { useState } from "react";
import styled, { css } from "styled-components";
-import { landscapeStyle } from "styles/landscapeStyle";
-import BalanceIcon from "svgs/icons/balance.svg";
+import { uncommify } from "utils/commify";
-import { useLockOverlayScroll } from "hooks/useLockOverlayScroll";
+import { landscapeStyle } from "styles/landscapeStyle";
-import Popup, { PopupType } from "components/Popup/index";
import Tag from "components/Tag";
-import { uncommify } from "utils/commify";
-
import InputDisplay from "./InputDisplay";
import { ActionType } from "./StakeWithdrawButton";
import Simulator from "./Simulator";
@@ -56,15 +52,11 @@ const TextArea = styled.div`
color: ${({ theme }) => theme.primaryText};
`;
-const StakePanel: React.FC<{ courtName: string; id: string }> = ({ courtName = "General Court", id }) => {
+const StakePanel: React.FC<{ courtName: string }> = ({ courtName = "General Court" }) => {
const [amount, setAmount] = useState("");
- const [isSending, setIsSending] = useState(false);
- const [isPopupOpen, setIsPopupOpen] = useState(false);
const [isActive, setIsActive] = useState(true);
const [action, setAction] = useState(ActionType.stake);
- useLockOverlayScroll(isPopupOpen);
-
const handleClick = (action: ActionType) => {
setIsActive(action === ActionType.stake);
setAction(action);
@@ -83,21 +75,8 @@ const StakePanel: React.FC<{ courtName: string; id: string }> = ({ courtName = "
{courtName} court
-
+
- {isPopupOpen && (
-
- )}
diff --git a/web/src/pages/Courts/CourtDetails/index.tsx b/web/src/pages/Courts/CourtDetails/index.tsx
index 4164ba7c7..2d1ee9777 100644
--- a/web/src/pages/Courts/CourtDetails/index.tsx
+++ b/web/src/pages/Courts/CourtDetails/index.tsx
@@ -7,7 +7,6 @@ import { useToggle } from "react-use";
import { Card, Breadcrumb } from "@kleros/ui-components-library";
import { isProductionDeployment } from "consts/index";
-import { isUndefined } from "utils/index";
import { useCourtPolicy } from "queries/useCourtPolicy";
import { useCourtTree, CourtTreeQuery } from "queries/useCourtTree";
@@ -19,8 +18,8 @@ import ClaimPnkButton from "components/ClaimPnkButton";
import HowItWorks from "components/HowItWorks";
import LatestCases from "components/LatestCases";
import Staking from "components/Popup/MiniGuides/Staking";
-import { StyledSkeleton } from "components/StyledSkeleton";
import ScrollTop from "components/ScrollTop";
+import { StyledSkeleton } from "components/StyledSkeleton";
import Description from "./Description";
import StakePanel from "./StakePanel";
@@ -112,7 +111,7 @@ const CourtDetails: React.FC = () => {
/>
-
+
diff --git a/web/src/utils/parseWagmiError.ts b/web/src/utils/parseWagmiError.ts
index ffd1ef597..784fd47d4 100644
--- a/web/src/utils/parseWagmiError.ts
+++ b/web/src/utils/parseWagmiError.ts
@@ -1,13 +1,14 @@
-import { type SimulateContractErrorType } from "@wagmi/core";
+import { type UseSimulateContractReturnType } from "wagmi";
-type ExtendedWagmiError = SimulateContractErrorType & { shortMessage?: string; metaMessages?: string[] };
+type ExtendedWagmiError = UseSimulateContractReturnType["error"] & { shortMessage?: string; metaMessages?: string[] };
/**
* @param error
* @description Tries to extract the human readable error message, otherwise reverts to error.message
* @returns Human readable error if possible
*/
-export const parseWagmiError = (error: SimulateContractErrorType) => {
+export const parseWagmiError = (error: UseSimulateContractReturnType["error"]) => {
+ if (!error) return "";
const extError = error as ExtendedWagmiError;
const metaMessage = extError?.metaMessages?.[0];
diff --git a/web/src/utils/refecthWithRetry.ts b/web/src/utils/refecthWithRetry.ts
new file mode 100644
index 000000000..304e0eb4c
--- /dev/null
+++ b/web/src/utils/refecthWithRetry.ts
@@ -0,0 +1,25 @@
+export async function refetchWithRetry(fn: () => Promise, retryCount = 5, retryDelay = 2000) {
+ let attempts = 0;
+
+ while (attempts < retryCount) {
+ try {
+ const returnData = await fn();
+
+ //@ts-expect-error data does exist
+ if (returnData && returnData?.data !== undefined) {
+ return returnData;
+ }
+ } catch (error) {
+ console.error(`Attempt ${attempts + 1} failed with error:`, error);
+ }
+
+ attempts++;
+
+ if (attempts >= retryCount) {
+ return;
+ }
+
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
+ }
+ return;
+}
diff --git a/web/tsconfig.json b/web/tsconfig.json
index fae4af75b..8b8b98b97 100644
--- a/web/tsconfig.json
+++ b/web/tsconfig.json
@@ -65,6 +65,7 @@
"noImplicitThis": true,
"noImplicitAny": false,
"resolveJsonModule": true,
+ "target": "ES2020",
"lib": [
"ESNext.Array"
],
diff --git a/yarn.lock b/yarn.lock
index 04ce59bcb..d42856701 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -521,7 +521,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2":
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.4, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.24.7, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2":
version: 7.26.2
resolution: "@babel/parser@npm:7.26.2"
dependencies:
@@ -1782,7 +1782,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @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.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":
+"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @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.9, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.26.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7":
version: 7.26.0
resolution: "@babel/runtime@npm:7.26.0"
dependencies:
@@ -2556,6 +2556,15 @@ __metadata:
languageName: node
linkType: hard
+"@ecies/ciphers@npm:^0.2.1":
+ version: 0.2.2
+ resolution: "@ecies/ciphers@npm:0.2.2"
+ peerDependencies:
+ "@noble/ciphers": ^1.0.0
+ checksum: 10/10a623261aa212184850fcd41788ae1f616365b5084df03ac0d7108223519e24a5f7d92caac1ee9e0f2e3b6cfae3037a42e466b25de20cf85e91098f60ba1187
+ languageName: node
+ linkType: hard
+
"@emotion/babel-plugin@npm:^11.13.5":
version: 11.13.5
resolution: "@emotion/babel-plugin@npm:11.13.5"
@@ -4970,29 +4979,11 @@ __metadata:
languageName: node
linkType: hard
-"@kleros/kleros-app@workspace:^, @kleros/kleros-app@workspace:kleros-app":
- version: 0.0.0-use.local
- resolution: "@kleros/kleros-app@workspace:kleros-app"
+"@kleros/kleros-app@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "@kleros/kleros-app@npm:2.0.1"
dependencies:
- "@eslint/compat": "npm:^1.2.3"
- "@eslint/eslintrc": "npm:^3.2.0"
- "@eslint/js": "npm:^9.15.0"
- "@kleros/kleros-v2-eslint-config": "workspace:^"
- "@kleros/kleros-v2-prettier-config": "workspace:^"
- "@types/react": "npm:^18.3.12"
- "@types/react-dom": "npm:^18.3.1"
- "@typescript-eslint/eslint-plugin": "npm:^8.15.0"
- "@typescript-eslint/parser": "npm:^8.15.0"
- eslint: "npm:^9.15.0"
- eslint-config-prettier: "npm:^9.1.0"
- eslint-plugin-import: "npm:^2.31.0"
- globals: "npm:^15.12.0"
jose: "npm:^5.9.6"
- rimraf: "npm:^6.0.1"
- typescript: "npm:^5.6.3"
- vite: "npm:^5.4.11"
- vite-plugin-dts: "npm:^4.3.0"
- vite-plugin-node-polyfills: "npm:^0.22.0"
peerDependencies:
"@tanstack/react-query": ^5.59.20
graphql: ^16.9.0
@@ -5001,8 +4992,9 @@ __metadata:
react-dom: ^18.3.1
viem: ^2.21.42
wagmi: ^2.13.0
- languageName: unknown
- linkType: soft
+ checksum: 10/a193e49fe82738eaa7df3b82857fd74a5407e6ed166edeacd2352bbd149a49ea3cfde98f130fe0473f006761260cbf2475bc4fa138ad05650540eec43b9755d1
+ languageName: node
+ linkType: hard
"@kleros/kleros-sdk@workspace:^, @kleros/kleros-sdk@workspace:kleros-sdk":
version: 0.0.0-use.local
@@ -5203,18 +5195,18 @@ __metadata:
"@eslint/js": "npm:^9.15.0"
"@graphql-codegen/cli": "npm:^5.0.3"
"@graphql-codegen/client-preset": "npm:^4.5.1"
- "@kleros/kleros-app": "workspace:^"
+ "@kleros/kleros-app": "npm:^2.0.1"
"@kleros/kleros-sdk": "workspace:^"
"@kleros/kleros-v2-contracts": "workspace:^"
"@kleros/kleros-v2-eslint-config": "workspace:^"
"@kleros/kleros-v2-prettier-config": "workspace:^"
"@kleros/kleros-v2-tsconfig": "workspace:^"
- "@kleros/ui-components-library": "npm:^2.15.0"
+ "@kleros/ui-components-library": "npm:^2.16.0"
"@lifi/wallet-management": "npm:^3.4.5"
"@lifi/widget": "npm:^3.12.2"
"@sentry/react": "npm:^7.120.0"
"@sentry/tracing": "npm:^7.120.0"
- "@tanstack/react-query": "npm:^5.61.0"
+ "@tanstack/react-query": "npm:^5.56.2"
"@types/busboy": "npm:^1.5.4"
"@types/react": "npm:^18.3.12"
"@types/react-dom": "npm:^18.3.1"
@@ -5262,12 +5254,12 @@ __metadata:
react-use: "npm:^17.5.1"
styled-components: "npm:^5.3.3"
typescript: "npm:^5.6.3"
- viem: "npm:^2.21.48"
+ viem: "npm:^2.21.54"
vite: "npm:^5.4.11"
vite-plugin-node-polyfills: "npm:^0.21.0"
vite-plugin-svgr: "npm:^4.3.0"
vite-tsconfig-paths: "npm:^4.3.2"
- wagmi: "npm:^2.13.0"
+ wagmi: "npm:^2.13.5"
languageName: unknown
linkType: soft
@@ -5294,6 +5286,29 @@ __metadata:
languageName: node
linkType: hard
+"@kleros/ui-components-library@npm:^2.16.0":
+ version: 2.16.0
+ resolution: "@kleros/ui-components-library@npm:2.16.0"
+ dependencies:
+ "@datepicker-react/hooks": "npm:^2.8.4"
+ "@swc/helpers": "npm:^0.3.2"
+ rc-slider: "npm:^9.7.5"
+ react: "npm:^18.0.0"
+ react-dom: "npm:^18.0.0"
+ react-is: "npm:^18.0.0"
+ simplebar: "npm:^5.3.6"
+ simplebar-react: "npm:^2.3.6"
+ smooth-scroll-into-view-if-needed: "npm:^1.1.33"
+ usehooks-ts: "npm:^2.9.1"
+ peerDependencies:
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ react-is: ^18.0.0
+ styled-components: ^5.3.3
+ checksum: 10/d17d05aa96c3df6ec8ee5a1ea31652f113d09ddeb5c8ac42aeb951c1d5346086744ede254da47fe0f6294950a64b23bf1b3cb4d44c330020b57a6c55994fdb32
+ languageName: node
+ linkType: hard
+
"@kleros/vea-contracts@npm:^0.4.0":
version: 0.4.0
resolution: "@kleros/vea-contracts@npm:0.4.0"
@@ -5795,6 +5810,25 @@ __metadata:
languageName: node
linkType: hard
+"@metamask/sdk-communication-layer@npm:0.31.0":
+ version: 0.31.0
+ resolution: "@metamask/sdk-communication-layer@npm:0.31.0"
+ dependencies:
+ bufferutil: "npm:^4.0.8"
+ date-fns: "npm:^2.29.3"
+ debug: "npm:^4.3.4"
+ utf-8-validate: "npm:^5.0.2"
+ uuid: "npm:^8.3.2"
+ peerDependencies:
+ cross-fetch: ^4.0.0
+ eciesjs: "*"
+ eventemitter2: ^6.4.9
+ readable-stream: ^3.6.2
+ socket.io-client: ^4.5.1
+ checksum: 10/e5d2b1c5d50b5a92b20606941fb167a97bf6d9c41eac72e3c4b501ba545da5679e81b97bb1cbf9ff497ad30791057423c8f7841cd9d190ad53460916a224f757
+ languageName: node
+ linkType: hard
+
"@metamask/sdk-install-modal-web@npm:0.30.0":
version: 0.30.0
resolution: "@metamask/sdk-install-modal-web@npm:0.30.0"
@@ -5816,6 +5850,15 @@ __metadata:
languageName: node
linkType: hard
+"@metamask/sdk-install-modal-web@npm:0.31.1":
+ version: 0.31.1
+ resolution: "@metamask/sdk-install-modal-web@npm:0.31.1"
+ dependencies:
+ "@paulmillr/qr": "npm:^0.2.1"
+ checksum: 10/2599d8dd987ebececd8fe1d3c967c1d380a51ec26015558406048020789697ca66a5621002f7d104f4e832c9aa6b0cb28363fcb9e213d64fd3d80ff27f25907c
+ languageName: node
+ linkType: hard
+
"@metamask/sdk@npm:0.30.1":
version: 0.30.1
resolution: "@metamask/sdk@npm:0.30.1"
@@ -5852,6 +5895,33 @@ __metadata:
languageName: node
linkType: hard
+"@metamask/sdk@npm:0.31.1":
+ version: 0.31.1
+ resolution: "@metamask/sdk@npm:0.31.1"
+ dependencies:
+ "@babel/runtime": "npm:^7.26.0"
+ "@metamask/onboarding": "npm:^1.0.1"
+ "@metamask/providers": "npm:16.1.0"
+ "@metamask/sdk-communication-layer": "npm:0.31.0"
+ "@metamask/sdk-install-modal-web": "npm:0.31.1"
+ "@paulmillr/qr": "npm:^0.2.1"
+ bowser: "npm:^2.9.0"
+ cross-fetch: "npm:^4.0.0"
+ debug: "npm:^4.3.4"
+ eciesjs: "npm:^0.4.11"
+ eth-rpc-errors: "npm:^4.0.3"
+ eventemitter2: "npm:^6.4.9"
+ obj-multiplex: "npm:^1.0.0"
+ pump: "npm:^3.0.0"
+ readable-stream: "npm:^3.6.2"
+ socket.io-client: "npm:^4.5.1"
+ tslib: "npm:^2.6.0"
+ util: "npm:^0.12.4"
+ uuid: "npm:^8.3.2"
+ checksum: 10/9bc15de4cd0b9f5d2e8fe8876c117f2fabd570aaac09584ee73dd6ba5f3f753673e3aa3ae13e99545fe96c211a70b4146c1cd06045a180adbcf60571a13487dd
+ languageName: node
+ linkType: hard
+
"@metamask/superstruct@npm:^3.0.0, @metamask/superstruct@npm:^3.1.0":
version: 3.1.0
resolution: "@metamask/superstruct@npm:3.1.0"
@@ -5906,59 +5976,6 @@ __metadata:
languageName: node
linkType: hard
-"@microsoft/api-extractor-model@npm:7.29.8":
- version: 7.29.8
- resolution: "@microsoft/api-extractor-model@npm:7.29.8"
- dependencies:
- "@microsoft/tsdoc": "npm:~0.15.0"
- "@microsoft/tsdoc-config": "npm:~0.17.0"
- "@rushstack/node-core-library": "npm:5.9.0"
- checksum: 10/06932e61f0a1979dbacc716e143f9d34d856338504cd8d016d98a3d3c83d60e7c25bfdc64d011c6ddf94de2351b52872e8722d970fce44c49bd630aeca32c987
- languageName: node
- linkType: hard
-
-"@microsoft/api-extractor@npm:^7.47.11":
- version: 7.47.11
- resolution: "@microsoft/api-extractor@npm:7.47.11"
- dependencies:
- "@microsoft/api-extractor-model": "npm:7.29.8"
- "@microsoft/tsdoc": "npm:~0.15.0"
- "@microsoft/tsdoc-config": "npm:~0.17.0"
- "@rushstack/node-core-library": "npm:5.9.0"
- "@rushstack/rig-package": "npm:0.5.3"
- "@rushstack/terminal": "npm:0.14.2"
- "@rushstack/ts-command-line": "npm:4.23.0"
- lodash: "npm:~4.17.15"
- minimatch: "npm:~3.0.3"
- resolve: "npm:~1.22.1"
- semver: "npm:~7.5.4"
- source-map: "npm:~0.6.1"
- typescript: "npm:5.4.2"
- bin:
- api-extractor: bin/api-extractor
- checksum: 10/692f8b53c403e358af0878220c8eec1c8ca381ccd79578433977b8bcc35a7d76b160ec80d13ca76e1b4abbcff88611bce637af270a5515d6be59fd3b08a821a0
- languageName: node
- linkType: hard
-
-"@microsoft/tsdoc-config@npm:~0.17.0":
- version: 0.17.0
- resolution: "@microsoft/tsdoc-config@npm:0.17.0"
- dependencies:
- "@microsoft/tsdoc": "npm:0.15.0"
- ajv: "npm:~8.12.0"
- jju: "npm:~1.4.0"
- resolve: "npm:~1.22.2"
- checksum: 10/6e20f9b917d20e517b6752cbb46c84ccc4c8be7ce82d7424e413bd7111a2f1497714a72e61ac1a96df97d0050cb98b3a53006316eeb0cfea9bb6d7131432c7a8
- languageName: node
- linkType: hard
-
-"@microsoft/tsdoc@npm:0.15.0, @microsoft/tsdoc@npm:~0.15.0":
- version: 0.15.0
- resolution: "@microsoft/tsdoc@npm:0.15.0"
- checksum: 10/fd025e5e3966248cd5477b9ddad4e9aa0dd69291f372a207f18a686b3097dcf5ecf38325caf0f4ad2697f1f39fd45b536e4ada6756008b8bcc5eccbc3201313d
- languageName: node
- linkType: hard
-
"@motionone/animation@npm:^10.15.1":
version: 10.15.1
resolution: "@motionone/animation@npm:10.15.1"
@@ -6435,6 +6452,15 @@ __metadata:
languageName: node
linkType: hard
+"@noble/curves@npm:1.7.0, @noble/curves@npm:~1.7.0":
+ version: 1.7.0
+ resolution: "@noble/curves@npm:1.7.0"
+ dependencies:
+ "@noble/hashes": "npm:1.6.0"
+ checksum: 10/2a11ef4895907d0b241bd3b72f9e6ebe56f0e705949bfd5efe003f25233549f620d287550df2d24ad56a1f953b82ec5f7cf4bd7cb78b1b2e76eb6dd516d44cf8
+ languageName: node
+ linkType: hard
+
"@noble/ed25519@npm:^1.6.0":
version: 1.7.3
resolution: "@noble/ed25519@npm:1.7.3"
@@ -6477,6 +6503,20 @@ __metadata:
languageName: node
linkType: hard
+"@noble/hashes@npm:1.6.0":
+ version: 1.6.0
+ resolution: "@noble/hashes@npm:1.6.0"
+ checksum: 10/b44b043b02adbecd33596adeed97d9f9864c24a2410f7ac3b847986c2ecf1f6f0df76024b3f1b14d6ea954932960d88898fe551fb9d39844a8b870e9f9044ea1
+ languageName: node
+ linkType: hard
+
+"@noble/hashes@npm:1.6.1, @noble/hashes@npm:~1.6.0":
+ version: 1.6.1
+ resolution: "@noble/hashes@npm:1.6.1"
+ checksum: 10/74d9ad7b1437a22ba3b877584add3367587fbf818113152f293025d20d425aa74c191d18d434797312f2270458bc9ab3241c34d14ec6115fb16438b3248f631f
+ languageName: node
+ linkType: hard
+
"@noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2":
version: 1.3.3
resolution: "@noble/hashes@npm:1.3.3"
@@ -7170,6 +7210,13 @@ __metadata:
languageName: node
linkType: hard
+"@paulmillr/qr@npm:^0.2.1":
+ version: 0.2.1
+ resolution: "@paulmillr/qr@npm:0.2.1"
+ checksum: 10/69ee9002124496c4c7ed31f376c6f4a8fa1e86d71a14b420b22133baeab416af1349ae173d93e73a9627c2d9813d0a4bc84a64efa4e125436909f7d6d1d39785
+ languageName: node
+ linkType: hard
+
"@peculiar/asn1-schema@npm:^2.3.6":
version: 2.3.6
resolution: "@peculiar/asn1-schema@npm:2.3.6"
@@ -7521,7 +7568,7 @@ __metadata:
languageName: node
linkType: hard
-"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.0, @rollup/pluginutils@npm:^5.1.3":
+"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.1.3":
version: 5.1.3
resolution: "@rollup/pluginutils@npm:5.1.3"
dependencies:
@@ -7663,64 +7710,6 @@ __metadata:
languageName: node
linkType: hard
-"@rushstack/node-core-library@npm:5.9.0":
- version: 5.9.0
- resolution: "@rushstack/node-core-library@npm:5.9.0"
- dependencies:
- ajv: "npm:~8.13.0"
- ajv-draft-04: "npm:~1.0.0"
- ajv-formats: "npm:~3.0.1"
- fs-extra: "npm:~7.0.1"
- import-lazy: "npm:~4.0.0"
- jju: "npm:~1.4.0"
- resolve: "npm:~1.22.1"
- semver: "npm:~7.5.4"
- peerDependencies:
- "@types/node": "*"
- peerDependenciesMeta:
- "@types/node":
- optional: true
- checksum: 10/19d6c6fc6addfb27295d1d78e1027f5896ea43702c2e5168e8b235ee739f2e59a4dc3bb3996b083722fab4feae5f2c15c340900c6c1d517d56cc1ba945f532f1
- languageName: node
- linkType: hard
-
-"@rushstack/rig-package@npm:0.5.3":
- version: 0.5.3
- resolution: "@rushstack/rig-package@npm:0.5.3"
- dependencies:
- resolve: "npm:~1.22.1"
- strip-json-comments: "npm:~3.1.1"
- checksum: 10/b58a3925a41d7a0e79f4fde7c400a379683cc7b0073c447aba6d36231529a37e7d2f4559f459be785ad862ecb01b618b2d0ff60661046e5223437356155ccb14
- languageName: node
- linkType: hard
-
-"@rushstack/terminal@npm:0.14.2":
- version: 0.14.2
- resolution: "@rushstack/terminal@npm:0.14.2"
- dependencies:
- "@rushstack/node-core-library": "npm:5.9.0"
- supports-color: "npm:~8.1.1"
- peerDependencies:
- "@types/node": "*"
- peerDependenciesMeta:
- "@types/node":
- optional: true
- checksum: 10/4016499f3ed1eff7d870ff029bc51925f1435c0ed73d454385d6fdfe8f10e7e5fc2dba698a9aa671f2537603d2d08449782a0f329f321a7dcb87827c19385bca
- languageName: node
- linkType: hard
-
-"@rushstack/ts-command-line@npm:4.23.0":
- version: 4.23.0
- resolution: "@rushstack/ts-command-line@npm:4.23.0"
- dependencies:
- "@rushstack/terminal": "npm:0.14.2"
- "@types/argparse": "npm:1.0.38"
- argparse: "npm:~1.0.9"
- string-argv: "npm:~0.3.1"
- checksum: 10/94ca2c85c7781e7c0b9542eec055359ef1e64e1ed1721ce11e28d65fab25974048519492afa261cd244db798bac505f758497dae2e55c2fc891f2f908e172ce9
- languageName: node
- linkType: hard
-
"@safe-global/safe-apps-provider@npm:0.18.4":
version: 0.18.4
resolution: "@safe-global/safe-apps-provider@npm:0.18.4"
@@ -7771,6 +7760,13 @@ __metadata:
languageName: node
linkType: hard
+"@scure/base@npm:~1.2.1":
+ version: 1.2.1
+ resolution: "@scure/base@npm:1.2.1"
+ checksum: 10/f7bdd17618ccae7a74c8cbe410a235e4adbe54aa8afe4e2fb1294338aa92f6fd04b1f1f5dea60552f638b5f5e3e74902b7baf59d3954e5e42c0a36c6baa2ebe0
+ languageName: node
+ linkType: hard
+
"@scure/bip32@npm:1.1.5":
version: 1.1.5
resolution: "@scure/bip32@npm:1.1.5"
@@ -7815,6 +7811,17 @@ __metadata:
languageName: node
linkType: hard
+"@scure/bip32@npm:1.6.0":
+ version: 1.6.0
+ resolution: "@scure/bip32@npm:1.6.0"
+ dependencies:
+ "@noble/curves": "npm:~1.7.0"
+ "@noble/hashes": "npm:~1.6.0"
+ "@scure/base": "npm:~1.2.1"
+ checksum: 10/2efb81ed9a7b8d5d35233e10abebc114544a3783a2a32b9fb60e1e9a67965b272c9d17910e1649083b69c8ceb80241b05b59dbeb7a5b18ea34e497aed3f16709
+ languageName: node
+ linkType: hard
+
"@scure/bip39@npm:1.1.1":
version: 1.1.1
resolution: "@scure/bip39@npm:1.1.1"
@@ -7855,6 +7862,16 @@ __metadata:
languageName: node
linkType: hard
+"@scure/bip39@npm:1.5.0":
+ version: 1.5.0
+ resolution: "@scure/bip39@npm:1.5.0"
+ dependencies:
+ "@noble/hashes": "npm:~1.6.0"
+ "@scure/base": "npm:~1.2.1"
+ checksum: 10/b795ee31ac4c10603bf3b726cc0e5cf43834a68f05a535e0baf2162772bac100de470b4c6cf7ddbecb95d7a3fb82b8a959badced406c329ab696cd89104194bc
+ languageName: node
+ linkType: hard
+
"@selderee/plugin-htmlparser2@npm:^0.6.0":
version: 0.6.0
resolution: "@selderee/plugin-htmlparser2@npm:0.6.0"
@@ -8867,6 +8884,24 @@ __metadata:
languageName: node
linkType: hard
+"@tanstack/query-core@npm:5.62.3":
+ version: 5.62.3
+ resolution: "@tanstack/query-core@npm:5.62.3"
+ checksum: 10/de7a561a69754fabfa3f40713d1b52913c5b476c519a7ff92dec2a28a8417b18cf31977bb8bf9df5adacd9370607a4561db7ad39d5ebaaeea2962a4b339d7691
+ languageName: node
+ linkType: hard
+
+"@tanstack/react-query@npm:^5.56.2":
+ version: 5.62.3
+ resolution: "@tanstack/react-query@npm:5.62.3"
+ dependencies:
+ "@tanstack/query-core": "npm:5.62.3"
+ peerDependencies:
+ react: ^18 || ^19
+ checksum: 10/ae43dbf707b9f9f1574093b13e237af06117d002f4228da22a8f8a6a59b1c4598b63d71c1d286f11d66a33c425cec4f5af072f2ac1c265518ff7fb5541eefc69
+ languageName: node
+ linkType: hard
+
"@tanstack/react-query@npm:^5.59.20, @tanstack/react-query@npm:^5.61.0":
version: 5.61.0
resolution: "@tanstack/react-query@npm:5.61.0"
@@ -8988,13 +9023,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/argparse@npm:1.0.38":
- version: 1.0.38
- resolution: "@types/argparse@npm:1.0.38"
- checksum: 10/26ed7e3f1e3595efdb883a852f5205f971b798e4c28b7e30a32c5298eee596e8b45834ce831f014d250b9730819ab05acff5b31229666d3af4ba465b4697d0eb
- languageName: node
- linkType: hard
-
"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14":
version: 7.20.1
resolution: "@types/babel__core@npm:7.20.1"
@@ -10157,56 +10185,6 @@ __metadata:
languageName: node
linkType: hard
-"@volar/language-core@npm:2.4.10, @volar/language-core@npm:~2.4.1":
- version: 2.4.10
- resolution: "@volar/language-core@npm:2.4.10"
- dependencies:
- "@volar/source-map": "npm:2.4.10"
- checksum: 10/2bfc33a5cf215810ff9f9e058e2cb3d1148e21ff69164fa854b6933673db0521cfac8313f7ad3fba8f314d22945fbe2a8ae572888bdf816a820cfa17d4c75ee3
- languageName: node
- linkType: hard
-
-"@volar/source-map@npm:2.4.10":
- version: 2.4.10
- resolution: "@volar/source-map@npm:2.4.10"
- checksum: 10/8067c4a52bb54709bb74639419242ada294348f05cd5e22bc4a3cdfe4f7b18b9292c8b231805a56bda306890b97a3969e57d4da49d294e2b6122ec1e74f707e2
- languageName: node
- linkType: hard
-
-"@volar/typescript@npm:^2.4.4":
- version: 2.4.10
- resolution: "@volar/typescript@npm:2.4.10"
- dependencies:
- "@volar/language-core": "npm:2.4.10"
- path-browserify: "npm:^1.0.1"
- vscode-uri: "npm:^3.0.8"
- checksum: 10/dab415048adac8c260d824092ccac47023600cc580032c3f409d88953bacd3f2568ff666cfcf49d63ef2babec86325886d5dc32ed492335248bfd5580bbadc29
- languageName: node
- linkType: hard
-
-"@vue/compiler-core@npm:3.5.13":
- version: 3.5.13
- resolution: "@vue/compiler-core@npm:3.5.13"
- dependencies:
- "@babel/parser": "npm:^7.25.3"
- "@vue/shared": "npm:3.5.13"
- entities: "npm:^4.5.0"
- estree-walker: "npm:^2.0.2"
- source-map-js: "npm:^1.2.0"
- checksum: 10/22f042bb47c8a1edb9d602e24da8092ab542d5640f0459a9b99ecf35f90e96678f870209dd30f774f5340c6d817d3c5a46ca49cefb9659ee5b228bd42d1f076a
- languageName: node
- linkType: hard
-
-"@vue/compiler-dom@npm:^3.4.0":
- version: 3.5.13
- resolution: "@vue/compiler-dom@npm:3.5.13"
- dependencies:
- "@vue/compiler-core": "npm:3.5.13"
- "@vue/shared": "npm:3.5.13"
- checksum: 10/5dc628c52091264a443c2d7326b759d7d3999c7e9c00078c2eb370b778e60b9f2ef258a8decf2fd97c8fa0923f895d449eabc1e5bc3d8a45d3ef99c9eb0599d7
- languageName: node
- linkType: hard
-
"@vue/compiler-sfc@npm:2.7.14":
version: 2.7.14
resolution: "@vue/compiler-sfc@npm:2.7.14"
@@ -10218,16 +10196,6 @@ __metadata:
languageName: node
linkType: hard
-"@vue/compiler-vue2@npm:^2.7.16":
- version: 2.7.16
- resolution: "@vue/compiler-vue2@npm:2.7.16"
- dependencies:
- de-indent: "npm:^1.0.2"
- he: "npm:^1.2.0"
- checksum: 10/739ad06be19206b2715707c226a070509bcf28c31b539a6fc932d220eb7b0c09109d71fded573ed0c4073429793a3513ca4a4e69ad4f7afc0c5bc3c28639e871
- languageName: node
- linkType: hard
-
"@vue/component-compiler-utils@npm:^3.1.0":
version: 3.3.0
resolution: "@vue/component-compiler-utils@npm:3.3.0"
@@ -10248,34 +10216,6 @@ __metadata:
languageName: node
linkType: hard
-"@vue/language-core@npm:2.1.6":
- version: 2.1.6
- resolution: "@vue/language-core@npm:2.1.6"
- dependencies:
- "@volar/language-core": "npm:~2.4.1"
- "@vue/compiler-dom": "npm:^3.4.0"
- "@vue/compiler-vue2": "npm:^2.7.16"
- "@vue/shared": "npm:^3.4.0"
- computeds: "npm:^0.0.1"
- minimatch: "npm:^9.0.3"
- muggle-string: "npm:^0.4.1"
- path-browserify: "npm:^1.0.1"
- peerDependencies:
- typescript: "*"
- peerDependenciesMeta:
- typescript:
- optional: true
- checksum: 10/640d4af0031975620cd3a8050bb4b0f4ed333f241ded195e3bf8c4e571c720b4e3bec3947caf2b10e4e2de19deb7621982d15439de3732d510cd43e325c74a50
- languageName: node
- linkType: hard
-
-"@vue/shared@npm:3.5.13, @vue/shared@npm:^3.4.0":
- version: 3.5.13
- resolution: "@vue/shared@npm:3.5.13"
- checksum: 10/5c0c24f443533392dde08c3e4272ff2e19af9762f90baeaa808850e05106537bbd9e2d2ad2081d979b8c4bc89902395b46036b67f74c60b76025924de37833b1
- languageName: node
- linkType: hard
-
"@wagmi/cli@npm:^2.1.18":
version: 2.1.18
resolution: "@wagmi/cli@npm:2.1.18"
@@ -10332,6 +10272,27 @@ __metadata:
languageName: node
linkType: hard
+"@wagmi/connectors@npm:5.5.3":
+ version: 5.5.3
+ resolution: "@wagmi/connectors@npm:5.5.3"
+ dependencies:
+ "@coinbase/wallet-sdk": "npm:4.2.3"
+ "@metamask/sdk": "npm:0.31.1"
+ "@safe-global/safe-apps-provider": "npm:0.18.4"
+ "@safe-global/safe-apps-sdk": "npm:9.1.0"
+ "@walletconnect/ethereum-provider": "npm:2.17.0"
+ cbw-sdk: "npm:@coinbase/wallet-sdk@3.9.3"
+ peerDependencies:
+ "@wagmi/core": 2.15.2
+ typescript: ">=5.0.4"
+ viem: 2.x
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 10/bf2c58bb62be16387e3084f1bd2d7a9197e413626728b3bfc864c11de0eb0dfecd4637b23b1adc36a05b6570d81b31ef53a3ac107d2e2ded237db8fb17c1d8d2
+ languageName: node
+ linkType: hard
+
"@wagmi/core@npm:2.15.0, @wagmi/core@npm:^2.14.1, @wagmi/core@npm:^2.14.4, @wagmi/core@npm:^2.15.0":
version: 2.15.0
resolution: "@wagmi/core@npm:2.15.0"
@@ -10352,6 +10313,26 @@ __metadata:
languageName: node
linkType: hard
+"@wagmi/core@npm:2.15.2":
+ version: 2.15.2
+ resolution: "@wagmi/core@npm:2.15.2"
+ dependencies:
+ eventemitter3: "npm:5.0.1"
+ mipd: "npm:0.0.7"
+ zustand: "npm:5.0.0"
+ peerDependencies:
+ "@tanstack/query-core": ">=5.0.0"
+ typescript: ">=5.0.4"
+ viem: 2.x
+ peerDependenciesMeta:
+ "@tanstack/query-core":
+ optional: true
+ typescript:
+ optional: true
+ checksum: 10/ed11530d329831c7e1f957ca17bc5633c5d2816ea24722b0ba6a7beb220d309f0264f54c0839dbc7f2f9c1683883435b8ead789ffcc388ffb61c41e2c72a6129
+ languageName: node
+ linkType: hard
+
"@wallet-standard/app@npm:^1.0.1":
version: 1.0.1
resolution: "@wallet-standard/app@npm:1.0.1"
@@ -11669,6 +11650,21 @@ __metadata:
languageName: node
linkType: hard
+"abitype@npm:1.0.7":
+ version: 1.0.7
+ resolution: "abitype@npm:1.0.7"
+ peerDependencies:
+ typescript: ">=5.0.4"
+ zod: ^3 >=3.22.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ zod:
+ optional: true
+ checksum: 10/6c2c3390a2f90186bf0df73f20cf257dfd9b62d1eb266de6ddf362030dcbd79cd113b4110e52f7802d7b042ea8fdb7ee2f113751b883787c2d9589d56fb4273b
+ languageName: node
+ linkType: hard
+
"abitype@npm:^0.10.3":
version: 0.10.3
resolution: "abitype@npm:0.10.3"
@@ -11862,18 +11858,6 @@ __metadata:
languageName: node
linkType: hard
-"ajv-draft-04@npm:~1.0.0":
- version: 1.0.0
- resolution: "ajv-draft-04@npm:1.0.0"
- peerDependencies:
- ajv: ^8.5.0
- peerDependenciesMeta:
- ajv:
- optional: true
- checksum: 10/3f11fa0e7f7359bef6608657f02ab78e9cc62b1fb7bdd860db0d00351b3863a1189c1a23b72466d2d82726cab4eb20725c76f5e7c134a89865e2bfd0e6828137
- languageName: node
- linkType: hard
-
"ajv-formats@npm:^2.1.1":
version: 2.1.1
resolution: "ajv-formats@npm:2.1.1"
@@ -11888,20 +11872,6 @@ __metadata:
languageName: node
linkType: hard
-"ajv-formats@npm:~3.0.1":
- version: 3.0.1
- resolution: "ajv-formats@npm:3.0.1"
- dependencies:
- ajv: "npm:^8.0.0"
- peerDependencies:
- ajv: ^8.0.0
- peerDependenciesMeta:
- ajv:
- optional: true
- checksum: 10/5679b9f9ced9d0213a202a37f3aa91efcffe59a6de1a6e3da5c873344d3c161820a1f11cc29899661fee36271fd2895dd3851b6461c902a752ad661d1c1e8722
- languageName: node
- linkType: hard
-
"ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2":
version: 3.5.2
resolution: "ajv-keywords@npm:3.5.2"
@@ -11946,7 +11916,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.9.0, ajv@npm:~8.13.0":
+"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.9.0":
version: 8.13.0
resolution: "ajv@npm:8.13.0"
dependencies:
@@ -11958,18 +11928,6 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:~8.12.0":
- version: 8.12.0
- resolution: "ajv@npm:8.12.0"
- dependencies:
- fast-deep-equal: "npm:^3.1.1"
- json-schema-traverse: "npm:^1.0.0"
- require-from-string: "npm:^2.0.2"
- uri-js: "npm:^4.2.2"
- checksum: 10/b406f3b79b5756ac53bfe2c20852471b08e122bc1ee4cde08ae4d6a800574d9cd78d60c81c69c63ff81e4da7cd0b638fafbb2303ae580d49cf1600b9059efb85
- languageName: node
- linkType: hard
-
"amdefine@npm:>=0.0.4":
version: 1.0.1
resolution: "amdefine@npm:1.0.1"
@@ -12220,7 +12178,7 @@ __metadata:
languageName: node
linkType: hard
-"argparse@npm:^1.0.7, argparse@npm:~1.0.9":
+"argparse@npm:^1.0.7":
version: 1.0.10
resolution: "argparse@npm:1.0.10"
dependencies:
@@ -14682,13 +14640,6 @@ __metadata:
languageName: node
linkType: hard
-"compare-versions@npm:^6.1.1":
- version: 6.1.1
- resolution: "compare-versions@npm:6.1.1"
- checksum: 10/9325c0fadfba81afa0ec17e6fc2ef823ba785c693089698b8d9374e5460509f1916a88591644d4cb4045c9a58e47fafbcc0724fe8bf446d2a875a3d6eeddf165
- languageName: node
- linkType: hard
-
"compressible@npm:~2.0.16":
version: 2.0.18
resolution: "compressible@npm:2.0.18"
@@ -14720,13 +14671,6 @@ __metadata:
languageName: node
linkType: hard
-"computeds@npm:^0.0.1":
- version: 0.0.1
- resolution: "computeds@npm:0.0.1"
- checksum: 10/738625ccec6e483124d0ac79ec5474ab5c9df103ea05afc1fd840eed7d9004e3d6009b7bc806df564d66ad915c1ee1fb017bd91b2b32606a252ea9870b6a4026
- languageName: node
- linkType: hard
-
"concat-map@npm:0.0.1":
version: 0.0.1
resolution: "concat-map@npm:0.0.1"
@@ -15877,7 +15821,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.1, debug@npm:~4.3.2":
+"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.1, debug@npm:~4.3.2":
version: 4.3.7
resolution: "debug@npm:4.3.7"
dependencies:
@@ -16697,6 +16641,18 @@ __metadata:
languageName: node
linkType: hard
+"eciesjs@npm:^0.4.11":
+ version: 0.4.12
+ resolution: "eciesjs@npm:0.4.12"
+ dependencies:
+ "@ecies/ciphers": "npm:^0.2.1"
+ "@noble/ciphers": "npm:^1.0.0"
+ "@noble/curves": "npm:^1.6.0"
+ "@noble/hashes": "npm:^1.5.0"
+ checksum: 10/accd336faa862c3e4c6fd90a07f8632a0b5a3231f0cf15c10b62ce56073851323055e84bf89cddabf6317a0c2a5c4837d2919b661904699f7f10a15aa1189d0c
+ languageName: node
+ linkType: hard
+
"eciesjs@npm:^0.4.8":
version: 0.4.10
resolution: "eciesjs@npm:0.4.10"
@@ -16904,7 +16860,7 @@ __metadata:
languageName: node
linkType: hard
-"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0":
+"entities@npm:^4.2.0, entities@npm:^4.4.0":
version: 4.5.0
resolution: "entities@npm:4.5.0"
checksum: 10/ede2a35c9bce1aeccd055a1b445d41c75a14a2bb1cd22e242f20cf04d236cdcd7f9c859eb83f76885327bfae0c25bf03303665ee1ce3d47c5927b98b0e3e3d48
@@ -18218,7 +18174,7 @@ __metadata:
languageName: node
linkType: hard
-"eventemitter2@npm:^6.4.7":
+"eventemitter2@npm:^6.4.7, eventemitter2@npm:^6.4.9":
version: 6.4.9
resolution: "eventemitter2@npm:6.4.9"
checksum: 10/b829b1c6b11e15926b635092b5ad62b4463d1c928859831dcae606e988cf41893059e3541f5a8209d21d2f15314422ddd4d84d20830b4bf44978608d15b06b08
@@ -19104,7 +19060,7 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1, fs-extra@npm:~7.0.1":
+"fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1":
version: 7.0.1
resolution: "fs-extra@npm:7.0.1"
dependencies:
@@ -21017,13 +20973,6 @@ __metadata:
languageName: node
linkType: hard
-"import-lazy@npm:~4.0.0":
- version: 4.0.0
- resolution: "import-lazy@npm:4.0.0"
- checksum: 10/943309cc8eb01ada12700448c288b0384f77a1bc33c7e00fa4cb223c665f467a13ce9aaceb8d2e4cf586b07c1d2828040263dcc069873ce63cfc2ac6fd087971
- languageName: node
- linkType: hard
-
"import-local@npm:^3.0.2":
version: 3.1.0
resolution: "import-local@npm:3.1.0"
@@ -23149,13 +23098,6 @@ __metadata:
languageName: node
linkType: hard
-"jju@npm:~1.4.0":
- version: 1.4.0
- resolution: "jju@npm:1.4.0"
- checksum: 10/1067ff8ce02221faac5a842116ed0ec79a53312a111d0bf8342a80bd02c0a3fdf0b8449694a65947db0a3e8420e8b326dffb489c7dd5866efc380c0d1708a707
- languageName: node
- linkType: hard
-
"jmespath@npm:^0.16.0":
version: 0.16.0
resolution: "jmespath@npm:0.16.0"
@@ -23656,13 +23598,6 @@ __metadata:
languageName: node
linkType: hard
-"kolorist@npm:^1.8.0":
- version: 1.8.0
- resolution: "kolorist@npm:1.8.0"
- checksum: 10/71d5d122951cc65f2f14c3e1d7f8fd91694b374647d4f6deec3816d018cd04a44edd9578d93e00c82c2053b925e5d30a0565746c4171f4ca9fce1a13bd5f3315
- languageName: node
- linkType: hard
-
"kubo-rpc-client@npm:^3.0.1":
version: 3.0.1
resolution: "kubo-rpc-client@npm:3.0.1"
@@ -24317,7 +24252,7 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15":
+"lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0, lodash@npm:~4.17.0":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532
@@ -24536,7 +24471,7 @@ __metadata:
languageName: node
linkType: hard
-"magic-string@npm:^0.30.11, magic-string@npm:^0.30.3, magic-string@npm:^0.30.4, magic-string@npm:^0.30.5":
+"magic-string@npm:^0.30.3, magic-string@npm:^0.30.4, magic-string@npm:^0.30.5":
version: 0.30.13
resolution: "magic-string@npm:0.30.13"
dependencies:
@@ -25656,7 +25591,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^9.0.3, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5":
+"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5":
version: 9.0.5
resolution: "minimatch@npm:9.0.5"
dependencies:
@@ -25665,15 +25600,6 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:~3.0.3":
- version: 3.0.8
- resolution: "minimatch@npm:3.0.8"
- dependencies:
- brace-expansion: "npm:^1.1.7"
- checksum: 10/6df5373cb1ea79020beb6887ff5576c58cfabcfd32c5a65c2cf58f326e4ee8eae84f129e5fa50b8a4347fa1d1e583f931285c9fb3040d984bdfb5109ef6607ec
- languageName: node
- linkType: hard
-
"minimist-options@npm:4.1.0":
version: 4.1.0
resolution: "minimist-options@npm:4.1.0"
@@ -25951,13 +25877,6 @@ __metadata:
languageName: node
linkType: hard
-"muggle-string@npm:^0.4.1":
- version: 0.4.1
- resolution: "muggle-string@npm:0.4.1"
- checksum: 10/8fa2ea08f497c04069718bd3fd1909b382114dacbad832d10967ca72690de43f5f8492d8ccfbf827d6be63868ed5fc10395e7b7c082aa95997eea498586c6620
- languageName: node
- linkType: hard
-
"multiaddr-to-uri@npm:^8.0.0":
version: 8.0.0
resolution: "multiaddr-to-uri@npm:8.0.0"
@@ -30431,7 +30350,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4, resolve@npm:~1.22.1, resolve@npm:~1.22.2":
+"resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4":
version: 1.22.8
resolution: "resolve@npm:1.22.8"
dependencies:
@@ -30473,7 +30392,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin, resolve@patch:resolve@npm%3A~1.22.2#optional!builtin":
+"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin":
version: 1.22.8
resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"
dependencies:
@@ -31122,7 +31041,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:7.5.4, semver@npm:~7.5.4":
+"semver@npm:7.5.4":
version: 7.5.4
resolution: "semver@npm:7.5.4"
dependencies:
@@ -32209,7 +32128,7 @@ __metadata:
languageName: node
linkType: hard
-"string-argv@npm:0.3.2, string-argv@npm:~0.3.1":
+"string-argv@npm:0.3.2":
version: 0.3.2
resolution: "string-argv@npm:0.3.2"
checksum: 10/f9d3addf887026b4b5f997a271149e93bf71efc8692e7dc0816e8807f960b18bcb9787b45beedf0f97ff459575ee389af3f189d8b649834cac602f2e857e75af
@@ -32519,7 +32438,7 @@ __metadata:
languageName: node
linkType: hard
-"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1":
+"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
checksum: 10/492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
@@ -32726,7 +32645,7 @@ __metadata:
languageName: node
linkType: hard
-"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1, supports-color@npm:~8.1.1":
+"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1":
version: 8.1.1
resolution: "supports-color@npm:8.1.1"
dependencies:
@@ -33641,7 +33560,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.2, tslib@npm:^2.6.3":
+"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2, tslib@npm:^2.6.3":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: 10/3e2e043d5c2316461cb54e5c7fe02c30ef6dccb3384717ca22ae5c6b5bc95232a6241df19c622d9c73b809bea33b187f6dbc73030963e29950c2141bc32a79f7
@@ -33898,16 +33817,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@npm:5.4.2":
- version: 5.4.2
- resolution: "typescript@npm:5.4.2"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10/f8cfdc630ab1672f004e9561eb2916935b2d267792d07ce93e97fc601c7a65191af32033d5e9c0169b7dc37da7db9bf320f7432bc84527cb7697effaa4e4559d
- languageName: node
- linkType: hard
-
"typescript@npm:^4.6.4 || ^5.2.2, typescript@npm:^5.6.3":
version: 5.6.3
resolution: "typescript@npm:5.6.3"
@@ -33918,16 +33827,6 @@ __metadata:
languageName: node
linkType: hard
-"typescript@patch:typescript@npm%3A5.4.2#optional!builtin":
- version: 5.4.2
- resolution: "typescript@patch:typescript@npm%3A5.4.2#optional!builtin::version=5.4.2&hash=5adc0c"
- bin:
- tsc: bin/tsc
- tsserver: bin/tsserver
- checksum: 10/f5f9a4133c2670761f0166eae5b3bafbc4a3fc24f0f42a93c9c893d9e9d6e66ea066969c5e7483fa66b4ae0e99125592553f3b92fd3599484de8be13b0615176
- languageName: node
- linkType: hard
-
"typescript@patch:typescript@npm%3A^4.6.4 || ^5.2.2#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin":
version: 5.6.3
resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40"
@@ -34859,6 +34758,28 @@ __metadata:
languageName: node
linkType: hard
+"viem@npm:^2.21.54":
+ version: 2.21.54
+ resolution: "viem@npm:2.21.54"
+ dependencies:
+ "@noble/curves": "npm:1.7.0"
+ "@noble/hashes": "npm:1.6.1"
+ "@scure/bip32": "npm:1.6.0"
+ "@scure/bip39": "npm:1.5.0"
+ abitype: "npm:1.0.7"
+ isows: "npm:1.0.6"
+ ox: "npm:0.1.2"
+ webauthn-p256: "npm:0.0.10"
+ ws: "npm:8.18.0"
+ peerDependencies:
+ typescript: ">=5.0.4"
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 10/e4f88834253ef4e99e8075a58d5b96789e4ce5550e31cec42ed84550d93cb0dcc489aa4bcf74f2af9bca955ec9d15ce242e2e862a0d896913ff9521a0e5d3732
+ languageName: node
+ linkType: hard
+
"vite-node@npm:1.6.0":
version: 1.6.0
resolution: "vite-node@npm:1.6.0"
@@ -34874,29 +34795,6 @@ __metadata:
languageName: node
linkType: hard
-"vite-plugin-dts@npm:^4.3.0":
- version: 4.3.0
- resolution: "vite-plugin-dts@npm:4.3.0"
- dependencies:
- "@microsoft/api-extractor": "npm:^7.47.11"
- "@rollup/pluginutils": "npm:^5.1.0"
- "@volar/typescript": "npm:^2.4.4"
- "@vue/language-core": "npm:2.1.6"
- compare-versions: "npm:^6.1.1"
- debug: "npm:^4.3.6"
- kolorist: "npm:^1.8.0"
- local-pkg: "npm:^0.5.0"
- magic-string: "npm:^0.30.11"
- peerDependencies:
- typescript: "*"
- vite: "*"
- peerDependenciesMeta:
- vite:
- optional: true
- checksum: 10/bbf59fb9d4ab9420f3fd2be2090439a072c4a57194cf6ee987ae990d1d95e2d9b16fae1a7c26578705d6a396a81eb6346ec522216e1f7cfc4f4d891fc29bd839
- languageName: node
- linkType: hard
-
"vite-plugin-node-polyfills@npm:^0.21.0":
version: 0.21.0
resolution: "vite-plugin-node-polyfills@npm:0.21.0"
@@ -34909,18 +34807,6 @@ __metadata:
languageName: node
linkType: hard
-"vite-plugin-node-polyfills@npm:^0.22.0":
- version: 0.22.0
- resolution: "vite-plugin-node-polyfills@npm:0.22.0"
- dependencies:
- "@rollup/plugin-inject": "npm:^5.0.5"
- node-stdlib-browser: "npm:^1.2.0"
- peerDependencies:
- vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
- checksum: 10/004a68987d271c04e1a7b9df38f8fca32b1e4a261b464f69895af5ea90e40cbb31e18170435613cb9f2edc735589267ff51772c8793f6f567ba2849da8d36ec4
- languageName: node
- linkType: hard
-
"vite-plugin-svgr@npm:^4.3.0":
version: 4.3.0
resolution: "vite-plugin-svgr@npm:4.3.0"
@@ -35057,13 +34943,6 @@ __metadata:
languageName: node
linkType: hard
-"vscode-uri@npm:^3.0.8":
- version: 3.0.8
- resolution: "vscode-uri@npm:3.0.8"
- checksum: 10/e882d6b679e0d053cbc042893c0951a135d899a192b62cd07f0a8924f11ae722067a8d6b1b5b147034becf57faf9fff9fb543b17b749fd0f17db1f54f783f07c
- languageName: node
- linkType: hard
-
"vue-hot-reload-api@npm:^2.3.0":
version: 2.3.4
resolution: "vue-hot-reload-api@npm:2.3.4"
@@ -35206,6 +35085,25 @@ __metadata:
languageName: node
linkType: hard
+"wagmi@npm:^2.13.5":
+ version: 2.13.5
+ resolution: "wagmi@npm:2.13.5"
+ dependencies:
+ "@wagmi/connectors": "npm:5.5.3"
+ "@wagmi/core": "npm:2.15.2"
+ use-sync-external-store: "npm:1.2.0"
+ peerDependencies:
+ "@tanstack/react-query": ">=5.0.0"
+ react: ">=18"
+ typescript: ">=5.0.4"
+ viem: 2.x
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 10/e37a79d8413abbebc10935956a8ec6696f02894501b235ec580e8855735fe04fd392ada964616aff0bbbc30190d5cb1f5319a70b99000f6061a05a78f458edbb
+ languageName: node
+ linkType: hard
+
"walker@npm:^1.0.7":
version: 1.0.8
resolution: "walker@npm:1.0.8"