{"version":3,"sources":["../ui/errors.ts","../ui/utils.ts","../ui/blockchain/client/index.ts","../ui/blockchain/client/interact.ts","../api/base.ts","../api/common.ts","../api/api.ts","../api/configuration.ts","../ui/types.tsx","../ui/blockchain/client/signTx.ts","../ui/theme.tsx","../ui/components/atoms/svg/infoSVG.tsx","../ui/components/stringToNumber.tsx","../ui/components/buy-sell-fees.tsx","../ui/components/atoms/svg/profile-svg.tsx","../ui/components/atoms/svg/statusDot-svg.tsx","../ui/components/steps-guide.tsx","../ui/components/buy-sell-input.tsx","../ui/components/step-buttons.tsx","../ui/components/atoms/buttons/PurpleButton.tsx","../ui/components/atoms/buttons/neutralButton.tsx","../ui/components/atoms/table/MeteraTable.tsx","../ui/components/portfolio-item.tsx","../ui/components/tokens-breakdown.tsx","../ui/components/atoms/modal/loadingmodal.tsx","../ui/components/transaction-in-progress.tsx","../ui/components/atoms/modal/txmodal.tsx","../ui/components/transaction-submitted.tsx","../ui/components/useBuySellFees.ts","../ui/components/mint-burn-wrapper.tsx","../ui/components/swap-item.tsx","../ui/components/settings-modal.tsx","../ui/components/swap-breakdown.tsx","../ui/components/mint-burn.tsx","../ui/components/insufficient-tokens.tsx"],"names":["ApiErrors","bigNumberToBigRational","bigNumber","BigRational","numerator","denominator","x","bigRationalToBigNumber","bigRational","BigNumber","dbNumericToBigRational","dbNumber","dbNumericToBigNumber","JSONBig","getWalletBalance","wallet","changeAddress","getAddressDetails","utxosHex","ownedUtxos","fromHex","C","utxo","partialBalance","output","lovelace","value","policy","assetNamesDict","hexName","amount","unit","getMTKPrice","portfolio","acc","price","decimals","decimalToBigInt","decimal","roundingMode","roundingModeMap","isBalanceEnough","walletBalance","interactionBalance","assetToUnit","asset","handleApiError","err","axios","data","userHasEnoughBalance","userBalance","interactionBalanceWithIds","type","inputValue","portfolioState","interactionBalanceWithUnits","id","MTK_DECIMALS","isError","BASE_PATH","RequiredError","field","msg","operationServerMap","DUMMY_BASE_URL","assertParamExists","functionName","paramName","paramValue","setFlattenedQueryParams","urlSearchParams","parameter","key","item","currentKey","setSearchParams","url","objects","searchParams","serializeDataIfNeeded","requestOptions","configuration","nonString","toPathString","createRequestFunction","axiosArgs","globalAxios","basePath","axiosRequestArgs","SDKApiAxiosParamCreator","ordersCreatePostRequest","options","localVarPath","localVarUrlObj","baseOptions","localVarRequestOptions","localVarHeaderParameter","localVarQueryParameter","headersFromBaseOptions","ordersSubmitPostRequest","portfoliosPricePostRequest","swapCreatePostRequest","swapSubmitPostRequest","SDKApiFp","localVarAxiosParamCreator","localVarAxiosArgs","localVarOperationServerIndex","localVarOperationServerBasePath","SDKApiFactory","localVarFp","request","Configuration","param","mime","jsonMime","z","faucetResponseSchema","createSwapResponseSchema","createOrderResponseSchema","submitSwapSchema","createContext","hexToUint8Array","hexString","array","i","signTx","cip30Wallet","tx","partialSign","cborFormat","signConwayTx","signLegacyTx","cTx","LC","witnessSetHex","witnessSetCBOR","decode","witnessAsSet","sig","publicKey","vKey","signature","vKeyWitnesses","txWitnessSet","signedTx","toHex","formatState","state","weights","prices","amountsPerAsset","computeAmountPerAssetForInteraction","adaAmount","formattedState","zeroPerAsset","stateAfterInteraction","computeInteraction","amountPerAssetDiff","assetId","diffRat","mtkSupply","handleOrderCreation","apiBaseUrl","swapId","onError","onSuccess","config","sdk","interactionPayload","tokens","k","v","createOrderResponse","cbor","payloadSubmit","submitOrderResponse","substractAssets","assets","assetsToSubstract","result","cleanLEZero","handleSwapCreation","assetsInWallet","assetsRequired","totalInput","swapDeficit","swapAssets","userAssetsInvolved","payload","createSwapResponse","txId","themeVariables","keyframes","InfoSVG","forwardRef","color","ref","jsxs","jsx","infoSVG_default","stringToFormattedNumber","numberString","decimalPlaces","minimumDecimal","maximumDecimal","BuySellFees","props","formattedUserFee","formattedBatcherFee","formattedPlatformFee","formattedMTKAmount","formattedADA","formattedBatcherFeeMinswap","formattedDepositMinswap","userFee","batcherFee","platformFee","expectedMTK","expectedADA","amountToolTip","minSwapBatcherFee","minSwapDeposit","Flex","Fragment","Fee","label","info","imageSrc","Text","Tooltip","buy_sell_fees_default","ProfileSVG","profile_svg_default","StatusDot","status","showStatus","colors","isAnimating","Box","statusDot_svg_default","StepGuide","step","hasBorder","circlePadding","currentStep","Circle","steps_guide_default","cardanoSrc","swapSrc","BuySellInput","portfolioTicker","portfolioImageUrl","balance","setInputValue","mtkUnit","expectedAmount","withdrawLovelace","switchType","showBreakdown","hasInsufficientToken","portfolioAssets","background","handleFocus","handleBlur","e","handleSetMaxInput","PURPLE_STYLE","renderSendInputBox","NumericFormat","floatValue","values","Image","a","b","assetInPortfolio","renderReceiveInputBox","receiveValue","buy_sell_input_default","PurpleButton","primaryButtonColor","hoverButtonColor","Button","PurpleButton_default","NeutralButton","neutralButton_default","poweredByLogo","StepButtons","leftOnclick","leftText","rightOnclick","rightText","pb","pt","disableLeft","disableRight","rightBtnProps","leftBtnProps","poweredBy","step_buttons_default","MeteraTh","children","rest","Td","abs","n","PortfolioItem","brZero","fontSize","adaPortfolioWorth","assetWorth","adaWorthInPortfolio","tokensInPortfolio","adaTxWorth","adaWorthInTx","worthPercentageInTx","worthOfPortfolioAfterTx","adaWorthAfterTx","amountToModify","hasEnoughToken","Tr","PortfolioDataItem","portfolio_item_default","TokensBreakdown","amountsToModify","hideBreakdown","from","to","isModal","IconButton","CloseIcon","MdSwapHoriz","TableContainer","Table","Thead","tokens_breakdown_default","styled","emotionStyled","StyledModalContent","ModalContent","LoadingModal","minHeight","minWidth","Modal","ModalOverlay","ModalBody","TransactionInProgress","title","description","isSwap","Link","TransactionInProgressModal","transaction_in_progress_default","TransactionModal","maxWidth","p","TransactionSubmitted","onClose","route","routeText","TransactionSubmittedModal","disc","transaction_submitted_default","useBuySellFees","useMemo","mintedMicroMTK","userReceiveMTK","fees","withdrawUserLvc","rationalInput","adaMicroMTKPrice","computeFees","depositMicroMTK","useBuySellFees_default","MintBurnWrapper","width","mint_burn_wrapper_default","SwapItem","worthPercentageInPortfolio","worthPercentageAfterTx","tokensAfterTx","balanceAmount","depositAmount","adjustedBalance","pricePerToken","calculateBalanceValue","balanceValue","calculatedSwapValue","swapValue","swap_item_default","minswapSrc","SETTINGS","SettingsModal","padding","controls","setValue","disabled","Switch","settingsSRC","SwapBreakdown","setSwapDeficit","settingsModal","setSettingsModal","useState","handleSettingsModal","MdWest","swap_breakdown_default","InsufficientTokens","swapBalances","setLoading","setTxHash","toast","useToast","errorToast","assetBalance","txHash","insufficient_tokens_default","MintBurn","initialType","containerProps","setBalance","loading","setType","setShowBreakdown","forceInsufficientToken","setForceInsufficientToken","progressDisc","useDisclosure","temp","required","owned","deficit","useEffect","newBalance","createTx","amountToInteract","expectedWorth","handleSwapClick","InfoIcon","Collapse"],"mappings":"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","file":"ui.cjs","sourcesContent":["/** Errors that the backend will generate */\nexport enum ApiErrors {\n  BAD_REQUEST = 'Bad request',\n  UNKNOWN = 'There was a problem when building your transaction. Please try again',\n  NOT_ENOUGH_MONEY = \"You don't have enough tokens for this.\",\n  INVALID_IMAGE = 'Image format is not valid',\n  INVALID_ORDER = 'Invalid order',\n  CANT_CANCEL_IN_PROGRESS = \"Order being processed. Can't cancel right now\",\n  ORDER_NOT_FOUND = 'Order not found',\n  ALREADY_CANCELLING = 'Order already in cancelling process',\n  ALREADY_CANCELLED = 'Order already cancelled',\n  ORDER_CBOR_INVALID = 'The provided order is not valid',\n  SERVER_DOWN = 'Our servers are currently down. Please try again later',\n  UNAUTHORIZED = 'Unauthorized',\n  ORDER_EXPIRED = 'This order expired',\n  ORDER_MIGHT_HAVE_BEEN_CANCELLED = \"Can't cancel this order\",\n  PORTFOLIO_NOT_FOUND = \"The portfolio you requested doesn't exist\",\n  PORTFOLIO_CBOR_INVALID = 'The provided transaction is not valid',\n  RUN_OUT_OF_FUNDS = \"Your request might have clashed with someone else's. Try again\",\n  OVER_BUDGET = 'You requested too much for today. Try with other tokens or tomorrow.',\n}\n","import { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\n\nexport function bigNumberToBigRational(bigNumber: BigNumber): BigRational {\n  if (bigNumber.eq(0)) return new BigRational(0n, 1n);\n  const [numerator, denominator] = bigNumber\n    .toFraction()\n    .map((x) => BigInt(x.toFixed(0)));\n  return new BigRational(numerator, denominator).reduce();\n}\n\n/**\n * Warning: conversion might lose precision,e.g, 1/3 -> 0.33333333333333333333 != 1/3\n */\nexport function bigRationalToBigNumber(bigRational: BigRational): BigNumber {\n  const numerator = BigNumber(bigRational.getNumerator().toString());\n  const denominator = BigNumber(bigRational.getDenominator().toString());\n  return numerator.div(denominator);\n}\n\n/**\n * Converts the numeric format (from postgreSQL) into a BigRational instance\n *\n * @param dbNumber - string that represents number in the numeric postgreSQL format\n * @returns BigRational instance\n */\nexport function dbNumericToBigRational(dbNumber: string): BigRational {\n  return bigNumberToBigRational(dbNumericToBigNumber(dbNumber));\n}\n\n/**\n * Converts the numeric format (from postgreSQL) into a BigNumber instance\n *\n * @param dbNumber - string that represents number in the numeric postgreSQL format\n * @returns BigNumber instance\n */\nfunction dbNumericToBigNumber(dbNumber: string): BigNumber {\n  return BigNumber(dbNumber);\n}\n\nexport const min = (a: bigint, b: bigint) => (a < b ? a : b);\n","import { MTK_DECIMALS } from '@meteraprotocol/core';\nimport { initNufiDappCardanoSdk } from '@nufi/dapp-client-cardano';\nimport nufiCoreSdk from '@nufi/dapp-client-core';\nimport axios, { AxiosResponse } from 'axios';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport JSONBig from 'json-bigint';\nimport { C, fromHex, getAddressDetails, UTxO } from 'lucid-txpipe';\nimport { ApiErrors } from '../../errors.js';\nimport {\n  ArrayElement,\n  IPortfolioState,\n  Order,\n  WalletData,\n} from '../../types.js';\nimport { bigNumberToBigRational } from '../../utils.js';\n\nexport const getNufiWalletInitAddres = () => {\n  const network = process.env.NEXT_PUBLIC_NETWORK as\n    | 'Mainnet'\n    | 'Preview'\n    | 'Preprod'\n    | 'Custom';\n\n  switch (network) {\n    case 'Mainnet':\n      return 'https://wallet.nu.fi';\n    case 'Preprod':\n      return 'https://wallet-testnet-staging.nu.fi';\n    case 'Preview':\n      return 'https://wallet-preview-staging.nu.fi';\n    default:\n      return '';\n  }\n};\n\nexport const ValidWallets = [\n  'nami',\n  'eternl',\n  'vespr',\n  'flint',\n  'typhon',\n  'nufi',\n  'lace',\n  'metamask',\n] as const;\n\nexport type ValidWallet = (typeof ValidWallets)[number];\n\nexport type Balance = Record<string, bigint>;\n\n/**\n * Lib used parse/ stringify big integers from json\n * without losing precision (up to bigint precision)\n *\n */\nexport const JSONbig = JSONBig({\n  alwaysParseAsBig: true,\n  useNativeBigInt: true,\n  strict: true,\n});\n\n/**\n * Turns utxo into the right collateral balance\n *\n * @param utxo - The utxo to be converted\n * @returns The collateral of the utxo as `txHash#outputIndex`\n */\nexport const formatCollateralUTXO = (utxo: UTxO) =>\n  `${utxo.txHash}#${utxo.outputIndex}`;\n\nexport async function getWalletBalance(\n  wallet: WalletData['wallet'],\n): Promise<Balance> {\n  const changeAddress = getAddressDetails(await wallet.getChangeAddress())\n    .address.bech32;\n  const utxosHex = await wallet.getUtxos();\n  if (!utxosHex) {\n    return {};\n  }\n\n  const ownedUtxos = utxosHex\n    .map(fromHex)\n    .map(C.TransactionUnspentOutput.from_bytes)\n    .filter((utxo) => {\n      const utxoAddr = JSON.parse(utxo.output().address().to_json());\n      return utxoAddr === changeAddress;\n    });\n\n  /**\n   * [`${policy}${hexName}`] : amount\n   */\n  const partialBalance: Record<string, bigint> = { lovelace: 0n };\n\n  for (const utxo of ownedUtxos) {\n    const output = utxo.output();\n    const lovelace = output.amount().coin();\n    partialBalance['lovelace'] += BigInt(lovelace.to_str());\n    const multiAsset = output.amount().multiasset();\n    const value: Record<\n      string,\n      Record<string, string>\n    > = multiAsset?.to_js_value() || {};\n    for (const [policy, assetNamesDict] of Object.entries(value)) {\n      for (const [hexName, amount] of Object.entries(assetNamesDict)) {\n        const unit = `${policy}${hexName}`;\n        if (!partialBalance[unit]) {\n          partialBalance[unit] = BigInt(0);\n        }\n        partialBalance[unit] += BigInt(amount);\n      }\n    }\n  }\n  return partialBalance;\n  // return {};\n}\n\n/**\n * Gets the wallet that's going to be used to deposit/withdraw.\n *\n * @param window - The window object of the browser.\n * @returns the wallet API.\n */\nexport async function getWallet(\n  window: Window,\n  walletName: ValidWallet = 'eternl',\n) {\n  if (walletName === 'metamask') {\n    // Should be called before accessing `window.cardano.nufiSnap`\n    initNufiDappCardanoSdk(nufiCoreSdk, 'snap');\n    const walletAPI = await window.cardano?.nufiSnap?.enable();\n    return walletAPI;\n  }\n  if (window?.cardano?.[walletName]) {\n    const walletAPI = await window.cardano?.[walletName]?.enable();\n    return walletAPI;\n  }\n  console.log('Couldnt find wallet');\n  throw new Error(\"Couldn't find the wallet API\");\n}\n\n/**\n * Given the state of a portfolio, it calculates how much an MTK is worth\n * @returns The price of a single MTK\n */\nexport function getMTKPrice(portfolio: IPortfolioState) {\n  const tvl = portfolio.assets.reduce(\n    (acc, { price, amount, asset: { decimals } }) => {\n      return bigNumberToBigRational(BigNumber(price))\n        .mul(new BigRational(amount, 1n))\n        .mul(new BigRational(1n, BigInt(10 ** decimals)))\n        .add(acc);\n    },\n    new BigRational(0n, 1n),\n  );\n  return tvl.div(new BigRational(portfolio.supply, 1n)).reduce();\n}\n\n/**\n * Decimal to bigint safe conversion\n *\n * @param decimal - The decimal to be converted\n * @param method - Whether to ceil or floor the decimal\n * @returns The converted decimal as a bigint\n */\nexport function decimalToBigInt(\n  decimal: BigNumber,\n  roundingMode: 'floor' | 'ceil',\n) {\n  const roundingModeMap = {\n    floor: BigNumber.ROUND_FLOOR,\n    ceil: BigNumber.ROUND_CEIL,\n  };\n\n  // Use toFixed(0) to remove scientific notation when going to string\n  return BigInt(decimal.toFixed(0, roundingModeMap[roundingMode]));\n}\n\n/*\n * Checks that the wallet balance is enough for the interaction\n * @param walletBalance - The balance of the wallet\n * @param interactionBalance - The balance needed for the interaction\n */\nexport function isBalanceEnough(\n  walletBalance: Balance,\n  interactionBalance: Balance,\n) {\n  return Object.entries(interactionBalance).every(\n    ([unit, amount]) => (walletBalance[unit] || BigInt(0)) >= amount,\n  );\n}\n\n/** Function to serialize bigints properly,\n * if called with json bigint in the param.\n * It doesn't trigger the serialization mechanism of axios.\n * It also parses the body properly\n */\nexport async function postToAPI(url: string, data: string) {\n  return await axios.post(url, data, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      Accept: 'application/json',\n    },\n    transformRequest: [(data) => data],\n    transformResponse: [(data) => JSONbig.parse(data)],\n  });\n}\n\n/**\n * Function to get the unit of an asset in hex format\n */\nexport function assetToUnit(\n  asset: ArrayElement<IPortfolioState['assets']>['asset'],\n) {\n  return asset.currencySymbol === ''\n    ? 'lovelace'\n    : `${asset.currencySymbol}${asset.name}`;\n}\n\n/**\n * Given an error that's coming from the API, it returns a user friendly error\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const handleApiError = (err: any): ApiError => {\n  if (\n    err instanceof axios.AxiosError &&\n    err.response?.data &&\n    Object.values(ApiErrors).includes(err.response?.data)\n  ) {\n    const data = err.response.data;\n    switch (data) {\n      case ApiErrors.INVALID_ORDER:\n        // TODO handle refresh\n        return {\n          error:\n            'The data in your order is probably outdated. Refresh the page and try again',\n        };\n      case ApiErrors.ORDER_EXPIRED:\n        return { error: 'This order expired, try again.' };\n      case ApiErrors.ALREADY_CANCELLED:\n        return { error: 'This order was cancelled already' };\n      case ApiErrors.NOT_ENOUGH_MONEY:\n        return {\n          error:\n            'You ran out of tokens. Refresh your wallet and try again if you recharged',\n        };\n      case ApiErrors.BAD_REQUEST:\n        return {\n          error: 'Some of your input is wrong',\n        };\n      case ApiErrors.ALREADY_CANCELLING:\n        return { error: 'In process of cancelling' };\n      default:\n        return { error: data };\n    }\n  } else {\n    if (err.message.includes('ECONNREFUSED')) {\n      return {\n        error: 'Our servers are currently down. Please try again later',\n      };\n    }\n  }\n  return { error: 'Unknown error. Try again' };\n};\n\n/**\n * Function that checks if the user has enough tokens for the interaction\n */\nexport function userHasEnoughBalance(\n  userBalance: Balance,\n  interactionBalanceWithIds: Balance,\n  type: 'mint' | 'burn',\n  inputValue: BigNumber,\n  portfolioState: IPortfolioState,\n): boolean {\n  const interactionBalanceWithUnits = Object.fromEntries(\n    Object.entries(interactionBalanceWithIds).map(([id, amount]) => {\n      const asset = portfolioState.assets.find(\n        (asset) => asset.asset.id === id,\n      )!;\n      return [assetToUnit(asset.asset), amount];\n    }),\n  );\n\n  return type === 'mint'\n    ? isBalanceEnough(userBalance, interactionBalanceWithUnits)\n    : BigNumber(\n        (userBalance[portfolioState.portfolio.mtkUnit] || 0n).toString(),\n      )\n        .div(10 ** MTK_DECIMALS)\n        .gte(inputValue);\n}\n\nexport function getOrderStatus(order: Order) {\n  const status =\n    order.validationFailures?.length && !order.cancelledAt\n      ? 'Invalid'\n      : order.expiredAt\n        ? 'Failed'\n        : order.orderProcessedAt\n          ? order.slippageFail\n            ? 'Failed'\n            : 'Confirmed'\n          : order.processSubmittedAt\n            ? 'Processing'\n            : order.cancelledAt\n              ? 'Cancelled'\n              : order.cancelSubmittedAt\n                ? 'Cancelling'\n                : order.orderPlacedAt\n                  ? 'Pending'\n                  : 'Processing';\n  return status;\n}\n\n/**\n * Handler function types\n */\nexport type APIEventHandlers = {\n  onError: (err: string) => void;\n  onSuccess: (err: string) => void;\n};\n\nexport type ApiError = { error: string };\n\nexport type ApiResponse = AxiosResponse;\nexport const isError = (err: Response): err is ApiError =>\n  Object(err).hasOwnProperty('error');\ntype Response = ApiError | ApiResponse;\n","import {\n  computeInteraction,\n  MTK_DECIMALS,\n  PortfolioState as PortoflioStateBussinessLogic,\n} from '@meteraprotocol/core';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport { getAddressDetails } from 'lucid-txpipe';\nimport {\n  CreateOrderDeposit,\n  CreateOrderWithdraw,\n  OrdersSubmitPostRequest,\n  SDKApiFactory,\n  SwapCreatePostRequest,\n  SwapSubmitPostRequest,\n} from '../../../api/api.js';\nimport { Configuration } from '../../../api/configuration.js';\nimport {\n  createOrderResponseSchema,\n  createSwapResponseSchema,\n  IPortfolioState,\n  WalletData,\n} from '../../types.js';\nimport { bigRationalToBigNumber, dbNumericToBigRational } from '../../utils.js';\nimport {\n  APIEventHandlers,\n  decimalToBigInt,\n  getWalletBalance,\n  handleApiError,\n  isError,\n} from './index.js';\nimport { signTx } from './signTx.js';\n\n/**\n * Turns an object of type PortfolioState into an object that\n * can be used to compute the amount of tokens needed\n * (returned) given an amount of ADA\n *\n * @param state - The state the portfolio is in before the deposit/withdrawal\n * @returns A price, weight dictionary for each asset with keys of assetId.\n * And a dict with how many tokens there are in the portfolio and the supply\n * of MTK\n */\nexport function formatState(state: IPortfolioState) {\n  const weights: Record<string, BigRational> = {};\n  const prices: Record<string, BigRational> = {};\n  const amountsPerAsset: Record<string, bigint> = {};\n  for (const asset of state.assets) {\n    prices[asset.asset.id] = dbNumericToBigRational(asset.price).mul(\n      // correct price of asset to the right decimal\n      new BigRational(1n, BigInt(10 ** asset.asset.decimals)),\n    );\n    weights[asset.asset.id] = new BigRational(\n      asset.weightNum,\n      asset.weightDenom,\n    );\n    amountsPerAsset[asset.asset.id] = BigInt(asset.amount);\n  }\n  return {\n    prices,\n    weights,\n    state: { assets: amountsPerAsset, mtkSupply: state.supply },\n  };\n}\n\n/**\n * Wraps a call to `computeInteraction` for the UI.\n * @param inputValue - The amount of ADA to be deposited / withdrawn.\n * @param formattedState - The state the portfolio is in before the interaction.\n * @returns How much per asset needs to be deposited(withdrawn) and how many MTKs\n * are minted (burned)\n */\nexport function computeAmountPerAssetForInteraction(\n  adaAmount: BigRational,\n  formattedState: ReturnType<typeof formatState>,\n): { assets: Record<string, bigint>; mtkSupply: bigint } {\n  if (adaAmount.eq(new BigRational(0n, 1n))) {\n    const zeroPerAsset: Record<string, bigint> = {};\n    for (const [id] of Object.entries(formattedState.state.assets)) {\n      zeroPerAsset[id] = 0n;\n    }\n    return {\n      assets: zeroPerAsset,\n      mtkSupply: 0n,\n    };\n  }\n  const stateAfterInteraction = computeInteraction(\n    formattedState.prices,\n    formattedState.weights,\n    formattedState.state,\n    adaAmount,\n  );\n  // console.log({ nextState: stateAfterInteraction });\n  const roundingMode = adaAmount.gte(new BigRational(0n, 1n))\n    ? 'ceil'\n    : 'floor';\n\n  const amountPerAssetDiff: Record<string, bigint> = {};\n  for (const [assetId, amount] of Object.entries(formattedState.state.assets)) {\n    const diffRat = stateAfterInteraction.assets[assetId].subtract(\n      new BigRational(amount, 1n),\n    );\n    amountPerAssetDiff[assetId] = decimalToBigInt(\n      bigRationalToBigNumber(diffRat),\n      roundingMode,\n    );\n  }\n  const mtkSupply =\n    decimalToBigInt(\n      bigRationalToBigNumber(stateAfterInteraction.mtkSupply),\n      roundingMode,\n    ) - formattedState.state.mtkSupply;\n\n  return { assets: amountPerAssetDiff, mtkSupply };\n}\n\n/**\n * Creates an order in the backend. In case of error, it will call the `onError`\n * callback with the error message.\n */\nexport async function handleOrderCreation(\n  wallet: WalletData,\n  portfolio: IPortfolioState,\n  amountsPerAsset: PortoflioStateBussinessLogic<bigint, bigint>,\n  inputValue: BigNumber,\n  apiBaseUrl: string,\n  swapId: string | null,\n  { onError, onSuccess }: APIEventHandlers,\n) {\n  const config = new Configuration({ basePath: apiBaseUrl });\n  const sdk = SDKApiFactory(config);\n  try {\n    const balance = await getWalletBalance(wallet.wallet);\n    if (balance['lovelace'] < 10_000_000n) {\n      return onError('You need more tADA in your wallet to do this');\n    }\n\n    let interactionPayload: CreateOrderDeposit | CreateOrderWithdraw;\n    const tokens = Object.entries(amountsPerAsset.assets).map(([k, v]) => ({\n      id: k,\n      amount: v.toString(),\n    }));\n    if (inputValue.gt(0)) {\n      const deposit: CreateOrderDeposit = {\n        address: getAddressDetails(await wallet.wallet.getChangeAddress())\n          .address.bech32,\n        portfolioId: portfolio.portfolio.id,\n        maxBatcherFee: portfolio.batcherFee.toString(),\n        minMtkAcceptable: '1',\n        tokens,\n      };\n      interactionPayload = deposit;\n    } else {\n      const withdraw: CreateOrderWithdraw = {\n        address: getAddressDetails(await wallet.wallet.getChangeAddress())\n          .address.bech32,\n        portfolioId: portfolio.portfolio.id,\n        amount: decimalToBigInt(\n          inputValue.times(10 ** MTK_DECIMALS).abs(),\n          'floor',\n        ).toString(),\n        tokens,\n        maxBatcherFee: portfolio.batcherFee.toString(),\n        minWorthAcceptable: '1',\n      };\n      interactionPayload = withdraw;\n    }\n\n    const createOrderResponse = await sdk\n      .ordersCreatePost(interactionPayload)\n      .catch(handleApiError);\n\n    if (isError(createOrderResponse)) {\n      return onError(createOrderResponse.error);\n    }\n    const { cbor, id } = createOrderResponseSchema.parse(\n      createOrderResponse.data,\n    );\n    const signedTx = await signTx(wallet.wallet, cbor, false);\n    const payloadSubmit: OrdersSubmitPostRequest = { id, cbor: signedTx };\n    const submitOrderResponse = await sdk\n      .ordersSubmitPost(payloadSubmit)\n      .catch(handleApiError);\n\n    if (isError(submitOrderResponse)) {\n      return onError(submitOrderResponse.error);\n    }\n    onSuccess(id);\n    return id;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    console.error(err);\n    onError('Unknown error. Try again later');\n  }\n}\n\nfunction substractAssets(\n  assets: Record<string, bigint>,\n  assetsToSubstract: Record<string, bigint>,\n): Record<string, bigint> {\n  let result = { ...assets };\n  for (const [asset, amount] of Object.entries(assetsToSubstract)) {\n    if (assets[asset]) {\n      result[asset] = assets[asset] - amount;\n    }\n  }\n  return result;\n}\n\nfunction cleanLEZero(assets: Record<string, bigint>) {\n  for (const [asset, amount] of Object.entries(assets)) {\n    if (amount <= 0) {\n      delete assets[asset];\n    }\n  }\n}\n\n/**\n * Creates a swap order in the backend. In case of error, it will call the `onError`\n * callback with the error message.\n */\nexport async function handleSwapCreation(\n  wallet: WalletData,\n  portfolio: IPortfolioState,\n  assetsInWallet: Record<string, bigint>,\n  assetsRequired: Record<string, bigint>,\n  totalInput: bigint,\n  swapDeficit: boolean,\n  apiBaseUrl: string,\n  { onError, onSuccess }: APIEventHandlers,\n) {\n  const config = new Configuration({ basePath: apiBaseUrl });\n  const sdk = SDKApiFactory(config);\n  try {\n    const balance = await getWalletBalance(wallet.wallet);\n    if (balance['lovelace'] < 10_000_000n) {\n      return onError('You need more ADA in your wallet to do this');\n    }\n    let swapAssets = { ...assetsRequired };\n    let userAssetsInvolved: Record<string, bigint> = {};\n    if (swapDeficit) {\n      swapAssets = substractAssets(assetsRequired, assetsInWallet);\n      userAssetsInvolved = substractAssets(assetsRequired, swapAssets);\n      cleanLEZero(userAssetsInvolved);\n    }\n    cleanLEZero(swapAssets);\n\n    const payload: SwapCreatePostRequest = {\n      address: getAddressDetails(await wallet.wallet.getChangeAddress()).address\n        .bech32,\n      maxBatcherFee: portfolio.batcherFee.toString(),\n      totalAmount: totalInput.toString(),\n      userAssets: Object.entries(userAssetsInvolved).map(([k, v]) => ({\n        id: k,\n        amount: v.toString(),\n      })),\n      swap: Object.entries(swapAssets).map(([k, v]) => ({\n        id: k,\n        amount: v.toString(),\n      })),\n      portfolioId: portfolio.portfolio.id,\n    };\n\n    const createSwapResponse = await sdk\n      .swapCreatePost(payload)\n      .catch(handleApiError);\n\n    if (isError(createSwapResponse)) {\n      return onError(createSwapResponse.error);\n    }\n    const { cbor, txId } = createSwapResponseSchema.parse(\n      createSwapResponse.data,\n    );\n    const signedTx = await signTx(wallet.wallet, cbor, false, 'conway');\n    const payloadSubmit: SwapSubmitPostRequest = { cbor: signedTx };\n    const submitOrderResponse = await sdk\n      .swapSubmitPost(payloadSubmit)\n      .catch(handleApiError);\n    if (isError(submitOrderResponse)) {\n      return onError(submitOrderResponse.error);\n    }\n    onSuccess(txId);\n    return txId;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  } catch (err: any) {\n    console.error(err);\n    onError('Unknown error. Try again later');\n  }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Metera API\n * API swagger documentation of sdk\n *\n * The version of the OpenAPI document: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport type { Configuration } from './configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';\nimport globalAxios from 'axios';\n\nexport const BASE_PATH = 'http://localhost:3003'.replace(/\\/+$/, '');\n\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n  csv: ',',\n  ssv: ' ',\n  tsv: '\\t',\n  pipes: '|',\n};\n\n/**\n *\n * @export\n * @interface RequestArgs\n */\nexport interface RequestArgs {\n  url: string;\n  options: RawAxiosRequestConfig;\n}\n\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n  protected configuration: Configuration | undefined;\n\n  constructor(\n    configuration?: Configuration,\n    protected basePath: string = BASE_PATH,\n    protected axios: AxiosInstance = globalAxios,\n  ) {\n    if (configuration) {\n      this.configuration = configuration;\n      this.basePath = configuration.basePath ?? basePath;\n    }\n  }\n}\n\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n  constructor(\n    public field: string,\n    msg?: string,\n  ) {\n    super(msg);\n    this.name = 'RequiredError';\n  }\n}\n\ninterface ServerMap {\n  [key: string]: {\n    url: string;\n    description: string;\n  }[];\n}\n\n/**\n *\n * @export\n */\nexport const operationServerMap: ServerMap = {};\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Metera API\n * API swagger documentation of sdk\n *\n * The version of the OpenAPI document: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport type { Configuration } from './configuration';\nimport type { RequestArgs } from './base';\nimport type { AxiosInstance, AxiosResponse } from 'axios';\nimport { RequiredError } from './base';\n\n/**\n *\n * @export\n */\nexport const DUMMY_BASE_URL = 'https://example.com';\n\n/**\n *\n * @throws {RequiredError}\n * @export\n */\nexport const assertParamExists = function (\n  functionName: string,\n  paramName: string,\n  paramValue: unknown,\n) {\n  if (paramValue === null || paramValue === undefined) {\n    throw new RequiredError(\n      paramName,\n      `Required parameter ${paramName} was null or undefined when calling ${functionName}.`,\n    );\n  }\n};\n\n/**\n *\n * @export\n */\nexport const setApiKeyToObject = async function (\n  object: any,\n  keyParamName: string,\n  configuration?: Configuration,\n) {\n  if (configuration && configuration.apiKey) {\n    const localVarApiKeyValue =\n      typeof configuration.apiKey === 'function'\n        ? await configuration.apiKey(keyParamName)\n        : await configuration.apiKey;\n    object[keyParamName] = localVarApiKeyValue;\n  }\n};\n\n/**\n *\n * @export\n */\nexport const setBasicAuthToObject = function (\n  object: any,\n  configuration?: Configuration,\n) {\n  if (configuration && (configuration.username || configuration.password)) {\n    object['auth'] = {\n      username: configuration.username,\n      password: configuration.password,\n    };\n  }\n};\n\n/**\n *\n * @export\n */\nexport const setBearerAuthToObject = async function (\n  object: any,\n  configuration?: Configuration,\n) {\n  if (configuration && configuration.accessToken) {\n    const accessToken =\n      typeof configuration.accessToken === 'function'\n        ? await configuration.accessToken()\n        : await configuration.accessToken;\n    object['Authorization'] = 'Bearer ' + accessToken;\n  }\n};\n\n/**\n *\n * @export\n */\nexport const setOAuthToObject = async function (\n  object: any,\n  name: string,\n  scopes: string[],\n  configuration?: Configuration,\n) {\n  if (configuration && configuration.accessToken) {\n    const localVarAccessTokenValue =\n      typeof configuration.accessToken === 'function'\n        ? await configuration.accessToken(name, scopes)\n        : await configuration.accessToken;\n    object['Authorization'] = 'Bearer ' + localVarAccessTokenValue;\n  }\n};\n\nfunction setFlattenedQueryParams(\n  urlSearchParams: URLSearchParams,\n  parameter: any,\n  key: string = '',\n): void {\n  if (parameter == null) return;\n  if (typeof parameter === 'object') {\n    if (Array.isArray(parameter)) {\n      (parameter as any[]).forEach((item) =>\n        setFlattenedQueryParams(urlSearchParams, item, key),\n      );\n    } else {\n      Object.keys(parameter).forEach((currentKey) =>\n        setFlattenedQueryParams(\n          urlSearchParams,\n          parameter[currentKey],\n          `${key}${key !== '' ? '.' : ''}${currentKey}`,\n        ),\n      );\n    }\n  } else {\n    if (urlSearchParams.has(key)) {\n      urlSearchParams.append(key, parameter);\n    } else {\n      urlSearchParams.set(key, parameter);\n    }\n  }\n}\n\n/**\n *\n * @export\n */\nexport const setSearchParams = function (url: URL, ...objects: any[]) {\n  const searchParams = new URLSearchParams(url.search);\n  setFlattenedQueryParams(searchParams, objects);\n  url.search = searchParams.toString();\n};\n\n/**\n *\n * @export\n */\nexport const serializeDataIfNeeded = function (\n  value: any,\n  requestOptions: any,\n  configuration?: Configuration,\n) {\n  const nonString = typeof value !== 'string';\n  const needsSerialization =\n    nonString && configuration && configuration.isJsonMime\n      ? configuration.isJsonMime(requestOptions.headers['Content-Type'])\n      : nonString;\n  return needsSerialization\n    ? JSON.stringify(value !== undefined ? value : {})\n    : value || '';\n};\n\n/**\n *\n * @export\n */\nexport const toPathString = function (url: URL) {\n  return url.pathname + url.search + url.hash;\n};\n\n/**\n *\n * @export\n */\nexport const createRequestFunction = function (\n  axiosArgs: RequestArgs,\n  globalAxios: AxiosInstance,\n  BASE_PATH: string,\n  configuration?: Configuration,\n) {\n  return <T = unknown, R = AxiosResponse<T>>(\n    axios: AxiosInstance = globalAxios,\n    basePath: string = BASE_PATH,\n  ) => {\n    const axiosRequestArgs = {\n      ...axiosArgs.options,\n      url:\n        (axios.defaults.baseURL ? '' : (configuration?.basePath ?? basePath)) +\n        axiosArgs.url,\n    };\n    return axios.request<T, R>(axiosRequestArgs);\n  };\n};\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Metera API\n * API swagger documentation of sdk\n *\n * The version of the OpenAPI document: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nimport type { Configuration } from './configuration';\nimport type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios';\nimport globalAxios from 'axios';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport {\n  DUMMY_BASE_URL,\n  assertParamExists,\n  setApiKeyToObject,\n  setBasicAuthToObject,\n  setBearerAuthToObject,\n  setOAuthToObject,\n  setSearchParams,\n  serializeDataIfNeeded,\n  toPathString,\n  createRequestFunction,\n} from './common';\nimport type { RequestArgs } from './base';\n// @ts-ignore\nimport {\n  BASE_PATH,\n  COLLECTION_FORMATS,\n  BaseAPI,\n  RequiredError,\n  operationServerMap,\n} from './base';\n\n/**\n *\n * @export\n * @interface CreateOrderDeposit\n */\nexport interface CreateOrderDeposit {\n  /**\n   * Cardano address in Bech32\n   * @type {string}\n   * @memberof CreateOrderDeposit\n   */\n  address: string;\n  /**\n   * Portfolio ID for the operation\n   * @type {string}\n   * @memberof CreateOrderDeposit\n   */\n  portfolioId: string;\n  /**\n   * Tokens involved in the operation\n   * @type {Array<CreateOrderDepositTokensInner>}\n   * @memberof CreateOrderDeposit\n   */\n  tokens: Array<CreateOrderDepositTokensInner>;\n  /**\n   * Maximum batcher fee for the operation\n   * @type {string}\n   * @memberof CreateOrderDeposit\n   */\n  maxBatcherFee: string;\n  /**\n   * Minimum MTK acceptable for deposits\n   * @type {string}\n   * @memberof CreateOrderDeposit\n   */\n  minMtkAcceptable: string;\n}\n/**\n *\n * @export\n * @interface CreateOrderDepositTokensInner\n */\nexport interface CreateOrderDepositTokensInner {\n  /**\n   * Token ID\n   * @type {string}\n   * @memberof CreateOrderDepositTokensInner\n   */\n  id: string;\n  /**\n   * Token amount\n   * @type {string}\n   * @memberof CreateOrderDepositTokensInner\n   */\n  amount: string;\n}\n/**\n * @type CreateOrderResponse\n * @export\n */\nexport type CreateOrderResponse = CreateOrderResponse200 | ErrorResponse;\n\n/**\n *\n * @export\n * @interface CreateOrderResponse200\n */\nexport interface CreateOrderResponse200 {\n  /**\n   *\n   * @type {string}\n   * @memberof CreateOrderResponse200\n   */\n  cbor: string;\n  /**\n   *\n   * @type {string}\n   * @memberof CreateOrderResponse200\n   */\n  id: string;\n}\n/**\n *\n * @export\n * @interface CreateOrderWithdraw\n */\nexport interface CreateOrderWithdraw {\n  /**\n   * Cardano address in Bech32\n   * @type {string}\n   * @memberof CreateOrderWithdraw\n   */\n  address: string;\n  /**\n   * Portfolio ID for the operation\n   * @type {string}\n   * @memberof CreateOrderWithdraw\n   */\n  portfolioId: string;\n  /**\n   * Tokens involved in the operation\n   * @type {Array<CreateOrderDepositTokensInner>}\n   * @memberof CreateOrderWithdraw\n   */\n  tokens: Array<CreateOrderDepositTokensInner>;\n  /**\n   * Maximum batcher fee for the operation\n   * @type {string}\n   * @memberof CreateOrderWithdraw\n   */\n  maxBatcherFee: string;\n  /**\n   * Amount for withdrawals\n   * @type {string}\n   * @memberof CreateOrderWithdraw\n   */\n  amount: string;\n  /**\n   * Minimum worth acceptable for withdrawals\n   * @type {string}\n   * @memberof CreateOrderWithdraw\n   */\n  minWorthAcceptable: string;\n}\n/**\n * @type CreateSwapResponse\n * @export\n */\nexport type CreateSwapResponse = CreateSwapResponse200 | ErrorResponse;\n\n/**\n *\n * @export\n * @interface CreateSwapResponse200\n */\nexport interface CreateSwapResponse200 {\n  /**\n   * Unsigned transaction CBOR\n   * @type {string}\n   * @memberof CreateSwapResponse200\n   */\n  cbor: string;\n  /**\n   * Transaction ID\n   * @type {string}\n   * @memberof CreateSwapResponse200\n   */\n  txId: string;\n}\n/**\n *\n * @export\n * @interface ErrorResponse\n */\nexport interface ErrorResponse {\n  /**\n   * Error type or code\n   * @type {string}\n   * @memberof ErrorResponse\n   */\n  error: string;\n  /**\n   * Detailed error message\n   * @type {string}\n   * @memberof ErrorResponse\n   */\n  message: string;\n}\n/**\n * @type GetPortfolioPriceResponse\n * @export\n */\nexport type GetPortfolioPriceResponse =\n  | Array<GetPortfolioPriceResponse200Inner>\n  | ErrorResponse;\n\n/**\n *\n * @export\n * @interface GetPortfolioPriceResponse200Inner\n */\nexport interface GetPortfolioPriceResponse200Inner {\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioPriceResponse200Inner\n   */\n  date: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioPriceResponse200Inner\n   */\n  price: string;\n}\n/**\n * @type GetPortfolioStateResponse\n * @export\n */\nexport type GetPortfolioStateResponse =\n  | ErrorResponse\n  | GetPortfolioStateResponse200;\n\n/**\n *\n * @export\n * @interface GetPortfolioStateResponse200\n */\nexport interface GetPortfolioStateResponse200 {\n  /**\n   *\n   * @type {GetPortfolioStateResponse200Portfolio}\n   * @memberof GetPortfolioStateResponse200\n   */\n  portfolio: GetPortfolioStateResponse200Portfolio;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200\n   */\n  price: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200\n   */\n  supply: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200\n   */\n  platformFee: string;\n  /**\n   *\n   * @type {Array<GetPortfolioStateResponse200AssetsInner>}\n   * @memberof GetPortfolioStateResponse200\n   */\n  assets: Array<GetPortfolioStateResponse200AssetsInner>;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200\n   */\n  entryFee: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200\n   */\n  exitFee: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200\n   */\n  batcherFee: string;\n}\n/**\n *\n * @export\n * @interface GetPortfolioStateResponse200AssetsInner\n */\nexport interface GetPortfolioStateResponse200AssetsInner {\n  /**\n   *\n   * @type {GetPortfolioStateResponse200AssetsInnerAsset}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  asset: GetPortfolioStateResponse200AssetsInnerAsset;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  price: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  priceCreatedAt: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  priceId: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  amount: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  weightNum: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  weightDenom: string;\n  /**\n   *\n   * @type {number}\n   * @memberof GetPortfolioStateResponse200AssetsInner\n   */\n  order: number;\n}\n/**\n *\n * @export\n * @interface GetPortfolioStateResponse200AssetsInnerAsset\n */\nexport interface GetPortfolioStateResponse200AssetsInnerAsset {\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  id: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  name: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  ticker: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  imageUrl: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  currencySymbol: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  mainnetUnit: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  mainnetFingerprint: string;\n  /**\n   *\n   * @type {number}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  decimals: number;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  riskScore: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200AssetsInnerAsset\n   */\n  pairConversion: string;\n}\n/**\n *\n * @export\n * @interface GetPortfolioStateResponse200Portfolio\n */\nexport interface GetPortfolioStateResponse200Portfolio {\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  id: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  name: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  ticker: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  imageUrl: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  managerId: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  createdAt: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  policyId: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  onchainId: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  mtkUnit: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfolioStateResponse200Portfolio\n   */\n  featured: string;\n}\n/**\n * @type GetPortfoliosResponse\n * @export\n */\nexport type GetPortfoliosResponse =\n  | Array<GetPortfoliosResponse200Inner>\n  | ErrorResponse;\n\n/**\n *\n * @export\n * @interface GetPortfoliosResponse200Inner\n */\nexport interface GetPortfoliosResponse200Inner {\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  id: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  name: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  description: string;\n  /**\n   *\n   * @type {number}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  price: number;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  imageUrl: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  ticker: string;\n  /**\n   *\n   * @type {GetPortfoliosResponse200InnerManager}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  manager: GetPortfoliosResponse200InnerManager;\n  /**\n   *\n   * @type {Array<GetPortfoliosResponse200InnerAssetsInner>}\n   * @memberof GetPortfoliosResponse200Inner\n   */\n  assets: Array<GetPortfoliosResponse200InnerAssetsInner>;\n}\n/**\n *\n * @export\n * @interface GetPortfoliosResponse200InnerAssetsInner\n */\nexport interface GetPortfoliosResponse200InnerAssetsInner {\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerAssetsInner\n   */\n  hexName: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerAssetsInner\n   */\n  policyId: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerAssetsInner\n   */\n  ticker: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerAssetsInner\n   */\n  imageUrl: string;\n}\n/**\n *\n * @export\n * @interface GetPortfoliosResponse200InnerManager\n */\nexport interface GetPortfoliosResponse200InnerManager {\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerManager\n   */\n  name: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerManager\n   */\n  address: string;\n  /**\n   *\n   * @type {string}\n   * @memberof GetPortfoliosResponse200InnerManager\n   */\n  imageUrl: string;\n  /**\n   *\n   * @type {boolean}\n   * @memberof GetPortfoliosResponse200InnerManager\n   */\n  verified: boolean;\n}\n/**\n * Invalid request or insufficient funds\n * @export\n * @interface OrdersCreatePost400Response\n */\nexport interface OrdersCreatePost400Response {\n  [key: string]: any;\n\n  /**\n   *\n   * @type {string}\n   * @memberof OrdersCreatePost400Response\n   */\n  error: string;\n  /**\n   *\n   * @type {string}\n   * @memberof OrdersCreatePost400Response\n   */\n  message: string;\n}\n/**\n * @type OrdersCreatePostRequest\n * @export\n */\nexport type OrdersCreatePostRequest = CreateOrderDeposit | CreateOrderWithdraw;\n\n/**\n *\n * @export\n * @interface OrdersSubmitPostRequest\n */\nexport interface OrdersSubmitPostRequest {\n  /**\n   *\n   * @type {string}\n   * @memberof OrdersSubmitPostRequest\n   */\n  cbor: string;\n  /**\n   *\n   * @type {string}\n   * @memberof OrdersSubmitPostRequest\n   */\n  id: string;\n}\n/**\n *\n * @export\n * @interface PortfoliosPricePostRequest\n */\nexport interface PortfoliosPricePostRequest {\n  /**\n   *\n   * @type {string}\n   * @memberof PortfoliosPricePostRequest\n   */\n  portfolioId: string;\n  /**\n   *\n   * @type {string}\n   * @memberof PortfoliosPricePostRequest\n   */\n  period: PortfoliosPricePostRequestPeriodEnum;\n}\n\nexport const PortfoliosPricePostRequestPeriodEnum = {\n  _24h: '24h',\n  _7d: '7d',\n  _30d: '30d',\n  All: 'all',\n} as const;\n\nexport type PortfoliosPricePostRequestPeriodEnum =\n  (typeof PortfoliosPricePostRequestPeriodEnum)[keyof typeof PortfoliosPricePostRequestPeriodEnum];\n\n/**\n * @type SubmitOrderResponse\n * @export\n */\nexport type SubmitOrderResponse = ErrorResponse | SubmitOrderResponse200;\n\n/**\n *\n * @export\n * @interface SubmitOrderResponse200\n */\nexport interface SubmitOrderResponse200 {\n  /**\n   *\n   * @type {string}\n   * @memberof SubmitOrderResponse200\n   */\n  id: string;\n}\n/**\n * @type SubmitSwapResponse\n * @export\n */\nexport type SubmitSwapResponse = ErrorResponse | SubmitSwapResponse200;\n\n/**\n *\n * @export\n * @interface SubmitSwapResponse200\n */\nexport interface SubmitSwapResponse200 {\n  /**\n   *\n   * @type {string}\n   * @memberof SubmitSwapResponse200\n   */\n  id: string;\n}\n/**\n * Invalid request\n * @export\n * @interface SwapCreatePost400Response\n */\nexport interface SwapCreatePost400Response {\n  [key: string]: any;\n\n  /**\n   *\n   * @type {string}\n   * @memberof SwapCreatePost400Response\n   */\n  error: string;\n  /**\n   *\n   * @type {string}\n   * @memberof SwapCreatePost400Response\n   */\n  message: string;\n}\n/**\n *\n * @export\n * @interface SwapCreatePostRequest\n */\nexport interface SwapCreatePostRequest {\n  [key: string]: any;\n\n  /**\n   * Portfolio ID for the swap\n   * @type {string}\n   * @memberof SwapCreatePostRequest\n   */\n  portfolioId: string;\n  /**\n   * User Cardano address in Bech32\n   * @type {string}\n   * @memberof SwapCreatePostRequest\n   */\n  address: string;\n  /**\n   * Total amount for the swap\n   * @type {string}\n   * @memberof SwapCreatePostRequest\n   */\n  totalAmount: string;\n  /**\n   * User assets involved in the swap\n   * @type {Array<SwapCreatePostRequestUserAssetsInner>}\n   * @memberof SwapCreatePostRequest\n   */\n  userAssets: Array<SwapCreatePostRequestUserAssetsInner>;\n  /**\n   * Assets to swap\n   * @type {Array<SwapCreatePostRequestSwapInner>}\n   * @memberof SwapCreatePostRequest\n   */\n  swap: Array<SwapCreatePostRequestSwapInner>;\n  /**\n   * Maximum batcher fee for the swap\n   * @type {string}\n   * @memberof SwapCreatePostRequest\n   */\n  maxBatcherFee: string;\n  /**\n   * Optional UTXOs for the swap\n   * @type {Array<SwapCreatePostRequestUtxosInner>}\n   * @memberof SwapCreatePostRequest\n   */\n  utxos?: Array<SwapCreatePostRequestUtxosInner>;\n}\n/**\n *\n * @export\n * @interface SwapCreatePostRequestSwapInner\n */\nexport interface SwapCreatePostRequestSwapInner {\n  /**\n   * Asset ID to swap\n   * @type {string}\n   * @memberof SwapCreatePostRequestSwapInner\n   */\n  id: string;\n  /**\n   * Amount to swap\n   * @type {string}\n   * @memberof SwapCreatePostRequestSwapInner\n   */\n  amount: string;\n}\n/**\n *\n * @export\n * @interface SwapCreatePostRequestUserAssetsInner\n */\nexport interface SwapCreatePostRequestUserAssetsInner {\n  /**\n   * Asset ID\n   * @type {string}\n   * @memberof SwapCreatePostRequestUserAssetsInner\n   */\n  id: string;\n  /**\n   * Amount of the asset\n   * @type {string}\n   * @memberof SwapCreatePostRequestUserAssetsInner\n   */\n  amount: string;\n}\n/**\n *\n * @export\n * @interface SwapCreatePostRequestUtxosInner\n */\nexport interface SwapCreatePostRequestUtxosInner {\n  /**\n   * Transaction hash\n   * @type {string}\n   * @memberof SwapCreatePostRequestUtxosInner\n   */\n  txHash: string;\n  /**\n   * UTXO output index\n   * @type {number}\n   * @memberof SwapCreatePostRequestUtxosInner\n   */\n  outputIndex: number;\n  /**\n   *\n   * @type {SwapCreatePostRequestUtxosInnerAssets}\n   * @memberof SwapCreatePostRequestUtxosInner\n   */\n  assets: SwapCreatePostRequestUtxosInnerAssets;\n  /**\n   * UTXO address\n   * @type {string}\n   * @memberof SwapCreatePostRequestUtxosInner\n   */\n  address: string;\n}\n/**\n * Assets in the UTXO\n * @export\n * @interface SwapCreatePostRequestUtxosInnerAssets\n */\nexport interface SwapCreatePostRequestUtxosInnerAssets {\n  /**\n   * Asset ID in UTXO\n   * @type {string}\n   * @memberof SwapCreatePostRequestUtxosInnerAssets\n   */\n  id?: string;\n  /**\n   * Amount in UTXO\n   * @type {string}\n   * @memberof SwapCreatePostRequestUtxosInnerAssets\n   */\n  amount?: string;\n}\n/**\n *\n * @export\n * @interface SwapSubmitPostRequest\n */\nexport interface SwapSubmitPostRequest {\n  /**\n   *\n   * @type {string}\n   * @memberof SwapSubmitPostRequest\n   */\n  cbor: string;\n}\n\n/**\n * SDKApi - axios parameter creator\n * @export\n */\nexport const SDKApiAxiosParamCreator = function (\n  configuration?: Configuration,\n) {\n  return {\n    /**\n     * Place a new order\n     * @param {OrdersCreatePostRequest} [ordersCreatePostRequest]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    ordersCreatePost: async (\n      ordersCreatePostRequest?: OrdersCreatePostRequest,\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      const localVarPath = `/orders/create`;\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'POST',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      localVarHeaderParameter['Content-Type'] = 'application/json';\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n      localVarRequestOptions.data = serializeDataIfNeeded(\n        ordersCreatePostRequest,\n        localVarRequestOptions,\n        configuration,\n      );\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * Submit the placed order\n     * @param {OrdersSubmitPostRequest} ordersSubmitPostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    ordersSubmitPost: async (\n      ordersSubmitPostRequest: OrdersSubmitPostRequest,\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      // verify required parameter 'ordersSubmitPostRequest' is not null or undefined\n      assertParamExists(\n        'ordersSubmitPost',\n        'ordersSubmitPostRequest',\n        ordersSubmitPostRequest,\n      );\n      const localVarPath = `/orders/submit`;\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'POST',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      localVarHeaderParameter['Content-Type'] = 'application/json';\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n      localVarRequestOptions.data = serializeDataIfNeeded(\n        ordersSubmitPostRequest,\n        localVarRequestOptions,\n        configuration,\n      );\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * Get all portfolios data\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    portfoliosGet: async (\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      const localVarPath = `/portfolios`;\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'GET',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * Get price of portfolio over certain period of time\n     * @param {PortfoliosPricePostRequest} portfoliosPricePostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    portfoliosPricePost: async (\n      portfoliosPricePostRequest: PortfoliosPricePostRequest,\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      // verify required parameter 'portfoliosPricePostRequest' is not null or undefined\n      assertParamExists(\n        'portfoliosPricePost',\n        'portfoliosPricePostRequest',\n        portfoliosPricePostRequest,\n      );\n      const localVarPath = `/portfolios/price`;\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'POST',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      localVarHeaderParameter['Content-Type'] = 'application/json';\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n      localVarRequestOptions.data = serializeDataIfNeeded(\n        portfoliosPricePostRequest,\n        localVarRequestOptions,\n        configuration,\n      );\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * Get portfolio state by id\n     * @param {string} id\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    portfoliosStateIdGet: async (\n      id: string,\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      // verify required parameter 'id' is not null or undefined\n      assertParamExists('portfoliosStateIdGet', 'id', id);\n      const localVarPath = `/portfolios/state/{id}`.replace(\n        `{${'id'}}`,\n        encodeURIComponent(String(id)),\n      );\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'GET',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * Creates a new swap for a given portfolio and user assets.\n     * @param {SwapCreatePostRequest} swapCreatePostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    swapCreatePost: async (\n      swapCreatePostRequest: SwapCreatePostRequest,\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      // verify required parameter 'swapCreatePostRequest' is not null or undefined\n      assertParamExists(\n        'swapCreatePost',\n        'swapCreatePostRequest',\n        swapCreatePostRequest,\n      );\n      const localVarPath = `/swap/create`;\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'POST',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      localVarHeaderParameter['Content-Type'] = 'application/json';\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n      localVarRequestOptions.data = serializeDataIfNeeded(\n        swapCreatePostRequest,\n        localVarRequestOptions,\n        configuration,\n      );\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n    /**\n     * Submits a swap for a given portfolio and user assets.\n     * @param {SwapSubmitPostRequest} swapSubmitPostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    swapSubmitPost: async (\n      swapSubmitPostRequest: SwapSubmitPostRequest,\n      options: RawAxiosRequestConfig = {},\n    ): Promise<RequestArgs> => {\n      // verify required parameter 'swapSubmitPostRequest' is not null or undefined\n      assertParamExists(\n        'swapSubmitPost',\n        'swapSubmitPostRequest',\n        swapSubmitPostRequest,\n      );\n      const localVarPath = `/swap/submit`;\n      // use dummy base URL string because the URL constructor only accepts absolute URLs.\n      const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);\n      let baseOptions;\n      if (configuration) {\n        baseOptions = configuration.baseOptions;\n      }\n\n      const localVarRequestOptions = {\n        method: 'POST',\n        ...baseOptions,\n        ...options,\n      };\n      const localVarHeaderParameter = {} as any;\n      const localVarQueryParameter = {} as any;\n\n      localVarHeaderParameter['Content-Type'] = 'application/json';\n\n      setSearchParams(localVarUrlObj, localVarQueryParameter);\n      let headersFromBaseOptions =\n        baseOptions && baseOptions.headers ? baseOptions.headers : {};\n      localVarRequestOptions.headers = {\n        ...localVarHeaderParameter,\n        ...headersFromBaseOptions,\n        ...options.headers,\n      };\n      localVarRequestOptions.data = serializeDataIfNeeded(\n        swapSubmitPostRequest,\n        localVarRequestOptions,\n        configuration,\n      );\n\n      return {\n        url: toPathString(localVarUrlObj),\n        options: localVarRequestOptions,\n      };\n    },\n  };\n};\n\n/**\n * SDKApi - functional programming interface\n * @export\n */\nexport const SDKApiFp = function (configuration?: Configuration) {\n  const localVarAxiosParamCreator = SDKApiAxiosParamCreator(configuration);\n  return {\n    /**\n     * Place a new order\n     * @param {OrdersCreatePostRequest} [ordersCreatePostRequest]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async ordersCreatePost(\n      ordersCreatePostRequest?: OrdersCreatePostRequest,\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<CreateOrderResponse>\n    > {\n      const localVarAxiosArgs =\n        await localVarAxiosParamCreator.ordersCreatePost(\n          ordersCreatePostRequest,\n          options,\n        );\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.ordersCreatePost']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n    /**\n     * Submit the placed order\n     * @param {OrdersSubmitPostRequest} ordersSubmitPostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async ordersSubmitPost(\n      ordersSubmitPostRequest: OrdersSubmitPostRequest,\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<SubmitOrderResponse>\n    > {\n      const localVarAxiosArgs =\n        await localVarAxiosParamCreator.ordersSubmitPost(\n          ordersSubmitPostRequest,\n          options,\n        );\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.ordersSubmitPost']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n    /**\n     * Get all portfolios data\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async portfoliosGet(\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<GetPortfoliosResponse>\n    > {\n      const localVarAxiosArgs =\n        await localVarAxiosParamCreator.portfoliosGet(options);\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.portfoliosGet']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n    /**\n     * Get price of portfolio over certain period of time\n     * @param {PortfoliosPricePostRequest} portfoliosPricePostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async portfoliosPricePost(\n      portfoliosPricePostRequest: PortfoliosPricePostRequest,\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<GetPortfolioPriceResponse>\n    > {\n      const localVarAxiosArgs =\n        await localVarAxiosParamCreator.portfoliosPricePost(\n          portfoliosPricePostRequest,\n          options,\n        );\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.portfoliosPricePost']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n    /**\n     * Get portfolio state by id\n     * @param {string} id\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async portfoliosStateIdGet(\n      id: string,\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<GetPortfolioStateResponse>\n    > {\n      const localVarAxiosArgs =\n        await localVarAxiosParamCreator.portfoliosStateIdGet(id, options);\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.portfoliosStateIdGet']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n    /**\n     * Creates a new swap for a given portfolio and user assets.\n     * @param {SwapCreatePostRequest} swapCreatePostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async swapCreatePost(\n      swapCreatePostRequest: SwapCreatePostRequest,\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<CreateSwapResponse>\n    > {\n      const localVarAxiosArgs = await localVarAxiosParamCreator.swapCreatePost(\n        swapCreatePostRequest,\n        options,\n      );\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.swapCreatePost']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n    /**\n     * Submits a swap for a given portfolio and user assets.\n     * @param {SwapSubmitPostRequest} swapSubmitPostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    async swapSubmitPost(\n      swapSubmitPostRequest: SwapSubmitPostRequest,\n      options?: RawAxiosRequestConfig,\n    ): Promise<\n      (\n        axios?: AxiosInstance,\n        basePath?: string,\n      ) => AxiosPromise<SubmitSwapResponse>\n    > {\n      const localVarAxiosArgs = await localVarAxiosParamCreator.swapSubmitPost(\n        swapSubmitPostRequest,\n        options,\n      );\n      const localVarOperationServerIndex = configuration?.serverIndex ?? 0;\n      const localVarOperationServerBasePath =\n        operationServerMap['SDKApi.swapSubmitPost']?.[\n          localVarOperationServerIndex\n        ]?.url;\n      return (axios, basePath) =>\n        createRequestFunction(\n          localVarAxiosArgs,\n          globalAxios,\n          BASE_PATH,\n          configuration,\n        )(axios, localVarOperationServerBasePath || basePath);\n    },\n  };\n};\n\n/**\n * SDKApi - factory interface\n * @export\n */\nexport const SDKApiFactory = function (\n  configuration?: Configuration,\n  basePath?: string,\n  axios?: AxiosInstance,\n) {\n  const localVarFp = SDKApiFp(configuration);\n  return {\n    /**\n     * Place a new order\n     * @param {OrdersCreatePostRequest} [ordersCreatePostRequest]\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    ordersCreatePost(\n      ordersCreatePostRequest?: OrdersCreatePostRequest,\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<CreateOrderResponse> {\n      return localVarFp\n        .ordersCreatePost(ordersCreatePostRequest, options)\n        .then((request) => request(axios, basePath));\n    },\n    /**\n     * Submit the placed order\n     * @param {OrdersSubmitPostRequest} ordersSubmitPostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    ordersSubmitPost(\n      ordersSubmitPostRequest: OrdersSubmitPostRequest,\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<SubmitOrderResponse> {\n      return localVarFp\n        .ordersSubmitPost(ordersSubmitPostRequest, options)\n        .then((request) => request(axios, basePath));\n    },\n    /**\n     * Get all portfolios data\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    portfoliosGet(\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<GetPortfoliosResponse> {\n      return localVarFp\n        .portfoliosGet(options)\n        .then((request) => request(axios, basePath));\n    },\n    /**\n     * Get price of portfolio over certain period of time\n     * @param {PortfoliosPricePostRequest} portfoliosPricePostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    portfoliosPricePost(\n      portfoliosPricePostRequest: PortfoliosPricePostRequest,\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<GetPortfolioPriceResponse> {\n      return localVarFp\n        .portfoliosPricePost(portfoliosPricePostRequest, options)\n        .then((request) => request(axios, basePath));\n    },\n    /**\n     * Get portfolio state by id\n     * @param {string} id\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    portfoliosStateIdGet(\n      id: string,\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<GetPortfolioStateResponse> {\n      return localVarFp\n        .portfoliosStateIdGet(id, options)\n        .then((request) => request(axios, basePath));\n    },\n    /**\n     * Creates a new swap for a given portfolio and user assets.\n     * @param {SwapCreatePostRequest} swapCreatePostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    swapCreatePost(\n      swapCreatePostRequest: SwapCreatePostRequest,\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<CreateSwapResponse> {\n      return localVarFp\n        .swapCreatePost(swapCreatePostRequest, options)\n        .then((request) => request(axios, basePath));\n    },\n    /**\n     * Submits a swap for a given portfolio and user assets.\n     * @param {SwapSubmitPostRequest} swapSubmitPostRequest\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     */\n    swapSubmitPost(\n      swapSubmitPostRequest: SwapSubmitPostRequest,\n      options?: RawAxiosRequestConfig,\n    ): AxiosPromise<SubmitSwapResponse> {\n      return localVarFp\n        .swapSubmitPost(swapSubmitPostRequest, options)\n        .then((request) => request(axios, basePath));\n    },\n  };\n};\n\n/**\n * SDKApi - object-oriented interface\n * @export\n * @class SDKApi\n * @extends {BaseAPI}\n */\nexport class SDKApi extends BaseAPI {\n  /**\n   * Place a new order\n   * @param {OrdersCreatePostRequest} [ordersCreatePostRequest]\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public ordersCreatePost(\n    ordersCreatePostRequest?: OrdersCreatePostRequest,\n    options?: RawAxiosRequestConfig,\n  ) {\n    return SDKApiFp(this.configuration)\n      .ordersCreatePost(ordersCreatePostRequest, options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n\n  /**\n   * Submit the placed order\n   * @param {OrdersSubmitPostRequest} ordersSubmitPostRequest\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public ordersSubmitPost(\n    ordersSubmitPostRequest: OrdersSubmitPostRequest,\n    options?: RawAxiosRequestConfig,\n  ) {\n    return SDKApiFp(this.configuration)\n      .ordersSubmitPost(ordersSubmitPostRequest, options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n\n  /**\n   * Get all portfolios data\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public portfoliosGet(options?: RawAxiosRequestConfig) {\n    return SDKApiFp(this.configuration)\n      .portfoliosGet(options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n\n  /**\n   * Get price of portfolio over certain period of time\n   * @param {PortfoliosPricePostRequest} portfoliosPricePostRequest\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public portfoliosPricePost(\n    portfoliosPricePostRequest: PortfoliosPricePostRequest,\n    options?: RawAxiosRequestConfig,\n  ) {\n    return SDKApiFp(this.configuration)\n      .portfoliosPricePost(portfoliosPricePostRequest, options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n\n  /**\n   * Get portfolio state by id\n   * @param {string} id\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public portfoliosStateIdGet(id: string, options?: RawAxiosRequestConfig) {\n    return SDKApiFp(this.configuration)\n      .portfoliosStateIdGet(id, options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n\n  /**\n   * Creates a new swap for a given portfolio and user assets.\n   * @param {SwapCreatePostRequest} swapCreatePostRequest\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public swapCreatePost(\n    swapCreatePostRequest: SwapCreatePostRequest,\n    options?: RawAxiosRequestConfig,\n  ) {\n    return SDKApiFp(this.configuration)\n      .swapCreatePost(swapCreatePostRequest, options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n\n  /**\n   * Submits a swap for a given portfolio and user assets.\n   * @param {SwapSubmitPostRequest} swapSubmitPostRequest\n   * @param {*} [options] Override http request option.\n   * @throws {RequiredError}\n   * @memberof SDKApi\n   */\n  public swapSubmitPost(\n    swapSubmitPostRequest: SwapSubmitPostRequest,\n    options?: RawAxiosRequestConfig,\n  ) {\n    return SDKApiFp(this.configuration)\n      .swapSubmitPost(swapSubmitPostRequest, options)\n      .then((request) => request(this.axios, this.basePath));\n  }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Metera API\n * API swagger documentation of sdk\n *\n * The version of the OpenAPI document: 1.0.0\n *\n *\n * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).\n * https://openapi-generator.tech\n * Do not edit the class manually.\n */\n\nexport interface ConfigurationParameters {\n  apiKey?:\n    | string\n    | Promise<string>\n    | ((name: string) => string)\n    | ((name: string) => Promise<string>);\n  username?: string;\n  password?: string;\n  accessToken?:\n    | string\n    | Promise<string>\n    | ((name?: string, scopes?: string[]) => string)\n    | ((name?: string, scopes?: string[]) => Promise<string>);\n  basePath?: string;\n  serverIndex?: number;\n  baseOptions?: any;\n  formDataCtor?: new () => any;\n}\n\nexport class Configuration {\n  /**\n   * parameter for apiKey security\n   * @param name security name\n   * @memberof Configuration\n   */\n  apiKey?:\n    | string\n    | Promise<string>\n    | ((name: string) => string)\n    | ((name: string) => Promise<string>);\n  /**\n   * parameter for basic security\n   *\n   * @type {string}\n   * @memberof Configuration\n   */\n  username?: string;\n  /**\n   * parameter for basic security\n   *\n   * @type {string}\n   * @memberof Configuration\n   */\n  password?: string;\n  /**\n   * parameter for oauth2 security\n   * @param name security name\n   * @param scopes oauth2 scope\n   * @memberof Configuration\n   */\n  accessToken?:\n    | string\n    | Promise<string>\n    | ((name?: string, scopes?: string[]) => string)\n    | ((name?: string, scopes?: string[]) => Promise<string>);\n  /**\n   * override base path\n   *\n   * @type {string}\n   * @memberof Configuration\n   */\n  basePath?: string;\n  /**\n   * override server index\n   *\n   * @type {number}\n   * @memberof Configuration\n   */\n  serverIndex?: number;\n  /**\n   * base options for axios calls\n   *\n   * @type {any}\n   * @memberof Configuration\n   */\n  baseOptions?: any;\n  /**\n   * The FormData constructor that will be used to create multipart form data\n   * requests. You can inject this here so that execution environments that\n   * do not support the FormData class can still run the generated client.\n   *\n   * @type {new () => FormData}\n   */\n  formDataCtor?: new () => any;\n\n  constructor(param: ConfigurationParameters = {}) {\n    this.apiKey = param.apiKey;\n    this.username = param.username;\n    this.password = param.password;\n    this.accessToken = param.accessToken;\n    this.basePath = param.basePath;\n    this.serverIndex = param.serverIndex;\n    this.baseOptions = param.baseOptions;\n    this.formDataCtor = param.formDataCtor;\n  }\n\n  /**\n   * Check if the given MIME is a JSON MIME.\n   * JSON MIME examples:\n   *   application/json\n   *   application/json; charset=UTF8\n   *   APPLICATION/JSON\n   *   application/vnd.company+json\n   * @param mime - MIME (Multipurpose Internet Mail Extensions)\n   * @return True if the given MIME is JSON, false otherwise.\n   */\n  public isJsonMime(mime: string): boolean {\n    const jsonMime: RegExp = new RegExp(\n      '^(application/json|[^;/ \\t]+/[^;/ \\t]+[+]json)[ \\t]*(;.*)?$',\n      'i',\n    );\n    return (\n      mime !== null &&\n      (jsonMime.test(mime) ||\n        mime.toLowerCase() === 'application/json-patch+json')\n    );\n  }\n}\n","import { WalletApi } from 'lucid-txpipe';\nimport { z } from 'zod';\n\nexport type PortfolioMetadata = {\n  manager: {\n    id: string;\n    name: string;\n    imageUrl: string;\n    address: string;\n    joinDate: Date;\n    description: string;\n    verified: boolean;\n  };\n  id: string;\n  portfolioId: string;\n  about: string;\n  objective: string;\n  strategy: string;\n};\n\nexport interface WalletData {\n  wallet: WalletApi;\n}\n\nexport type CancelOrder = {\n  id: string;\n  address: string;\n};\n\n/** Schema for the response of an order cancellation */\nexport const cancelOrderResponseSchema = z.string();\nexport type CancelOrderResponse = z.infer<typeof cancelOrderResponseSchema>;\n\nexport const faucetResponseSchema = z.string();\nexport type faucetResponseSchema = z.infer<typeof faucetResponseSchema>;\n\nexport const faucetRequestSchema = z\n  .object({\n    /**\n     * Address of the user that requests tokens from the faucet\n     */\n    address: z.string(),\n    /**\n     * Unit of token requested and amount of tokens to withdraw\n     */\n    tokens: z.record(z.bigint().positive()),\n  })\n  .strict();\nexport type FaucetRequestSchema = z.infer<typeof faucetRequestSchema>;\n\nexport type SwapSchema = {\n  address: string;\n  portfolioId: string;\n  maxBatcherFee: bigint;\n  totalAmount: bigint;\n  userAssets: [string, bigint][];\n  swap: [string, bigint][];\n  utxos?:\n    | {\n        address: string;\n        txHash: string;\n        outputIndex: number;\n        assets: Record<string, bigint>;\n      }[]\n    | undefined;\n};\n\nexport type Withdraw = {\n  address: string;\n  portfolioId: string;\n  tokens: [string, bigint][];\n  maxBatcherFee: bigint;\n  amount: bigint;\n  minWorthAcceptable: bigint;\n};\n\nexport type Deposit = {\n  address: string;\n  portfolioId: string;\n  tokens: [string, bigint][];\n  minMtkAcceptable: bigint;\n  maxBatcherFee: bigint;\n};\n\nexport const createSwapResponseSchema = z.object({\n  cbor: z.string({ description: 'Unsigned transaction cbor' }),\n  txId: z.string({ description: 'Transaction hash' }),\n});\n\nexport const createOrderResponseSchema = z\n  .object({ cbor: z.string(), id: z.string() })\n  .strict();\nexport type CreateOrderResponse = z.infer<typeof createOrderResponseSchema>;\n\nexport const submitSwapSchema = z.object({\n  cbor: z.string(),\n});\nexport type SubmitSwap = z.infer<typeof submitSwapSchema>;\n\nexport type ArrayElement<ArrayType extends readonly unknown[]> =\n  ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\n\nexport type Portfolio = {\n  id: string;\n  name: string;\n  ticker: string;\n  imageUrl: string;\n  createdAt: Date;\n  policyId: string;\n  onchainId: string;\n  mtkUnit: string;\n  featured: bigint;\n  managerId: string;\n};\n\nexport type Asset = {\n  id: string;\n  name: string;\n  ticker: string;\n  imageUrl: string;\n  currencySymbol: string;\n  mainnetUnit: string;\n  mainnetFingerprint: string;\n  decimals: number;\n  riskScore: string;\n  pairConversion: string;\n};\nexport interface IAssetInPortfolio {\n  asset: Asset;\n  price: string;\n  priceCreatedAt: Date;\n  priceId: string;\n  amount: bigint;\n  weightNum: bigint;\n  weightDenom: bigint;\n  order: number;\n}\n\nexport interface IPortfolioState {\n  portfolio: Portfolio;\n  price: string;\n  supply: bigint;\n  platformFee: bigint;\n  assets: IAssetInPortfolio[];\n  entryFee: bigint;\n  exitFee: bigint;\n  batcherFee: bigint;\n}\n\nexport enum OrderType {\n  /**\n   * Order is a deposit of liquidity to the portfolio.\n   *\n   * Can be placed by anyone\n   */\n  DEPOSIT = 'deposit',\n  /**\n   * Order is a withdraw of liquidity from the portfolio.\n   *\n   * Can be placed by anyone\n   */\n  WITHDRAW = 'withdraw',\n  /**\n   * Order updates the target weights of the tokens of a portfolio\n\n   * Can be placed by the Portfolio Manager\n   */\n  WEIGHTS = 'weights',\n  /**\n   * Order updates the lovelace amount for processing each user order\n   *\n   * Can be placed by Metera Admin (Processor)\n   */\n  BATCHER_FEE = 'batcher_fee',\n  /**\n   * Order updates the fee percentage that the platform takes when an order is placed\n   *\n   * Can be placed by the Treasury\n   */\n  PLATFORM_FEE = 'platform_fee',\n  /**\n   * Order updates the fee percentage the user must pay to the Portfolio Manager for interacting with the Portfolio\n   *\n   * Can be placed by the Portfolio Manager\n   */\n  USER_FEE = 'user_fee',\n  /**\n   * Order that extracts MTK accumulated by user interactions (deposits/withdraws)\n   *\n   * Can be placed by the Portfolio Manager\n   */\n  COLLECT = 'collect',\n}\n\nexport type Order = {\n  id: string;\n  placeOrderTxHash: string;\n  processOrderTxHash: string | null;\n  walletId: string;\n  amount: bigint;\n  orderPlacedAt: Date | null;\n  orderProcessedAt: Date | null;\n  expiredAt: Date | null;\n  createdAt: Date | null;\n  placedSubmittedAt: Date | null;\n  processSubmittedAt: Date | null;\n  price: string;\n  portfolioStatusId: string;\n  userFee: bigint;\n  platformFee: bigint;\n  batcherFee: bigint;\n  cancelSubmittedAt: Date | null;\n  cancelledAt: Date | null;\n  cancelHash: string | null;\n  slippage: bigint;\n  slippageFail: boolean;\n  type: OrderType;\n  utxoIndex: number;\n  validationFailures: string | null;\n};\n\nexport type PortfolioManager = {\n  id: string;\n  name: string;\n  joinDate: Date;\n  description: string;\n  imageUrl: string;\n  verified: boolean;\n  address: string;\n};\n\nexport interface MintModalBalances {\n  [key: string]: {\n    asset: IAssetInPortfolio['asset'];\n    // Tokens currently in wallet\n    owned: bigint;\n    // Tokens required to deposit\n    required: bigint;\n    // Tokens that will be swapped on Sundae\n    deficit: bigint;\n  };\n}\n\nimport { createContext } from 'react';\n\nexport interface WalletData {\n  wallet: WalletApi;\n}\n\nexport const WalletContext = createContext<WalletData | null | undefined>(\n  undefined,\n);\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { decode } from 'cbor2';\nimport { CML as C } from '@lucid-evolution/lucid';\nimport { C as LC, toHex } from 'lucid-txpipe';\n\ninterface WithCIP30SignTxMethod {\n  signTx: (tx: string, partialSign: boolean) => Promise<string>;\n}\n\nfunction hexToUint8Array(hexString: string) {\n  if (hexString.length % 2 !== 0) {\n    hexString = '0' + hexString;\n  }\n\n  const array = new Uint8Array(hexString.length / 2);\n  for (let i = 0; i < hexString.length; i += 2) {\n    array[i / 2] = parseInt(hexString.slice(i, i + 2), 16);\n  }\n\n  return array;\n}\n\ntype CborFormat = 'legacy' | 'conway';\n/**\n * Signs the given transaction with the provided wallet.\n *\n * @param cip30Wallet Object with the CIP30 `signTx` method, like the wallet coming from the client browser.\n * @param tx CBOR of the transaction we want to sign.\n * @param partialSign see partialSign `signTx` parameter description in CIP30 https://cips.cardano.org/cips/cip30/. Defaults to `false`. If this will not be the last signature of the transaction, this property must be set to `true`.\n * @returns CBOR of the signed transaction.\n */\nasync function signTx(\n  cip30Wallet: WithCIP30SignTxMethod,\n  tx: string,\n  partialSign: boolean = false,\n  cborFormat: CborFormat = 'legacy',\n): Promise<string> {\n  if (cborFormat === 'conway') {\n    return signConwayTx(cip30Wallet, tx, partialSign);\n  } else {\n    return signLegacyTx(cip30Wallet, tx, partialSign);\n  }\n}\n\nasync function signLegacyTx(\n  cip30Wallet: WithCIP30SignTxMethod,\n  tx: string,\n  partialSign: boolean = false,\n) {\n  const cTx = LC.Transaction.from_bytes(hexToUint8Array(tx));\n\n  const witnessSetHex = await cip30Wallet.signTx(tx, partialSign);\n  // VKey witness is a Map with one element which is at the key 0\n  const witnessSetCBOR: Map<0, Set<[Uint8Array, Uint8Array]>> = decode(\n    witnessSetHex,\n    { encoding: 'hex' },\n  );\n  if (witnessSetCBOR.size === 0) {\n    throw new Error('Empty witness set after signTx');\n  }\n  if (!witnessSetCBOR.has(0)) {\n    throw new Error('Incorrect vkey witness CBOR format');\n  }\n  const witnessAsSet = witnessSetCBOR.get(0) as Set<[Uint8Array, Uint8Array]>;\n\n  // Get the only pair [publicKey, signature] from the witness set\n  const [key, sig] = Array.from(witnessAsSet)[0];\n\n  // Add vkey witness to the transaction witness set and return signed tx\n  const publicKey = LC.PublicKey.from_bytes(key);\n  const vKey = LC.Vkey.new(publicKey);\n  const signature = LC.Ed25519Signature.from_bytes(sig);\n  const vKeyWitnesses = LC.Vkeywitnesses.new();\n  vKeyWitnesses.add(LC.Vkeywitness.new(vKey, signature));\n  const txWitnessSet = cTx.witness_set();\n  txWitnessSet.set_vkeys(vKeyWitnesses);\n  const signedTx = LC.Transaction.new(\n    cTx.body(),\n    txWitnessSet,\n    cTx.auxiliary_data(),\n  );\n  return toHex(signedTx.to_bytes());\n}\n\nasync function signConwayTx(\n  cip30Wallet: WithCIP30SignTxMethod,\n  tx: string,\n  partialSign: boolean = false,\n) {\n  const cTx = C.Transaction.from_cbor_bytes(hexToUint8Array(tx));\n\n  const witnessSetHex = await cip30Wallet.signTx(tx, partialSign);\n\n  // VKey witness is a Map with one element which is at the key 0\n  const witnessSetCBOR: Map<0, Set<[Uint8Array, Uint8Array]>> = decode(\n    witnessSetHex,\n    { encoding: 'hex' },\n  );\n  if (witnessSetCBOR.size === 0) {\n    throw new Error('Empty witness set after signTx');\n  }\n  if (!witnessSetCBOR.has(0)) {\n    throw new Error('Incorrect vkey witness CBOR format');\n  }\n  const witnessAsSet = witnessSetCBOR.get(0) as Set<[Uint8Array, Uint8Array]>;\n\n  // Get the only pair [publicKey, signature] from the witness set\n  const [key, sig] = Array.from(witnessAsSet)[0];\n\n  // Add vkey witness to the transaction witness set and return signed tx\n  const vKey = C.PublicKey.from_bytes(key);\n  const signature = C.Ed25519Signature.from_raw_bytes(sig);\n  const vKeyWitnesses = C.VkeywitnessList.new();\n  vKeyWitnesses.add(C.Vkeywitness.new(vKey, signature));\n  const txWitnessSet = cTx.witness_set();\n  txWitnessSet.set_vkeywitnesses(vKeyWitnesses);\n  const signedTx = C.Transaction.new(\n    cTx.body(),\n    txWitnessSet,\n    true,\n    cTx.auxiliary_data(),\n  );\n  return signedTx.to_cbor_hex();\n}\nexport { signTx };\n","import { keyframes } from '@emotion/react';\n\nexport const themeVariables = {\n  background: {\n    purple100: `linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.01) 0%,\n      rgba(255, 255, 255, 0) 100%\n    ),\n    rgba(27, 27, 30, 0.1)`,\n    purple200: `linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03) 0%,\n      rgba(255, 255, 255, 0) 100%\n    ),\n    rgba(27, 27, 30, 1)`,\n    solid: 'rgba(27, 27, 30, 0.9)',\n    modal: '#08040f',\n    homeCards: `radial-gradient(\n      50% 50% at 20% 20%,\n      rgba(125, 70, 250, 0.18) 0%,\n      rgba(69, 44, 126, 0) 100%\n    ),\n    linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03),\n      rgba(255, 255, 255, 0)\n    ),\n    rgba(27, 27, 30, 0.9)`,\n    topPortfolios: `radial-gradient(\n      50% 50% at 50% 50%,\n      rgba(125, 70, 250, 0.12) 0%,\n      rgba(69, 44, 126, 0) 100%\n    ),\n    linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03),\n      rgba(255, 255, 255, 0)\n    ),\n    rgba(27, 27, 30, 0.9)`,\n    join: `radial-gradient(\n      50% 50% at 50% 50%,\n      rgba(125, 70, 250, 0.15) 47%,\n      rgba(69, 44, 126, 0) 100%\n    ),\n    linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03),\n      rgba(255, 255, 255, 0)\n    ),\n    rgba(27, 27, 30, 0.9)`,\n    middleBlub: `radial-gradient(\n      50% 50% at 50% 50%,\n      rgba(125, 70, 250, 0.12) 63.5%,\n      rgba(69, 44, 126, 0) 100%\n    ),\n    linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03),\n      rgba(255, 255, 255, 0)\n    ),\n    rgba(27, 27, 30, 0.9)`,\n    card: `linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03),\n      rgba(255, 255, 255, 0)\n    ),\n    rgba(27, 27, 30, 0.9)`,\n    tableModals: `linear-gradient(\n      180deg,\n      rgba(139, 92, 246, 0.03) 0%,\n      rgba(255, 255, 255, 0) 100%\n    ),\n    rgba(27, 27, 30, 0.9)`,\n  },\n  gradient: {\n    start: 'rgba(139, 92, 246, 0.03)',\n    end: 'rgba(255, 255, 255, 0)',\n    angle: '180deg',\n    button: `linear-gradient(\n      87deg,\n      rgba(76, 29, 149, 0.2) 0%,\n      rgba(124, 58, 237, 0.2) 100%\n    )`,\n    button100: `linear-gradient(\n      87deg,\n      rgba(77, 29, 149, 0.794) 0%,\n      rgba(124, 58, 237, 0.2) 100%\n    )`,\n    table: `linear-gradient(\n      87deg,\n      rgba(76, 29, 149, 0.05) 0%,\n      rgba(124, 58, 237, 0.05) 100%\n    )`,\n  },\n  purple: {\n    divider: '#3a2e5c',\n    subtext: '#a78bfa',\n    button100: '#8b5cf6',\n    button200: '#8a5cf6c7',\n    metera: '#8b5cf6',\n    metera100: '#c4b5fd',\n    metera200: '#8b5cf669',\n    metera300: 'rgba(76, 29, 149, 0.4)',\n  },\n  distribution: {\n    one: '#4c1d95',\n    two: '#6d28d9',\n    three: '#8b5cf6',\n    four: '#a78bfa',\n    five: '#c4b5fd',\n  },\n  neutral: {\n    1000: 'rgba(23, 23, 23, 1)',\n    900: 'rgba(23, 23, 23, 1)',\n    800: '#262626',\n    600: '#525252',\n    500: '#737373',\n    400: '#a3a3a3',\n    300: '#d4d4d4',\n    200: '#e5e5e5',\n  },\n  cards: {\n    stroke: 'rgba(192, 166, 253, 0.25)',\n    stroke2: 'rgba(192, 166, 253, 0.2)',\n    background: '#ef4444',\n  },\n  error: {\n    error500: '#ef4444',\n  },\n  success: {\n    success500: '#22c55e',\n  },\n  offWhite: {\n    offWhite400: '#fafaf4',\n  },\n  primary: {\n    primary50: '#f5f3ff',\n  },\n  header: {\n    table: '#2c2658',\n  },\n  circle: {\n    fill: '#83d2ff',\n  },\n  backgrounds: {\n    one: '#3b2b67',\n    two: '#270e45',\n  },\n  animatedBorder: {\n    initialValue: '0turn',\n    animationTo: '1turn',\n    bgSpin: keyframes`\n      to {\n        --animated-border: 1turn;\n      }\n    `,\n  },\n  blinkAnimation: keyframes`\n    {\n      0%,\n      100% {\n        transform: scale(1);\n      }\n      50% {\n        transform: scale(0.7);\n      }\n    }\n  `,\n  opacityAnimation: keyframes`\n    {\n      0%,\n      100% {\n        opacity: 1;\n      }\n      50% {\n        opacity: 0.6;\n      }\n    }\n  `,\n};\n","import React, { forwardRef } from 'react';\n\ninterface InfoSVGProps {\n  color?: string; // Optional color prop\n}\n\nconst InfoSVG = forwardRef<SVGSVGElement, InfoSVGProps>(\n  ({ color = '#FAFAFA' }, ref) => (\n    <svg\n      ref={ref}\n      width=\"15\"\n      height=\"15\"\n      viewBox=\"0 0 20 20\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g clipPath=\"url(#clip0_785_532)\">\n        <path\n          d=\"M7.57499 7.49984C7.77091 6.94289 8.15762 6.47326 8.66662 6.17411C9.17562 5.87497 9.77407 5.76562 10.356 5.86543C10.9379 5.96524 11.4657 6.26777 11.8459 6.71944C12.2261 7.17111 12.4342 7.74277 12.4333 8.33317C12.4333 9.99984 9.93332 10.8332 9.93332 10.8332M9.99999 14.1665H10.0083M18.3333 9.99984C18.3333 14.6022 14.6024 18.3332 9.99999 18.3332C5.39762 18.3332 1.66666 14.6022 1.66666 9.99984C1.66666 5.39746 5.39762 1.6665 9.99999 1.6665C14.6024 1.6665 18.3333 5.39746 18.3333 9.99984Z\"\n          stroke=\"#A3A3A3\"\n          strokeWidth=\"1.66667\"\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n        />\n      </g>\n      <defs>\n        <clipPath id=\"clip0_785_532\">\n          <rect width=\"20\" height=\"20\" fill=\"white\" />\n        </clipPath>\n      </defs>\n    </svg>\n  ),\n);\n\nInfoSVG.displayName = 'InfoSVG';\n\nexport default InfoSVG;\n","export const stringToNumber = (string: string) => {\n  if (string.includes('K')) {\n    return Number(string.replace('K', '')) * 1000;\n  }\n  if (string.includes('M')) {\n    return Number(string.replace('M', '')) * 1000000;\n  }\n  if (string.includes('B')) {\n    return Number(string.replace('B', '')) * 1000000000;\n  }\n  return Number(string);\n};\n\n/**\n * Converts a number to formatted Number\n * e.g 4566789 => 4,566,789.00\n * @param numberString Number in string\n * @param decimalPlaces decimal places to display\n * @returns\n */\nexport const stringToFormattedNumber = (\n  numberString: string,\n  decimalPlaces: number = 2,\n  minimumDecimal: number | undefined = undefined,\n  maximumDecimal: number | undefined = undefined,\n) => {\n  return Number(numberString).toLocaleString('en-US', {\n    useGrouping: true, // Adds commas as thousands separators\n    minimumFractionDigits:\n      minimumDecimal !== undefined ? minimumDecimal : decimalPlaces, // Specifies minimum decimal places\n    maximumFractionDigits:\n      maximumDecimal !== undefined ? maximumDecimal : decimalPlaces, // Specifies maximum decimal places\n  });\n};\n","import { Flex, Text, Tooltip } from '@chakra-ui/react';\nimport BigNumber from 'bignumber.js';\nimport InfoSVG from './atoms/svg/infoSVG';\nimport { stringToFormattedNumber } from './stringToNumber';\nimport { themeVariables } from '@meteraprotocol/sdk/ui/theme.js';\n\ntype BuySellFeesProps = {\n  type: 'mint' | 'burn';\n  managerFee: BigNumber;\n  batcherFee: BigNumber;\n  platformFee: BigNumber;\n  expectedAmount: BigNumber;\n  withdrawLovelace: BigNumber;\n  mtkTicker: string;\n  hasInsuficientToken: boolean;\n};\n\nfunction BuySellFees(props: BuySellFeesProps) {\n  const totalFees = props.batcherFee\n    .plus(props.managerFee)\n    .plus(props.platformFee)\n    .abs();\n\n  const formattedUserFee = stringToFormattedNumber(\n    props.managerFee\n      .abs()\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n  const formattedBatcherFee = stringToFormattedNumber(\n    props.batcherFee\n      .abs()\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n  const formattedPlatformFee = stringToFormattedNumber(\n    props.platformFee\n      .abs()\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n\n  const formattedMTKAmount = stringToFormattedNumber(\n    props.expectedAmount\n      .abs()\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n  const formattedADA = stringToFormattedNumber(\n    props.withdrawLovelace\n      .abs()\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n\n  // Minswap fees\n  const formattedBatcherFeeMinswap = stringToFormattedNumber(\n    BigNumber(2_000_000)\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n  const formattedDepositMinswap = stringToFormattedNumber(\n    BigNumber(2_000_000)\n      .div(10 ** 6)\n      .toFixed(6),\n    6,\n    0,\n  );\n\n  const userFee = `- ${formattedUserFee} $${props.mtkTicker}`;\n  const batcherFee = `- ${formattedBatcherFee} ₳`;\n  const platformFee = `- ${formattedPlatformFee} ₳`;\n  const expectedMTK = `${formattedMTKAmount} $${props.mtkTicker}`;\n  const expectedADA = `${formattedADA} ₳`;\n  const amountToolTip =\n    props.type === 'mint'\n      ? `$${props.mtkTicker} expected to go to your wallet`\n      : 'Expected worth of tokens you will receive';\n  const minSwapBatcherFee = `${formattedBatcherFeeMinswap} ₳`;\n  const minSwapDeposit = `${formattedDepositMinswap} ₳`;\n  const minswapSrc =\n    'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//minswap_horizontal.svg';\n\n  return (\n    <Flex\n      width={'100%'}\n      height={'fit-content'}\n      gap={'12px'}\n      justifyContent={'space-between'}\n      // borderTop={'solid 1px #C0A6FD33'}\n      flexDirection={'column'}\n    >\n      {props.hasInsuficientToken && props.type === 'mint' ? (\n        <>\n          <Fee\n            label=\"Zapping via\"\n            info=\"You are submitting a bulk order via Minswap. Fees are calculated based on Minswap fees\"\n            imageSrc={minswapSrc}\n          ></Fee>\n          <Fee\n            label=\"Batching Fees\"\n            info={`Batching fees might be lower if you hold MIN in your wallet`}\n            value={minSwapBatcherFee}\n          ></Fee>\n          <Fee\n            label=\"Minimum UTxO deposit\"\n            info={`This amount of ADA will be held as minimum UTxO ADA and will be returned when your orders are processed or cancelled`}\n            value={minSwapDeposit}\n          ></Fee>\n        </>\n      ) : (\n        <>\n          <Fee\n            label=\"Manager Fee\"\n            info={`$${props.mtkTicker} paid to the Manager`}\n            value={userFee}\n          />\n          <Fee\n            label=\"Batcher Fee\"\n            info=\"ADA paid for processing\"\n            value={batcherFee}\n          />\n          <Fee\n            label=\"Platform Fee\"\n            info=\"ADA paid for placing orders\"\n            value={platformFee}\n          />\n          {props.type === 'mint' ? (\n            <Fee\n              label=\"Expected Amount\"\n              info={amountToolTip}\n              value={expectedMTK}\n            />\n          ) : (\n            <Fee\n              label=\"Expected worth of tokens\"\n              info={amountToolTip}\n              value={expectedADA}\n            />\n          )}\n        </>\n      )}\n    </Flex>\n  );\n}\n\nfunction Fee({\n  label,\n  value,\n  info,\n  imageSrc,\n}: {\n  label: string;\n  value?: string;\n  info?: string;\n  imageSrc?: string;\n}) {\n  return (\n    <Flex\n      justifyContent={'space-between'}\n      width={'100%'}\n      fontSize=\"14px\"\n      fontWeight=\"400\"\n      lineHeight=\"20px\"\n    >\n      <Flex gap={2} alignItems={'center'}>\n        <Text color=\"#A3A3A3\">{label}</Text>\n\n        <Tooltip\n          placement=\"top\"\n          sx={{\n            background: 'var(--bg-200)',\n            border: '0.5px solid var(--cards-stroke)',\n            borderRadius: '0.75rem',\n            color: 'var(--off-white-400)',\n            fontWeight: '600',\n            padding: '1rem',\n            backdropFilter: 'blur(30px)',\n          }}\n          label={info || label}\n        >\n          <Flex display=\"flex\" align=\"center\" cursor=\"ponter\">\n            <InfoSVG />\n          </Flex>\n        </Tooltip>\n      </Flex>\n      {imageSrc ? (\n        <img src={imageSrc} alt={label} style={{ width: '6rem' }} />\n      ) : (\n        <Text color={'#FAFAFA'}>{value} </Text>\n      )}\n    </Flex>\n  );\n}\n\nexport default BuySellFees;\n","import React from 'react';\n\ninterface ProfileSVGprops {\n  color?: string; // Optional color prop\n}\n\nconst ProfileSVG: React.FC<ProfileSVGprops> = ({ color = '#FAFAFA' }) => (\n  <svg\n    width=\"18\"\n    height=\"18\"\n    viewBox=\"0 0 18 18\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M12 6.00024V3.37573C12 2.75192 12 2.44002 11.8686 2.24834C11.7538 2.08087 11.576 1.96711 11.3758 1.93305C11.1467 1.89406 10.8635 2.02477 10.2971 2.28618L3.64426 5.35673C3.13913 5.58987 2.88656 5.70644 2.70158 5.88723C2.53804 6.04705 2.41321 6.24215 2.33663 6.45761C2.25 6.70133 2.25 6.9795 2.25 7.53583V11.2502M12.375 10.8752H12.3825M2.25 8.40024L2.25 13.3502C2.25 14.1903 2.25 14.6104 2.41349 14.9312C2.5573 15.2135 2.78677 15.4429 3.06901 15.5867C3.38988 15.7502 3.80992 15.7502 4.65 15.7502H13.35C14.1901 15.7502 14.6101 15.7502 14.931 15.5867C15.2132 15.4429 15.4427 15.2135 15.5865 14.9312C15.75 14.6104 15.75 14.1903 15.75 13.3502V8.40024C15.75 7.56016 15.75 7.14012 15.5865 6.81925C15.4427 6.53701 15.2132 6.30754 14.931 6.16373C14.6101 6.00024 14.1901 6.00024 13.35 6.00024L4.65 6.00024C3.80992 6.00024 3.38988 6.00024 3.06901 6.16373C2.78677 6.30754 2.5573 6.53701 2.41349 6.81925C2.25 7.14012 2.25 7.56016 2.25 8.40024ZM12.75 10.8752C12.75 11.0823 12.5821 11.2502 12.375 11.2502C12.1679 11.2502 12 11.0823 12 10.8752C12 10.6681 12.1679 10.5002 12.375 10.5002C12.5821 10.5002 12.75 10.6681 12.75 10.8752Z\"\n      stroke={color}\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nexport default ProfileSVG;\n","import { Box, Flex } from '@chakra-ui/react';\nimport { themeVariables } from '@meteraprotocol/sdk/ui/theme.js';\nimport React from 'react';\n\ninterface StatusDotprops {\n  status: string;\n  showStatus: boolean;\n}\n\nconst StatusDot: React.FC<StatusDotprops> = ({ status, showStatus }) => {\n  const colors: { [key: string]: string } = {\n    Confirmed: '#22C55E',\n    Failed: '#EF4444',\n    Invalid: '#EF4444',\n    Cancelled: '#EF4444',\n    Pending: '#FCD34D',\n    Confirming: '#FCD34D',\n    Processing: '#FCD34D',\n    Cancelling: '#EF4444',\n    Insufficient: '#FBBF24',\n  };\n\n  const isAnimating =\n    status === 'Pending' || status === 'Cancelling' || status === 'Processing';\n\n  return (\n    <Flex align=\"center\" gap={2}>\n      <Box\n        style={\n          isAnimating\n            ? { animation: `${themeVariables.blinkAnimation} 1s infinite` }\n            : {}\n        }\n      >\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          width=\"6\"\n          height=\"6\"\n          viewBox=\"0 0 6 6\"\n          fill=\"none\"\n        >\n          <circle cx=\"3\" cy=\"3\" r=\"3\" fill={colors[status]} />\n        </svg>\n      </Box>\n      {showStatus && (\n        <Box\n          style={\n            isAnimating\n              ? { animation: `${themeVariables.opacityAnimation} 1s infinite` }\n              : {}\n          }\n        >\n          {status}\n        </Box>\n      )}\n    </Flex>\n  );\n};\n\nexport default StatusDot;\n","import { Box, Flex, Text, Circle } from '@chakra-ui/react';\nimport { themeVariables } from '../theme';\n\ntype StepGuideProps = {\n  step: string;\n  hasBorder?: boolean;\n  circlePadding?: string;\n};\n\nconst StepGuide = ({\n  step,\n  hasBorder = false,\n  circlePadding = '0.6rem',\n}: StepGuideProps) => {\n  const currentStep = parseInt(step, 10);\n  return (\n    <Flex\n      justify=\"space-between\"\n      position=\"relative\"\n      alignItems=\"center\"\n      width=\"100%\"\n      padding={hasBorder ? '1rem' : ''}\n      borderRadius=\"0.75rem\"\n      border={hasBorder ? `1px solid ${themeVariables.cards.stroke}` : ''}\n      sx={{\n        fontSize: { lg: '0.875rem', sm: '10px' },\n      }}\n      fontWeight={500}\n    >\n      <Circle\n        padding={circlePadding}\n        bg={currentStep >= 1 ? themeVariables.purple.metera : '#E2E8F0'}\n        color={currentStep >= 1 ? 'white' : '#262626'}\n        zIndex={1}\n      >\n        1. Zap-in\n      </Circle>\n\n      <Circle\n        padding={circlePadding}\n        bg={currentStep >= 2 ? themeVariables.purple.metera : '#E2E8F0'}\n        color={currentStep >= 2 ? 'white' : '#262626'}\n        zIndex={1}\n      >\n        2. Track & Receive\n      </Circle>\n\n      <Circle\n        padding={circlePadding}\n        bg={currentStep >= 3 ? themeVariables.purple.metera : '#E2E8F0'}\n        color={currentStep >= 3 ? 'white' : '#262626'}\n        fontWeight={500}\n        zIndex={1}\n      >\n        3. Mint MTKs\n      </Circle>\n\n      {/* The connector box */}\n      <Box\n        position=\"absolute\"\n        width={hasBorder ? '80%' : '100%'}\n        top=\"50%\"\n        h=\"2px\"\n        bg={currentStep >= 1 ? themeVariables.purple.metera : '#E2E8F0'}\n        zIndex={0}\n      />\n    </Flex>\n  );\n};\n\nexport default StepGuide;\n","import { Box, Flex, Image, Text, Tooltip } from '@chakra-ui/react';\nimport { MTK_DECIMALS } from '@meteraprotocol/core';\nimport BigNumber from 'bignumber.js';\nimport React, { Dispatch, SetStateAction } from 'react';\nimport { NumericFormat } from 'react-number-format';\nimport { Balance } from '../blockchain/client';\nimport ProfileSvg from './atoms/svg/profile-svg';\nimport StatusDot from './atoms/svg/statusDot-svg';\nimport { themeVariables } from '../theme';\nimport { IAssetInPortfolio } from '../types';\nimport StepGuide from './steps-guide';\n\nconst cardanoSrc =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//cardanoimage.png';\nconst swapSrc =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//swap-arrow.svg';\n\ntype BuySellInputProps = {\n  type: 'mint' | 'burn';\n  portfolioTicker: string;\n  balance: Balance | null;\n  mtkUnit: string;\n  setInputValue: Dispatch<SetStateAction<BigNumber>>;\n  switchType: Dispatch<SetStateAction<'mint' | 'burn'>>;\n  inputValue: BigNumber;\n  portfolioImageUrl: string;\n  expectedAmount: BigNumber;\n  withdrawLovelace: BigNumber;\n  showBreakdown: () => void;\n  hasInsufficientToken: boolean;\n  portfolioAssets: IAssetInPortfolio[];\n  background?: string;\n};\n\nfunction BuySellInput({\n  type,\n  portfolioTicker,\n  portfolioImageUrl,\n  balance,\n  inputValue,\n  setInputValue,\n  mtkUnit,\n  expectedAmount,\n  withdrawLovelace,\n  switchType,\n  showBreakdown,\n  hasInsufficientToken,\n  portfolioAssets,\n  background,\n}: BuySellInputProps) {\n  const handleFocus = () => {};\n\n  const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n    if (e.target.value === '') {\n      setInputValue(new BigNumber(0)); // Reset to 0 if empty\n    }\n  };\n\n  const handleSetMaxInput = () => {\n    if (!balance) return;\n    setInputValue(\n      BigNumber(balance[mtkUnit]?.toString() || 0).div(10 ** MTK_DECIMALS),\n    );\n  };\n\n  const PURPLE_STYLE = {\n    base: {\n      background: themeVariables.cards.background,\n      animation: `${themeVariables.animatedBorder.bgSpin} 3s linear infinite`,\n    },\n    hover: {\n      background: `conic-gradient(\n      from var(--animated-border),\n      #171717a3,\n      #171717a3 5%,\n      #171717a3 60%,\n      #171717a3 95%\n    ) padding-box,\n    conic-gradient(\n      from var(--animated-border),\n      transparent 0%,\n      transparent 45%, /* Make it fade until 45% */\n      #e8a92d, /* Base color */\n      #fcd34d 85%, /* Lighter shade of base color */\n      transparent 100% /* Fade to transparent after the 55% mark */\n    ) border-box`,\n      animation: 'bg-spin 3s linear infinite',\n    },\n  };\n\n  const YELLOW_STYLE = {\n    base: {\n      background: `conic-gradient(\n      from var(--animated-border),\n      #171717a3,\n      #171717a3 5%,\n      #171717a3 60%,\n      #171717a3 95%\n    ) padding-box,\n    conic-gradient(\n      from var(--animated-border),\n      transparent 0%,\n      transparent 45%, /* Make it fade until 45% */\n      #e8a92d, /* Base color */\n      #fcd34d 85%, /* Lighter shade of base color */\n      transparent 100% /* Fade to transparent after the 55% mark */\n    ) border-box`,\n      animation: 'bg-spin 3s linear infinite',\n    },\n    hover: {\n      background: `conic-gradient(\n      from var(--animated-border),\n      #171717a3,\n      #171717a3 5%,\n      #171717a3 60%,\n      #171717a3 95%\n    ) padding-box,\n    conic-gradient(\n      from var(--animated-border),\n      transparent 0%,\n      transparent 45%, /* Make it fade until 45% */\n      #6d28d9,\n      #a78bfa 85%, /* Adjust color stops for top-right and bottom-left corners */\n      transparent 100%\n    ) border-box`,\n      animation: 'bg-spin 3s linear infinite',\n    },\n  };\n\n  const currentStyle = hasInsufficientToken ? YELLOW_STYLE : PURPLE_STYLE;\n\n  const renderSendInputBox = () => (\n    <Flex\n      border={`1px solid ${themeVariables.cards.stroke}`}\n      _hover={{ border: `1px solid ${themeVariables.purple.metera}` }}\n      _focusWithin={{ border: `1px solid ${themeVariables.purple.metera}` }}\n      height=\"105px\"\n      borderRadius=\"1rem\"\n      padding=\"1.5rem\"\n      width=\"full\"\n      align=\"center\"\n    >\n      <Flex\n        justifyContent={'space-between'}\n        alignItems={'center'}\n        width={'100%'}\n        gap={'8px'}\n      >\n        <Flex\n          position={'relative'}\n          width={'full'}\n          flex={1}\n          alignItems={'flex-start'}\n        >\n          <Flex flexDir=\"column\" gap={1}>\n            <Box fontSize=\"0.875rem\" color=\"#A3A3A3\">\n              Send\n            </Box>\n            <NumericFormat\n              className=\"mint-input\"\n              value={inputValue.gt(0) ? inputValue.toString() : ''}\n              placeholder={\n                type === 'mint' ? (hasInsufficientToken ? '0.0' : 'ADA') : '0.0'\n              }\n              valueIsNumericString\n              onFocus={handleFocus}\n              onBlur={handleBlur}\n              thousandSeparator\n              isAllowed={({ floatValue }) => (floatValue || 0) <= 10_000_000}\n              max={10_000_000}\n              decimalScale={MTK_DECIMALS}\n              style={{\n                width: '100%',\n                color: themeVariables.offWhite.offWhite400,\n                fontSize: '32px',\n                fontWeight: '500',\n                lineHeight: '32px',\n                letterSpacing: '-0.02em',\n                textAlign: 'left',\n                backgroundColor: 'transparent',\n                border: 'none',\n                borderRadius: 0,\n                outline: 'none',\n              }}\n              onValueChange={(values) => {\n                setInputValue(\n                  new BigNumber(Number(values.floatValue ? values.value : 0)),\n                );\n              }}\n            />\n          </Flex>\n        </Flex>\n        <Flex flexDirection={'column'} color={'#A3A3A3'}>\n          <Flex justify=\"right\" cursor=\"pointer\">\n            {type === 'burn' && (\n              <Flex\n                justify=\"right\"\n                fontSize=\"0.75rem\"\n                color={themeVariables.neutral[400]}\n                fontWeight={400}\n                cursor={'pointer'}\n                onClick={handleSetMaxInput}\n                display={'flex'}\n                flexDirection={'row'}\n                gap={2}\n                alignItems={'flex-end'}\n              >\n                <ProfileSvg color=\"#A3A3A3\" />\n                <span>\n                  {BigNumber(balance?.[mtkUnit]?.toString() || 0)\n                    .div(10 ** MTK_DECIMALS)\n                    .toFixed(2)}\n                </span>\n              </Flex>\n            )}\n          </Flex>\n\n          <Flex flexDirection={'row'} color={'#A3A3A3'} align=\"center\" gap={1}>\n            {type === 'burn' ? (\n              <Box width=\"1.25rem\">\n                <Image objectFit=\"cover\" src={portfolioImageUrl} />\n              </Box>\n            ) : (\n              hasInsufficientToken && (\n                <Box width=\"1.25rem\">\n                  <Image objectFit=\"cover\" src={cardanoSrc} />\n                </Box>\n              )\n            )}\n            {type === 'mint' && !hasInsufficientToken && (\n              <Flex\n                justify=\"right\"\n                fontSize=\"0.65rem\"\n                color=\"#a3a3a3\"\n                fontWeight={400}\n                display={'flex'}\n                flexDirection={'row'}\n                align=\"center\"\n                flexDir=\"column\"\n              >\n                {!inputValue.eq(0, 10) && <Box>ADA worth of</Box>}\n\n                <Flex align=\"center\">\n                  {portfolioAssets\n                    .sort((a, b) =>\n                      a.asset.ticker.localeCompare(b.asset.ticker),\n                    )\n                    .slice(0, 2)\n                    .map((assetInPortfolio, i) => (\n                      <Box\n                        key={assetInPortfolio.asset.id + i}\n                        width=\"2rem\"\n                        height=\"2rem\"\n                        overflow=\"hidden\"\n                        borderRadius=\"50%\"\n                        ml=\"-0.5rem\"\n                        zIndex={3 + i}\n                        position=\"relative\"\n                      >\n                        <Image\n                          key={assetInPortfolio.asset.id + i}\n                          src={assetInPortfolio.asset.imageUrl}\n                          alt={assetInPortfolio.asset.ticker}\n                        />\n                      </Box>\n                    ))}\n                  {portfolioAssets.length > 2 && (\n                    <Box\n                      fontSize=\"0.725rem\"\n                      alignItems=\"center\"\n                      justifyContent=\"center\"\n                      color=\"white\"\n                      background={themeVariables.purple.metera}\n                      width=\"28px\"\n                      height=\"28px\"\n                      borderRadius=\"full\"\n                      padding=\"0.3rem\"\n                      marginLeft=\"-1rem\"\n                      zIndex={4}\n                    >\n                      <Flex\n                        align=\"center\"\n                        height=\"full\"\n                        justify=\"center\"\n                        fontWeight={700}\n                      >\n                        +{portfolioAssets.length - 2}\n                      </Flex>\n                    </Box>\n                  )}\n                </Flex>\n              </Flex>\n            )}\n            <Text\n              fontSize=\"1.5rem\"\n              fontWeight=\"500\"\n              lineHeight=\"32px\"\n              letterSpacing=\"-0.02em\"\n              textAlign=\"right\"\n              paddingY={'4px'}\n            >\n              {type === 'mint' ? '' : portfolioTicker}\n              {type === 'mint' && hasInsufficientToken && 'ADA'}\n            </Text>\n            {/* @todo Connect the dollar exchange API */}\n            {/* <Text\n            fontSize=\"12px\"\n            fontWeight=\"400\"\n            lineHeight=\"20px\"\n            textAlign=\"right\"\n          >\n            {'$493.22'}\n          </Text> */}\n          </Flex>\n        </Flex>\n      </Flex>\n    </Flex>\n  );\n\n  const renderReceiveInputBox = () => {\n    const receiveValue = type === 'mint' ? expectedAmount : withdrawLovelace;\n    return (\n      <Flex\n        border={`1px solid ${themeVariables.cards.stroke}`}\n        bg={`${themeVariables.cards.background}, linear-gradient(180deg, rgba(139, 92, 246, 0.03) 0%, rgba(255, 255, 255, 0.00) 100%), rgba(27, 27, 30, 0.90)`}\n        _hover={{ border: `1px solid ${themeVariables.purple.metera}` }}\n        _focusWithin={{ border: `1px solid ${themeVariables.purple.metera}` }}\n        height=\"105px\"\n        borderRadius=\"1rem\"\n        padding=\"1.5rem\"\n        width=\"full\"\n        align=\"center\"\n      >\n        <Flex\n          justifyContent={'space-between'}\n          alignItems={'center'}\n          width={'100%'}\n          gap={'8px'}\n        >\n          <Flex\n            position={'relative'}\n            width={'full'}\n            flex={1}\n            alignItems={'flex-start'}\n          >\n            <Flex flexDir=\"column\" gap={1}>\n              <Box color=\"#A3A3A3\">Receive</Box>\n              <NumericFormat\n                className=\"mint-input\"\n                value={\n                  receiveValue.gt(0)\n                    ? receiveValue\n                        .abs()\n                        .div(10 ** MTK_DECIMALS)\n                        .toString()\n                    : ''\n                }\n                valueIsNumericString\n                placeholder={type === 'mint' ? '0.0' : 'ADA'}\n                thousandSeparator\n                readOnly\n                decimalScale={MTK_DECIMALS}\n                style={{\n                  width: '100%',\n                  color: themeVariables.offWhite.offWhite400,\n                  fontSize: '32px',\n                  fontWeight: '500',\n                  lineHeight: '32px',\n                  letterSpacing: '-0.02em',\n                  textAlign: 'left',\n                  backgroundColor: 'transparent',\n                  border: 'none',\n                  borderRadius: 0,\n                  outline: 'none',\n                }}\n              />\n            </Flex>\n          </Flex>\n          <Flex\n            flexDirection={'column'}\n            height=\"full\"\n            justify=\"center\"\n            color={'#A3A3A3'}\n          >\n            <Flex\n              flexDirection={'row'}\n              color={'#A3A3A3'}\n              gap={1}\n              align=\"center\"\n            >\n              {type === 'burn' ? (\n                <Flex\n                  justify=\"right\"\n                  fontSize=\"0.65rem\"\n                  color=\"#a3a3a3\"\n                  fontWeight={400}\n                  display={'flex'}\n                  flexDirection={'row'}\n                  align=\"center\"\n                  flexDir=\"column\"\n                >\n                  {!inputValue.eq(0, 10) && <Box>ADA worth of</Box>}\n                  <Flex align=\"center\">\n                    {portfolioAssets\n                      .sort((a, b) =>\n                        a.asset.ticker.localeCompare(b.asset.ticker),\n                      )\n                      .slice(0, 2)\n                      .map((assetInPortfolio, i) => (\n                        <Box\n                          key={assetInPortfolio.asset.id + i}\n                          width=\"2rem\"\n                          height=\"2rem\"\n                          overflow=\"hidden\"\n                          borderRadius=\"50%\"\n                          ml=\"-0.5rem\"\n                          zIndex={3 + i}\n                          position=\"relative\"\n                        >\n                          <Image\n                            key={assetInPortfolio.asset.id + i}\n                            src={assetInPortfolio.asset.imageUrl}\n                            alt={assetInPortfolio.asset.ticker}\n                          />\n                        </Box>\n                      ))}\n                    {portfolioAssets.length > 2 && (\n                      <Box\n                        fontSize=\"0.725rem\"\n                        alignItems=\"center\"\n                        justifyContent=\"center\"\n                        color=\"white\"\n                        background={themeVariables.purple.metera}\n                        width=\"28px\"\n                        height=\"28px\"\n                        borderRadius=\"full\"\n                        padding=\"0.3rem\"\n                        marginLeft=\"-1rem\"\n                        zIndex={4}\n                      >\n                        <Flex\n                          align=\"center\"\n                          height=\"full\"\n                          justify=\"center\"\n                          fontWeight={700}\n                        >\n                          +{portfolioAssets.length - 2}\n                        </Flex>\n                      </Box>\n                    )}\n                  </Flex>\n                </Flex>\n              ) : (\n                <Box width=\"1.25rem\">\n                  <Image\n                    objectFit=\"cover\"\n                    src={type === 'mint' ? portfolioImageUrl : cardanoSrc}\n                  />\n                </Box>\n              )}\n              <Text\n                fontSize=\"1.5rem\"\n                fontWeight=\"500\"\n                lineHeight=\"32px\"\n                letterSpacing=\"-0.02em\"\n                textAlign=\"right\"\n                paddingY={'4px'}\n              >\n                {type === 'mint' ? portfolioTicker : ''}\n              </Text>\n            </Flex>\n            <Flex justify=\"right\">\n              {type === 'mint' && (\n                <Flex\n                  justify=\"right\"\n                  fontSize=\"0.65rem\"\n                  color=\"#a3a3a3\"\n                  fontWeight={400}\n                  display={'flex'}\n                  flexDirection={'row'}\n                  gap={2}\n                  align=\"center\"\n                >\n                  <ProfileSvg color=\"#A3A3A3\" />\n\n                  <span>\n                    {BigNumber(balance?.[mtkUnit]?.toString() || 0)\n                      .div(10 ** MTK_DECIMALS)\n                      .toFixed(2)}\n                  </span>\n                </Flex>\n              )}\n            </Flex>\n          </Flex>\n        </Flex>\n      </Flex>\n    );\n  };\n\n  return (\n    <Flex flexDirection={'column'} alignItems={'center'}>\n      <Flex\n        position=\"relative\"\n        width=\"full\"\n        alignItems=\"center\"\n        flexDirection=\"column\"\n        gap=\"0.3rem\"\n      >\n        {renderSendInputBox()}\n        <Flex\n          position=\"absolute\"\n          background={background ? background : '#08040f'}\n          top=\"50%\"\n          left=\"50%\"\n          transform=\"translate(-50%, -50%)\"\n          width=\"2rem\"\n          height=\"2rem\"\n          borderRadius=\"50%\"\n          border={`1px solid ${themeVariables.cards.stroke}`}\n          justify=\"center\"\n          align=\"center\"\n          cursor=\"pointer\"\n          _hover={{ border: `1px solid ${themeVariables.purple.metera}` }}\n          onClick={(e) => {\n            switchType(type === 'mint' ? 'burn' : 'mint');\n            setInputValue(new BigNumber(0));\n          }}\n        >\n          <Image src={swapSrc} objectFit=\"cover\" />\n        </Flex>\n        {renderReceiveInputBox()}\n      </Flex>\n\n      <Flex\n        alignItems=\"center\"\n        width=\"full\"\n        gap={'0.5rem'}\n        onClick={showBreakdown}\n        cursor={'pointer'}\n        paddingY=\"0.5rem\"\n        height=\"100%\"\n        align=\"center\"\n      >\n        {!inputValue.eq(0, 10) && (\n          <Flex flexDir=\"column\" gap=\"0.5rem\" width=\"full\">\n            <Box\n              height={'auto'}\n              width={'auto'}\n              padding=\"0rem\"\n              border={`1px solid ${themeVariables.cards.stroke}`}\n              sx={{\n                cursor: 'pointer',\n                border: '2px solid transparent',\n                transition: 'border 0.2s, transform 0.2s',\n                position: 'relative',\n                borderRadius: '0.75rem',\n              }}\n            >\n              {' '}\n              <Flex\n                align=\"center\"\n                gap={2}\n                border={`1px solid ${themeVariables.cards.stroke}`}\n                borderRadius=\"0.75rem\"\n                padding=\"1rem\"\n                fontSize=\"0.875rem\"\n                width=\"100%\"\n                justify=\"center\"\n                bg=\"var(--bg-100)\"\n              >\n                {hasInsufficientToken ? (\n                  <Box color=\"#39b75a\" fontSize=\"1rem\" fontWeight={500}>\n                    Mint MTKs by providing ADA. Click for details.\n                  </Box>\n                ) : (\n                  <>\n                    {' '}\n                    <StatusDot showStatus={false} status=\"confirmed\" />\n                    <Box fontSize=\"1rem\" color=\"#39b75a\">\n                      Assets found in wallet. View breakdown.\n                    </Box>\n                  </>\n                )}\n              </Flex>\n            </Box>\n            {type === 'mint' && hasInsufficientToken ? (\n              <StepGuide step=\"1\" hasBorder />\n            ) : (\n              ''\n            )}\n          </Flex>\n        )}\n      </Flex>\n    </Flex>\n  );\n}\n\nexport default BuySellInput;\n","import React from 'react';\nimport { ButtonProps, Flex } from '@chakra-ui/react';\nimport PurpleButton from './atoms/buttons/PurpleButton';\nimport NeutralButton from './atoms/buttons/neutralButton';\nimport { themeVariables } from '../theme';\nimport { Image } from '@chakra-ui/react';\n\nconst poweredByLogo =\n  'https://bjlavcngusgdszvtjwdr.supabase.co/storage/v1/object/public/Images//powered_white_stacked.png';\ninterface StepButtonsProps {\n  pb?: string;\n  pt?: string;\n  poweredBy?: boolean;\n  disableLeft?: boolean;\n  disableRight?: boolean;\n  leftText?: string;\n  rightText: string;\n  leftOnclick?: () => void;\n  rightOnclick: () => void;\n  rightBtnProps?: ButtonProps;\n  leftBtnProps?: ButtonProps;\n  primaryButtonColor?: string;\n  hoverButtonColor?: string;\n}\n\nfunction StepButtons(props: StepButtonsProps) {\n  const {\n    leftOnclick,\n    leftText,\n    rightOnclick,\n    rightText,\n    pb = '1rem',\n    pt = '1rem',\n    disableLeft = false,\n    disableRight = false,\n    rightBtnProps = {},\n    leftBtnProps = {},\n    poweredBy,\n    primaryButtonColor,\n    hoverButtonColor,\n  } = props;\n  return (\n    <Flex\n      gap=\"8px\"\n      pb={pb}\n      pt={pt}\n      height=\"full\"\n      mt=\"auto\"\n      justify=\"space-between\"\n      align=\"center\"\n    >\n      <Flex>\n        {leftText && (\n          <NeutralButton\n            onClick={leftOnclick}\n            disabled={disableLeft}\n            width=\"100%\"\n            borderRadius=\"60rem\"\n            border={`1.5px solid ${themeVariables.purple.metera}`}\n            fontSize=\"0.875rem\"\n            color={themeVariables.primary.primary50}\n            fontWeight=\"700\"\n            cursor={disableLeft ? 'not-allowed' : 'pointer'}\n            {...leftBtnProps}\n          >\n            {leftText}\n          </NeutralButton>\n        )}\n      </Flex>\n\n      {rightText && (\n        <PurpleButton\n          flex=\"2\"\n          width=\"100%\"\n          onClick={rightOnclick}\n          disabled={disableRight}\n          cursor={disableRight ? 'not-allowed' : 'pointer'}\n          {...rightBtnProps}\n          primaryButtonColor={primaryButtonColor}\n          hoverButtonColor={hoverButtonColor}\n        >\n          {rightText}\n        </PurpleButton>\n      )}\n      {poweredBy && (\n        <Flex flex={1}>\n          <a href=\"https://test.meteraprotocol.io/\" target=\"blank\">\n            <img height=\"80%\" src={poweredByLogo} alt=\"Powered by Metera\" />\n          </a>\n        </Flex>\n      )}\n    </Flex>\n  );\n}\n\nexport default StepButtons;\n","import React, { forwardRef } from 'react';\nimport { Button } from '@chakra-ui/react';\nimport type { ButtonProps } from '@chakra-ui/react';\nimport { themeVariables } from '@meteraprotocol/sdk/ui/theme.js';\n\ninterface PurpleButtonProps extends ButtonProps {\n  primaryButtonColor?: string;\n  hoverButtonColor?: string;\n}\n\nconst PurpleButton = forwardRef<HTMLButtonElement, PurpleButtonProps>(\n  (\n    {\n      primaryButtonColor = themeVariables.purple.button100,\n      hoverButtonColor = themeVariables.purple.button200,\n      ...props\n    },\n    ref,\n  ) => (\n    <Button\n      textColor={themeVariables.primary.primary50}\n      background={primaryButtonColor}\n      fontSize=\".875rem\"\n      borderRadius=\"0.75rem\"\n      isDisabled={props.disabled}\n      _hover={{\n        background: hoverButtonColor,\n      }}\n      _active={{\n        bg: '#414a60',\n      }}\n      _disabled={{\n        filter: 'grayscale(100%)',\n      }}\n      ref={ref}\n      {...props}\n    />\n  ),\n);\n\nexport default PurpleButton;\n","import React, { forwardRef } from 'react';\nimport { Button } from '@chakra-ui/react'; // Assuming you're using Chakra UI\nimport type { ButtonProps } from '@chakra-ui/react'; // Import ButtonProps type\nimport { themeVariables } from '@meteraprotocol/sdk/ui/theme.js';\n\nconst NeutralButton = forwardRef<HTMLButtonElement, ButtonProps>(\n  (props, ref) => (\n    <Button\n      ref={ref}\n      textColor={themeVariables.primary.primary50}\n      fontSize=\".875rem\"\n      borderRadius=\"22px\"\n      background={themeVariables.gradient.button}\n      border={`1px solid ${themeVariables.cards.stroke}, rgba(139, 93, 247, 0.35)`}\n      _hover={{\n        background: themeVariables.gradient.button100,\n      }}\n      _active={{\n        bg: '#414a60',\n      }}\n      {...props}\n    />\n  ),\n);\n\nexport default NeutralButton;\n","import { TableCellProps, TableColumnHeaderProps, Td } from '@chakra-ui/react';\n\nexport const MeteraTh = ({ children, ...rest }: TableColumnHeaderProps) => (\n  <Td\n    overflow=\"hidden\"\n    fontSize={'1rem'}\n    color=\"white\"\n    cursor=\"pointer\"\n    borderRadius=\"2rem\"\n    {...rest}\n  >\n    {children}\n  </Td>\n);\n\nexport const MeteraTd = ({ children, ...rest }: TableCellProps) => (\n  <Td\n    overflow=\"hidden\"\n    whiteSpace={'nowrap'}\n    textOverflow=\"ellipsis\"\n    p={0}\n    h=\"40px\"\n    textAlign=\"center\"\n    {...rest}\n  >\n    {children}\n  </Td>\n);\n","import { Box, Flex, Image, Td, Tooltip, Tr } from '@chakra-ui/react';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport { Balance, assetToUnit } from '../blockchain/client';\nimport { formatState } from '../blockchain/client/interact';\nimport StatusDot from './atoms/svg/statusDot-svg';\nimport { stringToFormattedNumber } from './stringToNumber';\nimport { ArrayElement, IPortfolioState } from '../types';\nimport { bigRationalToBigNumber } from '../utils';\nimport { themeVariables } from '../theme';\n\nconst abs = (n: bigint) => (n < 0n ? -n : n);\n\nfunction PortfolioItem(props: {\n  item: ArrayElement<IPortfolioState['assets']>;\n  balance: Balance | null;\n  type: 'mint' | 'burn';\n  amountsToModify: Record<string, bigint>;\n  formattedState: ReturnType<typeof formatState>;\n  fontSize?: string;\n}) {\n  const brZero = new BigRational(0n, 1n);\n  const { fontSize = '12px' } = props;\n  // Portfolio metrics before tx\n  const adaPortfolioWorth = Object.entries(\n    props.formattedState.state.assets,\n  ).reduce(\n    (acc, [asset, amount]) => {\n      const assetWorth = new BigRational(amount, 1n).mul(\n        props.formattedState.prices[asset],\n      );\n      return acc.add(assetWorth).reduce();\n    },\n    new BigRational(0n, 1n),\n  );\n\n  const adaWorthInPortfolio = props.formattedState.prices[props.item.asset.id]\n    .mul(\n      new BigRational(\n        props.formattedState.state.assets[props.item.asset.id],\n        1n,\n      ),\n    )\n    .reduce();\n  const tokensInPortfolio =\n    props.formattedState.state.assets[props.item.asset.id];\n\n  const worthPercentageInPortfolio = adaWorthInPortfolio\n    .div(adaPortfolioWorth)\n    .mul(new BigRational(100n, 1n).reduce());\n\n  // Tx metrics\n  const adaTxWorth = Object.entries(props.amountsToModify).reduce(\n    (acc, [asset, amount]) => {\n      const assetWorth = new BigRational(amount, 1n).mul(\n        props.formattedState.prices[asset],\n      );\n      return acc.add(assetWorth).reduce();\n    },\n    new BigRational(0n, 1n),\n  );\n  const adaWorthInTx = props.formattedState.prices[props.item.asset.id]\n    .mul(new BigRational(props.amountsToModify[props.item.asset.id], 1n))\n    .reduce();\n  const worthPercentageInTx = adaTxWorth.eq(brZero)\n    ? brZero\n    : adaWorthInTx.div(adaTxWorth).mul(new BigRational(100n, 1n)).reduce();\n  const tokensInTx = props.amountsToModify[props.item.asset.id];\n\n  // Portfolio metrics after tx\n  const worthOfPortfolioAfterTx = adaTxWorth.add(adaPortfolioWorth).reduce();\n  const adaWorthAfterTx = adaWorthInPortfolio.add(adaWorthInTx).reduce();\n  const worthPercentageAfterTx = worthOfPortfolioAfterTx.eq(brZero)\n    ? brZero\n    : adaWorthAfterTx\n        .div(worthOfPortfolioAfterTx)\n        .mul(new BigRational(100n, 1n))\n        .reduce();\n  const tokensAfterTx = tokensInPortfolio + tokensInTx;\n\n  const amountToModify = abs(\n    props.amountsToModify[props.item.asset.id] || 0n,\n  ).toString();\n\n  const hasEnoughToken = BigNumber(\n    (props.amountsToModify[props.item.asset.id] || 0n).toString(),\n  ).lte(\n    BigNumber(\n      (props.balance?.[assetToUnit(props.item.asset)] || 0n).toString(),\n    ),\n  );\n\n  return (\n    <Tr verticalAlign=\"middle\" fontSize={fontSize}>\n      <Td\n        textAlign=\"left\"\n        align=\"center\"\n        flexDir={'row'}\n        paddingX={'6px'}\n        paddingY={'12px'}\n        paddingLeft={'10px'}\n        width={'fit-content'}\n      >\n        <Flex justify=\"left\">\n          <Flex justify=\"left\">\n            <Flex flexDir=\"row\" gap={2} align=\"center\">\n              <Box\n                width=\"1.75rem\"\n                height=\"1.75rem\"\n                overflow=\"hidden\"\n                borderRadius=\"full\"\n                background={themeVariables.purple.metera200}\n              >\n                <Image\n                  boxSize=\"100%\"\n                  objectFit=\"cover\"\n                  src={props.item.asset.imageUrl}\n                  alt={props.item.asset.ticker}\n                />\n                -\n              </Box>\n              <Box\n                fontSize=\"0.785rem\"\n                color={themeVariables.primary.primary50}\n                fontWeight=\"600\"\n              >\n                {props.item.asset.ticker}\n              </Box>\n            </Flex>\n          </Flex>\n        </Flex>\n      </Td>\n      <Td\n        align=\"center\"\n        fontSize={fontSize === '12px' ? '1rem' : fontSize}\n        paddingX={'6px'}\n        paddingY={'12px'}\n      >\n        <Flex gap={2} justify=\"flex-end\">\n          <PortfolioDataItem\n            color={themeVariables.primary.primary50}\n            value={BigNumber(amountToModify.toString())}\n            decimals={props.item.asset.decimals}\n          />\n        </Flex>\n      </Td>\n      <Td\n        align=\"center\"\n        fontSize={fontSize === '12px' ? '1rem' : fontSize}\n        paddingX={'6px'}\n        paddingY={'12px'}\n      >\n        <Flex gap={1} justify=\"right\">\n          <Box>₳</Box>\n          <PortfolioDataItem\n            color={themeVariables.primary.primary50}\n            value={bigRationalToBigNumber(adaWorthInTx).abs()}\n            decimals={0}\n          />\n        </Flex>\n      </Td>\n\n      {props.type === 'mint' && (\n        <Td\n          align=\"center\"\n          fontSize={fontSize === '12px' ? '1rem' : fontSize}\n          paddingX={'6px'}\n          paddingY={'12px'}\n        >\n          <Flex align=\"center\" justifyContent={'flex-end'} gap={2}>\n            {hasEnoughToken ? (\n              <StatusDot showStatus={false} status=\"Confirmed\" />\n            ) : (\n              <Tooltip\n                sx={{\n                  background: themeVariables.cards.background,\n                  border: `0.5px solid `,\n                  borderRadius: '1rem',\n                  color: themeVariables.offWhite.offWhite400,\n                  fontWeight: '600',\n                  padding: '1rem',\n                  backdropFilter: 'blur(30px)',\n                }}\n                label={`You don't have enough ${props.item.asset.name}. Click the dot to visit our faucet.`}\n              >\n                <button>\n                  <a href=\"/faucet\" style={{ color: 'var(--link-color)' }}>\n                    <StatusDot showStatus={false} status=\"Cancelled\" />\n                  </a>\n                </button>\n              </Tooltip>\n            )}\n            <PortfolioDataItem\n              value={BigNumber(\n                (\n                  props.balance?.[assetToUnit(props.item.asset)] || 0n\n                ).toString(),\n              )}\n              decimals={props.item.asset.decimals}\n              color={themeVariables.primary.primary50}\n            />\n          </Flex>\n        </Td>\n      )}\n    </Tr>\n  );\n}\n\nconst PortfolioDataItem = (props: {\n  title?: string;\n  value: BigNumber;\n  color?: string;\n  decimals: number;\n}) => (\n  <Flex flexDir={'column'} whiteSpace=\"nowrap\">\n    <Box color={props.color}>\n      {stringToFormattedNumber(\n        props.value.div(10 ** props.decimals).toString(),\n      )}\n    </Box>\n  </Flex>\n);\n\nexport default PortfolioItem;\n","import { CloseIcon } from '@chakra-ui/icons';\nimport {\n  Box,\n  Flex,\n  IconButton,\n  Table,\n  TableContainer,\n  Text,\n  Thead,\n  Tooltip,\n  Tr,\n} from '@chakra-ui/react';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport React, { useState } from 'react';\nimport { MdSwapHoriz } from 'react-icons/md/index.js';\nimport { assetToUnit, Balance } from '../blockchain/client';\nimport { IAssetInPortfolio } from '../types';\nimport ArrowTableSVG from './atoms/svg/arrowtable-svg';\nimport InfoSVG from './atoms/svg/infoSVG';\nimport StatusDot from './atoms/svg/statusDot-svg';\nimport { MeteraTh } from './atoms/table/MeteraTable';\nimport PortfolioItem from './portfolio-item';\nimport { stringToFormattedNumber } from './stringToNumber';\nimport { themeVariables } from '../theme';\n\ntype TokensBreakdownProps = {\n  type: 'mint' | 'burn';\n  portfolioAssets: IAssetInPortfolio[];\n  balance: Balance | null;\n  amountsToModify: Record<string, bigint>;\n  formattedState: {\n    prices: Record<string, BigRational>;\n    weights: Record<string, BigRational>;\n    state: {\n      assets: Record<string, bigint>;\n      mtkSupply: bigint;\n    };\n  };\n  hideBreakdown: () => void;\n  from: BigNumber;\n  to: BigNumber;\n  portfolioTicker: string;\n  hasInsufficientToken: boolean;\n  isModal?: boolean;\n  background?: string;\n};\n\nconst TokensBreakdown: React.FC<TokensBreakdownProps> = ({\n  type,\n  portfolioAssets,\n  balance,\n  amountsToModify,\n  formattedState,\n  hideBreakdown,\n  from,\n  to,\n  portfolioTicker,\n  hasInsufficientToken,\n  isModal = true,\n  background,\n}) => (\n  <Flex\n    width={'full'}\n    height={'full'}\n    flexDirection={'column'}\n    padding=\"1rem\"\n    background={background ? background : themeVariables.background.modal}\n  >\n    <Flex\n      alignItems={'flex-end'}\n      width={'100%'}\n      flexDirection={'column'}\n      gap={1}\n      padding={'8px'}\n    >\n      <IconButton\n        aria-label=\"Close\"\n        borderRadius={'100%'}\n        fill={'#a78bfa'}\n        color={'#a78bfa;'}\n        size={'sm'}\n        onClick={hideBreakdown}\n        background={'transparent'}\n        icon={<CloseIcon />}\n        alignSelf={'flex-end'}\n      />\n      <Flex width={'100%'} justifyContent={'center'} gap={'1rem'}>\n        <Flex fontSize=\"24px\" lineHeight=\"24px\" gap={'4px'}>\n          <Text fontWeight=\"500\" letterSpacing=\"-0.02em\" color={'#A3A3A3'}>\n            {type === 'mint' ? 'ADA' : portfolioTicker}\n          </Text>\n          {stringToFormattedNumber(from.abs().toString())}\n        </Flex>\n        <MdSwapHoriz />\n        <Flex fontSize=\"24px\" lineHeight=\"24px\" gap={'4px'}>\n          <Text fontWeight=\"500\" letterSpacing=\"-0.02em\" color={'#A3A3A3'}>\n            {type === 'mint' ? portfolioTicker : 'ADA'}\n          </Text>\n          {stringToFormattedNumber(\n            to\n              .abs()\n              .div(10 ** 6)\n              .toFixed(6),\n            4,\n          )}\n        </Flex>\n      </Flex>\n      <Flex\n        paddingX=\"0.5rem\"\n        gap={2}\n        width=\"100%\"\n        height=\"2.5rem\"\n        justifyContent={'center'}\n        alignItems={'center'}\n      >\n        <StatusDot\n          showStatus={false}\n          status={!hasInsufficientToken ? 'Confirmed' : 'Insufficient'}\n        />\n        <Text\n          fontSize=\"14px\"\n          fontWeight=\"400\"\n          lineHeight=\"20px\"\n          textAlign=\"left\"\n        >\n          Tokens breakdown\n        </Text>\n      </Flex>\n    </Flex>\n    <Box\n      overflowY=\"auto\"\n      borderRadius={'0.75rem'}\n      width=\"full\"\n      paddingTop={'0.15rem'}\n    >\n      <Flex gap={3} overflow=\"auto\">\n        <TableContainer\n          overflowY=\"auto\"\n          sx={{\n            '&::-webkit-scrollbar': {\n              width: '0px',\n            },\n            '&::-webkit-scrollbar-track': {\n              background: 'none',\n            },\n            '&::-webkit-scrollbar-thumb': {\n              background: 'none',\n            },\n            '&::-webkit-scrollbar-thumb:hover': {\n              background: 'none',\n            },\n          }}\n        >\n          <Table\n            variant=\"unstyled\"\n            sx={{\n              tableLayout: 'fixed',\n            }}\n          >\n            <Thead\n              position={'sticky'}\n              top={0}\n              left={0}\n              zIndex={1}\n              borderBottom=\"none\"\n            >\n              <Tr>\n                <MeteraTh\n                  textAlign=\"left\"\n                  paddingX={'8px'}\n                  paddingY=\"1rem\"\n                  paddingLeft={'10px'}\n                  fontSize=\"0.875rem\"\n                  color={themeVariables.neutral[400]}\n                  borderTopLeftRadius=\"full\"\n                >\n                  Name\n                </MeteraTh>\n                <MeteraTh\n                  textAlign=\"right\"\n                  paddingX={0}\n                  paddingY=\"1rem\"\n                  fontSize=\"0.875rem\"\n                  color={themeVariables.neutral[400]}\n                >\n                  <Flex gap={2}>\n                    <Box>Amount</Box>\n                    <Tooltip\n                      sx={{\n                        background: themeVariables.cards.background,\n                        border: `0.5px solid ${themeVariables.cards.stroke}`,\n                        borderRadius: '1rem',\n                        color: themeVariables.offWhite.offWhite400,\n                        fontWeight: '600',\n                        padding: '1rem',\n                        backdropFilter: 'blur(30px)',\n                      }}\n                      label={`This is the amount of tokens you${type === 'mint' ? ' need to deposit into' : \"'ll receive from\"} the instrument. `}\n                    >\n                      <button>\n                        <InfoSVG />\n                      </button>\n                    </Tooltip>\n                  </Flex>\n                </MeteraTh>\n                <MeteraTh\n                  textAlign=\"right\"\n                  paddingX={0}\n                  paddingY=\"1rem\"\n                  fontSize=\"0.875rem\"\n                  color={themeVariables.neutral[400]}\n                >\n                  <Flex width=\"full\" justify=\"center\" gap={2}>\n                    <Box>Worth</Box>\n                    <Tooltip\n                      sx={{\n                        background: themeVariables.cards.background,\n                        border: `0.5px solid ${themeVariables.cards.stroke}`,\n                        borderRadius: '1rem',\n                        color: themeVariables.offWhite.offWhite400,\n                        fontWeight: '600',\n                        padding: '1rem',\n                        backdropFilter: 'blur(30px)',\n                      }}\n                      label=\"Value in ADA of each asset\"\n                    >\n                      <button>\n                        <InfoSVG />\n                      </button>\n                    </Tooltip>\n                  </Flex>\n                </MeteraTh>\n                {type === 'mint' && (\n                  <MeteraTh\n                    textAlign=\"right\"\n                    paddingX={0}\n                    paddingY=\"1rem\"\n                    fontSize=\"0.875rem\"\n                    color={themeVariables.neutral[400]}\n                    paddingRight={'6px'}\n                  >\n                    Balance\n                  </MeteraTh>\n                )}\n              </Tr>\n            </Thead>\n            <tbody style={{ maxHeight: '286px' }}>\n              {portfolioAssets\n                .sort((a, b) => a.asset.ticker.localeCompare(b.asset.ticker))\n                .map((assetInPortfolio, i) => (\n                  <PortfolioItem\n                    item={assetInPortfolio}\n                    key={assetInPortfolio.asset.id + i}\n                    type={type}\n                    balance={balance}\n                    amountsToModify={amountsToModify}\n                    formattedState={formattedState}\n                    {...(isModal ? {} : { fontSize: '12.5px' })}\n                  />\n                ))}\n            </tbody>\n          </Table>\n        </TableContainer>\n      </Flex>\n    </Box>\n  </Flex>\n);\n\nexport function TokensBreakdownButton(props: TokensBreakdownProps) {\n  const { portfolioAssets, balance, amountsToModify } = props;\n  const [showBreakdown, setShowBreakdown] = useState<boolean>(false);\n\n  const hasAllTokens = portfolioAssets.every((item) =>\n    BigNumber((amountsToModify[item.asset.id] || 0n).toString()).lte(\n      BigNumber((balance?.[assetToUnit(item.asset)] || 0n).toString()),\n    ),\n  );\n\n  return (\n    <Flex\n      flexDirection={'column'}\n      width={'100%'}\n      alignItems={'center'}\n      gap={'1rem'}\n    >\n      <Flex\n        paddingX=\"0.5rem\"\n        background={themeVariables.background.tableModals}\n        border={`1px solid ${themeVariables.cards.stroke}`}\n        borderRadius=\"62rem\"\n        gap={2}\n        width=\"230px\"\n        height=\"2.5rem\"\n        cursor={'pointer'}\n        onClick={() => setShowBreakdown(!showBreakdown)}\n        justifyContent={'center'}\n        alignItems={'center'}\n      >\n        <StatusDot\n          showStatus={false}\n          status={hasAllTokens ? 'Confirmed' : 'Insufficient'}\n        />\n        <Text\n          fontSize=\"14px\"\n          fontWeight=\"400\"\n          lineHeight=\"20px\"\n          textAlign=\"left\"\n        >\n          {showBreakdown ? 'Hide' : 'View'} token breakdown\n        </Text>\n\n        <Box>\n          {showBreakdown ? (\n            <Box transform=\"rotate(-90deg)\" marginTop=\"2px\">\n              <ArrowTableSVG />\n            </Box>\n          ) : (\n            <Box transform=\"rotate(90deg)\" marginTop=\"4px\">\n              <ArrowTableSVG />\n            </Box>\n          )}\n        </Box>\n      </Flex>\n      <TokensBreakdown {...props} />\n    </Flex>\n  );\n}\n\nexport default TokensBreakdown;\n","import {\n  Modal,\n  ModalBody,\n  ModalContent,\n  ModalOverlay,\n  ModalProps,\n} from '@chakra-ui/react';\nimport { themeVariables } from '@meteraprotocol/sdk/ui/theme.js';\nimport emotionStyled from '@emotion/styled';\nconst styled = (emotionStyled as any).default || emotionStyled; // Fallback to named import\n\nconst StyledModalContent = styled(ModalContent)`\n  @property --animated-border {\n    syntax: '<angle>';\n    inherits: true;\n    initial-value: 0turn;\n  }\n`;\n\nexport const LoadingModal = ({\n  children,\n  minHeight = '15rem',\n  minWidth = '50%',\n  ...rest\n}: ModalProps & { minWidth?: string; minHeight?: string }) => (\n  <Modal isCentered {...rest}>\n    <ModalOverlay bg=\"#171717B3\" />\n    <StyledModalContent\n      background={themeVariables.cards.background}\n      minHeight={minHeight}\n      minWidth={minWidth}\n      padding=\"0rem\"\n      borderRadius={'1.25rem'}\n      border={`1px solid ${themeVariables.cards.stroke}`}\n      sx={{\n        cursor: 'pointer',\n        border: '2px solid transparent',\n        transition: 'border 0.2s, transform 0.2s',\n        borderRadius: '10px !important',\n        '--animated-border': themeVariables.animatedBorder.initialValue,\n        background: `\n            conic-gradient(\n              from var(--animated-border),\n              #171717a3,\n              #171717a3 5%,\n              #171717a3 60%,\n              #171717a3 95%\n            )\n            padding-box,\n            conic-gradient(\n              from var(--animated-border),\n              transparent 25%,\n              #6d28d9,\n              #a78bfa 99%,\n              transparent\n            )\n            border-box`,\n        animation: `${themeVariables.animatedBorder.bgSpin} 3s linear infinite`,\n      }}\n    >\n      <ModalBody padding={0}>{children}</ModalBody>\n    </StyledModalContent>\n  </Modal>\n);\n","import React from 'react';\nimport { Box, Flex, Link, Text, UseDisclosureReturn } from '@chakra-ui/react';\nimport { LoadingModal } from './atoms/modal/loadingmodal';\nimport { themeVariables } from '../theme';\ninterface TransactionInProgressProps {\n  disc: UseDisclosureReturn;\n  title?: string;\n  description?: string;\n  isSwap?: boolean;\n  background?: string;\n}\n\nexport const TransactionInProgress: React.FC<TransactionInProgressProps> = ({\n  title = 'Metera Order in Progress',\n  description = 'Confirm the transaction in your wallet',\n  isSwap,\n  background,\n}) => (\n  <Flex\n    flexDir=\"column\"\n    gap=\"2rem\"\n    minHeight=\"264px\"\n    align=\"center\"\n    justify=\"center\"\n    padding={'24px'}\n    background={background ? background : themeVariables.background.modal}\n    borderRadius=\"10px\"\n    width={'100%'}\n    color={themeVariables.offWhite.offWhite400}\n  >\n    <Flex\n      flexDir=\"column\"\n      gap=\"1rem\"\n      align=\"center\"\n      justify=\"center\"\n      padding={'24px'}\n      borderRadius=\"0.75rem\"\n      width={'100%'}\n      cursor=\"default\"\n    >\n      <Text\n        fontSize=\"18px\"\n        fontWeight=\"500\"\n        lineHeight=\"28px\"\n        textAlign=\"center\"\n      >\n        {title}\n      </Text>\n      <Flex>\n        {isSwap ? (\n          <Flex flexDir=\"column\" width=\"25rem\" gap=\"1rem\">\n            {/* <StepGuide hasBorder step=\"1\" /> todo: add stepguide to library */}\n            <Flex\n              justify=\"center\"\n              color={themeVariables.neutral[400]}\n              fontSize=\"16px\"\n              fontWeight={400}\n              lineHeight=\"24px\"\n              textAlign=\"center\"\n            >\n              {description}\n            </Flex>\n          </Flex>\n        ) : (\n          <Flex\n            justify=\"center\"\n            color={themeVariables.neutral[400]}\n            fontSize=\"16px\"\n            fontWeight={400}\n            lineHeight=\"24px\"\n            textAlign=\"center\"\n          >\n            {description}\n          </Flex>\n        )}\n      </Flex>\n    </Flex>\n    <Flex\n      fontSize=\"12px\"\n      fontWeight={400}\n      lineHeight=\"20px\"\n      textAlign=\"left\"\n      gap={1}\n    >\n      <Text as={'span'}>Do you need help?</Text>\n      <Link\n        href={'https://discord.com/invite/Ws5Z5ZACme'}\n        color={themeVariables.purple.button100}\n        target=\"blank\"\n      >\n        Contact support\n      </Link>\n    </Flex>\n  </Flex>\n);\n\nfunction TransactionInProgressModal(props: TransactionInProgressProps) {\n  return (\n    <LoadingModal {...props.disc} minWidth=\"376px\" minHeight=\"274px\">\n      <TransactionInProgress\n        title={props.title}\n        description={props.description}\n        isSwap={props.isSwap}\n      />\n    </LoadingModal>\n  );\n}\n\nexport default TransactionInProgressModal;\n","import {\n  Modal,\n  ModalBody,\n  ModalContent,\n  ModalOverlay,\n  ModalProps,\n} from '@chakra-ui/react';\nimport { themeVariables } from '@meteraprotocol/sdk/ui/theme.js';\n\nexport const TransactionModal = ({\n  children,\n  minHeight,\n  maxWidth,\n  p = '',\n  ...rest\n}: ModalProps & { minHeight?: string; maxWidth?: string; p?: string }) => (\n  <Modal isCentered {...rest}>\n    <ModalOverlay bg=\"#171717B3\" />\n    <ModalContent\n      background={themeVariables.background.purple200}\n      minHeight={minHeight || '23rem'}\n      maxWidth={maxWidth || '40%'}\n      borderRadius={'1.25rem'}\n      border={`1px solid ${themeVariables.cards.stroke}`}\n      sx={{ backdropFilter: 'blur(60px)' }}\n    >\n      <ModalBody p={p || 0}>{children}</ModalBody>\n    </ModalContent>\n  </Modal>\n);\n","import { Box, Flex, Image, Text, UseDisclosureReturn } from '@chakra-ui/react';\nimport React from 'react';\nimport { TransactionModal } from './atoms/modal/txmodal';\nimport StepButtons from './step-buttons';\nimport { themeVariables } from '../theme';\n\ninterface TransactionSubmittedProps {\n  title?: string;\n  description?: string;\n  route?: string;\n  onClose: () => void;\n  routeText?: string;\n  background?: string;\n}\n\nconst poweredByLogo =\n  'https://bjlavcngusgdszvtjwdr.supabase.co/storage/v1/object/public/Images//powered_white_stacked.png';\n\nexport const TransactionSubmitted: React.FC<TransactionSubmittedProps> = ({\n  onClose,\n  title = 'Transaction Submitted',\n  description = 'Please allow some minutes for your transaction to process on-chain',\n  route = 'orders',\n  routeText = 'Order',\n  background,\n}) => {\n  return (\n    <>\n      <Flex\n        background={background ? background : themeVariables.background.modal}\n        flexDir=\"column\"\n        width=\"full\"\n        height=\"full\"\n        maxWidth=\"376px\"\n        minHeight=\"274px\"\n        gap=\"1.5rem\"\n        padding=\"1rem 2.5rem\"\n        alignItems={'center'}\n        mx={'auto'}\n      >\n        <Box>\n          <Image src={poweredByLogo} />\n        </Box>\n        <Flex\n          flexDirection={'column'}\n          gap={'5px'}\n          width={'100%'}\n          alignItems={'center'}\n        >\n          <Text\n            fontSize=\"18px\"\n            fontWeight=\"500\"\n            lineHeight=\"28px\"\n            textAlign=\"center\"\n            color={themeVariables.offWhite.offWhite400}\n          >\n            {title}\n          </Text>\n          <Text\n            color={themeVariables.neutral[400]}\n            fontSize=\"16px\"\n            fontWeight={400}\n            lineHeight=\"24px\"\n            textAlign=\"center\"\n          >\n            {description}\n          </Text>\n        </Flex>\n        <StepButtons\n          poweredBy={false}\n          rightText={`View ${routeText}`}\n          rightOnclick={() => {\n            window.open(\n              `https://preprod.meteraprotocol.io/me/${route}`,\n              '_blank',\n            );\n          }}\n          leftText=\"Close\"\n          leftOnclick={onClose}\n        />\n      </Flex>\n    </>\n  );\n};\n\ninterface TransactionSubmittedModalProps extends TransactionSubmittedProps {\n  disc: UseDisclosureReturn;\n  onClose: () => void;\n}\n\nfunction TransactionSubmittedModal({\n  disc,\n  onClose,\n  title,\n  description,\n  route,\n  routeText,\n}: TransactionSubmittedModalProps) {\n  return (\n    <TransactionModal\n      {...disc}\n      isOpen={disc.isOpen}\n      maxWidth=\"376px\"\n      minHeight=\"274px\"\n    >\n      <TransactionSubmitted onClose={onClose} />\n    </TransactionModal>\n  );\n}\n\nexport default TransactionSubmittedModal;\n","import { computeFees, MTK_DECIMALS } from '@meteraprotocol/core';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport { useMemo } from 'react';\nimport { getMTKPrice } from '../blockchain/client/index.js';\nimport {\n  computeAmountPerAssetForInteraction,\n  formatState,\n} from '../blockchain/client/interact.js';\nimport { IPortfolioState } from '../types.js';\nimport { bigNumberToBigRational, bigRationalToBigNumber } from '../utils.js';\n\ntype useBuySellFeesProps = {\n  inputValue: BigNumber;\n  portfolio: IPortfolioState;\n  type: 'mint' | 'burn';\n};\n\ntype useBuySellFeesReturn = {\n  amountsPerAsset: {\n    assets: Record<string, bigint>;\n    mtkSupply: bigint;\n  };\n  fees: {\n    batcherFee: BigNumber;\n    platformFee: BigNumber;\n    userFee: BigNumber;\n  };\n  formattedState: ReturnType<typeof formatState>;\n  mintedMicroMTK: BigNumber;\n  userReceiveMTK: BigNumber;\n  withdrawLovelace: BigNumber;\n  withdrawUserLvc: BigNumber;\n};\n\nfunction useBuySellFees({\n  inputValue,\n  portfolio,\n  type,\n}: useBuySellFeesProps): useBuySellFeesReturn {\n  const formattedState = useMemo(() => formatState(portfolio), [portfolio]);\n\n  const {\n    amountsPerAsset,\n    mintedMicroMTK,\n    userReceiveMTK,\n    fees,\n    withdrawLovelace,\n    withdrawUserLvc,\n  } = useMemo(() => {\n    const rationalInput = bigNumberToBigRational(inputValue);\n    const adaMicroMTKPrice = getMTKPrice(portfolio);\n\n    // ada worth of the interaction\n    const adaAmount =\n      type === 'mint'\n        ? rationalInput\n        : rationalInput\n            .negate()\n            .mul(new BigRational(BigInt(10 ** MTK_DECIMALS), 1n))\n            .mul(adaMicroMTKPrice)\n            .reduce();\n\n    // how much of each asset this interaction involves\n    const amountsPerAsset = computeAmountPerAssetForInteraction(\n      adaAmount,\n      formattedState,\n    );\n\n    const fees = computeFees({\n      portfolioState: {\n        batcherFee: BigNumber(portfolio.batcherFee.toString()),\n        entryFee: BigNumber(portfolio.entryFee.toString()),\n        exitFee: BigNumber(portfolio.exitFee.toString()),\n        platformFee: BigNumber(portfolio.platformFee.toString()),\n        // microMTKPrice is expected in lovelace\n        microMtkPrice: bigRationalToBigNumber(adaMicroMTKPrice).multipliedBy(\n          10 ** 6,\n        ),\n      },\n      amount: bigRationalToBigNumber(\n        adaAmount.mul(new BigRational(BigInt(10 ** 6), 1n)).reduce(),\n      ),\n      type,\n    });\n\n    const withdrawLovelace = bigRationalToBigNumber(adaAmount)\n      .multipliedBy(10 ** 6)\n      .negated();\n\n    const depositMicroMTK = inputValue.div(\n      bigRationalToBigNumber(adaMicroMTKPrice),\n    );\n\n    return {\n      amountsPerAsset,\n      mintedMicroMTK: depositMicroMTK,\n      // how much the user gets in micro MTK for a deposit\n      userReceiveMTK: depositMicroMTK.minus(fees.userFee),\n      withdrawLovelace,\n      // how much the user gets in lovelace for a withdraw\n      withdrawUserLvc: withdrawLovelace.minus(\n        fees.userFee\n          .multipliedBy(bigRationalToBigNumber(adaMicroMTKPrice))\n          .multipliedBy(10 ** 6),\n      ),\n      fees,\n    };\n  }, [inputValue, portfolio, type]);\n\n  return {\n    amountsPerAsset,\n    fees,\n    formattedState,\n    /**\n     * How many MTKs are involved in the order (if it's a deposit)\n     * What the user gets + entry fee\n     */\n    mintedMicroMTK,\n    /**\n     * How many MTKs the user will receive (if it's a deposit)\n     */\n    userReceiveMTK,\n    /**\n     * How much worth (in lovelace) is being extracted from the portfolio in the order (if it's a withdraw)\n     */\n    withdrawLovelace,\n    /**\n     * How much worth (in lovelace) the user will receive (if it's a withdraw)\n     */\n    withdrawUserLvc,\n  };\n}\n\nexport default useBuySellFees;\n","import React from 'react';\nimport { Box, BoxProps } from '@chakra-ui/react';\nimport { themeVariables } from '../theme';\n\ninterface MintBurnWrapperProps extends BoxProps {\n  background?: string;\n}\n\nfunction MintBurnWrapper({\n  children,\n  background = themeVariables.background.modal,\n  width = '530px',\n  color = themeVariables.offWhite.offWhite400,\n}: MintBurnWrapperProps) {\n  return (\n    <Box\n      minWidth=\"530px\"\n      background={background}\n      transition={'0.25s'}\n      borderRadius={'1.25rem'}\n      border={`1px solid ${themeVariables.cards.stroke}`}\n      sx={{ backdropFilter: 'blur(60px)' }}\n      width={width}\n      padding=\"1rem\"\n      height=\"fit-content\"\n      color={color}\n    >\n      {children}\n    </Box>\n  );\n}\n\nexport default MintBurnWrapper;\n","import { Box, Flex, Image, Td, Tooltip, Tr } from '@chakra-ui/react';\nimport { ArrayElement } from '../types';\nimport { bigRationalToBigNumber } from '../utils';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport { Balance, assetToUnit } from '../blockchain/client';\nimport { formatState } from '../blockchain/client/interact';\nimport StatusDot from '../components/atoms/svg/statusDot-svg';\nimport { IPortfolioState } from '../types';\nimport { stringToFormattedNumber } from './stringToNumber';\n\nconst abs = (n: bigint) => (n < 0n ? -n : n);\n\nfunction SwapItem(props: {\n  item: ArrayElement<IPortfolioState['assets']>;\n  balance: Balance | null;\n  type: 'mint' | 'burn';\n  amountsToModify: Record<string, bigint>;\n  formattedState: ReturnType<typeof formatState>;\n  fontSize?: string;\n  swapDeficit: boolean;\n}) {\n  const brZero = new BigRational(0n, 1n);\n  const { fontSize = '12px' } = props;\n  // Portfolio metrics before tx\n  const adaPortfolioWorth = Object.entries(\n    props.formattedState.state.assets,\n  ).reduce(\n    (acc, [asset, amount]) => {\n      const assetWorth = new BigRational(amount, 1n).mul(\n        props.formattedState.prices[asset],\n      );\n      return acc.add(assetWorth).reduce();\n    },\n    new BigRational(0n, 1n),\n  );\n\n  const adaWorthInPortfolio = props.formattedState.prices[props.item.asset.id]\n    .mul(\n      new BigRational(\n        props.formattedState.state.assets[props.item.asset.id],\n        1n,\n      ),\n    )\n    .reduce();\n  const tokensInPortfolio =\n    props.formattedState.state.assets[props.item.asset.id];\n\n  const worthPercentageInPortfolio = adaWorthInPortfolio\n    .div(adaPortfolioWorth)\n    .mul(new BigRational(100n, 1n).reduce());\n\n  // Tx metrics\n  const adaTxWorth = Object.entries(props.amountsToModify).reduce(\n    (acc, [asset, amount]) => {\n      const assetWorth = new BigRational(amount, 1n).mul(\n        props.formattedState.prices[asset],\n      );\n      return acc.add(assetWorth).reduce();\n    },\n    new BigRational(0n, 1n),\n  );\n  const adaWorthInTx = props.formattedState.prices[props.item.asset.id]\n    .mul(new BigRational(props.amountsToModify[props.item.asset.id], 1n))\n    .reduce();\n  const worthPercentageInTx = adaTxWorth.eq(brZero)\n    ? brZero\n    : adaWorthInTx.div(adaTxWorth).mul(new BigRational(100n, 1n)).reduce();\n  const tokensInTx = props.amountsToModify[props.item.asset.id];\n\n  // Portfolio metrics after tx\n  const worthOfPortfolioAfterTx = adaTxWorth.add(adaPortfolioWorth).reduce();\n  const adaWorthAfterTx = adaWorthInPortfolio.add(adaWorthInTx).reduce();\n  const worthPercentageAfterTx = worthOfPortfolioAfterTx.eq(brZero)\n    ? brZero\n    : adaWorthAfterTx\n        .div(worthOfPortfolioAfterTx)\n        .mul(new BigRational(100n, 1n))\n        .reduce();\n  const tokensAfterTx = tokensInPortfolio + tokensInTx;\n\n  const amountToModify = abs(\n    props.amountsToModify[props.item.asset.id] || 0n,\n  ).toString();\n\n  const hasEnoughToken = BigNumber(\n    (props.amountsToModify[props.item.asset.id] || 0n).toString(),\n  ).lte(\n    BigNumber(\n      (props.balance?.[assetToUnit(props.item.asset)] || 0n).toString(),\n    ),\n  );\n\n  const swapDeficit = props.swapDeficit;\n  const balanceAmount = BigNumber(\n    (props.balance?.[assetToUnit(props.item.asset)] || 0n).toString(),\n  );\n  const depositAmount = BigNumber(amountToModify.toString());\n\n  const adjustedBalance = swapDeficit\n    ? BigNumber.max(depositAmount.minus(balanceAmount), 0)\n    : depositAmount;\n\n  const pricePerToken = new BigNumber(props.item.price);\n\n  function calculateBalanceValue(\n    balanceAmount: BigNumber,\n    pricePerToken: BigNumber,\n  ): BigNumber {\n    return balanceAmount\n      .multipliedBy(pricePerToken)\n      .div(new BigNumber(10).pow(props.item.asset.decimals)); // Adjust for decimals here\n  }\n\n  const balanceValue = calculateBalanceValue(balanceAmount, pricePerToken);\n\n  function calculatedSwapValue(\n    adjustedBalance: BigNumber,\n    pricePerToken: BigNumber,\n  ): BigNumber {\n    return adjustedBalance\n      .multipliedBy(pricePerToken)\n      .div(new BigNumber(10).pow(props.item.asset.decimals));\n  }\n\n  const swapValue = calculatedSwapValue(adjustedBalance, pricePerToken);\n\n  return (\n    <Tr paddingX=\"0.5rem\">\n      <Td\n        textAlign=\"left\"\n        flexDir={'row'}\n        width={'fit-content'}\n        paddingX={2}\n        paddingY={3}\n        alignContent=\"flex-start\"\n      >\n        <Flex justify=\"left\" gap={2}>\n          <Box\n            width=\"1.5rem\"\n            height=\"1.5rem\"\n            overflow=\"hidden\"\n            borderRadius=\"full\"\n            background=\"var(--metera-purple-200)\"\n          >\n            <Image\n              boxSize=\"100%\"\n              objectFit=\"cover\"\n              src={props.item.asset.imageUrl}\n              alt={props.item.asset.ticker}\n            />\n            -\n          </Box>\n          <Flex flexDir=\"column\">\n            <Box fontSize=\"0.875rem\" color=\"var(--primary-50)\">\n              {props.item.asset.ticker}\n            </Box>\n            <Flex gap={1} justify=\"right\">\n              <Box color=\"var(--neutral-400)\" fontSize=\"0.7rem\">\n                ≈ ₳{BigNumber(props.item.price).toFixed(4)}\n              </Box>\n            </Flex>\n          </Flex>\n        </Flex>\n      </Td>\n      <Td\n        paddingX={0}\n        paddingY={3}\n        alignContent=\"flex-start\"\n        justifyContent=\"flex-end\"\n      >\n        <Flex flexDir=\"column\" align=\"flex-start\">\n          <PortfolioDataItem\n            fontSize=\"0.875rem\"\n            color=\"var(--primary-50)\"\n            value={BigNumber(amountToModify.toString())}\n            decimals={props.item.asset.decimals}\n          />\n          <Flex gap={0} justify=\"right\">\n            <Box color=\"var(--neutral-400)\" fontSize=\"0.7rem\">\n              ≈ ₳\n            </Box>\n            <PortfolioDataItem\n              fontSize=\"0.7rem\"\n              color=\"var(--neutral-400)\"\n              value={bigRationalToBigNumber(adaWorthInTx).abs()}\n              decimals={0}\n            />\n          </Flex>\n        </Flex>\n      </Td>\n      <Td\n        fontSize=\"0.875rem\"\n        paddingX={0}\n        paddingY={3}\n        alignContent=\"flex-start\"\n        justifyContent=\"center\"\n        textAlign=\"center\"\n      >\n        <Flex flexDir=\"column\" alignContent=\"center\" justify=\"center\">\n          <Flex gap={1} justify=\"center\">\n            {hasEnoughToken ? (\n              <StatusDot showStatus={false} status=\"Confirmed\" />\n            ) : (\n              <StatusDot showStatus={false} status=\"Cancelled\" />\n            )}\n            <PortfolioDataItem\n              fontSize=\"0.875rem\"\n              value={balanceAmount}\n              decimals={props.item.asset.decimals}\n              color=\"var(--primary-50)\"\n            />\n          </Flex>\n          <Box color=\"var(--neutral-400)\" fontSize=\"0.7rem\">\n            ≈ ₳{balanceValue.toFixed(2)}\n          </Box>\n        </Flex>\n      </Td>\n      <Td alignContent=\"flex-start\" fontSize=\"0.875rem\" paddingY={3}>\n        <Flex flexDir=\"column\" align=\"flex-end\">\n          <Flex>\n            {}\n            {stringToFormattedNumber(\n              adjustedBalance.div(10 ** props.item.asset.decimals).toString(),\n            )}\n          </Flex>\n          <Box color=\"var(--neutral-400)\" fontSize=\"0.7rem\">\n            ≈ ₳{swapValue.toFixed(2)}\n          </Box>\n        </Flex>\n      </Td>\n    </Tr>\n  );\n}\n\nconst PortfolioDataItem = (props: {\n  title?: string;\n  value: BigNumber;\n  color?: string;\n  decimals: number;\n  fontSize?: string;\n}) => (\n  <Flex flexDir={'column'} whiteSpace=\"nowrap\">\n    <Box color={props.color} fontSize={props.fontSize}>\n      {stringToFormattedNumber(\n        props.value.div(10 ** props.decimals).toString(),\n      )}\n    </Box>\n  </Flex>\n);\n\nexport default SwapItem;\n","import {\n  Box,\n  Flex,\n  Modal,\n  ModalBody,\n  ModalContent,\n  ModalOverlay,\n  ModalProps,\n  Switch,\n  Image,\n} from '@chakra-ui/react';\nimport { Dispatch, SetStateAction } from 'react';\nimport { themeVariables } from '../theme';\n\nconst minswapSrc =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//minswap_horizontal.svg';\n\nconst SETTINGS = {\n  MINSWAP: {\n    title: (\n      <Flex color=\"white\" fontSize=\"0.875rem\" gap={2}>\n        Zap-in via <Image src={minswapSrc} alt=\"minswap\" width={85} />\n      </Flex>\n    ),\n    description:\n      'Metera orders require you to deposit the underlying assets yourself. To obtain the necessary assets for minting MTKs, you can swap directly with one of our providers',\n  },\n  SWAP_DEFICIT: {\n    title: 'Swap Only Missing Tokens',\n    description:\n      'If turned on, Minswap will only swap the difference between assets required for your Metera Order and your balance.',\n  },\n\n  ORDER_PROTECTION: {\n    title: 'Metera Order Protection',\n    description:\n      'Buy extra tokens to cover potential changes in asset requirements during order processing. Unused assets stay in your wallet.',\n  },\n};\n\ninterface SettingControlProp {\n  value: boolean;\n  setValue: Dispatch<SetStateAction<boolean>>;\n  disabled?: boolean;\n}\n\nexport const SettingsModal = ({\n  children,\n  minWidth = 'fit-content',\n  minHeight = 'fit-content',\n  padding = undefined,\n  background = '#08040f',\n  controls,\n  ...rest\n}: ModalProps & {\n  minWidth?: string;\n  minHeight?: string;\n  padding?: string;\n  background?: string;\n  hasInsufficientToken?: boolean;\n  controls: Partial<Record<keyof typeof SETTINGS, SettingControlProp>>;\n}) => (\n  <Modal isCentered {...rest}>\n    <ModalOverlay />{' '}\n    <ModalContent\n      background={background}\n      minHeight={minHeight}\n      transition={'0.2s'}\n      minWidth=\"30rem\"\n      padding=\"1rem\"\n      borderRadius={'0.75rem'}\n      sx={{\n        backdropFilter: 'blur(60px)',\n        maxWidth: '30rem !important',\n      }}\n    >\n      <ModalBody>\n        <Flex flexDir=\"column\" width=\"100%\" height=\"100%\" gap=\"0.5rem\">\n          <Flex justify=\"space-between\">\n            <Box color=\"white\" fontSize=\"1rem\" fontWeight={500}>\n              Order Settings\n            </Box>\n            <Box as=\"button\">\n              <img></img>\n            </Box>\n          </Flex>\n\n          {Object.entries(SETTINGS).map(([key, { title, description }]) => {\n            const { value, setValue, disabled } = controls[\n              key as keyof typeof SETTINGS\n            ] || { value: true, setValue: () => {}, disabled: true };\n            return (\n              <Flex flexDir=\"column\" gap=\"0.2rem\" key={key}>\n                <Flex\n                  justify=\"space-between\"\n                  align=\"center\"\n                  alignContent=\"center\"\n                >\n                  <Box color=\"white\" fontSize=\"0.875rem\">\n                    {title}\n                  </Box>\n                  <Switch\n                    sx={{\n                      '.chakra-switch__track': {\n                        bg: '#ccc',\n                      },\n                      '.chakra-switch__thumb': {\n                        bg: 'white',\n                      },\n                      '&[data-checked] .chakra-switch__track': {\n                        bg: '#e8a92d',\n                      },\n                      display: 'flex',\n                      alignItems: 'center',\n                    }}\n                    checked={value}\n                    defaultChecked={value}\n                    onChange={(e) => setValue(e.target.checked)}\n                    disabled={disabled}\n                  />\n                </Flex>\n                <Box fontSize=\"0.875rem\" color=\"#a3a3a3\">\n                  {description}\n                </Box>\n              </Flex>\n            );\n          })}\n        </Flex>\n      </ModalBody>\n    </ModalContent>\n  </Modal>\n);\n","import {\n  Box,\n  Flex,\n  Table,\n  TableContainer,\n  Text,\n  Thead,\n  Tooltip,\n  Tr,\n  Image,\n} from '@chakra-ui/react';\n// import Image from 'next/image';\nimport { IAssetInPortfolio } from '../types';\nimport { BigRational } from 'big-rational-ts';\nimport BigNumber from 'bignumber.js';\nimport React, { Dispatch, SetStateAction, useState } from 'react';\nimport { MdSwapHoriz, MdWest } from 'react-icons/md/index.js';\nimport { assetToUnit, Balance } from '../blockchain/client';\n// import ArrowTableSVG from 'src/components/atoms/svg/arrowtable-svg';\nimport StatusDot from './atoms/svg/statusDot-svg';\nimport { MeteraTh } from './atoms/table/MeteraTable';\nimport SwapItem from './swap-item';\nimport { SettingsModal } from './settings-modal';\nimport { themeVariables } from '../theme';\n\nconst settingsSRC =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//settings.svg';\nconst cardanoSrc =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//cardanoimage.png';\nconst minswapSrc =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//minswap_horizontal.svg';\n\ntype SwapBreakdownProps = {\n  type: 'mint' | 'burn';\n  portfolioAssets: IAssetInPortfolio[];\n  balance: Balance | null;\n  amountsToModify: Record<string, bigint>;\n  formattedState: {\n    prices: Record<string, BigRational>;\n    weights: Record<string, BigRational>;\n    state: {\n      assets: Record<string, bigint>;\n      mtkSupply: bigint;\n    };\n  };\n  hideBreakdown: () => void;\n  isModal?: boolean;\n  swapDeficit: boolean;\n  setSwapDeficit: Dispatch<SetStateAction<boolean>>;\n  background?: string;\n};\n\nconst SwapBreakdown: React.FC<SwapBreakdownProps> = ({\n  type,\n  portfolioAssets,\n  balance,\n  amountsToModify,\n  formattedState,\n  hideBreakdown,\n  isModal = true,\n  setSwapDeficit,\n  swapDeficit,\n  background,\n}) => {\n  const [settingsModal, setSettingsModal] = useState(false);\n  const handleSettingsModal = () => {\n    setSettingsModal(true);\n  };\n  return (\n    <Flex\n      width={'full'}\n      height={'full'}\n      flexDirection={'column'}\n      padding=\"1rem\"\n      background={background ? background : themeVariables.background.modal}\n    >\n      <Flex width={'100%'} flexDirection={'column'} gap={1} padding={'8px'}>\n        <Flex justify=\"space-between\">\n          <Flex\n            as=\"button\"\n            onClick={hideBreakdown}\n            justify=\"left\"\n            gap={2}\n            align=\"center\"\n          >\n            <MdWest\n              fontSize=\"1.5rem\"\n              color=\"#a78bfa\"\n              onClick={hideBreakdown}\n              cursor=\"pointer\"\n            />\n            <Box fontSize=\"0.75rem\" color=\"var(--off-white)\">\n              Go back\n            </Box>\n          </Flex>\n          <Box\n            as=\"button\"\n            onClick={handleSettingsModal}\n            display=\"flex\"\n            alignItems=\"center\"\n            justifyContent=\"center\"\n            borderRadius=\"50%\"\n            bg=\"var(--bg-200)\"\n            _hover={{\n              transform: 'scale(1.1)',\n            }}\n            p={2}\n          >\n            <Image\n              src={settingsSRC}\n              objectFit=\"contain\"\n              alt=\"settings\"\n              display=\"block\"\n            />\n          </Box>\n\n          <SettingsModal\n            children={undefined}\n            isOpen={settingsModal}\n            onClose={() => setSettingsModal(false)}\n            controls={{\n              SWAP_DEFICIT: {\n                value: swapDeficit,\n                setValue: setSwapDeficit,\n              },\n            }}\n          />\n        </Flex>\n        <Flex\n          width={'100%'}\n          justifyContent={'left'}\n          gap={'1rem'}\n          align=\"center\"\n        >\n          <Box\n            width=\"2rem\"\n            height=\"2rem\"\n            overflow=\"hidden\"\n            borderRadius=\"50%\"\n            position=\"relative\"\n          >\n            <Image src={cardanoSrc} alt=\"ADA\" />\n          </Box>\n          <MdSwapHoriz fontSize=\"2rem\" color=\"var(--neutral-400)\" />\n          <Flex align=\"center\">\n            {portfolioAssets\n              .sort((a, b) => a.asset.ticker.localeCompare(b.asset.ticker))\n              .slice(0, 3)\n              .map((assetInPortfolio, i) => (\n                <Box\n                  key={assetInPortfolio.asset.id + i}\n                  width=\"2rem\"\n                  height=\"2rem\"\n                  overflow=\"hidden\"\n                  borderRadius=\"50%\"\n                  ml=\"-0.5rem\"\n                  zIndex={3 + i}\n                  position=\"relative\"\n                >\n                  <Image\n                    key={assetInPortfolio.asset.id + i}\n                    src={assetInPortfolio.asset.imageUrl}\n                    alt={assetInPortfolio.asset.ticker}\n                  />\n                </Box>\n              ))}\n            {portfolioAssets.length > 3 && (\n              <Box\n                fontSize=\"0.725rem\"\n                alignItems=\"center\"\n                justifyContent=\"center\"\n                color=\"var(--off-white-400)\"\n                background=\"var(--purple-button-100)\"\n                width=\"28px\"\n                height=\"28px\"\n                borderRadius=\"full\"\n                padding=\"0.3rem\"\n                marginLeft=\"-1rem\"\n                zIndex={10}\n              >\n                <Flex\n                  align=\"center\"\n                  height=\"full\"\n                  justify=\"center\"\n                  fontWeight={700}\n                >\n                  +{portfolioAssets.length - 3}\n                </Flex>\n              </Box>\n            )}\n          </Flex>\n          <Box color=\"var(--neutral-400)\" fontSize=\"0.875rem\">\n            via\n          </Box>\n          <Box width=\"7rem\" overflow=\"hidden\" position=\"relative\">\n            <Image src={minswapSrc} alt=\"minswap\" />\n          </Box>\n        </Flex>\n      </Flex>\n      {/* <Flex justify=\"center\">\n      <SwapDeficitSwitch\n        setSwapDeficit={setSwapDeficit}\n        swapDeficit={swapDeficit}\n        fontSize=\"0.875rem\"\n      />\n    </Flex> */}\n      <Box\n        overflowY=\"auto\"\n        background=\"var(--table-modals)\"\n        borderRadius={'0.75rem'}\n        width=\"full\"\n        height=\"full\"\n        paddingTop={'0.15rem'}\n      >\n        <Flex gap={3} overflow=\"auto\">\n          <TableContainer\n            overflowY=\"auto\"\n            sx={{\n              '&::-webkit-scrollbar': {\n                width: '0px',\n              },\n              '&::-webkit-scrollbar-track': {\n                background: 'none',\n              },\n              '&::-webkit-scrollbar-thumb': {\n                background: 'none',\n              },\n              '&::-webkit-scrollbar-thumb:hover': {\n                background: 'none',\n              },\n            }}\n          >\n            <Table\n              variant=\"unstyled\"\n              sx={{\n                tableLayout: 'fixed',\n              }}\n            >\n              <Thead\n                position={'sticky'}\n                top={0}\n                left={0}\n                zIndex={1}\n                borderBottom=\"none\"\n              >\n                <Tr>\n                  <MeteraTh\n                    textAlign=\"left\"\n                    paddingX={'8px'}\n                    paddingY=\"1rem\"\n                    paddingLeft={'10px'}\n                    fontSize=\"0.875rem\"\n                    color=\"var(--neutral-400)\"\n                    borderTopLeftRadius=\"full\"\n                  >\n                    Token\n                  </MeteraTh>\n                  <MeteraTh\n                    paddingX={0}\n                    paddingY=\"1rem\"\n                    fontSize=\"0.875rem\"\n                    color=\"var(--neutral-400)\"\n                  >\n                    {type === 'mint' ? (\n                      <Flex width=\"full\" justify=\"left\" gap={2}>\n                        <Box>You Deposit</Box>\n                      </Flex>\n                    ) : (\n                      <Flex width=\"full\" justify=\"left\" gap={2}>\n                        <Box>You Withdraw</Box>\n                      </Flex>\n                    )}\n                  </MeteraTh>\n                  <MeteraTh\n                    textAlign=\"center\"\n                    paddingX={'8px'}\n                    paddingY=\"1rem\"\n                    paddingLeft={'10px'}\n                    fontSize=\"0.875rem\"\n                    color=\"var(--neutral-400)\"\n                  >\n                    Your Balance\n                  </MeteraTh>\n                  <MeteraTh\n                    textAlign=\"center\"\n                    paddingX={0}\n                    paddingY=\"1rem\"\n                    fontSize=\"0.875rem\"\n                    color=\"var(--neutral-400)\"\n                    paddingRight={'6px'}\n                  >\n                    You Swap\n                  </MeteraTh>\n                </Tr>\n              </Thead>\n              <tbody style={{ maxHeight: '286px' }}>\n                {portfolioAssets\n                  .sort((a, b) => a.asset.ticker.localeCompare(b.asset.ticker))\n                  .map((assetInPortfolio, i) => (\n                    <SwapItem\n                      item={assetInPortfolio}\n                      key={assetInPortfolio.asset.id + i}\n                      type={type}\n                      balance={balance}\n                      amountsToModify={amountsToModify}\n                      formattedState={formattedState}\n                      swapDeficit={swapDeficit}\n                    />\n                  ))}\n              </tbody>\n            </Table>\n          </TableContainer>\n        </Flex>\n      </Box>\n    </Flex>\n  );\n};\n\nexport function SwapBreakdownButton(props: SwapBreakdownProps) {\n  const { portfolioAssets, balance, amountsToModify } = props;\n  const [showBreakdown, setShowBreakdown] = useState<boolean>(false);\n\n  const hasAllTokens = portfolioAssets.every((item) =>\n    BigNumber((amountsToModify[item.asset.id] || 0n).toString()).lte(\n      BigNumber((balance?.[assetToUnit(item.asset)] || 0n).toString()),\n    ),\n  );\n\n  return (\n    <Flex\n      flexDirection={'column'}\n      width={'100%'}\n      alignItems={'center'}\n      gap={'1rem'}\n    >\n      <Flex\n        paddingX=\"0.5rem\"\n        background=\"var(--table-modals)\"\n        border=\"1px solid var(--cards-stroke)\"\n        borderRadius=\"62rem\"\n        gap={2}\n        width=\"230px\"\n        height=\"2.5rem\"\n        cursor={'pointer'}\n        onClick={() => setShowBreakdown(!showBreakdown)}\n        justifyContent={'center'}\n        alignItems={'center'}\n      >\n        <StatusDot\n          showStatus={false}\n          status={hasAllTokens ? 'Confirmed' : 'Insufficient'}\n        />\n        <Text\n          fontSize=\"14px\"\n          fontWeight=\"400\"\n          lineHeight=\"20px\"\n          textAlign=\"left\"\n        >\n          {showBreakdown ? 'Hide' : 'View'} token breakdown\n        </Text>\n\n        <Box>\n          {showBreakdown ? (\n            <Box transform=\"rotate(-90deg)\" marginTop=\"2px\">\n              {/* <ArrowTableSVG /> */}\n            </Box>\n          ) : (\n            <Box transform=\"rotate(90deg)\" marginTop=\"4px\">\n              {/* <ArrowTableSVG /> */}\n            </Box>\n          )}\n        </Box>\n      </Flex>\n      {/* {!hasAllTokens && (\n        <Text\n          fontSize=\"14px\"\n          fontWeight=\"400\"\n          lineHeight=\"20px\"\n          textAlign=\"left\"\n          color={'#FBBF24'}\n        >\n          Assets not found in wallet. Basket buy required.\n        </Text>\n      )} */}\n\n      <SwapBreakdown {...props} />\n    </Flex>\n  );\n}\n\nexport default SwapBreakdown;\n","import React from 'react';\nimport {\n  Box,\n  Collapse,\n  Flex,\n  Tooltip,\n  useDisclosure,\n  UseDisclosureReturn,\n  useToast,\n  Image,\n} from '@chakra-ui/react';\nimport BigNumber from 'bignumber.js';\nimport { Network } from 'lucid-txpipe';\nimport { useEffect, useMemo, useState } from 'react';\nimport {\n  assetToUnit,\n  Balance,\n  getWalletBalance,\n  userHasEnoughBalance,\n} from '../blockchain/client';\nimport { handleOrderCreation } from '../blockchain/client/interact';\nimport { IPortfolioState, MintModalBalances, WalletData } from '../types';\nimport { themeVariables } from '../theme';\nimport BuySellFees from './buy-sell-fees';\nimport BuySellInput from './buy-sell-input';\nimport StepButtons from './step-buttons';\nimport TokensBreakdown from './tokens-breakdown';\nimport TransactionInProgressModal, {\n  TransactionInProgress,\n} from './transaction-in-progress';\nimport TransactionSubmittedModal, {\n  TransactionSubmitted,\n} from './transaction-submitted';\nimport useBuySellFees from './useBuySellFees';\nimport MintBurnWrapper from './mint-burn-wrapper';\nimport { min } from '../utils';\nimport SwapBreakdown from './swap-breakdown';\nimport { SettingsModal } from './settings-modal';\nimport { InfoIcon } from '@chakra-ui/icons';\nimport InsufficientTokens from './insufficient-tokens';\n\nconst settingsSRC =\n  'https://sqvzfgobtlzbovqbkaax.supabase.co/storage/v1/object/public/sdk-assets//settings.svg';\n\ninterface IMintBurnProps {\n  portfolio: IPortfolioState;\n  type: 'mint' | 'burn';\n  apiBaseUrl: string;\n  network: Network;\n  wallet?: WalletData | null;\n  disc?: UseDisclosureReturn;\n  containerProps?: Partial<{ width: string; height: string }>;\n  background?: string;\n  swapId?: string | null;\n  primaryButtonColor?: string;\n  hoverButtonColor?: string;\n}\n\nexport function MintBurn({\n  type: initialType,\n  portfolio,\n  disc,\n  wallet,\n  apiBaseUrl,\n  background,\n  containerProps = {},\n  swapId = null,\n  primaryButtonColor,\n  hoverButtonColor,\n}: IMintBurnProps) {\n  const [inputValue, setInputValue] = useState<BigNumber>(BigNumber(0));\n  const [balance, setBalance] = useState<Balance | null>(null);\n  const [loading, setLoading] = useState<boolean>(false);\n  const [txHash, setTxHash] = useState<string | null>(null);\n  const [type, setType] = useState<'mint' | 'burn'>(initialType);\n  const toast = useToast();\n  const [showBreakdown, setShowBreakdown] = useState(false);\n  const [swapDeficit, setSwapDeficit] = useState<boolean>(true);\n  const [forceInsufficientToken, setForceInsufficientToken] = useState(false);\n  const [settingsModal, setSettingsModal] = useState(false);\n  const isModal = disc !== undefined;\n\n  const {\n    amountsPerAsset,\n    fees,\n    formattedState,\n    mintedMicroMTK,\n    userReceiveMTK,\n    withdrawLovelace,\n    withdrawUserLvc,\n  } = useBuySellFees({\n    inputValue,\n    portfolio,\n    type,\n  });\n\n  const hasInsufficientToken = useMemo(\n    () =>\n      forceInsufficientToken ||\n      (balance\n        ? !userHasEnoughBalance(\n            balance,\n            amountsPerAsset.assets,\n            type,\n            inputValue,\n            portfolio,\n          )\n        : true),\n    [\n      balance,\n      amountsPerAsset.assets,\n      type,\n      inputValue,\n      portfolio,\n      forceInsufficientToken,\n    ],\n  );\n\n  const progressDisc = useDisclosure({\n    onClose: () => setInputValue(BigNumber(0)),\n    isOpen: loading || !!txHash,\n  });\n\n  const swapBalances: MintModalBalances = useMemo(() => {\n    const temp: MintModalBalances = {};\n    for (const item of portfolio.assets) {\n      const required = amountsPerAsset.assets[item.asset.id] || 0n;\n      const owned = balance?.[assetToUnit(item.asset)] || 0n;\n      const deficit = owned - required > 0n ? owned - required : 0n;\n      temp[item.asset.id] = {\n        required,\n        asset: item.asset,\n        owned,\n        deficit,\n      };\n    }\n    return temp;\n  }, [balance, portfolio.assets, amountsPerAsset.assets]);\n\n  useEffect(() => {\n    if (!wallet) {\n      return;\n    }\n    const getBalanceFromWallet = async () => {\n      const newBalance = await getWalletBalance(wallet.wallet);\n      setBalance(newBalance);\n    };\n    getBalanceFromWallet();\n  }, [wallet]);\n\n  const errorToast = (title: string, description: string) =>\n    toast({\n      title: title,\n      description: description,\n      status: 'error',\n      isClosable: true,\n      position: 'top-right',\n    });\n\n  const createTx = async () => {\n    if (!wallet || !balance) {\n      errorToast('Wallet not found', `Connect your wallet to ${type} tokens`);\n      return;\n    }\n    if (hasInsufficientToken) {\n      errorToast(\n        'Not enough funds',\n        `You don't have enough funds for this transaction`,\n      );\n      return;\n    }\n\n    setLoading(true);\n    const amountToInteract =\n      type === 'mint' ? inputValue : inputValue.negated();\n\n    const expectedWorth = withdrawLovelace.abs().div(10 ** 6);\n    if (type === 'mint' && inputValue.lt(0.017)) {\n      errorToast(\n        'Invalid amount',\n        'The minimum amount you can deposit is 0.017 ADA',\n      );\n      setLoading(false);\n      return;\n    } else if (type === 'burn' && expectedWorth.lt(0.017)) {\n      errorToast(\n        'Invalid amount',\n        'The minimum amount you can withdraw is 0.017 ADA',\n      );\n      setLoading(false);\n      return;\n    }\n\n    await handleOrderCreation(\n      wallet,\n      portfolio,\n      amountsPerAsset,\n      amountToInteract,\n      apiBaseUrl,\n      swapId,\n      {\n        onError: (msg: string) => errorToast('Transaction error', msg),\n        onSuccess: (txHash: string) => {\n          toast({\n            isClosable: true,\n            status: 'success',\n            title: 'Transaction submitted',\n            description: 'Your order will be processed shortly',\n          });\n          setInputValue(BigNumber(0));\n          setTxHash(txHash);\n        },\n      },\n    );\n    setLoading(false);\n  };\n\n  const handleSwapClick = () => {\n    if (inputValue.gt(0)) {\n      createTx();\n    } else {\n      toast({\n        title: 'Invalid Input',\n        description: `Enter a valid amount`,\n        status: 'info',\n        isClosable: true,\n        duration: 1100,\n      });\n    }\n  };\n\n  const handleSettingsModal = () => {\n    setSettingsModal(true);\n  };\n\n  return (\n    <MintBurnWrapper background={background} {...containerProps}>\n      {loading &&\n        (isModal ? (\n          <Box\n            background={themeVariables.cards.background}\n            height={'100%'}\n            width={'100%'}\n            padding=\"0rem\"\n            borderRadius={'1.25rem'}\n            border={`1px solid ${themeVariables.cards.stroke}`}\n            sx={{\n              cursor: 'pointer',\n              border: '2px solid transparent',\n              transition: 'border 0.2s, transform 0.2s',\n              borderRadius: '10px !important',\n              '--animated-border': themeVariables.animatedBorder.initialValue,\n              background: `\n            conic-gradient(\n              from var(--animated-border),\n              #171717a3,\n              #171717a3 5%,\n              #171717a3 60%,\n              #171717a3 95%\n            )\n            padding-box,\n            conic-gradient(\n              from var(--animated-border),\n              transparent 25%,\n              #6d28d9,\n              #a78bfa 99%,\n              transparent\n            )\n            border-box`,\n              animation: `${themeVariables.animatedBorder.bgSpin} 3s linear infinite`,\n            }}\n          >\n            <TransactionInProgress\n              title={hasInsufficientToken ? 'Zap-in in Progress' : undefined}\n              isSwap={hasInsufficientToken}\n              background={background}\n            />\n          </Box>\n        ) : (\n          <TransactionInProgressModal\n            title={hasInsufficientToken ? 'Zap-in in Progress' : undefined}\n            isSwap={hasInsufficientToken}\n            disc={progressDisc}\n            background={background}\n          />\n        ))}\n      {!loading &&\n        !!txHash &&\n        (isModal ? (\n          <TransactionSubmitted\n            onClose={() => {\n              setTxHash(null);\n              disc && disc.onClose();\n            }}\n            title={hasInsufficientToken ? 'Zap-in Submitted' : undefined}\n            description={\n              hasInsufficientToken\n                ? 'Your order is being handled externally. Navigate to the provider to obtain real-time updates'\n                : undefined\n            }\n            route={hasInsufficientToken ? '/orders#swaps' : undefined}\n            routeText={hasInsufficientToken ? 'Swap' : undefined}\n            background={background}\n          />\n        ) : (\n          <TransactionSubmittedModal\n            disc={progressDisc}\n            onClose={() => {\n              setTxHash(null);\n              disc && (disc as UseDisclosureReturn).onClose();\n            }}\n            title={hasInsufficientToken ? 'Zap-in Submitted' : undefined}\n            description={\n              hasInsufficientToken\n                ? 'Your order is being handled externally. Navigate to the provider to obtain real-time updates'\n                : undefined\n            }\n            route={hasInsufficientToken ? '/orders#swaps' : undefined}\n            routeText={hasInsufficientToken ? 'Swap' : undefined}\n            background={background}\n          />\n        ))}\n      {!loading &&\n        !txHash &&\n        showBreakdown &&\n        (hasInsufficientToken ? (\n          <SwapBreakdown\n            hideBreakdown={() => setShowBreakdown(false)}\n            type={type}\n            portfolioAssets={portfolio.assets}\n            balance={balance}\n            formattedState={formattedState}\n            amountsToModify={amountsPerAsset.assets}\n            isModal={isModal}\n            setSwapDeficit={setSwapDeficit}\n            swapDeficit={swapDeficit}\n            background={background}\n          />\n        ) : (\n          <TokensBreakdown\n            to={type === 'mint' ? mintedMicroMTK : withdrawLovelace}\n            from={inputValue}\n            portfolioTicker={portfolio.portfolio.ticker}\n            hideBreakdown={() => setShowBreakdown(false)}\n            type={type}\n            portfolioAssets={portfolio.assets}\n            balance={balance}\n            formattedState={formattedState}\n            amountsToModify={amountsPerAsset.assets}\n            hasInsufficientToken={hasInsufficientToken}\n            isModal={isModal}\n            background={background}\n          />\n        ))}\n      {!showBreakdown && ((!loading && !txHash && isModal) || !isModal) && (\n        <Flex flexDir={'column'} height=\"full\" gap=\"1rem\">\n          <Flex justify=\"space-between\">\n            {type === 'mint' ? (\n              <Flex width=\"full\" align=\"center\" gap={2}>\n                <Flex\n                  fontSize=\"1rem\"\n                  _hover={{ color: 'white' }}\n                  cursor=\"pointer\"\n                  color={\n                    forceInsufficientToken || hasInsufficientToken\n                      ? '#a3a3a3'\n                      : '#fafaf4'\n                  }\n                  fontWeight={400}\n                  px=\"0.75rem\"\n                  py=\"0.375rem\"\n                  onClick={() => setForceInsufficientToken(false)}\n                  gap={2}\n                  align=\"center\"\n                >\n                  <Box>Deposit Assets</Box>\n                  <Tooltip label=\"Mint MTK shares by providing the underlying assets directly.\">\n                    <InfoIcon />\n                  </Tooltip>\n                </Flex>\n                <Flex\n                  fontSize=\"1rem\"\n                  _hover={{ color: 'white' }}\n                  cursor=\"pointer\"\n                  color={hasInsufficientToken ? '#fafaf4' : '#a3a3a3'}\n                  fontWeight={400}\n                  px=\"0.75rem\"\n                  py=\"0.375rem\"\n                  onClick={() => {\n                    if (!hasInsufficientToken) {\n                      setForceInsufficientToken(true);\n                      setSwapDeficit(false);\n                    }\n                  }}\n                  gap={2}\n                  align=\"center\"\n                >\n                  <Box>Zap-in</Box>\n                  <Tooltip label=\"Mint MTK shares by swapping ADA for the underlying assets via a DEX.\">\n                    <InfoIcon />\n                  </Tooltip>\n                </Flex>\n              </Flex>\n            ) : (\n              <Flex width=\"full\" align=\"center\" gap={2}>\n                <Flex\n                  fontSize=\"1rem\"\n                  _hover={{ color: 'white' }}\n                  cursor=\"pointer\"\n                  color=\"#fafaf4\"\n                  fontWeight={400}\n                  px=\"0.75rem\"\n                  py=\"0.375rem\"\n                >\n                  Receive Assets\n                </Flex>\n              </Flex>\n            )}\n            {type === 'mint' && hasInsufficientToken && (\n              <>\n                <Box\n                  as=\"button\"\n                  onClick={handleSettingsModal}\n                  flex=\"flex\"\n                  alignContent=\"center\"\n                  justifyContent=\"center\"\n                  borderRadius=\"50%\" // Ensuring button is circular\n                  bg=\"var(--bg-200)\"\n                  _hover={{\n                    transform: 'scale(1.1)',\n                  }}\n                  p={2}\n                >\n                  <Image src={settingsSRC} alt=\"settings\" />\n                </Box>\n                <SettingsModal\n                  children={undefined}\n                  isOpen={settingsModal}\n                  onClose={() => setSettingsModal(false)}\n                  hasInsufficientToken={hasInsufficientToken}\n                  controls={{\n                    SWAP_DEFICIT: {\n                      value: swapDeficit,\n                      setValue: setSwapDeficit,\n                    },\n                  }}\n                />\n              </>\n            )}\n          </Flex>\n          <BuySellInput\n            switchType={setType}\n            balance={balance}\n            setInputValue={setInputValue}\n            mtkUnit={portfolio.portfolio.mtkUnit}\n            portfolioImageUrl={portfolio.portfolio.imageUrl}\n            withdrawLovelace={withdrawLovelace}\n            expectedAmount={type === 'mint' ? mintedMicroMTK : withdrawLovelace}\n            inputValue={inputValue}\n            portfolioTicker={portfolio.portfolio.ticker}\n            type={type}\n            showBreakdown={() => setShowBreakdown(true)}\n            hasInsufficientToken={hasInsufficientToken}\n            portfolioAssets={portfolio.assets}\n            background={background}\n          />\n\n          <Collapse\n            in={inputValue.gt(0)}\n            animateOpacity\n            style={{ overflow: 'none' }}\n          >\n            <BuySellFees\n              type={type}\n              batcherFee={fees.batcherFee}\n              managerFee={fees.userFee}\n              platformFee={fees.platformFee}\n              expectedAmount={userReceiveMTK}\n              withdrawLovelace={withdrawUserLvc}\n              mtkTicker={portfolio.portfolio.ticker}\n              hasInsuficientToken={hasInsufficientToken}\n            />\n          </Collapse>\n          {hasInsufficientToken && type === 'mint' ? (\n            <InsufficientTokens\n              wallet={wallet}\n              apiBaseUrl={apiBaseUrl}\n              setLoading={setLoading}\n              setTxHash={setTxHash}\n              portfolio={portfolio}\n              totalInput={BigInt(inputValue.multipliedBy(10 ** 6).toFixed(0))}\n              swapDeficit={swapDeficit}\n              setSwapDeficit={setSwapDeficit}\n              swapBalances={swapBalances}\n            />\n          ) : (\n            <StepButtons\n              poweredBy\n              rightOnclick={handleSwapClick}\n              rightText={type === 'mint' ? 'Buy' : 'Sell'}\n              rightBtnProps={{\n                maxH: '3rem',\n                height: '100%',\n                borderRadius: '62.5rem',\n                padding: '1rem',\n                width: '100%',\n              }}\n              primaryButtonColor={primaryButtonColor}\n              hoverButtonColor={hoverButtonColor}\n            />\n          )}\n        </Flex>\n      )}\n    </MintBurnWrapper>\n  );\n}\n\nexport default MintBurn;\n","import { Flex, useToast } from '@chakra-ui/react';\nimport { handleSwapCreation } from '../blockchain/client/interact';\nimport { IAssetInPortfolio, IPortfolioState, WalletData } from '../types';\nimport StepButtons from './step-buttons';\n\ninterface InsufficientTokensProps {\n  wallet?: WalletData | null;\n  apiBaseUrl: string;\n  portfolio: IPortfolioState;\n  totalInput: bigint;\n  swapDeficit: boolean;\n  setSwapDeficit: (val: boolean) => void;\n  swapBalances: MintModalBalances;\n  setLoading: React.Dispatch<React.SetStateAction<boolean>>;\n  setTxHash: React.Dispatch<React.SetStateAction<string | null>>;\n}\n\nexport interface MintModalBalances {\n  [key: string]: {\n    asset: IAssetInPortfolio['asset'];\n    // Tokens currently in wallet\n    owned: bigint;\n    // Tokens required to deposit\n    required: bigint;\n    // Tokens that will be swapped\n    deficit: bigint;\n  };\n}\n\nconst InsufficientTokens = ({\n  wallet,\n  apiBaseUrl,\n  portfolio,\n  totalInput,\n  setSwapDeficit,\n  swapDeficit,\n  swapBalances,\n  setLoading,\n  setTxHash,\n}: InsufficientTokensProps) => {\n  const toast = useToast();\n\n  const errorToast = (title: string, description: string) =>\n    toast({\n      title: title,\n      description: description,\n      status: 'error',\n      isClosable: true,\n      position: 'top-right',\n    });\n  const handleSwapClick = async () => {\n    if (!wallet?.wallet) {\n      errorToast('Must connect wallet', 'Please connect your wallet first');\n      return;\n    }\n    setLoading(true);\n\n    const assetsRequired: Record<string, bigint> = {};\n    const assetsInWallet: Record<string, bigint> = {};\n    for (const [, assetBalance] of Object.entries(swapBalances)) {\n      assetsRequired[assetBalance.asset.id] = assetBalance.required;\n      assetsInWallet[assetBalance.asset.id] =\n        assetBalance.owned > assetBalance.required\n          ? assetBalance.required\n          : assetBalance.owned;\n    }\n    await handleSwapCreation(\n      wallet,\n      portfolio,\n      assetsInWallet,\n      assetsRequired,\n      totalInput,\n      swapDeficit,\n      apiBaseUrl,\n      {\n        onError: (msg) => {\n          errorToast('Error', msg);\n          setLoading(false);\n        },\n        onSuccess: (txHash) => {\n          toast({\n            isClosable: true,\n            status: 'success',\n            title: 'Transaction submitted',\n            description: `TxHash: ${txHash}`,\n            position: 'top-right',\n          });\n          setTxHash(txHash);\n          setLoading(false);\n        },\n      },\n    );\n  };\n  return (\n    <Flex\n      flexDir=\"column\"\n      justifyContent={'center'}\n      align=\"center\"\n      fontSize={'0.75rem'}\n      width={'full'}\n      display={'block'}\n    >\n      {/* <SwapDeficitSwitch\n        setSwapDeficit={setSwapDeficit}\n        swapDeficit={swapDeficit}\n      /> */}\n      <StepButtons\n        rightOnclick={handleSwapClick}\n        rightText=\"Zap-in\"\n        rightBtnProps={{\n          backgroundColor: 'var(--metera-yellow)',\n          border: 'none',\n          color: 'black',\n          maxH: '3rem',\n          height: '100%',\n          borderRadius: '62.5rem',\n          padding: '1rem',\n          width: '100%',\n        }}\n      />\n    </Flex>\n  );\n};\n\nexport default InsufficientTokens;\n"]}