diff --git a/package.json b/package.json
index f56f26b..9ea450c 100644
--- a/package.json
+++ b/package.json
@@ -38,6 +38,10 @@
},
"packageManager": "yarn@3.2.3",
"dependencies": {
+ "@nextui-org/modal": "^2.0.28",
+ "@uniswap/sdk-core": "^4.0.10",
+ "@uniswap/smart-order-router": "^3.21.1",
+ "@uniswap/v3-sdk": "^3.10.2",
"@uniswap/widgets": "^2.59.0",
"vercel": "^33.4.1"
}
diff --git a/packages/nextjs/components/index/abis/uniabis.ts b/packages/nextjs/components/index/abis/uniabis.ts
new file mode 100644
index 0000000..92968d7
--- /dev/null
+++ b/packages/nextjs/components/index/abis/uniabis.ts
@@ -0,0 +1,538 @@
+export const quoterABI = [
+ {
+ inputs: [
+ { internalType: "address", name: "_factory", type: "address" },
+ { internalType: "address", name: "_WETH9", type: "address" },
+ ],
+ stateMutability: "nonpayable",
+ type: "constructor",
+ },
+ {
+ inputs: [],
+ name: "WETH9",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "factory",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes", name: "path", type: "bytes" },
+ { internalType: "uint256", name: "amountIn", type: "uint256" },
+ ],
+ name: "quoteExactInput",
+ outputs: [{ internalType: "uint256", name: "amountOut", type: "uint256" }],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "tokenIn", type: "address" },
+ { internalType: "address", name: "tokenOut", type: "address" },
+ { internalType: "uint24", name: "fee", type: "uint24" },
+ { internalType: "uint256", name: "amountIn", type: "uint256" },
+ { internalType: "uint160", name: "sqrtPriceLimitX96", type: "uint160" },
+ ],
+ name: "quoteExactInputSingle",
+ outputs: [{ internalType: "uint256", name: "amountOut", type: "uint256" }],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes", name: "path", type: "bytes" },
+ { internalType: "uint256", name: "amountOut", type: "uint256" },
+ ],
+ name: "quoteExactOutput",
+ outputs: [{ internalType: "uint256", name: "amountIn", type: "uint256" }],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "tokenIn", type: "address" },
+ { internalType: "address", name: "tokenOut", type: "address" },
+ { internalType: "uint24", name: "fee", type: "uint24" },
+ { internalType: "uint256", name: "amountOut", type: "uint256" },
+ { internalType: "uint160", name: "sqrtPriceLimitX96", type: "uint160" },
+ ],
+ name: "quoteExactOutputSingle",
+ outputs: [{ internalType: "uint256", name: "amountIn", type: "uint256" }],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "int256", name: "amount0Delta", type: "int256" },
+ { internalType: "int256", name: "amount1Delta", type: "int256" },
+ { internalType: "bytes", name: "path", type: "bytes" },
+ ],
+ name: "uniswapV3SwapCallback",
+ outputs: [],
+ stateMutability: "view",
+ type: "function",
+ },
+];
+
+export const swapRouterABI = [
+ {
+ inputs: [
+ { internalType: "address", name: "_factoryV2", type: "address" },
+ { internalType: "address", name: "factoryV3", type: "address" },
+ { internalType: "address", name: "_positionManager", type: "address" },
+ { internalType: "address", name: "_WETH9", type: "address" },
+ ],
+ stateMutability: "nonpayable",
+ type: "constructor",
+ },
+ {
+ inputs: [],
+ name: "WETH9",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "address", name: "token", type: "address" }],
+ name: "approveMax",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "address", name: "token", type: "address" }],
+ name: "approveMaxMinusOne",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "address", name: "token", type: "address" }],
+ name: "approveZeroThenMax",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "address", name: "token", type: "address" }],
+ name: "approveZeroThenMaxMinusOne",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes", name: "data", type: "bytes" }],
+ name: "callPositionManager",
+ outputs: [{ internalType: "bytes", name: "result", type: "bytes" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes[]", name: "paths", type: "bytes[]" },
+ { internalType: "uint128[]", name: "amounts", type: "uint128[]" },
+ { internalType: "uint24", name: "maximumTickDivergence", type: "uint24" },
+ { internalType: "uint32", name: "secondsAgo", type: "uint32" },
+ ],
+ name: "checkOracleSlippage",
+ outputs: [],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes", name: "path", type: "bytes" },
+ { internalType: "uint24", name: "maximumTickDivergence", type: "uint24" },
+ { internalType: "uint32", name: "secondsAgo", type: "uint32" },
+ ],
+ name: "checkOracleSlippage",
+ outputs: [],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: "bytes", name: "path", type: "bytes" },
+ { internalType: "address", name: "recipient", type: "address" },
+ { internalType: "uint256", name: "amountIn", type: "uint256" },
+ { internalType: "uint256", name: "amountOutMinimum", type: "uint256" },
+ ],
+ internalType: "struct IV3SwapRouter.ExactInputParams",
+ name: "params",
+ type: "tuple",
+ },
+ ],
+ name: "exactInput",
+ outputs: [{ internalType: "uint256", name: "amountOut", type: "uint256" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: "address", name: "tokenIn", type: "address" },
+ { internalType: "address", name: "tokenOut", type: "address" },
+ { internalType: "uint24", name: "fee", type: "uint24" },
+ { internalType: "address", name: "recipient", type: "address" },
+ { internalType: "uint256", name: "amountIn", type: "uint256" },
+ { internalType: "uint256", name: "amountOutMinimum", type: "uint256" },
+ { internalType: "uint160", name: "sqrtPriceLimitX96", type: "uint160" },
+ ],
+ internalType: "struct IV3SwapRouter.ExactInputSingleParams",
+ name: "params",
+ type: "tuple",
+ },
+ ],
+ name: "exactInputSingle",
+ outputs: [{ internalType: "uint256", name: "amountOut", type: "uint256" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: "bytes", name: "path", type: "bytes" },
+ { internalType: "address", name: "recipient", type: "address" },
+ { internalType: "uint256", name: "amountOut", type: "uint256" },
+ { internalType: "uint256", name: "amountInMaximum", type: "uint256" },
+ ],
+ internalType: "struct IV3SwapRouter.ExactOutputParams",
+ name: "params",
+ type: "tuple",
+ },
+ ],
+ name: "exactOutput",
+ outputs: [{ internalType: "uint256", name: "amountIn", type: "uint256" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: "address", name: "tokenIn", type: "address" },
+ { internalType: "address", name: "tokenOut", type: "address" },
+ { internalType: "uint24", name: "fee", type: "uint24" },
+ { internalType: "address", name: "recipient", type: "address" },
+ { internalType: "uint256", name: "amountOut", type: "uint256" },
+ { internalType: "uint256", name: "amountInMaximum", type: "uint256" },
+ { internalType: "uint160", name: "sqrtPriceLimitX96", type: "uint160" },
+ ],
+ internalType: "struct IV3SwapRouter.ExactOutputSingleParams",
+ name: "params",
+ type: "tuple",
+ },
+ ],
+ name: "exactOutputSingle",
+ outputs: [{ internalType: "uint256", name: "amountIn", type: "uint256" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "factory",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "factoryV2",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "amount", type: "uint256" },
+ ],
+ name: "getApprovalType",
+ outputs: [{ internalType: "enum IApproveAndCall.ApprovalType", name: "", type: "uint8" }],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: "address", name: "token0", type: "address" },
+ { internalType: "address", name: "token1", type: "address" },
+ { internalType: "uint256", name: "tokenId", type: "uint256" },
+ { internalType: "uint256", name: "amount0Min", type: "uint256" },
+ { internalType: "uint256", name: "amount1Min", type: "uint256" },
+ ],
+ internalType: "struct IApproveAndCall.IncreaseLiquidityParams",
+ name: "params",
+ type: "tuple",
+ },
+ ],
+ name: "increaseLiquidity",
+ outputs: [{ internalType: "bytes", name: "result", type: "bytes" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: "address", name: "token0", type: "address" },
+ { internalType: "address", name: "token1", type: "address" },
+ { internalType: "uint24", name: "fee", type: "uint24" },
+ { internalType: "int24", name: "tickLower", type: "int24" },
+ { internalType: "int24", name: "tickUpper", type: "int24" },
+ { internalType: "uint256", name: "amount0Min", type: "uint256" },
+ { internalType: "uint256", name: "amount1Min", type: "uint256" },
+ { internalType: "address", name: "recipient", type: "address" },
+ ],
+ internalType: "struct IApproveAndCall.MintParams",
+ name: "params",
+ type: "tuple",
+ },
+ ],
+ name: "mint",
+ outputs: [{ internalType: "bytes", name: "result", type: "bytes" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "bytes32", name: "previousBlockhash", type: "bytes32" },
+ { internalType: "bytes[]", name: "data", type: "bytes[]" },
+ ],
+ name: "multicall",
+ outputs: [{ internalType: "bytes[]", name: "", type: "bytes[]" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "deadline", type: "uint256" },
+ { internalType: "bytes[]", name: "data", type: "bytes[]" },
+ ],
+ name: "multicall",
+ outputs: [{ internalType: "bytes[]", name: "", type: "bytes[]" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "bytes[]", name: "data", type: "bytes[]" }],
+ name: "multicall",
+ outputs: [{ internalType: "bytes[]", name: "results", type: "bytes[]" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [],
+ name: "positionManager",
+ outputs: [{ internalType: "address", name: "", type: "address" }],
+ stateMutability: "view",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "value", type: "uint256" },
+ ],
+ name: "pull",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ { inputs: [], name: "refundETH", outputs: [], stateMutability: "payable", type: "function" },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "value", type: "uint256" },
+ { internalType: "uint256", name: "deadline", type: "uint256" },
+ { internalType: "uint8", name: "v", type: "uint8" },
+ { internalType: "bytes32", name: "r", type: "bytes32" },
+ { internalType: "bytes32", name: "s", type: "bytes32" },
+ ],
+ name: "selfPermit",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "nonce", type: "uint256" },
+ { internalType: "uint256", name: "expiry", type: "uint256" },
+ { internalType: "uint8", name: "v", type: "uint8" },
+ { internalType: "bytes32", name: "r", type: "bytes32" },
+ { internalType: "bytes32", name: "s", type: "bytes32" },
+ ],
+ name: "selfPermitAllowed",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "nonce", type: "uint256" },
+ { internalType: "uint256", name: "expiry", type: "uint256" },
+ { internalType: "uint8", name: "v", type: "uint8" },
+ { internalType: "bytes32", name: "r", type: "bytes32" },
+ { internalType: "bytes32", name: "s", type: "bytes32" },
+ ],
+ name: "selfPermitAllowedIfNecessary",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "value", type: "uint256" },
+ { internalType: "uint256", name: "deadline", type: "uint256" },
+ { internalType: "uint8", name: "v", type: "uint8" },
+ { internalType: "bytes32", name: "r", type: "bytes32" },
+ { internalType: "bytes32", name: "s", type: "bytes32" },
+ ],
+ name: "selfPermitIfNecessary",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "amountIn", type: "uint256" },
+ { internalType: "uint256", name: "amountOutMin", type: "uint256" },
+ { internalType: "address[]", name: "path", type: "address[]" },
+ { internalType: "address", name: "to", type: "address" },
+ ],
+ name: "swapExactTokensForTokens",
+ outputs: [{ internalType: "uint256", name: "amountOut", type: "uint256" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "amountOut", type: "uint256" },
+ { internalType: "uint256", name: "amountInMax", type: "uint256" },
+ { internalType: "address[]", name: "path", type: "address[]" },
+ { internalType: "address", name: "to", type: "address" },
+ ],
+ name: "swapTokensForExactTokens",
+ outputs: [{ internalType: "uint256", name: "amountIn", type: "uint256" }],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ { internalType: "address", name: "recipient", type: "address" },
+ ],
+ name: "sweepToken",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ ],
+ name: "sweepToken",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ { internalType: "uint256", name: "feeBips", type: "uint256" },
+ { internalType: "address", name: "feeRecipient", type: "address" },
+ ],
+ name: "sweepTokenWithFee",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "address", name: "token", type: "address" },
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ { internalType: "address", name: "recipient", type: "address" },
+ { internalType: "uint256", name: "feeBips", type: "uint256" },
+ { internalType: "address", name: "feeRecipient", type: "address" },
+ ],
+ name: "sweepTokenWithFee",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "int256", name: "amount0Delta", type: "int256" },
+ { internalType: "int256", name: "amount1Delta", type: "int256" },
+ { internalType: "bytes", name: "_data", type: "bytes" },
+ ],
+ name: "uniswapV3SwapCallback",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ { internalType: "address", name: "recipient", type: "address" },
+ ],
+ name: "unwrapWETH9",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "amountMinimum", type: "uint256" }],
+ name: "unwrapWETH9",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ { internalType: "address", name: "recipient", type: "address" },
+ { internalType: "uint256", name: "feeBips", type: "uint256" },
+ { internalType: "address", name: "feeRecipient", type: "address" },
+ ],
+ name: "unwrapWETH9WithFee",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ { internalType: "uint256", name: "amountMinimum", type: "uint256" },
+ { internalType: "uint256", name: "feeBips", type: "uint256" },
+ { internalType: "address", name: "feeRecipient", type: "address" },
+ ],
+ name: "unwrapWETH9WithFee",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [{ internalType: "uint256", name: "value", type: "uint256" }],
+ name: "wrapETH",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ },
+ { stateMutability: "payable", type: "receive" },
+];
diff --git a/packages/nextjs/components/index/benefits.js b/packages/nextjs/components/index/benefits.js
index 209f71b..bb7e498 100644
--- a/packages/nextjs/components/index/benefits.js
+++ b/packages/nextjs/components/index/benefits.js
@@ -13,7 +13,7 @@ const Benefits = props => {
{
-
Ready to try-out this template?
+
Listo para unirte a la aventura?
- Don't let your visitors see a poor landing.
+ No dejes pasar la oportunidad de aportar!
@@ -18,7 +18,7 @@ const Cta = () => {
rel="noopener noreferrer" // Fix: Added 'noreferrer' attribute
className="inline-block py-3 mx-auto text-lg font-medium text-center text-indigo-600 bg-white rounded-md px-7 lg:px-10 lg:py-5 "
>
- Download for Free
+ Mintea tu NFT de membresía
diff --git a/packages/nextjs/components/index/data.js b/packages/nextjs/components/index/data.js
index 8d553e6..df64287 100644
--- a/packages/nextjs/components/index/data.js
+++ b/packages/nextjs/components/index/data.js
@@ -11,46 +11,46 @@ import benefitOneImg from "../../public/benefit-one.png";
import benefitTwoImg from "../../public/benefit-two.png";
const benefitOne = {
- title: "Highlight your benefits",
- desc: "You can use this space to highlight your first benefit or a feature of your product. It can also contain an image or Illustration like in the example along with some bullet points.",
+ title: "El primer peso MXN decentralizado",
+ desc: "Por medio de contratos inteligentes, $XOC se convierte en una peso MXN digital sin intermediarios de por medio, lo que significa que no está controlada por ningún gobierno o banco central. Esto permite a los usuarios enviar y recibir dinero de forma rápida y segura, sin importar dónde se encuentren.",
image: benefitOneImg,
bullets: [
{
- title: "Understand your customers",
- desc: "Then explain the first point breifly in one or two lines.",
+ title: "Tu moneda es codigo en el internet",
+ desc: "Es la siguiente evolución del dinero en linea.",
icon: ,
},
{
- title: "Improve acquisition",
- desc: "Here you can add the next benefit point.",
+ title: "Transacciones rápidas y seguras",
+ desc: "Estamos en las redes de Polygon, Gnosis Chain y Optimism.",
icon: ,
},
{
- title: "Drive customer retention",
- desc: "This will be your last bullet point in this section.",
+ title: "Sin intermediarios de por medio",
+ desc: "No está controlada por ningún gobierno o banco central.",
icon: ,
},
],
};
const benefitTwo = {
- title: "Offer more benefits here",
- desc: "You can use this same layout with a flip image to highlight your rest of the benefits of your product. It can also contain an image or Illustration as above section along with some bullet points.",
+ title: "Construida por La DAO",
+ desc: "Todo surge desde una comunidad de personas que buscan construir un sistema financiero abierto y descentralizado. La DAO es una organización autónoma descentralizada que se encarga de gestionar todo el trabajo requerido para construir en DeFi.",
image: benefitTwoImg,
bullets: [
{
- title: "Mobile Responsive Template",
- desc: "Nextly is designed as a mobile first responsive template.",
+ title: "Construimos usando herramientas Web3",
+ desc: "OpenZeppelin, Scaffold-Eth-2, DaoHaus, Safe y muchas mas...",
icon: ,
},
{
- title: "Powered by Next.js & TailwindCSS",
- desc: "This template is powered by latest technologies and tools.",
+ title: "Una nueva democracia financiera",
+ desc: "Todo el trabajo esta direccionado a construir una nueva forma mas justa de hacer finanzas.",
icon: ,
},
{
- title: "Dark & Light Mode",
- desc: "Nextly comes with a zero-config light & dark mode. ",
+ title: "Encuentra un mentor, o se el que nunca tuviste",
+ desc: "Nos encanta onboardear mas y mas gente dispuesta a contribuir.",
icon: ,
},
],
diff --git a/packages/nextjs/components/index/hero.js b/packages/nextjs/components/index/hero.tsx
similarity index 85%
rename from packages/nextjs/components/index/hero.js
rename to packages/nextjs/components/index/hero.tsx
index 904b552..dada92c 100644
--- a/packages/nextjs/components/index/hero.js
+++ b/packages/nextjs/components/index/hero.tsx
@@ -1,11 +1,64 @@
import Image from "next/image";
-import heroImg from "../../public/hero.png";
+import heroImg from "../../public/hero-1.png";
import Container from "./container";
+import { useAccount } from "wagmi";
+import { useContractWrite } from "wagmi";
+import { swapRouterABI } from "~~/components/index/abis/uniabis";
+
+enum FEE_BIPS {
+ ONE = 100,
+ FIVE = 500,
+ THIRTY = 3000,
+ HUNDRED = 10000,
+}
+
+/**
+ * @param path array of token addresses
+ * @param fees array from FEE_BIPS enum
+ * @returns hexbytes string `encodePacked` per solidity
+ */
+export function encodePath(path: string[], fees: FEE_BIPS[]) {
+ if (path.length != fees.length + 1) {
+ throw new Error("path/fee lengths do not match");
+ }
+ const hexStringFees = fees.map(fee => toUint24HexPadded(fee));
+ let encoded = "0x";
+ for (let i = 0; i < fees.length; i++) {
+ encoded += String(path[i]).slice(2);
+ encoded += hexStringFees[i];
+ }
+ // encode the path token
+ encoded += path[path.length - 1].slice(2);
+ return encoded.toLowerCase();
+}
+
+function toUint24HexPadded(num: number) {
+ const hex = num.toString(16);
+ return hex.padStart(6, "0");
+}
const Hero = () => {
+ const path = encodePath(
+ [
+ "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
+ "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
+ "0xa411c9Aa00E020e4f88Bc19996d29c5B7ADB4ACf",
+ ],
+ [FEE_BIPS.FIVE, FEE_BIPS.FIVE],
+ );
+
+ const address = useAccount();
+
+ const { write: executeTrade } = useContractWrite({
+ address: "0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45",
+ abi: swapRouterABI,
+ functionName: "exactOutput",
+ args: [path, address, 100000000000000000000, 1000000000000000000, 0],
+ });
+
return (
<>
-
+
@@ -31,16 +84,29 @@ const Hero = () => {
@@ -66,8 +132,8 @@ const Hero = () => {
{
- Trusted by 2000+ customers worldwide
+
+ Mas de 1 millon de mexicanos ya usan $XOC en sus empresas
+
diff --git a/packages/nextjs/components/index/popupWidget.js b/packages/nextjs/components/index/popupWidget.js
deleted file mode 100644
index ebbe967..0000000
--- a/packages/nextjs/components/index/popupWidget.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import React, { useState } from "react";
-import { useForm, useWatch } from "react-hook-form";
-
-const PopupWidget = () => {
- const {
- register,
- handleSubmit,
- reset,
- control,
- formState: { errors, isSubmitSuccessful, isSubmitting },
- } = useForm({
- mode: "onTouched",
- });
- const [isSuccess, setIsSuccess] = useState(false);
- const [Message, setMessage] = useState("");
-
- const userName = useWatch({ control, name: "name", defaultValue: "Someone" });
-
- const onSubmit = async (data, e) => {
- console.log(data);
- await fetch("https://api.web3forms.com/submit", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Accept: "application/json",
- },
- body: JSON.stringify(data, null, 2),
- })
- .then(async response => {
- let json = await response.json();
- if (json.success) {
- setIsSuccess(true);
- setMessage(json.message);
- e.target.reset();
- reset();
- } else {
- setIsSuccess(false);
- setMessage(json.message);
- }
- })
- .catch(error => {
- setIsSuccess(false);
- setMessage("Client Error. Please check the console.log for more info");
- console.log(error);
- });
- };
-
- return (
-
-
-
setIsOpen(!isOpen)}>
- Open Contact form Widget
- {isOpen ? (
-
-
-
-
- ) : (
-
-
-
- )}
-
-
-
-
How can we help?
-
We usually respond in a few hours
-
-
- {!isSubmitSuccessful && (
-
- )}
-
- {/* ... (success and error messages) */}
-
-
-
-
- );
-};
-
-export default PopupWidget;
\ No newline at end of file
diff --git a/packages/nextjs/components/index/protocolNumbers.tsx b/packages/nextjs/components/index/protocolNumbers.tsx
new file mode 100644
index 0000000..8426bf4
--- /dev/null
+++ b/packages/nextjs/components/index/protocolNumbers.tsx
@@ -0,0 +1,74 @@
+import React from "react";
+import { quoterABI } from "./abis/uniabis";
+import { formatEther } from "viem";
+import { useContractRead } from "wagmi";
+
+enum FEE_BIPS {
+ ONE = 100,
+ FIVE = 500,
+ THIRTY = 3000,
+ HUNDRED = 10000,
+}
+
+/**
+ * @param path array of token addresses
+ * @param fees array from FEE_BIPS enum
+ * @returns hexbytes string `encodePacked` per solidity
+ */
+export function encodePath(path: string[], fees: FEE_BIPS[]) {
+ if (path.length != fees.length + 1) {
+ throw new Error("path/fee lengths do not match");
+ }
+ const hexStringFees = fees.map(fee => toUint24HexPadded(fee));
+ let encoded = "0x";
+ for (let i = 0; i < fees.length; i++) {
+ encoded += String(path[i]).slice(2);
+ encoded += hexStringFees[i];
+ }
+ // encode the path token
+ encoded += path[path.length - 1].slice(2);
+ return encoded.toLowerCase();
+}
+
+function toUint24HexPadded(num: number) {
+ const hex = num.toString(16);
+ return hex.padStart(6, "0");
+}
+
+const ProtocolNumbers = () => {
+ const path = encodePath(
+ [
+ "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
+ "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
+ "0xa411c9Aa00E020e4f88Bc19996d29c5B7ADB4ACf",
+ ],
+ [FEE_BIPS.FIVE, FEE_BIPS.FIVE],
+ );
+
+ const { data: quotedAmountOut } = useContractRead({
+ address: "0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6",
+ abi: quoterABI,
+ functionName: "quoteExactInput",
+ args: [path, BigInt(1e18).toString()],
+ });
+
+ return (
+ <>
+
+
+
Precio de 1 Ether
+
+ {quotedAmountOut
+ ? new Intl.NumberFormat("es-MX", { style: "currency", currency: "MXN" }).format(
+ parseFloat(formatEther(BigInt(quotedAmountOut.toString()))),
+ )
+ : "MXN0.00"}
+
+
En $XOC Mexicanos
+
+
+ >
+ );
+};
+
+export default ProtocolNumbers;
diff --git a/packages/nextjs/components/xoc-dapp/Dashboard.tsx b/packages/nextjs/components/xoc-dapp/Dashboard.tsx
index 555b517..81df5a6 100644
--- a/packages/nextjs/components/xoc-dapp/Dashboard.tsx
+++ b/packages/nextjs/components/xoc-dapp/Dashboard.tsx
@@ -3,6 +3,7 @@ import { useState } from "react";
import AmountInput from "./AmountInput";
import CollateralInfo from "./CollateralInfo";
import PillNavigation from "./PillNavigation";
+import Swap from "./Swap";
import { houseOfCoinABI, houseOfReserveABI } from "./abis/xocabis";
import { parseEther } from "viem";
import { useContractWrite } from "wagmi";
@@ -108,6 +109,9 @@ const Dashboard: React.FC = () => {
isLoading={withdrawLoading}
/>
)}
+
+ {selectedTab === "exchange" && }
+
{(depositError || depositLoading) &&
Hello!!!
}
{mintingError &&
Hello!!!
}
{mintingLoading && (
diff --git a/packages/nextjs/components/xoc-dapp/Swap/SwapButton.tsx b/packages/nextjs/components/xoc-dapp/Swap/SwapButton.tsx
new file mode 100644
index 0000000..519b1f3
--- /dev/null
+++ b/packages/nextjs/components/xoc-dapp/Swap/SwapButton.tsx
@@ -0,0 +1,65 @@
+import React from "react";
+import { GetBalances } from "./SwapInputBox";
+import { NUMBER_REGEX } from "./utils";
+import type { actionType } from "./utils";
+import { useConnectModal } from "@rainbow-me/rainbowkit";
+import { scroll } from "viem/chains";
+import { useAccount, useNetwork, useSwitchNetwork } from "wagmi";
+import { ArrowsRightLeftIcon } from "@heroicons/react/24/outline";
+
+type SwapButtonProps = {
+ action: actionType;
+ swap: () => void;
+ isLoading: boolean;
+ value: string;
+};
+
+const SwapButton: React.FC
= ({ action, swap, isLoading, value }) => {
+ const { isConnected, isConnecting } = useAccount();
+ const { chain: connectedChain } = useNetwork();
+ const { switchNetwork } = useSwitchNetwork();
+ const { openConnectModal } = useConnectModal();
+ const { data: Balances } = GetBalances({ token: "All" });
+ const inSufficientFunds =
+ action === "Wrap" ? Balances.ethBalance < Number(value) : Balances.wethBalance < Number(value);
+
+ return (
+ <>
+ {isConnected && connectedChain ? (
+ swap()}
+ disabled={isLoading || !NUMBER_REGEX.test(value) || inSufficientFunds || value === ""}
+ >
+ {isLoading ? (
+
+ ) : !value ? (
+ Enter Amount
+ ) : (
+ {inSufficientFunds ? "Insufficient Balance" : action}
+ )}
+
+ ) : connectedChain && connectedChain?.id !== scroll.id ? (
+ switchNetwork?.(scroll.id)}
+ >
+
+ Switch to Scroll
+
+ ) : (
+
+ {isConnecting && }
+ Connect Wallet
+
+ )}
+ >
+ );
+};
+
+export default SwapButton;
diff --git a/packages/nextjs/components/xoc-dapp/Swap/SwapFee.tsx b/packages/nextjs/components/xoc-dapp/Swap/SwapFee.tsx
new file mode 100644
index 0000000..b3b4781
--- /dev/null
+++ b/packages/nextjs/components/xoc-dapp/Swap/SwapFee.tsx
@@ -0,0 +1,20 @@
+import useIsMounted from "../../../hooks/scaffold-eth/isMounted";
+import { useFeeData } from "wagmi";
+
+function SwapFee() {
+ const isMouted = useIsMounted();
+ //fix hydration error
+ const { data, isError, isLoading } = useFeeData({
+ watch: true,
+ });
+
+ if (isMouted && isLoading) return ~$0.00 ;
+ if (isMouted && isError) return Error fetching fee data
;
+ // const gasPrice = Number(data?.formatted.gasPrice);
+ if (isMouted && data)
+ return (
+ ~${Number(data?.formatted.gasPrice).toFixed(3)}
+ );
+}
+
+export default SwapFee;
diff --git a/packages/nextjs/components/xoc-dapp/Swap/SwapInputBox.tsx b/packages/nextjs/components/xoc-dapp/Swap/SwapInputBox.tsx
new file mode 100644
index 0000000..b0acb28
--- /dev/null
+++ b/packages/nextjs/components/xoc-dapp/Swap/SwapInputBox.tsx
@@ -0,0 +1,86 @@
+import React from "react";
+import Image from "next/image";
+import { InputBase } from "../../scaffold-eth/Input/InputBase";
+import { NUMBER_REGEX, stripWeth } from "./utils";
+import type { tokenType } from "./utils";
+import { useAccount } from "wagmi";
+import { useAccountBalance, useScaffoldContractRead } from "~~/hooks/scaffold-eth";
+import useIsMounted from "~~/hooks/scaffold-eth/isMounted";
+
+interface Props {
+ isInput?: boolean;
+ token: tokenType;
+ value: string;
+ setValue: (value: string) => void;
+}
+
+const SwapInputBox: React.FC = ({ isInput, token, value, setValue }) => {
+ const ticker = token === "Ether" ? "ETH" : "WETH";
+
+ const { jsx: Balance } = GetBalances({ token });
+
+ return (
+
+
{token}
+
+
+
+ {ticker}
+
+
setValue(value)}
+ error={Boolean(value) && !NUMBER_REGEX.test(value)}
+ disabled={!isInput}
+ />
+
+
+ Balance: {Balance}
+
+
+ );
+};
+
+export default SwapInputBox;
+
+export function GetBalances({ token }: { token: tokenType }) {
+ const { address } = useAccount();
+ const isMounted = useIsMounted();
+ const account = isMounted && address ? address : "";
+ const { balance, isError, isLoading } = useAccountBalance(account);
+ const {
+ data,
+ isError: isErrorWeth,
+ isLoading: isLoadingWeth,
+ } = useScaffoldContractRead({ contractName: "WETH9", functionName: "balanceOf", args: [account] });
+
+ let jsxToRender = 0.00 ;
+ let balanceData = { ethBalance: 0, wethBalance: 0 };
+
+ if (token === "All")
+ balanceData = {
+ ethBalance: Number(balance?.toFixed(4) as string),
+ wethBalance: stripWeth(data),
+ };
+ else if (token === "Wrapped Ether") {
+ if (isLoadingWeth) jsxToRender = ;
+ if (isErrorWeth) jsxToRender = Error ;
+ jsxToRender = {data !== undefined ? stripWeth(data) : "0"} ;
+ } else {
+ if (isLoading) jsxToRender = ;
+ if (isError) jsxToRender = Error ;
+ jsxToRender = {balance ? balance.toFixed(4) : "0"} ;
+ }
+ return { jsx: jsxToRender, data: balanceData };
+}
diff --git a/packages/nextjs/components/xoc-dapp/Swap/index.tsx b/packages/nextjs/components/xoc-dapp/Swap/index.tsx
new file mode 100644
index 0000000..3323c97
--- /dev/null
+++ b/packages/nextjs/components/xoc-dapp/Swap/index.tsx
@@ -0,0 +1,52 @@
+import { useState } from "react";
+import Arrow from "../../../public/Arrow";
+import GasStation from "../../../public/GasStation";
+import SwapButton from "./SwapButton";
+import SwapFee from "./SwapFee";
+import SwapInputBox from "./SwapInputBox";
+import type { actionType } from "./utils";
+import { NUMBER_REGEX } from "./utils";
+import { parseEther } from "viem";
+import { useScaffoldContractWrite } from "~~/hooks/scaffold-eth";
+
+const Swap = () => {
+ const [action, setAction] = useState("Wrap");
+ const [value, setValue] = useState("");
+
+ // Blockcalls
+ const { writeAsync: depositETH, isLoading: isWrapping } = useScaffoldContractWrite({
+ contractName: "WETH9",
+ functionName: "deposit",
+ value: NUMBER_REGEX.test(value) ? parseEther(value) : undefined,
+ });
+ const { writeAsync: withdrawETH, isLoading: isUnwrapping } = useScaffoldContractWrite({
+ contractName: "WETH9",
+ functionName: "withdraw",
+ args: [NUMBER_REGEX.test(value) ? parseEther(value) : undefined],
+ });
+
+ return (
+
+ {action}
+
+
+
setAction(action === "Wrap" ? "Unwrap" : "Wrap")}
+ className="p-2 rounded-lg bg-secondary w-[35px] h-[35px] cursor-pointer border-[#243c5a] border-[3px] m-auto absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 transition-all duration-300 hover:rotate-180"
+ />
+
+
+
+
+
+
+
+ );
+};
+
+export default Swap;
diff --git a/packages/nextjs/components/xoc-dapp/Swap/utils.ts b/packages/nextjs/components/xoc-dapp/Swap/utils.ts
new file mode 100644
index 0000000..9599788
--- /dev/null
+++ b/packages/nextjs/components/xoc-dapp/Swap/utils.ts
@@ -0,0 +1,15 @@
+//TYPES
+export type tokenType = "Ether" | "Wrapped Ether" | "All";
+export type actionType = "Wrap" | "Unwrap";
+
+// UTILS
+
+export const NUMBER_REGEX = /^\.?\d+\.?\d*$/;
+export const stripWeth = (token: bigint | undefined) => {
+ let weth = 0;
+ if (token !== undefined) {
+ const _weth = Number(token) / 1e18;
+ _weth === 0 ? (weth = 0) : (weth = _weth).toFixed(4);
+ }
+ return weth;
+};
diff --git a/packages/nextjs/hooks/scaffold-eth/isMounted.tsx b/packages/nextjs/hooks/scaffold-eth/isMounted.tsx
new file mode 100644
index 0000000..d9e3c80
--- /dev/null
+++ b/packages/nextjs/hooks/scaffold-eth/isMounted.tsx
@@ -0,0 +1,13 @@
+import { useEffect, useRef } from "react";
+
+function useIsMounted() {
+ const isMountedRef = useRef(false);
+
+ useEffect(() => {
+ isMountedRef.current = true;
+ }, []);
+
+ return isMountedRef.current;
+}
+
+export default useIsMounted;
diff --git a/packages/nextjs/pages/index.tsx b/packages/nextjs/pages/index.tsx
index 56593cc..bdf8f05 100644
--- a/packages/nextjs/pages/index.tsx
+++ b/packages/nextjs/pages/index.tsx
@@ -1,38 +1,86 @@
-/* import Link from "next/link"; */
+import Image from "next/image";
+import Link from "next/link";
import { benefitOne, benefitTwo } from "../components/index/data";
import type { NextPage } from "next";
-
-/* import { BanknotesIcon, ChatBubbleLeftRightIcon, PhotoIcon } from "@heroicons/react/24/outline"; */
+import { MagnifyingGlassIcon, SparklesIcon } from "@heroicons/react/24/outline";
import { MetaHeader } from "~~/components/MetaHeader";
-import Video from "~~/components/index/Video";
import Benefits from "~~/components/index/benefits";
import Cta from "~~/components/index/cta";
import Faq from "~~/components/index/faq";
import Hero from "~~/components/index/hero";
+import ProtocolNumbers from "~~/components/index/protocolNumbers";
import SectionTitle from "~~/components/index/sectionTitle";
import Testimonials from "~~/components/index/testimonials";
-
-/* import PopUpWidget from "~~/components/index/popupWidget"; */
+import grow from "~~/public/grow.png";
const Home: NextPage = () => {
return (
<>
-
- Nextly is a free landing page & marketing website template for startups and indie projects. Its built with
- Next.js & TailwindCSS. And its completely open-source.
+
+
+
+
+
+
+
+ Fuente:{" "}
+
+ Uniswap V3{" "}
+
+
+
+
+
+
+
+ Experiment with{" "}
+
+ Example UI
+ {" "}
+ to build your own UI.
+
+
+
+
+
+ Explore your local transactions with the{" "}
+
+ Block Explorer
+ {" "}
+ tab.
+
+
+
+
+
+ El uso de $XOC es la unica forma de integrarte a la comunidad emergente Web3 que estar creciendo en México y el
+ mundo. Aquí te dejamos algunos beneficios de usar $XOC.
-
- This section is to highlight a promo or demo video of your product. Analysts says a landing page with video has
- 3% more conversion rate. So, don't forget to add one. Just like this.
+
+ Aprende como funciona la magia de $XOC y como puedes empezar a usarlo. Aquí te dejamos un video para que te des
+ una idea de como funciona el protocolo y donde queda mas trabajo por hacer.
-
-
- Testimonails is a great way to increase the brand trust and awareness. Use this section to highlight your
- popular customers.
+
+ Aqui te dejamos algunos testimonios de la comunidad emergente que esta construyendo y ya esta usando $XOC y como
+ les ha cambiado la vida.
@@ -41,47 +89,6 @@ const Home: NextPage = () => {
-
- {/*
-
-
-
-
-
- Interact with our smart contracts using the{" "}
-
- DeFi
- {" "}
- tab.
-
-
-
-
-
- Coming soon will be our Frontend to interact with{" "}
-
- NFT
- {" "}
-
-
-
-
-
- Explore our{" "}
-
- DAO
- {" "}
- and help us build the future of XOC.
-
-
-
-
-
*/}
>
);
};
diff --git a/packages/nextjs/public/Arrow.tsx b/packages/nextjs/public/Arrow.tsx
new file mode 100644
index 0000000..b60b802
--- /dev/null
+++ b/packages/nextjs/public/Arrow.tsx
@@ -0,0 +1,16 @@
+import * as React from "react";
+
+const Arrow = (props: any) => (
+
+
+
+);
+export default Arrow;
diff --git a/packages/nextjs/public/BuidlGuidlLogo.tsx b/packages/nextjs/public/BuidlGuidlLogo.tsx
new file mode 100644
index 0000000..af46b02
--- /dev/null
+++ b/packages/nextjs/public/BuidlGuidlLogo.tsx
@@ -0,0 +1,18 @@
+export const BuidlGuidlLogo = ({ className }: { className: string }) => {
+ return (
+
+
+
+ );
+};
diff --git a/packages/nextjs/public/GasStation.tsx b/packages/nextjs/public/GasStation.tsx
new file mode 100644
index 0000000..0c805ed
--- /dev/null
+++ b/packages/nextjs/public/GasStation.tsx
@@ -0,0 +1,11 @@
+import * as React from "react";
+
+const GasStation = (props: any) => (
+
+
+
+
+
+
+);
+export default GasStation;
diff --git a/packages/nextjs/public/Spinner.tsx b/packages/nextjs/public/Spinner.tsx
new file mode 100644
index 0000000..01f103c
--- /dev/null
+++ b/packages/nextjs/public/Spinner.tsx
@@ -0,0 +1,23 @@
+export const Spinner = ({ width, height }: { width?: string; height?: string }) => {
+ return (
+
+
+
+
+ );
+};
diff --git a/packages/nextjs/public/benefit-one.png b/packages/nextjs/public/benefit-one.png
index f499e8c..523e175 100644
Binary files a/packages/nextjs/public/benefit-one.png and b/packages/nextjs/public/benefit-one.png differ
diff --git a/packages/nextjs/public/benefit-two.png b/packages/nextjs/public/benefit-two.png
index 4b0c02a..68e7451 100644
Binary files a/packages/nextjs/public/benefit-two.png and b/packages/nextjs/public/benefit-two.png differ
diff --git a/packages/nextjs/public/grow.png b/packages/nextjs/public/grow.png
new file mode 100644
index 0000000..fc3e9bb
Binary files /dev/null and b/packages/nextjs/public/grow.png differ
diff --git a/packages/nextjs/public/hero-1.png b/packages/nextjs/public/hero-1.png
new file mode 100644
index 0000000..ef37006
Binary files /dev/null and b/packages/nextjs/public/hero-1.png differ
diff --git a/yarn.lock b/yarn.lock
index 17fefc7..ea3211a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2511,6 +2511,55 @@ __metadata:
languageName: node
linkType: hard
+"@formatjs/ecma402-abstract@npm:1.18.2":
+ version: 1.18.2
+ resolution: "@formatjs/ecma402-abstract@npm:1.18.2"
+ dependencies:
+ "@formatjs/intl-localematcher": 0.5.4
+ tslib: ^2.4.0
+ checksum: c664056ccab4e3407feabd5802276075eae2b614acb8c5979045ff5a70bfec4c04488188c30b311b6db0e0eb0b5c1ca328868d76472a14243c944bc0639e8a4d
+ languageName: node
+ linkType: hard
+
+"@formatjs/fast-memoize@npm:2.2.0":
+ version: 2.2.0
+ resolution: "@formatjs/fast-memoize@npm:2.2.0"
+ dependencies:
+ tslib: ^2.4.0
+ checksum: 8697fe72a7ece252d600a7d08105f2a2f758e2dd96f54ac0a4c508b1205a559fc08835635e1f8e5ca9dcc3ee61ce1fca4a0e7047b402f29fc96051e293a280ff
+ languageName: node
+ linkType: hard
+
+"@formatjs/icu-messageformat-parser@npm:2.7.6":
+ version: 2.7.6
+ resolution: "@formatjs/icu-messageformat-parser@npm:2.7.6"
+ dependencies:
+ "@formatjs/ecma402-abstract": 1.18.2
+ "@formatjs/icu-skeleton-parser": 1.8.0
+ tslib: ^2.4.0
+ checksum: d537253cbfe0515c0b72495b1133528a6643f23f978f6d9576defe5150dbb4b9b4e4b7028e2ff1bfaa4d104b05aa1119688d3fb7a4cf9b1b78ba8019a6adfeb1
+ languageName: node
+ linkType: hard
+
+"@formatjs/icu-skeleton-parser@npm:1.8.0":
+ version: 1.8.0
+ resolution: "@formatjs/icu-skeleton-parser@npm:1.8.0"
+ dependencies:
+ "@formatjs/ecma402-abstract": 1.18.2
+ tslib: ^2.4.0
+ checksum: 85ca45148a8535c61f2667d24d3e59ab97cd2b4accee8383594872a319e875effae7d54e070fd0d3926fc1407b04f5685f94336c1d0d587fcb1064bb498e5319
+ languageName: node
+ linkType: hard
+
+"@formatjs/intl-localematcher@npm:0.5.4":
+ version: 0.5.4
+ resolution: "@formatjs/intl-localematcher@npm:0.5.4"
+ dependencies:
+ tslib: ^2.4.0
+ checksum: a0af57874fcd163add5f7a0cb1c008e9b09feb1d24cbce1263379ae0393cddd6681197a7f2f512f351a97666fc8675ed52cc17d1834266ee8fc65e9edf3435f6
+ languageName: node
+ linkType: hard
+
"@gar/promisify@npm:^1.0.1":
version: 1.1.3
resolution: "@gar/promisify@npm:1.1.3"
@@ -2559,6 +2608,43 @@ __metadata:
languageName: node
linkType: hard
+"@internationalized/date@npm:^3.5.2":
+ version: 3.5.2
+ resolution: "@internationalized/date@npm:3.5.2"
+ dependencies:
+ "@swc/helpers": ^0.5.0
+ checksum: 7cd31aebe1bfa7307cb31d24366a9cc18c598e38a7eb6cd68a86b3c2d9e7c4f03376fe8a3ac6c6556fb80e58fa7697238af2ee9d753058e063f9a136143dafc2
+ languageName: node
+ linkType: hard
+
+"@internationalized/message@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "@internationalized/message@npm:3.1.2"
+ dependencies:
+ "@swc/helpers": ^0.5.0
+ intl-messageformat: ^10.1.0
+ checksum: 230fcd1688ce12bd244779f66a78167bd1c7e5c30a228fe3dc8d433428a64dda90085852bec38107795e9e81307c29e7dc3e584b5949f19536099aebc1ade19b
+ languageName: node
+ linkType: hard
+
+"@internationalized/number@npm:^3.5.1":
+ version: 3.5.1
+ resolution: "@internationalized/number@npm:3.5.1"
+ dependencies:
+ "@swc/helpers": ^0.5.0
+ checksum: c24dfe0bfef1bde551463f660ed58fa45709db878a0ffec2b183d464856d47f043699dc65adb339d40d4143f1029080fa8fd8d1a9532b90f475e7144d451963e
+ languageName: node
+ linkType: hard
+
+"@internationalized/string@npm:^3.2.1":
+ version: 3.2.1
+ resolution: "@internationalized/string@npm:3.2.1"
+ dependencies:
+ "@swc/helpers": ^0.5.0
+ checksum: 967d5c4d03e2680082af591d085be741b9599527b088f444fef25d612f0960a501b6873d2f532e10b494d2ac0c2e29b6333a960a75f441170b53e1308cefdf76
+ languageName: node
+ linkType: hard
+
"@ioredis/commands@npm:^1.1.1":
version: 1.2.0
resolution: "@ioredis/commands@npm:1.2.0"
@@ -3081,6 +3167,193 @@ __metadata:
languageName: node
linkType: hard
+"@nextui-org/framer-transitions@npm:2.0.15":
+ version: 2.0.15
+ resolution: "@nextui-org/framer-transitions@npm:2.0.15"
+ dependencies:
+ "@nextui-org/shared-utils": 2.0.4
+ "@nextui-org/system": 2.0.15
+ peerDependencies:
+ framer-motion: ">=4.0.0"
+ react: ">=18"
+ react-dom: ">=18"
+ checksum: 60891a76f50c879c9e99c8e9dd4673e3198af8a2618dd02dd9486e342d6f532359f19d3cc1bdbde093d9a5cffe1dd878c29ad5b4cd1a741af620977a82bedf29
+ languageName: node
+ linkType: hard
+
+"@nextui-org/modal@npm:^2.0.28":
+ version: 2.0.28
+ resolution: "@nextui-org/modal@npm:2.0.28"
+ dependencies:
+ "@nextui-org/framer-transitions": 2.0.15
+ "@nextui-org/react-utils": 2.0.10
+ "@nextui-org/shared-icons": 2.0.6
+ "@nextui-org/shared-utils": 2.0.4
+ "@nextui-org/use-aria-button": 2.0.6
+ "@nextui-org/use-aria-modal-overlay": 2.0.6
+ "@nextui-org/use-disclosure": 2.0.6
+ "@react-aria/dialog": ^3.5.7
+ "@react-aria/focus": ^3.14.3
+ "@react-aria/interactions": ^3.19.1
+ "@react-aria/overlays": ^3.18.1
+ "@react-aria/utils": ^3.21.1
+ "@react-stately/overlays": ^3.6.3
+ "@react-types/overlays": ^3.8.3
+ react-remove-scroll: ^2.5.6
+ peerDependencies:
+ "@nextui-org/system": ">=2.0.0"
+ "@nextui-org/theme": ">=2.1.0"
+ framer-motion: ">=4.0.0"
+ react: ">=18"
+ react-dom: ">=18"
+ checksum: bd4ad387c83144fedd7dd7148e872bb62d9d40d5884ac2fbb12ec6206a6118b280dbf8e9e4a192d36161943579535d5c0fb0fd4696a8fff84015b5980f24239f
+ languageName: node
+ linkType: hard
+
+"@nextui-org/react-rsc-utils@npm:2.0.10":
+ version: 2.0.10
+ resolution: "@nextui-org/react-rsc-utils@npm:2.0.10"
+ checksum: 66a39be78bfbfbe4feb62152499d18029f795f6e966916fbbe37d462ffd2b3f8ce85bc91e95944918527e2bac59d8a0d66c7607e8806a4ab7931e3831f65740f
+ languageName: node
+ linkType: hard
+
+"@nextui-org/react-utils@npm:2.0.10":
+ version: 2.0.10
+ resolution: "@nextui-org/react-utils@npm:2.0.10"
+ dependencies:
+ "@nextui-org/react-rsc-utils": 2.0.10
+ "@nextui-org/shared-utils": 2.0.4
+ peerDependencies:
+ react: ">=18"
+ checksum: de66c732c8eee49543b36a4fe346bb6e50403f4dbd3c845e0cb1c3328c88f35c2c459a187d1b45b1a6fc470c42c1c933d5cfa2ab76e0a0d16db1ad0c2f3c2564
+ languageName: node
+ linkType: hard
+
+"@nextui-org/shared-icons@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@nextui-org/shared-icons@npm:2.0.6"
+ peerDependencies:
+ react: ">=18"
+ checksum: a784c9a2fbcb8f51e34bd3eab0f038cde87073f97faae6d8e7e2e930967bc4b892c3cca1a70ddee0d9594c43c7c2df5e5eca5c70109db4d381716760ee7ce5a4
+ languageName: node
+ linkType: hard
+
+"@nextui-org/shared-utils@npm:2.0.4":
+ version: 2.0.4
+ resolution: "@nextui-org/shared-utils@npm:2.0.4"
+ peerDependencies:
+ react: ">=18"
+ checksum: 9557bce2a13acaee9909f4fcf1fe3887f3aa506a323b25a87ce0d26dfe5be982beadcdd61e7608439a3d50c7e2a302ed682716b8d2c59ebd1f0cce3025c8bfba
+ languageName: node
+ linkType: hard
+
+"@nextui-org/system-rsc@npm:2.0.11":
+ version: 2.0.11
+ resolution: "@nextui-org/system-rsc@npm:2.0.11"
+ dependencies:
+ clsx: ^1.2.1
+ peerDependencies:
+ "@nextui-org/theme": ">=2.1.0"
+ react: ">=18"
+ tailwind-variants: ">=0.1.13"
+ checksum: 153ec2633cbb2afd5ceb6b9d1c9042707369e062fe348c1fcedf3ab91b69062bebb191e953f4da2f7e5b248e91727cc6e2f285e05f170679320f9cb24a37050a
+ languageName: node
+ linkType: hard
+
+"@nextui-org/system@npm:2.0.15":
+ version: 2.0.15
+ resolution: "@nextui-org/system@npm:2.0.15"
+ dependencies:
+ "@nextui-org/system-rsc": 2.0.11
+ "@react-aria/i18n": ^3.8.4
+ "@react-aria/overlays": ^3.18.1
+ "@react-aria/utils": ^3.21.1
+ "@react-stately/utils": ^3.8.0
+ peerDependencies:
+ react: ">=18"
+ react-dom: ">=18"
+ checksum: e56fd859a1823e5c4afdf8bcd9c577838fb453000299be786f2bca3390be52b5aa50565b6827ef70a1b80d1a13722516ab06f1eda823cfdb7c01fd8a9d491d5b
+ languageName: node
+ linkType: hard
+
+"@nextui-org/use-aria-button@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@nextui-org/use-aria-button@npm:2.0.6"
+ dependencies:
+ "@nextui-org/use-aria-press": 2.0.1
+ "@react-aria/focus": ^3.14.3
+ "@react-aria/interactions": ^3.19.1
+ "@react-aria/utils": ^3.21.1
+ "@react-types/button": ^3.9.0
+ "@react-types/shared": ^3.21.0
+ peerDependencies:
+ react: ">=18"
+ checksum: ccc2f292dce188c4c62692825a148b6ccfe1d3647043b4590a2fb76062e891eaca8bf70a8fdaf4e042678d89d31ac4c54b31b36365ad45318f09a4be28c65ad7
+ languageName: node
+ linkType: hard
+
+"@nextui-org/use-aria-modal-overlay@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@nextui-org/use-aria-modal-overlay@npm:2.0.6"
+ dependencies:
+ "@react-aria/overlays": ^3.18.1
+ "@react-aria/utils": ^3.21.1
+ "@react-stately/overlays": ^3.6.3
+ "@react-types/shared": ^3.21.0
+ peerDependencies:
+ react: ">=18"
+ react-dom: ">=18"
+ checksum: a5eda1b1f5bb9031cf87fd2862d7623627326779c72d88285117d94548034fc0130d28750d253bc254fb44eebff0eecda18365bf88eb7dfa0b9b02c635853660
+ languageName: node
+ linkType: hard
+
+"@nextui-org/use-aria-press@npm:2.0.1":
+ version: 2.0.1
+ resolution: "@nextui-org/use-aria-press@npm:2.0.1"
+ dependencies:
+ "@react-aria/interactions": ^3.19.1
+ "@react-aria/ssr": ^3.8.0
+ "@react-aria/utils": ^3.21.1
+ "@react-types/shared": ^3.21.0
+ peerDependencies:
+ react: ">=18"
+ checksum: 144afd24ff5f451072f2fa2e8a6ed75cdc3df4df31c43731aba1f8cfc461aa2387d5678f7d6472fb2955a7ca0d5fdd3101d4eb7f063c3747a7e47f0043bbc566
+ languageName: node
+ linkType: hard
+
+"@nextui-org/use-callback-ref@npm:2.0.4":
+ version: 2.0.4
+ resolution: "@nextui-org/use-callback-ref@npm:2.0.4"
+ dependencies:
+ "@nextui-org/use-safe-layout-effect": 2.0.4
+ peerDependencies:
+ react: ">=18"
+ checksum: 91cb2e2de25411315711285c45e1a6e4b196642c6ce3c36e72e5464a87652d97379795e96e2bb6f323e005b0c2d7ae4699818da7bf800791b3b7c58fa71a190c
+ languageName: node
+ linkType: hard
+
+"@nextui-org/use-disclosure@npm:2.0.6":
+ version: 2.0.6
+ resolution: "@nextui-org/use-disclosure@npm:2.0.6"
+ dependencies:
+ "@nextui-org/use-callback-ref": 2.0.4
+ "@react-aria/utils": ^3.21.1
+ "@react-stately/utils": ^3.8.0
+ peerDependencies:
+ react: ">=18"
+ checksum: 2a3ad5063f5dc53d2d567465e1172d6bad1adad737aa1ac8c56ad2bd09657297189e770a4e1276493c676b8ebd15dab56ff025f7776a888cd8aeeb10b30ab4f6
+ languageName: node
+ linkType: hard
+
+"@nextui-org/use-safe-layout-effect@npm:2.0.4":
+ version: 2.0.4
+ resolution: "@nextui-org/use-safe-layout-effect@npm:2.0.4"
+ peerDependencies:
+ react: ">=18"
+ checksum: dabd362e70711cc0f65ce8cc32e86981a91882624ed90031c6232c8d3c3dd4a1729a4b1a32ec45e0a25c2e5345608f3916a5f4a80ef16b5f626fc59557625e88
+ languageName: node
+ linkType: hard
+
"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0":
version: 1.2.0
resolution: "@noble/curves@npm:1.2.0"
@@ -3392,6 +3665,199 @@ __metadata:
languageName: node
linkType: hard
+"@react-aria/dialog@npm:^3.5.7":
+ version: 3.5.12
+ resolution: "@react-aria/dialog@npm:3.5.12"
+ dependencies:
+ "@react-aria/focus": ^3.16.2
+ "@react-aria/overlays": ^3.21.1
+ "@react-aria/utils": ^3.23.2
+ "@react-types/dialog": ^3.5.8
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: b8f494227263d0f7ce2d25787d8992cef205420efc213449669d68cd95eb13ad052a6b76a65e6bb9b2c36a827ec8239414122c5fe41091182f1f421d192d0cda
+ languageName: node
+ linkType: hard
+
+"@react-aria/focus@npm:^3.14.3, @react-aria/focus@npm:^3.16.2":
+ version: 3.16.2
+ resolution: "@react-aria/focus@npm:3.16.2"
+ dependencies:
+ "@react-aria/interactions": ^3.21.1
+ "@react-aria/utils": ^3.23.2
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ clsx: ^2.0.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: d97eabc981acd8b6e0e3984a0316ebafddffdd19732c3efc6890482f89dc06605202f682b7700a73292f71c80e8a2e846136a61dfbfead3053f92bb865272ad5
+ languageName: node
+ linkType: hard
+
+"@react-aria/i18n@npm:^3.10.2, @react-aria/i18n@npm:^3.8.4":
+ version: 3.10.2
+ resolution: "@react-aria/i18n@npm:3.10.2"
+ dependencies:
+ "@internationalized/date": ^3.5.2
+ "@internationalized/message": ^3.1.2
+ "@internationalized/number": ^3.5.1
+ "@internationalized/string": ^3.2.1
+ "@react-aria/ssr": ^3.9.2
+ "@react-aria/utils": ^3.23.2
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 229b2c65f4e6346e06780d0d131ae3cb915fcf66f31f8fc7b00aa9aec451e57da4d3f28794958933950f9c7b97fcd808b6a0e75bef57d10b88eabef0d6b511d6
+ languageName: node
+ linkType: hard
+
+"@react-aria/interactions@npm:^3.19.1, @react-aria/interactions@npm:^3.21.1":
+ version: 3.21.1
+ resolution: "@react-aria/interactions@npm:3.21.1"
+ dependencies:
+ "@react-aria/ssr": ^3.9.2
+ "@react-aria/utils": ^3.23.2
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 73384b026ee0819cf37e4fa85ef7998c3b77d64ae9d97f4a0b78ee88d8ee6d44c6d43a44164485b90409cc065a24e9c9c1e2d06f152802d46714355dab74345d
+ languageName: node
+ linkType: hard
+
+"@react-aria/overlays@npm:^3.18.1, @react-aria/overlays@npm:^3.21.1":
+ version: 3.21.1
+ resolution: "@react-aria/overlays@npm:3.21.1"
+ dependencies:
+ "@react-aria/focus": ^3.16.2
+ "@react-aria/i18n": ^3.10.2
+ "@react-aria/interactions": ^3.21.1
+ "@react-aria/ssr": ^3.9.2
+ "@react-aria/utils": ^3.23.2
+ "@react-aria/visually-hidden": ^3.8.10
+ "@react-stately/overlays": ^3.6.5
+ "@react-types/button": ^3.9.2
+ "@react-types/overlays": ^3.8.5
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 59819eaa63d4360367143c89ee1017001b9fcb7be23f4835d67bbb3051c7fa1951a1807671070df2729c8dafa6c95939ba804d66b8b356ec54bfaf066961f5f8
+ languageName: node
+ linkType: hard
+
+"@react-aria/ssr@npm:^3.8.0, @react-aria/ssr@npm:^3.9.2":
+ version: 3.9.2
+ resolution: "@react-aria/ssr@npm:3.9.2"
+ dependencies:
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: ef11ef02195665f8a05cc430781da33509d6a20b88590e3ca018323f0824ce80f7cf470f99789cb6aeaeeeeac5d345d2eb671ff5b2d470b7c274f071e7c8abf5
+ languageName: node
+ linkType: hard
+
+"@react-aria/utils@npm:^3.21.1, @react-aria/utils@npm:^3.23.2":
+ version: 3.23.2
+ resolution: "@react-aria/utils@npm:3.23.2"
+ dependencies:
+ "@react-aria/ssr": ^3.9.2
+ "@react-stately/utils": ^3.9.1
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ clsx: ^2.0.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 31a57fc3505879dde5da273e35a7f421b3473611e6b108a0a1a32f782c39b5c5a8cb99cc7f35afc742725e0a977165fec8462b127665be7d38d70d12fa40b544
+ languageName: node
+ linkType: hard
+
+"@react-aria/visually-hidden@npm:^3.8.10":
+ version: 3.8.10
+ resolution: "@react-aria/visually-hidden@npm:3.8.10"
+ dependencies:
+ "@react-aria/interactions": ^3.21.1
+ "@react-aria/utils": ^3.23.2
+ "@react-types/shared": ^3.22.1
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 06cc318ac0239c888fe68cbdebd1ac9a6c5f79177df6fb5a7894fc2ce4d6a1c76fc10175e7dcc889942e747ed1cc040ed6f9fa5f25e25c3508aadb5e90a7c31d
+ languageName: node
+ linkType: hard
+
+"@react-stately/overlays@npm:^3.6.3, @react-stately/overlays@npm:^3.6.5":
+ version: 3.6.5
+ resolution: "@react-stately/overlays@npm:3.6.5"
+ dependencies:
+ "@react-stately/utils": ^3.9.1
+ "@react-types/overlays": ^3.8.5
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 30d665b93f093fb497d5177ff5ebf700c0fe976393504debd5924811fafba9bd0cd40b6b4943427c5f4c4d8cc45103417015b0fb8e5aed5559bc5c23fc8bbf50
+ languageName: node
+ linkType: hard
+
+"@react-stately/utils@npm:^3.8.0, @react-stately/utils@npm:^3.9.1":
+ version: 3.9.1
+ resolution: "@react-stately/utils@npm:3.9.1"
+ dependencies:
+ "@swc/helpers": ^0.5.0
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 290445ec2b48e24951c7685320b2cfd21694c3d8edd6c6db3135b168f0344c0740b5ee90b920c9ca6163cff6a4162219fb74b236cf47e8bf8a237c1efbdc908a
+ languageName: node
+ linkType: hard
+
+"@react-types/button@npm:^3.9.0, @react-types/button@npm:^3.9.2":
+ version: 3.9.2
+ resolution: "@react-types/button@npm:3.9.2"
+ dependencies:
+ "@react-types/shared": ^3.22.1
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 38955ab60a15c3da0d9a32fb7af204149dfb884508de76cebe0d1f527e4fa9ec04158826aeff45c7bc4650cbc54f6a0e539ae10abcdf6b2f7e084c28bdf3d685
+ languageName: node
+ linkType: hard
+
+"@react-types/dialog@npm:^3.5.8":
+ version: 3.5.8
+ resolution: "@react-types/dialog@npm:3.5.8"
+ dependencies:
+ "@react-types/overlays": ^3.8.5
+ "@react-types/shared": ^3.22.1
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 079f955ed8da84407823e4145bdc0c13a76c8fa63b886aff5a514de148bcbb8c833b217d2416e3d50139f5d382bde51be4af82f2f0200bb508a142126c08bc84
+ languageName: node
+ linkType: hard
+
+"@react-types/overlays@npm:^3.8.3, @react-types/overlays@npm:^3.8.5":
+ version: 3.8.5
+ resolution: "@react-types/overlays@npm:3.8.5"
+ dependencies:
+ "@react-types/shared": ^3.22.1
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 7c4aba5abc21c79543e1f497e595da8e4fde8c0583336cc5ab7c961cfc5ce608de2c33f3566a4ad89b01571d3b8483b06a14d5ef30b736fd4066f70ffa0c139d
+ languageName: node
+ linkType: hard
+
+"@react-types/shared@npm:^3.21.0, @react-types/shared@npm:^3.22.1":
+ version: 3.22.1
+ resolution: "@react-types/shared@npm:3.22.1"
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0
+ checksum: 162031517b3b2762d23999ca7b2d4f1d404a1b1823037f28abd7b70138dfe7929beee8a56781ec171de12ec510ec64837e60cb7a83ec959796368e9f7dc51f78
+ languageName: node
+ linkType: hard
+
"@reduxjs/toolkit@npm:^1.6.1":
version: 1.9.7
resolution: "@reduxjs/toolkit@npm:1.9.7"
@@ -4070,6 +4536,15 @@ __metadata:
languageName: node
linkType: hard
+"@swc/helpers@npm:^0.5.0":
+ version: 0.5.6
+ resolution: "@swc/helpers@npm:0.5.6"
+ dependencies:
+ tslib: ^2.4.0
+ checksum: 45de57097e1f6f356f571c7a4f55c692a46b0404c8601e5d9552e152000dfe541ff529d3d01c8a4abf60799d6e7d0078936e40be0a203ca356299d5d6adea765
+ languageName: node
+ linkType: hard
+
"@szmarczak/http-timer@npm:^4.0.5":
version: 4.0.6
resolution: "@szmarczak/http-timer@npm:4.0.6"
@@ -4759,7 +5234,7 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/sdk-core@npm:^4.0.7, @uniswap/sdk-core@npm:~4.0.1":
+"@uniswap/sdk-core@npm:^4.0.10, @uniswap/sdk-core@npm:^4.0.7, @uniswap/sdk-core@npm:~4.0.1":
version: 4.0.10
resolution: "@uniswap/sdk-core@npm:4.0.10"
dependencies:
@@ -4773,7 +5248,7 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/smart-order-router@npm:^3.16.25":
+"@uniswap/smart-order-router@npm:^3.16.25, @uniswap/smart-order-router@npm:^3.21.1":
version: 3.21.1
resolution: "@uniswap/smart-order-router@npm:3.21.1"
dependencies:
@@ -4928,7 +5403,7 @@ __metadata:
languageName: node
linkType: hard
-"@uniswap/v3-sdk@npm:^3.10.0, @uniswap/v3-sdk@npm:^3.10.1":
+"@uniswap/v3-sdk@npm:^3.10.0, @uniswap/v3-sdk@npm:^3.10.1, @uniswap/v3-sdk@npm:^3.10.2":
version: 3.10.2
resolution: "@uniswap/v3-sdk@npm:3.10.2"
dependencies:
@@ -7646,6 +8121,13 @@ __metadata:
languageName: node
linkType: hard
+"clsx@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "clsx@npm:2.1.0"
+ checksum: 43fefc29b6b49c9476fbce4f8b1cc75c27b67747738e598e6651dd40d63692135dc60b18fa1c5b78a2a9ba8ae6fd2055a068924b94e20b42039bd53b78b98e1d
+ languageName: node
+ linkType: hard
+
"cluster-key-slot@npm:^1.1.0":
version: 1.1.2
resolution: "cluster-key-slot@npm:1.1.2"
@@ -11114,6 +11596,18 @@ __metadata:
languageName: node
linkType: hard
+"intl-messageformat@npm:^10.1.0":
+ version: 10.5.11
+ resolution: "intl-messageformat@npm:10.5.11"
+ dependencies:
+ "@formatjs/ecma402-abstract": 1.18.2
+ "@formatjs/fast-memoize": 2.2.0
+ "@formatjs/icu-messageformat-parser": 2.7.6
+ tslib: ^2.4.0
+ checksum: b5574447a0d938170049042ec807344d57c72e9aabb2e72be0d5197baabeb763e05680b19b7607df93fadeec0e13c9bfcb450e9ba2fe7464b4f06600b612bf5e
+ languageName: node
+ linkType: hard
+
"invariant@npm:^2.2.4":
version: 2.2.4
resolution: "invariant@npm:2.2.4"
@@ -15115,7 +15609,7 @@ __metadata:
languageName: node
linkType: hard
-"react-remove-scroll-bar@npm:^2.3.3":
+"react-remove-scroll-bar@npm:^2.3.3, react-remove-scroll-bar@npm:^2.3.4":
version: 2.3.4
resolution: "react-remove-scroll-bar@npm:2.3.4"
dependencies:
@@ -15150,6 +15644,25 @@ __metadata:
languageName: node
linkType: hard
+"react-remove-scroll@npm:^2.5.6":
+ version: 2.5.7
+ resolution: "react-remove-scroll@npm:2.5.7"
+ dependencies:
+ react-remove-scroll-bar: ^2.3.4
+ react-style-singleton: ^2.2.1
+ tslib: ^2.1.0
+ use-callback-ref: ^1.3.0
+ use-sidecar: ^1.1.2
+ peerDependencies:
+ "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ "@types/react":
+ optional: true
+ checksum: e0dbb6856beaed2cff4996d9ca62d775686ff72e3e9de34043034d932223b588993b2fc7a18644750dd3d73eb19bd3f2cedb8d91f0e424c1ef8403010da24b1d
+ languageName: node
+ linkType: hard
+
"react-style-singleton@npm:^2.2.1":
version: 2.2.1
resolution: "react-style-singleton@npm:2.2.1"
@@ -15895,6 +16408,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "se-2@workspace:."
dependencies:
+ "@nextui-org/modal": ^2.0.28
+ "@uniswap/sdk-core": ^4.0.10
+ "@uniswap/smart-order-router": ^3.21.1
+ "@uniswap/v3-sdk": ^3.10.2
"@uniswap/widgets": ^2.59.0
husky: ~8.0.3
lint-staged: ~13.2.2